From: Phil Carmody Date: Thu, 11 Jan 2018 13:35:42 +0000 (+0200) Subject: global - migrate more complicated strncmp expressions to str_begins X-Git-Tag: 2.3.2.rc1~39 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1367401f9fa34707050bd40f0154f11588c3d27e;p=thirdparty%2Fdovecot%2Fcore.git global - migrate more complicated strncmp expressions to str_begins Simplify a bunch of verbose var=strlen(); strncmp(,,var) calls. Fortunately, all of these examples use the length variable, so no "unused value" warnings occur. --- 8< --- strncmp2.cocci --- @@ expression e1, e2; identifier i2; @@ i2 = strlen(e2) ... - strncmp(e1, e2, i2) == 0 + str_begins(e1, e2) @@ expression e1, e2; identifier i2; @@ i2 = strlen(e2) ... - strncmp(e1, e2, i2) != 0 + !str_begins(e1, e2) @@ expression e1, e2; identifier i1; @@ i1 = strlen(e1) ... - strncmp(e1, e2, i1) == 0 + str_begins(e2, e1) @@ expression e1, e2; identifier i1; @@ i1 = strlen(e1) ... - strncmp(e1, e2, i1) != 0 + !str_begins(e2, e1) --- 8< --------------------- Signed-off-by: Phil Carmody --- diff --git a/src/auth/auth-cache.c b/src/auth/auth-cache.c index 1d949c515c..70ca4a8793 100644 --- a/src/auth/auth-cache.c +++ b/src/auth/auth-cache.c @@ -295,7 +295,7 @@ static bool auth_cache_node_is_user(struct auth_cache_node *node, data++; username_len = strlen(username); - return strncmp(data, username, username_len) == 0 && + return str_begins(data, username) && (data[username_len] == '\t' || data[username_len] == '\0'); } diff --git a/src/config/old-set-parser.c b/src/config/old-set-parser.c index 93d78c8d3b..2ad16db85a 100644 --- a/src/config/old-set-parser.c +++ b/src/config/old-set-parser.c @@ -673,7 +673,7 @@ static void socket_apply(struct config_parser_context *ctx) } path = set->path; len = strlen(ctx->old->base_dir); - if (strncmp(path, ctx->old->base_dir, len) == 0 && + if (str_begins(path, ctx->old->base_dir) && path[len] == '/') path += len + 1; diff --git a/src/doveadm/doveadm-cmd.c b/src/doveadm/doveadm-cmd.c index 11d8b47115..5bc4abbad2 100644 --- a/src/doveadm/doveadm-cmd.c +++ b/src/doveadm/doveadm-cmd.c @@ -152,7 +152,7 @@ doveadm_cmd_find_multi_word(const char *cmdname, int *_argc, return FALSE; len = strlen(argv[1]); - if (strncmp(cmdname, argv[1], len) != 0) + if (!str_begins(cmdname, argv[1])) return FALSE; argc--; argv++; diff --git a/src/doveadm/doveadm-mail.c b/src/doveadm/doveadm-mail.c index c9828b1741..14b6e11a6a 100644 --- a/src/doveadm/doveadm-mail.c +++ b/src/doveadm/doveadm-mail.c @@ -732,7 +732,7 @@ doveadm_mail_cmd_try_find_multi_word(const struct doveadm_mail_cmd *cmd, *argv += 1; len = strlen((*argv)[0]); - if (strncmp(cmdname, (*argv)[0], len) != 0) + if (!str_begins(cmdname, (*argv)[0])) return FALSE; if (cmdname[len] == ' ') { diff --git a/src/doveadm/dsync/dsync-brain-mailbox-tree.c b/src/doveadm/dsync/dsync-brain-mailbox-tree.c index bb7ae4170c..14fb2c1791 100644 --- a/src/doveadm/dsync/dsync-brain-mailbox-tree.c +++ b/src/doveadm/dsync/dsync-brain-mailbox-tree.c @@ -135,7 +135,7 @@ dsync_namespace_match_parts(struct mail_namespace *ns, part = *name_parts; part_len = strlen(part); - if (strncmp(prefix, part, part_len) != 0) + if (!str_begins(prefix, part)) return FALSE; if (prefix[part_len] != ns_sep) return FALSE; diff --git a/src/imap/cmd-notify.c b/src/imap/cmd-notify.c index bc74122c96..fa4b46ad79 100644 --- a/src/imap/cmd-notify.c +++ b/src/imap/cmd-notify.c @@ -179,7 +179,7 @@ cmd_notify_add_mailbox(struct imap_notify_context *ctx, else { /* see if one is a subtree of the other */ cur_len = strlen(names[i]); - if (strncmp(names[i], name, cur_len) == 0 && + if (str_begins(name, names[i]) && names[i][cur_len] == ns_sep) { /* already matched in this subtree */ return; diff --git a/src/imap/cmd-rename.c b/src/imap/cmd-rename.c index 7db35b6f70..4faa8179c6 100644 --- a/src/imap/cmd-rename.c +++ b/src/imap/cmd-rename.c @@ -27,7 +27,7 @@ bool cmd_rename(struct client_command_context *cmd) there's really no point in doing it anyway. */ old_ns = mailbox_list_get_namespace(old_ns->list); oldlen = strlen(oldname); - if (strncmp(oldname, newname, oldlen) == 0 && + if (str_begins(newname, oldname) && newname[oldlen] == mail_namespace_get_sep(old_ns)) { client_send_tagline(cmd, "NO Can't rename mailbox under its own child."); diff --git a/src/imap/imap-notify.c b/src/imap/imap-notify.c index cb190b3d2a..cf8199e19c 100644 --- a/src/imap/imap-notify.c +++ b/src/imap/imap-notify.c @@ -210,7 +210,7 @@ bool imap_notify_match_mailbox(struct imap_notify_namespace *notify_ns, implementing "personal" */ return TRUE; } - if (strncmp(*namep, vname, name_len) == 0 && + if (str_begins(vname, *namep) && (vname[name_len] == '\0' || vname[name_len] == ns_sep)) return TRUE; diff --git a/src/lib-storage/index/imapc/imapc-list.c b/src/lib-storage/index/imapc/imapc-list.c index 05fc8747a7..5c555a0ca9 100644 --- a/src/lib-storage/index/imapc/imapc-list.c +++ b/src/lib-storage/index/imapc/imapc-list.c @@ -365,7 +365,7 @@ imapc_list_get_vname(struct mailbox_list *_list, const char *storage_name) /* ACL plugin does these lookups */ } else if (*prefix != '\0' && strcasecmp(storage_name, "INBOX") != 0) { prefix_len = strlen(prefix); - i_assert(strncmp(prefix, storage_name, prefix_len) == 0); + i_assert(str_begins(storage_name, prefix)); storage_name += prefix_len; if (storage_name[0] == '\0') { /* we're looking up the prefix itself */ diff --git a/src/lib-storage/index/imapc/imapc-storage.c b/src/lib-storage/index/imapc/imapc-storage.c index bb49fc9bf9..4268762063 100644 --- a/src/lib-storage/index/imapc/imapc-storage.c +++ b/src/lib-storage/index/imapc/imapc-storage.c @@ -1072,7 +1072,7 @@ imapc_namespace_find_mailbox(struct imapc_storage *storage, const char *name) array_foreach(&storage->remote_namespaces, ns) { len = strlen(ns->prefix); - if (strncmp(ns->prefix, name, len) == 0) { + if (str_begins(name, ns->prefix)) { if (best_len > len) { best_ns = ns; best_len = len; diff --git a/src/lib-storage/index/index-search-mime.c b/src/lib-storage/index/index-search-mime.c index d30b47749d..40b2ca0de2 100644 --- a/src/lib-storage/index/index-search-mime.c +++ b/src/lib-storage/index/index-search-mime.c @@ -286,7 +286,7 @@ seach_arg_mime_filename_match(struct search_mimepart_context *mpctx, case SEARCH_MIME_FILENAME_ENDS: vlen = strlen(value); alen = strlen(key); - return (strncmp(value + (vlen - alen), key, alen) == 0 ? 1 : 0); + return (str_begins(value + (vlen - alen), key) ? 1 : 0); default: break; } diff --git a/src/lib-storage/index/shared/shared-list.c b/src/lib-storage/index/shared/shared-list.c index bb8ca2f3bd..c69c4dbb5f 100644 --- a/src/lib-storage/index/shared/shared-list.c +++ b/src/lib-storage/index/shared/shared-list.c @@ -92,7 +92,7 @@ shared_list_join_refpattern(struct mailbox_list *list, const char *ns_ref, *prefix = list->ns->prefix; size_t prefix_len = strlen(prefix); - if (*ref != '\0' && strncmp(ref, prefix, prefix_len) == 0) + if (*ref != '\0' && str_begins(ref, prefix)) ns_ref = ref + prefix_len; else ns_ref = NULL; diff --git a/src/lib-storage/list/mailbox-list-fs-iter.c b/src/lib-storage/list/mailbox-list-fs-iter.c index 63afbc83f2..d6040b83bd 100644 --- a/src/lib-storage/list/mailbox-list-fs-iter.c +++ b/src/lib-storage/list/mailbox-list-fs-iter.c @@ -482,7 +482,7 @@ static void fs_list_get_roots(struct fs_list_iterate_context *ctx) parentp = array_idx(&ctx->roots, i-1); childp = array_idx(&ctx->roots, i); parentlen = strlen(*parentp); - if (strncmp(*parentp, *childp, parentlen) == 0 && + if (str_begins(*childp, *parentp) && (parentlen == 0 || (*childp)[parentlen] == ctx->sep || (*childp)[parentlen] == '\0')) diff --git a/src/lib-storage/list/mailbox-list-index-backend.c b/src/lib-storage/list/mailbox-list-index-backend.c index be6a199c8a..ec06c497ba 100644 --- a/src/lib-storage/list/mailbox-list-index-backend.c +++ b/src/lib-storage/list/mailbox-list-index-backend.c @@ -756,7 +756,7 @@ index_list_rename_mailbox(struct mailbox_list *_oldlist, const char *oldname, return -1; } - if (strncmp(oldname, newname, oldname_len) == 0 && + if (str_begins(newname, oldname) && newname[oldname_len] == mailbox_list_get_hierarchy_sep(_newlist)) { mailbox_list_set_error(_oldlist, MAIL_ERROR_NOTPOSSIBLE, "Can't rename mailbox under itself."); diff --git a/src/lib-storage/list/mailbox-list-iter.c b/src/lib-storage/list/mailbox-list-iter.c index 3649964e13..2743dd7733 100644 --- a/src/lib-storage/list/mailbox-list-iter.c +++ b/src/lib-storage/list/mailbox-list-iter.c @@ -904,7 +904,7 @@ mailbox_list_iter_autocreate_filter(struct mailbox_list_iterate_context *ctx, array_foreach_modifiable(&actx->boxes, autobox) { name_len = strlen(autobox->name); - if (strncmp(info->vname, autobox->name, name_len) != 0 || + if (!str_begins(info->vname, autobox->name) || info->vname[name_len] != sep) continue; diff --git a/src/lib-storage/mailbox-list.c b/src/lib-storage/mailbox-list.c index 39cb8852f1..582ebbfc5b 100644 --- a/src/lib-storage/mailbox-list.c +++ b/src/lib-storage/mailbox-list.c @@ -466,7 +466,7 @@ static bool need_escape_dirstart(const char *vname, const char *maildir_name) } if (*maildir_name != '\0') { len = strlen(maildir_name); - if (strncmp(maildir_name, vname, len) == 0 && + if (str_begins(vname, maildir_name) && (vname[len] == '\0' || vname[len] == '/')) return TRUE; /* e.g. dbox-Mails */ } @@ -483,7 +483,7 @@ mailbox_list_escape_name_params(const char *vname, const char *ns_prefix, bool dirstart = TRUE; /* no escaping of namespace prefix */ - if (strncmp(ns_prefix, vname, ns_prefix_len) == 0) { + if (str_begins(vname, ns_prefix)) { str_append_n(escaped_name, vname, ns_prefix_len); vname += ns_prefix_len; } @@ -658,7 +658,7 @@ mailbox_list_unescape_name_params(const char *src, const char *ns_prefix, string_t *dest = t_str_new(strlen(src)); unsigned int num; - if (strncmp(src, ns_prefix, ns_prefix_len) == 0) { + if (str_begins(src, ns_prefix)) { str_append_n(dest, src, ns_prefix_len); src += ns_prefix_len; } @@ -1610,7 +1610,7 @@ int mailbox_list_mailbox(struct mailbox_list *list, const char *name, } len = strlen(rootdir); - if (strncmp(path, rootdir, len) == 0 && path[len] == '/') { + if (str_begins(path, rootdir) && path[len] == '/') { /* looking up a regular mailbox under mail root dir */ } else if ((list->ns->flags & NAMESPACE_FLAG_INBOX_USER) != 0 && strcasecmp(name, "INBOX") == 0) { @@ -1884,7 +1884,7 @@ bool mailbox_list_try_get_absolute_path(struct mailbox_list *list, same directory as one of our regular mailboxes. */ root_dir = mailbox_list_get_root_forced(list, MAILBOX_LIST_PATH_TYPE_MAILBOX); len = strlen(root_dir); - if (strncmp(root_dir, *name, len) == 0 && (*name)[len] == '/') { + if (str_begins(*name, root_dir) && (*name)[len] == '/') { mailbox_name = *name + len + 1; if (mailbox_list_get_path(list, mailbox_name, MAILBOX_LIST_PATH_TYPE_MAILBOX,