| /* | |
| #notarget: cris*-*-elf | |
| */ | |
| #include <unistd.h> | |
| #include <errno.h> | |
| #include <stdio.h> | |
| #include <stdlib.h> | |
| #include <string.h> | |
| int main (int argc, char *argv[]) | |
| { | |
| char buf[1024]; | |
| char buf2[1024]; | |
| int err; | |
| /* This is a special feature handled in the simulator. The "42" | |
| should be formed from getpid () if this was a real program. */ | |
| err = readlink ("/proc/42/exe", buf, sizeof (buf)); | |
| if (err < 0) | |
| { | |
| if (err == -1 && errno == ENOSYS) | |
| printf ("ENOSYS\n"); | |
| printf ("xyzzy\n"); | |
| exit (0); | |
| } | |
| /* Don't use an abort in the following; it might cause the printf to | |
| not make it all the way to output and make debugging more | |
| difficult. */ | |
| /* We assume the program is called with no path, so we might need to | |
| prepend it. */ | |
| if (getcwd (buf2, sizeof (buf2)) != buf2) | |
| { | |
| perror ("getcwd"); | |
| exit (1); | |
| } | |
| if (argv[0][0] == '/') | |
| { | |
| #ifdef SYSROOTED | |
| if (strchr (argv[0] + 1, '/') != NULL) | |
| { | |
| printf ("%s != %s\n", argv[0], strrchr (argv[0] + 1, '/')); | |
| exit (1); | |
| } | |
| #endif | |
| if (strcmp (argv[0], buf) != 0) | |
| { | |
| printf ("%s != %s\n", buf, argv[0]); | |
| exit (1); | |
| } | |
| } | |
| else if (argv[0][0] != '.') | |
| { | |
| if (buf2[strlen (buf2) - 1] != '/') | |
| strcat (buf2, "/"); | |
| strcat (buf2, argv[0]); | |
| if (strcmp (buf2, buf) != 0) | |
| { | |
| printf ("%s != %s\n", buf, buf2); | |
| exit (1); | |
| } | |
| } | |
| else | |
| { | |
| strcat (buf2, argv[0] + 1); | |
| if (strcmp (buf, buf2) != 0) | |
| { | |
| printf ("%s != %s\n", buf, buf2); | |
| exit (1); | |
| } | |
| } | |
| printf ("pass\n"); | |
| exit (0); | |
| } | |