Mercurial > dovecot > original-hg > dovecot-1.2
changeset 1820:02bc3ef29b22 HEAD
Added t_strsplit_spaces().
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 20 Oct 2003 07:15:16 +0300 |
parents | c9571aa175f8 |
children | d623907c098a |
files | src/auth/mech.c src/auth/userdb-static.c src/imap/imap-fetch.c src/lib-index/mbox/mbox-lock.c src/lib-storage/index/index-storage.c src/lib-storage/mail-storage.c src/lib/strfuncs.c src/lib/strfuncs.h src/master/main.c src/master/master-settings.c |
diffstat | 10 files changed, 49 insertions(+), 41 deletions(-) [+] |
line wrap: on
line diff
--- a/src/auth/mech.c Mon Oct 20 06:25:10 2003 +0300 +++ b/src/auth/mech.c Mon Oct 20 07:15:16 2003 +0300 @@ -238,7 +238,7 @@ if (env == NULL || *env == '\0') i_fatal("MECHANISMS environment is unset"); - mechanisms = t_strsplit(env, " "); + mechanisms = t_strsplit_spaces(env, " "); while (*mechanisms != NULL) { if (strcasecmp(*mechanisms, "PLAIN") == 0) mech_register_module(&mech_plain); @@ -267,7 +267,7 @@ env = getenv("REALMS"); if (env == NULL) env = ""; - auth_realms = t_strsplit(env, " "); + auth_realms = t_strsplit_spaces(env, " "); default_realm = getenv("DEFAULT_REALM"); if (default_realm != NULL && *default_realm == '\0')
--- a/src/auth/userdb-static.c Mon Oct 20 06:25:10 2003 +0300 +++ b/src/auth/userdb-static.c Mon Oct 20 07:15:16 2003 +0300 @@ -43,10 +43,7 @@ static_gid = 0; static_home_template = NULL; - for (tmp = t_strsplit(args, " "); *tmp != NULL; tmp++) { - if (**tmp == '\0') - continue; - + for (tmp = t_strsplit_spaces(args, " "); *tmp != NULL; tmp++) { if (strncasecmp(*tmp, "uid=", 4) == 0) static_uid = atoi(*tmp + 4); else if (strncasecmp(*tmp, "gid=", 4) == 0)
--- a/src/imap/imap-fetch.c Mon Oct 20 06:25:10 2003 +0300 +++ b/src/imap/imap-fetch.c Mon Oct 20 07:15:16 2003 +0300 @@ -22,16 +22,15 @@ if (*fields == '(') fields++; - field_list = t_strsplit(fields, " )"); + field_list = t_strsplit_spaces(fields, " )"); /* array ends at ")" element */ for (field = dest = field_list; *field != NULL; field++) { if (strcmp(*field, ")") == 0) break; - if (**field != '\0') { - *dest = *field; - dest++; - } + + *dest = *field; + dest++; } *dest = NULL;
--- a/src/lib-index/mbox/mbox-lock.c Mon Oct 20 06:25:10 2003 +0300 +++ b/src/lib-index/mbox/mbox-lock.c Mon Oct 20 07:15:16 2003 +0300 @@ -44,7 +44,7 @@ str = getenv("MBOX_LOCKS"); if (str == NULL) str = DEFAULT_LOCK_METHODS; - for (lock = t_strsplit(str, " "); *lock != NULL; lock++) { + for (lock = t_strsplit_spaces(str, " "); *lock != NULL; lock++) { if (strcasecmp(*lock, "dotlock") == 0) use_dotlock = TRUE; else if (strcasecmp(*lock, "fcntl") == 0) {
--- a/src/lib-storage/index/index-storage.c Mon Oct 20 06:25:10 2003 +0300 +++ b/src/lib-storage/index/index-storage.c Mon Oct 20 07:15:16 2003 +0300 @@ -181,10 +181,7 @@ return 0; ret = 0; - for (arr = t_strsplit(fields, " ,"); *arr != NULL; arr++) { - if (*arr == '\0') - continue; - + for (arr = t_strsplit_spaces(fields, " ,"); *arr != NULL; arr++) { for (i = 0; field_names[i] != NULL; i++) { if (strcasecmp(field_names[i], *arr) == 0) { ret |= field_masks[i];
--- a/src/lib-storage/mail-storage.c Mon Oct 20 06:25:10 2003 +0300 +++ b/src/lib-storage/mail-storage.c Mon Oct 20 07:15:16 2003 +0300 @@ -44,10 +44,7 @@ if (env == NULL) return; - for (str = t_strsplit(env, " "); *str != NULL; str++) { - if (**str == '\0') - continue; - + for (str = t_strsplit_spaces(env, " "); *str != NULL; str++) { list = client_workaround_list; for (; list->name != NULL; list++) { if (strcasecmp(*str, list->name) == 0) {
--- a/src/lib/strfuncs.c Mon Oct 20 06:25:10 2003 +0300 +++ b/src/lib/strfuncs.c Mon Oct 20 07:15:16 2003 +0300 @@ -218,8 +218,8 @@ const char *_vstrconcat(const char *str1, va_list args, size_t *ret_len) { const char *str; - char *temp, *temp_end, *p; - size_t bufsize, pos; + char *temp; + size_t bufsize, i, len; if (str1 == NULL) return NULL; @@ -228,29 +228,26 @@ bufsize = STRCONCAT_BUFSIZE; temp = t_buffer_get(bufsize); - pos = 0; + i = 0; do { - temp_end = temp + bufsize - 1; /* leave 1 for \0 */ - - p = temp + pos; - while (*str != '\0' && p != temp_end) - *p++ = *str++; - pos = (size_t)(p - temp); + len = strlen(str); - if (p == temp_end) { + if (i + len >= bufsize) { /* need more memory */ - bufsize = nearest_power(bufsize+1); + bufsize = nearest_power(i + len + 1); temp = t_buffer_reget(temp, bufsize); - } else { - /* next string */ - str = va_arg(args, const char *); } + + memcpy(temp + i, str, len); + + /* next string */ + str = va_arg(args, const char *); } while (str != NULL); - i_assert(pos < bufsize); + i_assert(i < bufsize); - temp[pos] = '\0'; - *ret_len = pos+1; + temp[i++] = '\0'; + *ret_len = i; return temp; } @@ -463,7 +460,8 @@ return 0; } -const char **t_strsplit(const char *data, const char *separators) +static const char **_strsplit(const char *data, const char *separators, + int spaces) { const char **array; char *str; @@ -487,7 +485,13 @@ alloc_len); } - *str = '\0'; + if (*str != ' ' || !spaces) + *str = '\0'; + else { + *str = '\0'; + while (str[1] == ' ') str++; + } + array[len++] = str+1; } @@ -501,6 +505,16 @@ return array; } +const char **t_strsplit(const char *data, const char *separators) +{ + return _strsplit(data, separators, FALSE); +} + +const char **t_strsplit_spaces(const char *data, const char *separators) +{ + return _strsplit(data, separators, TRUE); +} + const char *dec2str(uintmax_t number) { char *buffer;
--- a/src/lib/strfuncs.h Mon Oct 20 06:25:10 2003 +0300 +++ b/src/lib/strfuncs.h Mon Oct 20 07:15:16 2003 +0300 @@ -56,6 +56,8 @@ /* seprators is an array of separator characters, not a separator string. */ const char **t_strsplit(const char *data, const char *separators); +/* like t_strsplit(), but treats multiple spaces as a single separator. */ +const char **t_strsplit_spaces(const char *data, const char *separators); const char *dec2str(uintmax_t number);
--- a/src/master/main.c Mon Oct 20 06:25:10 2003 +0300 +++ b/src/master/main.c Mon Oct 20 07:15:16 2003 +0300 @@ -242,7 +242,8 @@ ssl_ip = normal_ip; /* register wanted protocols */ - for (proto = t_strsplit(set->protocols, " "); *proto != NULL; proto++) { + proto = t_strsplit_spaces(set->protocols, " "); + for (; *proto != NULL; proto++) { fd = NULL; ip = NULL; port = 0; if (strcasecmp(*proto, "imap") == 0) { if (set->protocol == MAIL_PROTOCOL_IMAP) {
--- a/src/master/master-settings.c Mon Oct 20 06:25:10 2003 +0300 +++ b/src/master/master-settings.c Mon Oct 20 07:15:16 2003 +0300 @@ -472,7 +472,8 @@ } dotlock_got = fcntl_got = flock_got = FALSE; - for (str = t_strsplit(set->mbox_locks, " "); *str != NULL; str++) { + str = t_strsplit_spaces(set->mbox_locks, " "); + for (; *str != NULL; str++) { if (strcasecmp(*str, "dotlock") == 0) dotlock_got = TRUE; else if (strcasecmp(*str, "fcntl") == 0)