From c0bf867669f9cea5bc731370d46272c1e582cbda Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Wed, 25 Sep 2013 18:53:18 +0200 Subject: [PATCH] make next_arg() more readable & efficient --- src/drv_imap.c | 42 +++++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/src/drv_imap.c b/src/drv_imap.c index abfc760..798320d 100644 --- a/src/drv_imap.c +++ b/src/drv_imap.c @@ -458,33 +458,37 @@ imap_refcounted_done_box( imap_store_t *ctx ATTR_UNUSED, struct imap_cmd *cmd, i } static char * -next_arg( char **s ) +next_arg( char **ps ) { - char *ret; + char *ret, *s; - if (!s || !*s) + assert( ps ); + s = *ps; + if (!s) return 0; - while (isspace( (unsigned char) **s )) - (*s)++; - if (!**s) { - *s = 0; + while (isspace( (unsigned char)*s )) + s++; + if (!*s) { + *ps = 0; return 0; } - if (**s == '"') { - ++*s; - ret = *s; - *s = strchr( *s, '"' ); + if (*s == '"') { + ++s; + ret = s; + s = strchr( s, '"' ); } else { - ret = *s; - while (**s && !isspace( (unsigned char) **s )) - (*s)++; + ret = s; + while (*s && !isspace( (unsigned char)*s )) + s++; } - if (*s) { - if (**s) - *(*s)++ = 0; - if (!**s) - *s = 0; + if (s) { + if (*s) + *s++ = 0; + if (!*s) + s = 0; } + + *ps = s; return ret; }