コード例 #1
0
ファイル: dsaschema.c プロジェクト: osstech-jp/ReOpenLDAP
static int
fp_parse_line(
    int		lineno,
    char	*line
)
{
	char *	token;

	cargc = 0;
	token = strtok_quote( line, " \t" );

	if ( strtok_quote_ptr ) {
		*strtok_quote_ptr = ' ';
	}

	if ( strtok_quote_ptr ) {
		*strtok_quote_ptr = '\0';
	}

	for ( ; token != NULL; token = strtok_quote( NULL, " \t" ) ) {
		if ( cargc == cargv_size - 1 ) {
			char **tmp;
			tmp = realloc( cargv, (cargv_size + ARGS_STEP) *
					    sizeof(*cargv) );
			if ( tmp == NULL ) {
				return -1;
			}
			cargv = tmp;
			cargv_size += ARGS_STEP;
		}
		cargv[cargc++] = token;
	}
	cargv[cargc] = NULL;
	return 0;
}
コード例 #2
0
ファイル: esock_utils.c プロジェクト: system/erlang-otp
/* Builds an argv array from cmd. Spaces and tabs within double quotes
 * are not considered delimiters. Double quotes are removed.
 * 
 * The return value is argc, and the pointer to char ** is set. argc 
 * is non-negative, argv[0], ..., argv[argc - 1] are pointers to
 * strings, and argv[argc] == NULL.  All argv[0], ..., argv[argc - 1]
 * must be freed by the user, and also the argv pointer itself. 
 *
 * Example: cmd = abc"/program files/"olle nisse, results in 
 * argv[0] = abc/program files/olle, argv[1] = nisse, argc = 2.
 *
 */
int esock_build_argv(char *cmd, char ***argvp)
{
    int argvsize = 10, argc = 0;
    char *args, *tokp, *argp;
    char **argv;

    argv = esock_malloc(argvsize * sizeof(char *));
    args = esock_malloc(strlen(cmd) + 1);
    strcpy(args, cmd);
    tokp = strtok_quote(args, " \t");
    while (tokp != NULL) {
	if (argc + 1 >= argvsize) {
	    argvsize += 10;
	    argv = esock_realloc(argv, argvsize * sizeof(char *));
	}
	argp = esock_malloc(strlen(tokp) + 1);
	strcpy(argp, tokp);
	argv[argc++] = argp;
	tokp = strtok_quote(NULL, " \t");
    }
    esock_free(args);
    argv[argc] = NULL;
    *argvp = argv;
    return argc;
}