/* * argv_nextword.c */ #include "private.h" #include "lub/types.h" #include "lub/ctype.h" #include /*--------------------------------------------------------- */ const char *lub_argv_nextword(const char *string, size_t * len, size_t * offset, bool_t * quoted) { const char *word; bool_t quote = BOOL_FALSE; *quoted = BOOL_FALSE; /* find the start of a word (not including an opening quote) */ while (*string && lub_ctype_isspace(*string)) { string++; (*offset)++; } if (*string == '\\') { string++; if (*string) string++; } /* is this the start of a quoted string ? */ if (*string == '"') { quote = BOOL_TRUE; string++; } word = string; *len = 0; /* find the end of the word */ while (*string) { if (*string == '\\') { string++; (*len)++; if (*string) { (*len)++; string++; } continue; } if ((BOOL_FALSE == quote) && lub_ctype_isspace(*string)) { /* end of word */ break; } if (*string == '"') { /* end of a quoted string */ *quoted = BOOL_TRUE; break; } (*len)++; string++; } return word; } /*--------------------------------------------------------- */