use vstrcollect
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@7785 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1998, 1999 Kungliga Tekniska H<>gskolan
|
* Copyright (c) 1998 - 2000 Kungliga Tekniska H<>gskolan
|
||||||
* (Royal Institute of Technology, Stockholm, Sweden).
|
* (Royal Institute of Technology, Stockholm, Sweden).
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
@@ -113,27 +113,6 @@ simple_execve(const char *file, char *const args[], char *const envp[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static char **
|
|
||||||
collect_args(va_list *ap)
|
|
||||||
{
|
|
||||||
char **argv = NULL;
|
|
||||||
int argc = 0, i = 0;
|
|
||||||
do {
|
|
||||||
if(i == argc) {
|
|
||||||
/* realloc argv */
|
|
||||||
char **tmp = realloc(argv, (argc + 5) * sizeof(*argv));
|
|
||||||
if(tmp == NULL) {
|
|
||||||
errno = ENOMEM;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
argv = tmp;
|
|
||||||
argc += 5;
|
|
||||||
}
|
|
||||||
argv[i++] = va_arg(*ap, char*);
|
|
||||||
} while(argv[i - 1] != NULL);
|
|
||||||
return argv;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
int
|
||||||
simple_execlp(const char *file, ...)
|
simple_execlp(const char *file, ...)
|
||||||
{
|
{
|
||||||
@@ -142,7 +121,7 @@ simple_execlp(const char *file, ...)
|
|||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
va_start(ap, file);
|
va_start(ap, file);
|
||||||
argv = collect_args(&ap);
|
argv = vstrcollect(&ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
if(argv == NULL)
|
if(argv == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
@@ -160,7 +139,7 @@ simple_execle(const char *file, ... /* ,char *const envp[] */)
|
|||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
va_start(ap, file);
|
va_start(ap, file);
|
||||||
argv = collect_args(&ap);
|
argv = vstrcollect(&ap);
|
||||||
envp = va_arg(ap, char **);
|
envp = va_arg(ap, char **);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
if(argv == NULL)
|
if(argv == NULL)
|
||||||
|
Reference in New Issue
Block a user