argvlib.c source code
                                          
#include <string.h>
#include <stdlib.h>

/*******************************************************
* Creates argument array for calling process
*/
int makeargv(char *s, char *delimiters, char ***argvp)
{
    char *t;
    char *snew;
    int numtokens;
    int i;
    snew = s + strspn(s, delimiters);
    
    if ((t = calloc(strlen(snew) + 1, sizeof(char))) == NULL)
    {
	*argvp = NULL;
	numtokens = -1;
    }
    else
    {
	strcpy(t, snew);
	if (strtok(t, delimiters) == NULL)
	    numtokens = 0;
	else
	    for (numtokens = 1; strtok(NULL, delimiters) != NULL;
		++numtokens)
	    ;
	
	if ((*argvp = calloc(numtokens + 1, sizeof(char *))) == NULL)
	{
	    free(t);
	    numtokens = -1;
	}
	else
	{
	    if (numtokens > 0)
	    {
		strcpy(t, snew);
		**argvp = strtok(t, delimiters);
		for (i = 1; i < numtokens + 1; ++i)
		    *((*argvp) + i) = strtok(NULL, delimiters);
	    }
	    else
	    {
		**argvp = NULL;
		free(t);
	    }
	}	
    }
    return numtokens;
}