Admin/Linux/Isabelle.c
changeset 71338 373dcdd363dc
parent 54314 8f7061babae4
child 71363 ce3409dfb18c
equal deleted inserted replaced
71337:e20c47795846 71338:373dcdd363dc
     6 #include <stdlib.h>
     6 #include <stdlib.h>
     7 #include <stdio.h>
     7 #include <stdio.h>
     8 #include <string.h>
     8 #include <string.h>
     9 #include <sys/types.h>
     9 #include <sys/types.h>
    10 #include <unistd.h>
    10 #include <unistd.h>
       
    11 #include <libgen.h>
    11 
    12 
    12 
    13 
    13 static void fail(const char *msg)
    14 static void fail(const char *msg)
    14 {
    15 {
    15   fprintf(stderr, "%s\n", msg);
    16   fprintf(stderr, "%s\n", msg);
    17 }
    18 }
    18 
    19 
    19 
    20 
    20 int main(int argc, char *argv[])
    21 int main(int argc, char *argv[])
    21 {
    22 {
    22   char **cmd_line = NULL;
    23   char **cmd_line = NULL, *cmd = NULL, *dcmd = NULL, *bcmd = NULL, *dname = NULL, *bname = NULL;
    23   int i = 0;
    24   int i = 0;
       
    25 
       
    26   dcmd = strdup(argv[0]); dname = dirname(dcmd);
       
    27   bcmd = strdup(argv[0]); bname = basename(bcmd);
    24 
    28 
    25   cmd_line = malloc(sizeof(char *) * (argc + 1));
    29   cmd_line = malloc(sizeof(char *) * (argc + 1));
    26   if (cmd_line == NULL) fail("Failed to allocate command line");
    30   if (cmd_line == NULL) fail("Failed to allocate command line");
    27 
    31 
    28   cmd_line[0] = malloc(strlen(argv[0]) + 5);
    32   cmd = cmd_line[0];
    29   if (cmd_line[0] == NULL) fail("Failed to allocate command line");
    33   cmd = malloc(strlen(dname) + strlen(bname) + strlen("/lib/scripts/.run") + 1);
    30 
    34   if (cmd == NULL) fail("Failed to allocate command name");
    31   strcpy(cmd_line[0], argv[0]);
    35   sprintf(cmd, "%s/lib/scripts/%s.run", dname, bname);
    32   strcat(cmd_line[0], ".run");
       
    33 
    36 
    34   for (i = 1; i < argc; i++) cmd_line[i] = argv[i];
    37   for (i = 1; i < argc; i++) cmd_line[i] = argv[i];
    35 
    38 
    36   cmd_line[argc] = NULL;
    39   cmd_line[argc] = NULL;
    37 
    40 
    38   execvp(cmd_line[0], cmd_line);
    41   execvp(cmd, cmd_line);
    39   fail("Failed to execute application script");
    42   fprintf(stderr, "Failed to execute application script \"%s\"\n", cmd);
       
    43   exit(2);
    40 }
    44 }
    41