isync

mailbox synchronization program
git clone https://git.code.sf.net/p/isync/isync
Log | Files | Refs | README | LICENSE

commit c0bf867669f9cea5bc731370d46272c1e582cbda
parent 3ceb5531028016accf95b8a1889f84b0f11c3a12
Author: Oswald Buddenhagen <ossi@users.sf.net>
Date:   Wed, 25 Sep 2013 18:53:18 +0200

make next_arg() more readable & efficient

Diffstat:
Msrc/drv_imap.c | 42+++++++++++++++++++++++-------------------
1 file changed, 23 insertions(+), 19 deletions(-)

diff --git 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; }