]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
Added t_strsplit_spaces().
authorTimo Sirainen <tss@iki.fi>
Mon, 20 Oct 2003 04:15:16 +0000 (07:15 +0300)
committerTimo Sirainen <tss@iki.fi>
Mon, 20 Oct 2003 04:15:16 +0000 (07:15 +0300)
--HG--
branch : HEAD

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

index 5a8a485a9f90d8c6afa5266cfd18195d5cc6a49b..401eabcb05c6180748f3b09462071fda0a9483c8 100644 (file)
@@ -238,7 +238,7 @@ void mech_init(void)
        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 @@ void mech_init(void)
        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')
index 6f144b308859e98c18d7c7d1543616f87dcb7d87..423694b9c90dc2ed5cffd4976853a7c82d1472d6 100644 (file)
@@ -43,10 +43,7 @@ static void static_init(const char *args)
        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)
index aac8d8e24fc3d09544326139d1b5b80abd16f4cf..e32ac2c45c08fc1ae8fd04e4c56f44b07dc8dbd1 100644 (file)
@@ -22,16 +22,15 @@ const char *const *imap_fetch_get_body_fields(const char *fields)
        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;
 
index 2f7c1b19dbfa9cfe6b7adb3615151ac76960d8fd..7c07bb845a5fef1241567bc1c525ced2d13a4b19 100644 (file)
@@ -44,7 +44,7 @@ static void mbox_init_lock_settings(void)
 
        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) {
index 761d0d9f24bfbc76e511e45f69252c0189090b56..d2c70f2ec1166b583fc23d7dc4b738f7c5ee4164 100644 (file)
@@ -181,10 +181,7 @@ static enum mail_cache_field get_cache_fields(const char *fields)
                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];
index 54f935894e23eb96429a4a3de1f17ffb369f258c..b95655810baa1adcff6ea99be97776358946349f 100644 (file)
@@ -44,10 +44,7 @@ void mail_storage_init(void)
        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) {
index 50ecbe27eee4a3359db364dc23c8d4e6a3681afa..36333383c588a4e47992ba20686dab66172af5f7 100644 (file)
@@ -218,8 +218,8 @@ char *p_strdup_vprintf(pool_t pool, const char *format, va_list args)
 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 @@ const char *_vstrconcat(const char *str1, va_list args, size_t *ret_len)
        bufsize = STRCONCAT_BUFSIZE;
        temp = t_buffer_get(bufsize);
 
-       pos = 0;
+       i = 0;
        do {
-               temp_end = temp + bufsize - 1; /* leave 1 for \0 */
+               len = strlen(str);
 
-               p = temp + pos;
-               while (*str != '\0' && p != temp_end)
-                       *p++ = *str++;
-               pos = (size_t)(p - temp);
-
-               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 @@ int memcasecmp(const void *p1, const void *p2, size_t size)
         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 @@ const char **t_strsplit(const char *data, const char *separators)
                                                       alloc_len);
                        }
 
-                        *str = '\0';
+                       if (*str != ' ' || !spaces)
+                               *str = '\0';
+                       else {
+                               *str = '\0';
+                               while (str[1] == ' ') str++;
+                       }
+
                        array[len++] = str+1;
                }
 
@@ -501,6 +505,16 @@ const char **t_strsplit(const char *data, const char *separators)
         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;
index 8f5ef83e9a3cf807ff9815e6e7a94e3436dc0d4c..ea9bb1056b43b12ef359d81d38457cdd9bd87253 100644 (file)
@@ -56,6 +56,8 @@ int memcasecmp(const void *p1, const void *p2, size_t size);
 
 /* 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);
 
index 5e778977f951368dc7adf7addac3ef068fd2f3eb..ef28e0c809eae58fc8be432829015c3d18477b7c 100644 (file)
@@ -242,7 +242,8 @@ static void listen_protocols(struct settings *set)
                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) {
index 31bbb3392c4ac55add203aec86d7cc7221267067..cdbb79e4fb37bcf98990f2ad24a077bf0b0f7d18 100644 (file)
@@ -472,7 +472,8 @@ static int settings_verify(struct settings *set)
        }
 
        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)