Index: example.c =================================================================== --- example.c (revision 28452) +++ example.c (revision 28453) @@ -18,7 +18,7 @@ /* split and print fields */ printf("Splitting '%s':\n", s); - argc = qparse3(s, &argv, QPARSE_DOUBLE_QUOTE | QPARSE_SINGLE_QUOTE | QPARSE_TERM_SEMICOLON, &cons); + argc = qparse3(s, &argv, QPARSE_DOUBLE_QUOTE | QPARSE_SINGLE_QUOTE | QPARSE_TERM_SEMICOLON | QPARSE_SEP_COMMA, &cons); for(n = 0; n < argc; n++) printf(" [%d] '%s'\n", n, argv[n]); qparse_free(argc, &argv); Index: qparse.c =================================================================== --- qparse.c (revision 28452) +++ qparse.c (revision 28453) @@ -123,6 +123,11 @@ case '\r': if (flg & QPARSE_TERM_NEWLINE) goto stop; + case ',': + if (!(flg & QPARSE_SEP_COMMA)) { + qpush(*s); /* plain ',', don't care */ + break; + } case ' ': case '\t': if (flg & QPARSE_MULTISEP) Index: qparse.h =================================================================== --- qparse.h (revision 28452) +++ qparse.h (revision 28453) @@ -18,6 +18,7 @@ QPARSE_MULTISEP = 8, /* multiple separators are taken as a single separator */ QPARSE_TERM_NEWLINE = 16, /* terminate parsing at newline */ QPARSE_TERM_SEMICOLON = 32, /* terminate parsing at semicolon */ + QPARSE_SEP_COMMA = 64, /* comma is a separator, like whitespace */ } flags_t; int qparse2(const char *input, char **argv_ret[], flags_t flg);