Example #1
0
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;
}
Example #2
0
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;
}