--- runscript.c.orig 2011-04-15 20:48:30.000000000 -0400 +++ runscript.c 2011-05-03 11:15:37.000000000 -0400 @@ -1101,7 +1101,8 @@ bool doneone = false; int retval, opt, depoptions = RC_DEP_TRACE; RC_STRING *svc; - char path[PATH_MAX], lnk[PATH_MAX], *dir, *save = NULL, pidstr[10]; + char path[PATH_MAX], lnk[PATH_MAX], *dir, pidstr[10]; + char *save = NULL, *savedir = NULL, *savelnk = NULL; size_t l = 0, ll; const char *file; struct stat stbuf; @@ -1132,13 +1133,14 @@ if (readlink(argv[1], lnk, sizeof(lnk)-1)) { dir = dirname(path); if (strchr(lnk, '/')) { - save = xstrdup(dir); + savedir = xstrdup(dir); + savelnk = xstrdup(lnk); dir = dirname(lnk); - if (strcmp(dir, save) == 0) + if (strcmp(dir, savedir) == 0) file = basename_c(argv[1]); else - file = basename_c(lnk); - dir = save; + file = basename_c(savelnk); + dir = savedir; } else file = basename_c(argv[1]); ll = strlen(dir) + strlen(file) + 2; @@ -1146,9 +1148,10 @@ snprintf(service, ll, "%s/%s", dir, file); if (stat(service, &stbuf) != 0) { free(service); - service = xstrdup(lnk); + service = xstrdup(savelnk); } - free(save); + free(savedir); + free(savelnk); } if (!service) service = xstrdup(path);