1 /*
2 #notarget: cris*-*-elf
3 */
4 
5 #include <unistd.h>
6 #include <errno.h>
7 #include <stdio.h>
8 #include <stdlib.h>
9 #include <string.h>
10 
main(int argc,char * argv[])11 int main (int argc, char *argv[])
12 {
13   char buf[1024];
14   char buf2[1024];
15   int err;
16 
17   /* This is a special feature handled in the simulator.  The "42"
18      should be formed from getpid () if this was a real program.  */
19   err = readlink ("/proc/42/exe", buf, sizeof (buf));
20   if (err < 0)
21     {
22       if (err == -1 && errno == ENOSYS)
23 	printf ("ENOSYS\n");
24       printf ("xyzzy\n");
25       exit (0);
26     }
27 
28   /* Don't use an abort in the following; it might cause the printf to
29      not make it all the way to output and make debugging more
30      difficult.  */
31 
32   /* We assume the program is called with no path, so we might need to
33      prepend it.  */
34   if (getcwd (buf2, sizeof (buf2)) != buf2)
35     {
36       perror ("getcwd");
37       exit (1);
38     }
39 
40   if (argv[0][0] == '/')
41     {
42 #ifdef SYSROOTED
43       if (strchr (argv[0] + 1, '/') != NULL)
44 	{
45 	  printf ("%s != %s\n", argv[0], strrchr (argv[0] + 1, '/'));
46 	  exit (1);
47 	}
48 #endif
49       if (strcmp (argv[0], buf) != 0)
50 	{
51 	  printf ("%s != %s\n", buf, argv[0]);
52 	  exit (1);
53 	}
54     }
55   else if (argv[0][0] != '.')
56     {
57       if (buf2[strlen (buf2) - 1] != '/')
58 	strcat (buf2, "/");
59       strcat (buf2, argv[0]);
60       if (strcmp (buf2, buf) != 0)
61 	{
62 	  printf ("%s != %s\n", buf, buf2);
63 	  exit (1);
64 	}
65     }
66   else
67     {
68       strcat (buf2, argv[0] + 1);
69       if (strcmp (buf, buf2) != 0)
70 	{
71 	  printf ("%s != %s\n", buf, buf2);
72 	  exit (1);
73 	}
74     }
75 
76   printf ("pass\n");
77   exit (0);
78 }
79 
80 
81