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:
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;
}