/* * argv__get_argv.c */ #include #include #include #include "lub/string.h" #include "private.h" /*--------------------------------------------------------- */ char *lub_argv__get_line(const lub_argv_t * this) { int space = 0; const char *p; unsigned i; char *line = NULL; for (i = 0; i < this->argc; i++) { if (i != 0) lub_string_cat(&line, " "); space = 0; /* Search for spaces */ for (p = this->argv[i].arg; *p; p++) { if (isspace(*p)) { space = 1; break; } } if (space) lub_string_cat(&line, "\""); lub_string_cat(&line, this->argv[i].arg); if (space) lub_string_cat(&line, "\""); } return line; } /*--------------------------------------------------------- */ char **lub_argv__get_argv(const lub_argv_t * this, const char *argv0) { char **result = NULL; unsigned i; unsigned a = 0; if (argv0) a = 1; result = malloc(sizeof(char *) * (this->argc + 1 + a)); if (argv0) result[0] = strdup(argv0); for (i = 0; i < this->argc; i++) result[i + a] = strdup(this->argv[i].arg); result[i + a] = NULL; return result; } /*--------------------------------------------------------- */ void lub_argv__free_argv(char **argv) { unsigned i; if (!argv) return; for (i = 0; argv[i]; i++) free(argv[i]); free(argv); } /*--------------------------------------------------------- */