]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-imap-client: Add and use imapc_capability_lookup()
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Wed, 3 Dec 2025 21:04:26 +0000 (23:04 +0200)
committerTimo Sirainen <timo.sirainen@open-xchange.com>
Wed, 3 Dec 2025 21:04:26 +0000 (23:04 +0200)
src/lib-imap-client/imapc-connection.c
src/lib-imap-client/imapc-settings.c
src/lib-imap-client/imapc-settings.h

index f6517a427ea0e19b86296bafcf43ade1634164f6..50a42c226584a3919a0b8bf3edfdbfae839758af 100644 (file)
@@ -784,7 +784,6 @@ imapc_connection_parse_capability(struct imapc_connection *conn,
                                  const char *value)
 {
        const char *const *tmp;
-       unsigned int i;
 
        e_debug(conn->event, "Server capabilities: %s", value);
 
@@ -793,17 +792,8 @@ imapc_connection_parse_capability(struct imapc_connection *conn,
                p_strsplit_free(default_pool, conn->capabilities_list);
        conn->capabilities_list = p_strsplit(default_pool, value, " ");
 
-       for (tmp = t_strsplit(value, " "); *tmp != NULL; tmp++) {
-               for (i = 0; imapc_capability_names[i].name != NULL; i++) {
-                       const struct imapc_capability_name *cap =
-                               &imapc_capability_names[i];
-
-                       if (strcasecmp(*tmp, cap->name) == 0) {
-                               conn->capabilities |= cap->capability;
-                               break;
-                       }
-               }
-       }
+       for (tmp = t_strsplit(value, " "); *tmp != NULL; tmp++)
+               conn->capabilities |= imapc_capability_lookup(*tmp);
 
        if ((conn->capabilities & IMAPC_CAPABILITY_IMAP4REV1) == 0) {
                imapc_connection_input_error(conn,
index 40e1c385fb8a7ea9ae133d99b5d1b15c2bab1931..acdc31f8740fab268f78f6921d2e14fb7d937ecf 100644 (file)
@@ -117,6 +117,15 @@ const struct imapc_capability_name imapc_capability_names[] = {
        { NULL, 0 }
 };
 
+enum imapc_capability imapc_capability_lookup(const char *str)
+{
+       for (unsigned int i = 0; imapc_capability_names[i].name != NULL; i++) {
+               if (strcasecmp(imapc_capability_names[i].name, str) == 0)
+                       return imapc_capability_names[i].capability;
+       }
+       return 0;
+}
+
 struct imapc_feature_list {
        const char *name;
        enum imapc_features num;
index 0ace81bb1e2f024597a8c9801be59d8544af4044..468bdf0280303bcd3beacf2da6993c4e49a124b9 100644 (file)
@@ -96,4 +96,6 @@ struct imapc_settings {
 
 extern const struct setting_parser_info imapc_setting_parser_info;
 
+enum imapc_capability imapc_capability_lookup(const char *str);
+
 #endif