xref: /netbsd-src/external/gpl3/gdb.old/dist/gdb/testsuite/gdb.base/infcall-exec.c (revision 6881a4007f077b54e5f51159c52b9b25f57deb0d)
1 /* This test program is part of GDB, the GNU debugger.
2 
3    Copyright 2016-2023 Free Software Foundation, Inc.
4 
5    This program is free software; you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation; either version 3 of the License, or
8    (at your option) any later version.
9 
10    This program is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13    GNU General Public License for more details.
14 
15    You should have received a copy of the GNU General Public License
16    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
17 
18 #include <unistd.h>
19 #include <stdlib.h>
20 #include <limits.h>
21 #include <string.h>
22 #include <stdio.h>
23 #include <assert.h>
24 
25 static void
26 set_path (int argc, char ** argv)
27 {
28   if (argc < 1)
29     return;
30 
31   char path[PATH_MAX];
32   strcpy (path, argv[0]);
33   int len = strlen (path);
34 
35   /* Make a path name out of an exec name.  */
36   int i;
37   for (i = len - 1; i >= 0; i--)
38     {
39       char c = path[i];
40       if (c == '/' || c == '\\')
41 	{
42 	  path[i] = '\0';
43 	  break;
44 	}
45     }
46   len = i;
47 
48   if (len == 0)
49     return;
50 
51   /* Prefix with "PATH=".  */
52   const char *prefix = "PATH=";
53   int prefix_len = strlen (prefix);
54   memmove (path + prefix_len, path, len);
55   path[prefix_len + len] = '\0';
56   memcpy (path, prefix, prefix_len);
57 
58   printf ("PATH SETTING: '%s'\n", path);
59   putenv (path);
60 }
61 
62 int
63 main (int argc, char ** argv)
64 {
65   set_path (argc, argv);
66   const char *prog = "infcall-exec2";
67 
68   int res = execlp (prog, prog, (char *) 0); /* break here */
69   assert (res != -1);
70 
71   return 0;
72 }
73