static int str2argv (char *str, char ***argv) { char *p = NULL; char *savetok = NULL; char *temp = NULL; char *temp1 = NULL; int argc = 0; size_t argv_len = 32; int ret = 0; int i = 0; assert (str); temp = str = strdup (str); if (!str) goto error; *argv = calloc (argv_len, sizeof (**argv)); if (!*argv) goto error; while ((p = strtok_r (str, " ", &savetok))) { str = NULL; argc++; if (argc == argv_len) { ret = duplexpand ((void *)argv, sizeof (**argv), &argv_len); if (ret == -1) goto error; } temp1 = strdup (p); if (!temp1) goto error; (*argv)[argc - 1] = temp1; } free(temp); return argc; error: fprintf (stderr, "out of memory\n"); free(temp); for (i = 0; i < argc - 1; i++) free((*argv)[i]); free(*argv); return -1; }
static int str2argv (char *str, char ***argv) { char *p = NULL; char *savetok = NULL; int argc = 0; size_t argv_len = 32; int ret = 0; assert (str); str = strdup (str); if (!str) return -1; *argv = calloc (argv_len, sizeof (**argv)); if (!*argv) goto error; while ((p = strtok_r (str, " ", &savetok))) { str = NULL; argc++; if (argc == argv_len) { ret = duplexpand ((void *)argv, sizeof (**argv), &argv_len); if (ret == -1) goto error; } (*argv)[argc - 1] = p; } return argc; error: fprintf (stderr, "out of memory\n"); return -1; }