extern void free_argv(char *argv[]) { int argc = argv_len(argv); /* free each argument */ for (int i=0; i<argc; i++) { free(argv[i]); } /* free array of char pointers */ free(argv); }
int copy_argv(char **from, char ***out, int delta) { char **b; int l, i; l = argv_len(from); b = malloc((l+1+delta) * (sizeof from[0])); if (b == NULL) { return -ENOMEM; } for (i = 0; i < l; i++) { if ((b[i] = strdup(from[i])) == NULL) { return -ENOMEM; } } b[l] = NULL; *out = b; return 0; }