--- Urlader/urlader.c 2012/01/17 18:38:37 1.13 +++ Urlader/urlader.c 2012/02/06 21:57:48 1.14 @@ -388,15 +388,59 @@ int main (int argc, char *argv[]) { - u_setenv ("URLADER_EXEPATH", argv [0]); - - pack_handle = u_open (argv [0]); - if (!u_valid (pack_handle)) - u_fatal ("unable to open executable pack"); - if (!getcwd (currdir, sizeof (currdir))) strcpy (currdir, "."); + { + const char *exe_path = 0; + + if (strchr (argv [0], '/')) + exe_path = argv [0]; + else + { + const char *p, *path = getenv ("PATH"); + + if (!path) + u_fatal ("unable to find executable, try running with full path."); + + for (p = path; ; ) + { + const char *e = p; + int l; + + while (*e && *e != ':') + ++e; + + l = e - p; + memcpy (tmppath, p, l); + + if (!l) + tmppath [l++] = '.'; + + tmppath [l++] = '/'; + + strcpy (tmppath + l, argv [0]); + + if (!access (tmppath, X_OK)) + break; + + p = e; + if (!*p) + u_fatal ("unable to find executable, try running with full path."); + + ++p; + } + + exe_path = tmppath; + } + + pack_handle = u_open (exe_path); + if (!u_valid (pack_handle)) + u_fatal ("unable to open executable for reading - permissions problem?"); + + u_setenv ("URLADER_EXEPATH", exe_path); + } + #if 0 /* intersperse hostname, for whatever reason */