00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include <unistd.h>
00018 #include <stdarg.h>
00019
00020 #include "exec.h"
00021 #include "mem.h"
00022 #include "printf.h"
00023 #include "strtok.h"
00024
00025 int exec_replace(const char *fmt, ...)
00026 {
00027 va_list ap;
00028 va_start(ap, fmt);
00029
00030 char *cmd;
00031
00032 if (_lucid_vasprintf(&cmd, fmt, ap) == -1) {
00033 va_end(ap);
00034 return -1;
00035 }
00036
00037 va_end(ap);
00038
00039 strtok_t _st, *st = &_st;
00040
00041 if (!strtok_init_str(st, cmd, " ", 0)) {
00042 mem_free(cmd);
00043 return -1;
00044 }
00045
00046 mem_free(cmd);
00047
00048 int argc = strtok_count(st);
00049 char **argv = mem_alloc((argc + 1) * sizeof(char *));
00050
00051 if (!argv) {
00052 strtok_free(st);
00053 return -1;
00054 }
00055
00056 if (strtok_toargv(st, argv) < 1) {
00057 mem_free(argv);
00058 strtok_free(st);
00059 return -1;
00060 }
00061
00062 execvp(argv[0], argv);
00063
00064
00065 mem_free(argv);
00066 strtok_free(st);
00067 return -1;
00068 }