Index: trunk/src_3rd/qparse/qparse.c =================================================================== --- trunk/src_3rd/qparse/qparse.c (revision 34676) +++ trunk/src_3rd/qparse/qparse.c (revision 34677) @@ -136,8 +136,11 @@ qpush(*s); break; case ')': - if ((flg & QPARSE_PAREN_FUNC) && (num_fparens == 1)) - goto stop; + if ((flg & QPARSE_PAREN_FUNC) && (num_fparens == 1)) { + qnext(); + s++; + goto stop2; + } qpush(*s); /* plain ')', don't care */ break; case '(': @@ -158,8 +161,11 @@ break; case ';': - if (flg & QPARSE_TERM_SEMICOLON) - goto stop; + if (flg & QPARSE_TERM_SEMICOLON) { + qnext(); + s++; + goto stop2; + } qpush(*s); /* plain ';', don't care */ break; @@ -240,6 +246,8 @@ qnext(); + stop2:; + /* Corner case: input has stray whitespace at the end - that shouldn't be an extra empty argv; but if it's explicit (quoted or function syntax), keep it! */