Esempio n. 1
0
/* Parse a command line buffer into arguments */
static int
ParseCommandLine(char *cmdline, char **argv)
{
    char *bufp;
    char *lastp = NULL;
    int argc, last_argc;

    argc = last_argc = 0;
    for (bufp = cmdline; *bufp;) {
        /* Skip leading whitespace */
        while (SDL_isspace(*bufp)) {
            ++bufp;
        }
        /* Skip over argument */
        if (*bufp == '"') {
            ++bufp;
            if (*bufp) {
                if (argv) {
                    argv[argc] = bufp;
                }
                ++argc;
            }
            /* Skip over word */
            lastp = bufp;
            while (*bufp && (*bufp != '"' || *lastp == '\\')) {
                lastp = bufp;
                ++bufp;
            }
        } else {
            if (*bufp) {
                if (argv) {
                    argv[argc] = bufp;
                }
                ++argc;
            }
            /* Skip over word */
            while (*bufp && !SDL_isspace(*bufp)) {
                ++bufp;
            }
        }
        if (*bufp) {
            if (argv) {
                *bufp = '\0';
            }
            ++bufp;
        }

        /* Strip out \ from \" sequences */
        if (argv && last_argc != argc) {
            UnEscapeQuotes(argv[last_argc]);
        }
        last_argc = argc;
    }
    if (argv) {
        argv[argc] = NULL;
    }
    return (argc);
}
Esempio n. 2
0
static int ParseCommandLine(char *cmdline, char **argv)
{
    char *bufp;
    char *lastp = NULL;
    int argc, last_argc;
    argc = last_argc = 0;
    for ( bufp = cmdline; *bufp; ) {
        while ( isspace(*bufp) ) {
            ++bufp;
        }
        if ( *bufp == '"' ) {
            ++bufp;
            if ( *bufp ) {
                if ( argv ) {
                    argv[argc] = bufp;
                }
                ++argc;
            }
            while ( *bufp && ( *bufp != '"' || *lastp == '\\' ) ) {
                lastp = bufp;
                ++bufp;
            }
        } else {
            if ( *bufp ) {
                if ( argv ) {
                    argv[argc] = bufp;
                }
                ++argc;
            }
            while ( *bufp && ! isspace(*bufp) ) {
                ++bufp;
            }
        }
        if ( *bufp ) {
            if ( argv ) {
                *bufp = '\0';
            }
            ++bufp;
        }
        if( argv && last_argc != argc ) {
            UnEscapeQuotes( argv[last_argc] );
        }
        last_argc = argc;
    }
    if ( argv ) {
        argv[argc] = NULL;
    }
    return(argc);
}