Admin/Linux/Isabelle.c
changeset 71338 373dcdd363dc
parent 54314 8f7061babae4
child 71363 ce3409dfb18c
--- a/Admin/Linux/Isabelle.c	Sun Dec 22 16:19:57 2019 +0100
+++ b/Admin/Linux/Isabelle.c	Mon Dec 23 15:24:14 2019 +0100
@@ -8,6 +8,7 @@
 #include <string.h>
 #include <sys/types.h>
 #include <unistd.h>
+#include <libgen.h>
 
 
 static void fail(const char *msg)
@@ -19,23 +20,25 @@
 
 int main(int argc, char *argv[])
 {
-  char **cmd_line = NULL;
+  char **cmd_line = NULL, *cmd = NULL, *dcmd = NULL, *bcmd = NULL, *dname = NULL, *bname = NULL;
   int i = 0;
 
+  dcmd = strdup(argv[0]); dname = dirname(dcmd);
+  bcmd = strdup(argv[0]); bname = basename(bcmd);
+
   cmd_line = malloc(sizeof(char *) * (argc + 1));
   if (cmd_line == NULL) fail("Failed to allocate command line");
 
-  cmd_line[0] = malloc(strlen(argv[0]) + 5);
-  if (cmd_line[0] == NULL) fail("Failed to allocate command line");
-
-  strcpy(cmd_line[0], argv[0]);
-  strcat(cmd_line[0], ".run");
+  cmd = cmd_line[0];
+  cmd = malloc(strlen(dname) + strlen(bname) + strlen("/lib/scripts/.run") + 1);
+  if (cmd == NULL) fail("Failed to allocate command name");
+  sprintf(cmd, "%s/lib/scripts/%s.run", dname, bname);
 
   for (i = 1; i < argc; i++) cmd_line[i] = argv[i];
 
   cmd_line[argc] = NULL;
 
-  execvp(cmd_line[0], cmd_line);
-  fail("Failed to execute application script");
+  execvp(cmd, cmd_line);
+  fprintf(stderr, "Failed to execute application script \"%s\"\n", cmd);
+  exit(2);
 }
-