Replaced another execvp() (last?) with g_spawn_async()

This commit is contained in:
Pierre Pronchery 2011-02-10 21:57:11 +00:00
parent bb53444146
commit b18e9bd377

View File

@ -15,6 +15,7 @@
#include <stdio.h>
#include <libintl.h> #include <libintl.h>
@ -81,31 +82,28 @@ static int _common_exec(char const * program, char const * flags, GList * args)
{ {
unsigned long i = flags != NULL ? 3 : 2; unsigned long i = flags != NULL ? 3 : 2;
char const ** argv = NULL; char const ** argv = NULL;
pid_t pid;
GList * a; GList * a;
char const ** p; char const ** p;
GError * error = NULL;
if(args == NULL) if(args == NULL)
return 0; return 0;
if((pid = fork()) == -1)
return 1;
else if(pid != 0) /* the parent returns */
return 0;
for(a = args; a != NULL; a = a->next) for(a = args; a != NULL; a = a->next)
{ {
if(a->data == NULL) if(a->data == NULL)
continue; continue;
if((p = realloc(argv, sizeof(*argv) * (i + 2))) == NULL) if((p = realloc(argv, sizeof(*argv) * (i + 2))) == NULL)
{ break;
fprintf(stderr, "%s%s%s%s%s", PROGNAME ": ", program,
": ", strerror(errno), "\n");
exit(2);
}
argv = p; argv = p;
argv[i++] = a->data; argv[i++] = a->data;
} }
if(a != NULL)
{
free(argv);
return -error_set_code(1, "%s: %s", program, strerror(errno));
}
if(argv == NULL) if(argv == NULL)
exit(0); return 0;
#ifdef DEBUG #ifdef DEBUG
argv[0] = "echo"; argv[0] = "echo";
#else #else
@ -116,10 +114,10 @@ static int _common_exec(char const * program, char const * flags, GList * args)
if(flags != NULL) if(flags != NULL)
argv[i++] = flags; argv[i++] = flags;
argv[i] = "--"; argv[i] = "--";
execvp(argv[0], argv); if(g_spawn_async(NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL,
fprintf(stderr, "%s%s%s%s\n", PROGNAME ": ", argv[0], ": ", strerror( NULL, &error) != TRUE)
errno)); return -error_set_code(1, "%s", error->message);
exit(2); return 0;
} }
#endif /* COMMON_EXEC */ #endif /* COMMON_EXEC */