Replaced another execvp() (last?) with g_spawn_async()
This commit is contained in:
parent
bb53444146
commit
b18e9bd377
28
src/common.c
28
src/common.c
|
@ -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 */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user