1
1

Correct fix for basename() -- rather than play portability games,

let's just have a short for loop that does effectively the same thing,
and gives us better guarantees about [not] modifying the source
buffer, and that one definitely has to free() the output when done
(the implementations of basename() on different platforms vary on
these guarantees). :-) 

This commit was SVN r5307.
Этот коммит содержится в:
Jeff Squyres 2005-04-13 15:26:33 +00:00
родитель 6c79cc3e04
Коммит 9e0b6baea0

Просмотреть файл

@ -29,7 +29,6 @@
#include <ctype.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <libgen.h>
#include "include/orte_constants.h"
@ -187,12 +186,23 @@ int main(int argc, char *argv[], char* env[])
{
orte_app_context_t **apps;
int rc, i, num_apps;
char *dir;
size_t j;
/* Setup the abort message (for use in the signal handler) */
dir = strdup(argv[0]);
orterun_basename = basename(dir);
for (j = strlen(argv[0]); j > 0; --j) {
if ('/' == argv[0][j]) {
orterun_basename = strdup(&(argv[0][j + 1]));
break;
}
}
if (0 == j) {
if ('/' == argv[0][0]) {
orterun_basename = strdup(&(argv[0][1]));
} else {
orterun_basename = strdup(argv[0]);
}
}
asprintf(&abort_msg, "%s: killing job...\n", orterun_basename);
abort_msg_len = strlen(abort_msg);
@ -265,7 +275,7 @@ int main(int argc, char *argv[], char* env[])
OBJ_DESTRUCT(&apps_pa);
orte_finalize();
free(abort_msg);
free(dir);
free(orterun_basename);
return rc;
}