]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
global: Use ENUM_NEGATE() macro where necessary
authorAki Tuomi <aki.tuomi@open-xchange.com>
Thu, 20 Aug 2020 05:35:59 +0000 (08:35 +0300)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Thu, 22 Oct 2020 12:16:16 +0000 (12:16 +0000)
89 files changed:
src/auth/auth-fields.c
src/doveadm/doveadm-dump-index.c
src/doveadm/doveadm-mail-mailbox-cache.c
src/doveadm/doveadm-mail-mailbox-status.c
src/doveadm/dsync/dsync-brain.c
src/doveadm/dsync/dsync-ibc-stream.c
src/doveadm/dsync/dsync-transaction-log-scan.c
src/imap-login/imap-proxy.c
src/imap/cmd-list.c
src/imap/imap-search.c
src/imap/imap-sync.c
src/lib-dict-backend/dict-cdb.c
src/lib-fs/fs-api.c
src/lib-fs/fs-metawrap.c
src/lib-index/mail-cache-decisions.c
src/lib-index/mail-cache-fields.c
src/lib-index/mail-cache-purge.c
src/lib-index/mail-cache-transaction.c
src/lib-index/mail-index-map-hdr.c
src/lib-index/mail-index-sync-update.c
src/lib-index/mail-index-sync.c
src/lib-index/mail-index-transaction-update.c
src/lib-index/mail-index-transaction-view.c
src/lib-index/mail-index-view-sync.c
src/lib-index/mail-transaction-log-file.c
src/lib-index/mail-transaction-log-view.c
src/lib-index/test-mail-cache-purge.c
src/lib-index/test-mail-index-transaction-update.c
src/lib-mail/message-decoder.c
src/lib-mail/message-parser.c
src/lib-smtp/smtp-server-connection.c
src/lib-ssl-iostream/iostream-openssl-context.c
src/lib-storage/index/cydir/cydir-save.c
src/lib-storage/index/cydir/cydir-storage.c
src/lib-storage/index/dbox-common/dbox-save.c
src/lib-storage/index/dbox-multi/mdbox-mail.c
src/lib-storage/index/dbox-multi/mdbox-storage.c
src/lib-storage/index/dbox-single/sdbox-copy.c
src/lib-storage/index/dbox-single/sdbox-storage.c
src/lib-storage/index/imapc/imapc-list.c
src/lib-storage/index/imapc/imapc-mail-fetch.c
src/lib-storage/index/imapc/imapc-mailbox.c
src/lib-storage/index/imapc/imapc-save.c
src/lib-storage/index/imapc/imapc-storage.c
src/lib-storage/index/index-mail-headers.c
src/lib-storage/index/index-mail.c
src/lib-storage/index/index-search.c
src/lib-storage/index/index-status.c
src/lib-storage/index/index-storage.c
src/lib-storage/index/maildir/maildir-filename-flags.c
src/lib-storage/index/maildir/maildir-mail.c
src/lib-storage/index/maildir/maildir-save.c
src/lib-storage/index/maildir/maildir-sync-index.c
src/lib-storage/index/maildir/maildir-uidlist.c
src/lib-storage/index/mbox/mbox-save.c
src/lib-storage/index/mbox/mbox-sync-update.c
src/lib-storage/index/mbox/mbox-sync.c
src/lib-storage/index/pop3c/pop3c-storage.c
src/lib-storage/index/raw/raw-storage.c
src/lib-storage/list/mailbox-list-fs-iter.c
src/lib-storage/list/mailbox-list-index-backend.c
src/lib-storage/list/mailbox-list-index-iter.c
src/lib-storage/list/mailbox-list-index-status.c
src/lib-storage/list/mailbox-list-index-sync.c
src/lib-storage/list/mailbox-list-index.c
src/lib-storage/list/mailbox-list-iter.c
src/lib-storage/list/mailbox-list-maildir-iter.c
src/lib-storage/list/mailbox-list-subscriptions.c
src/lib-storage/mail-storage-service.c
src/lib-storage/mail-storage.c
src/lib-storage/mailbox-attribute.c
src/lib/askpass.c
src/lib/fd-util.c
src/lib/ioloop-poll.c
src/lib/iostream-temp.c
src/lib/net.c
src/plugins/acl/acl-cache.c
src/plugins/acl/acl-mailbox-list.c
src/plugins/acl/acl-mailbox.c
src/plugins/fs-compress/fs-compress.c
src/plugins/fts-lucene/fts-backend-lucene.c
src/plugins/fts-solr/fts-backend-solr.c
src/plugins/lazy-expunge/lazy-expunge-plugin.c
src/plugins/mail-crypt/fs-crypt-common.c
src/plugins/quota/quota-storage.c
src/plugins/replication/replication-plugin.c
src/plugins/virtual/virtual-storage.c
src/plugins/virtual/virtual-sync.c
src/util/rawlog.c

index 9ac4a825751cbda1a6da296d68ec1816cf696281..07713901c457d6ca60faf2281e088862d72e859c 100644 (file)
@@ -210,7 +210,7 @@ void auth_fields_snapshot(struct auth_fields *fields)
                array_append_array(&fields->snapshot_fields, &fields->fields);
        }
        array_foreach_modifiable(&fields->fields, field)
-               field->flags &= ~AUTH_FIELD_FLAG_CHANGED;
+               field->flags &= ENUM_NEGATE(AUTH_FIELD_FLAG_CHANGED);
 }
 
 void auth_fields_rollback(struct auth_fields *fields)
index 3f90cf294b145487ea5baa096f6e0aa7621d0a46..249c68a817096ba8ed53a9a29a6e1631267c0739 100644 (file)
@@ -385,7 +385,7 @@ static const char *cache_decision2str(enum mail_cache_decision_type type)
 {
        const char *str;
 
-       switch (type & ~MAIL_CACHE_DECISION_FORCED) {
+       switch (type & ENUM_NEGATE(MAIL_CACHE_DECISION_FORCED)) {
        case MAIL_CACHE_DECISION_NO:
                str = "no";
                break;
index eb396b9b406a09d291d4c9acea7ed4b2facf8345..8eb5165a872335724d540538de532fff9afc25ff 100644 (file)
@@ -115,7 +115,7 @@ static const char *
 cmd_mailbox_cache_decision_to_str(enum mail_cache_decision_type decision)
 {
        string_t *ret = t_str_new(10);
-       switch((decision & ~MAIL_CACHE_DECISION_FORCED)) {
+       switch((decision & ENUM_NEGATE(MAIL_CACHE_DECISION_FORCED))) {
        case MAIL_CACHE_DECISION_NO:
                str_append(ret, "no");
                break;
index f8ecc6d27a288cfa8391fa5c9fbaf788034ee3c4..60a979cb02fedda20616120b06d65edf2656d6c1 100644 (file)
@@ -75,8 +75,8 @@ static void status_parse_fields(struct status_cmd_context *ctx,
                }
 
                if (ctx->total_sum &&
-                   ((ctx->status_items & ~TOTAL_STATUS_ITEMS) != 0 ||
-                    (ctx->metadata_items & ~TOTAL_METADATA_ITEMS) != 0)) {
+                   ((ctx->status_items & ENUM_NEGATE(TOTAL_STATUS_ITEMS)) != 0 ||
+                    (ctx->metadata_items & ENUM_NEGATE(TOTAL_METADATA_ITEMS)) != 0)) {
                        i_fatal_status(EX_USAGE,
                                "Status field %s can't be used with -t", field);
                }
index 90568341fa27569bbce39e9ebdeb54c39fcd1965..f4ff877651862b0d1df807145ffd3a8df45b7bdd 100644 (file)
@@ -271,8 +271,8 @@ dsync_brain_master_init(struct mail_user *user, struct dsync_ibc *ibc,
        ibc_set.import_commit_msgs_interval = set->import_commit_msgs_interval;
        ibc_set.hashed_headers = set->hashed_headers;
        /* reverse the backup direction for the slave */
-       ibc_set.brain_flags = flags & ~(DSYNC_BRAIN_FLAG_BACKUP_SEND |
-                                       DSYNC_BRAIN_FLAG_BACKUP_RECV);
+       ibc_set.brain_flags = flags & ENUM_NEGATE(DSYNC_BRAIN_FLAG_BACKUP_SEND |
+                                                 DSYNC_BRAIN_FLAG_BACKUP_RECV);
        if ((flags & DSYNC_BRAIN_FLAG_BACKUP_SEND) != 0)
                ibc_set.brain_flags |= DSYNC_BRAIN_FLAG_BACKUP_RECV;
        else if ((flags & DSYNC_BRAIN_FLAG_BACKUP_RECV) != 0)
index e27b325977357cadde71576dc4a5d3b78dd5bb14..d8a18702ad2684e5d39b14b0906c37b2d7b7cb70 100644 (file)
@@ -1277,7 +1277,7 @@ get_cache_fields(struct dsync_ibc_stream *ibc,
                dsync_serializer_encode_add(encoder, "name", field->name);
 
                memset(decision, 0, sizeof(decision));
-               switch (field->decision & ~MAIL_CACHE_DECISION_FORCED) {
+               switch (field->decision & ENUM_NEGATE(MAIL_CACHE_DECISION_FORCED)) {
                case MAIL_CACHE_DECISION_NO:
                        decision[0] = 'n';
                        break;
index fb6b5ec562a4b7d8d3ead7ca61840096229dc543..dd2834ad5e24193e7a43b903a30853ee220c4eab 100644 (file)
@@ -177,9 +177,9 @@ log_add_flag_update(struct dsync_transaction_log_scan *ctx, const void *data,
                                        DSYNC_MAIL_CHANGE_TYPE_FLAG_CHANGE,
                                        &change)) {
                                change->add_flags |= rec->add_flags;
-                               change->remove_flags &= ~rec->add_flags;
+                               change->remove_flags &= ENUM_NEGATE(rec->add_flags);
                                change->remove_flags |= rec->remove_flags;
-                               change->add_flags &= ~rec->remove_flags;
+                               change->add_flags &= ENUM_NEGATE(rec->remove_flags);
                        }
                }
        }
index c7f3daa19aaee8668cc521586dfea2e0411f78b8..e06996083a0b21e0f9931d72fe932fdadd3cb6c8 100644 (file)
@@ -280,7 +280,7 @@ int imap_proxy_parse_line(struct client *client, const char *line)
                        /* used literals with LOGIN command, just ignore. */
                        return 0;
                }
-               imap_client->proxy_sent_state &= ~IMAP_PROXY_SENT_STATE_AUTHENTICATE;
+               imap_client->proxy_sent_state &= ENUM_NEGATE(IMAP_PROXY_SENT_STATE_AUTHENTICATE);
                imap_client->proxy_rcvd_state = IMAP_PROXY_RCVD_STATE_AUTH_CONTINUE;
 
                str = t_str_new(128);
@@ -317,7 +317,7 @@ int imap_proxy_parse_line(struct client *client, const char *line)
                o_stream_nsend(output, str_data(str), str_len(str));
                return 0;
        } else if (str_begins(line, "S ")) {
-               imap_client->proxy_sent_state &= ~IMAP_PROXY_SENT_STATE_STARTTLS;
+               imap_client->proxy_sent_state &= ENUM_NEGATE(IMAP_PROXY_SENT_STATE_STARTTLS);
                imap_client->proxy_rcvd_state = IMAP_PROXY_RCVD_STATE_STARTTLS;
 
                if (!str_begins(line, "S OK ")) {
@@ -342,7 +342,7 @@ int imap_proxy_parse_line(struct client *client, const char *line)
                return 1;
        } else if (str_begins(line, "L OK ")) {
                /* Login successful. Send this line to client. */
-               imap_client->proxy_sent_state &= ~IMAP_PROXY_SENT_STATE_LOGIN;
+               imap_client->proxy_sent_state &= ENUM_NEGATE(IMAP_PROXY_SENT_STATE_LOGIN);
                imap_client->proxy_rcvd_state = IMAP_PROXY_RCVD_STATE_LOGIN;
                str = t_str_new(128);
                client_send_login_reply(imap_client, str, line + 5);
@@ -351,7 +351,7 @@ int imap_proxy_parse_line(struct client *client, const char *line)
                client_proxy_finish_destroy_client(client);
                return 1;
        } else if (str_begins(line, "L ")) {
-               imap_client->proxy_sent_state &= ~IMAP_PROXY_SENT_STATE_LOGIN;
+               imap_client->proxy_sent_state &= ENUM_NEGATE(IMAP_PROXY_SENT_STATE_LOGIN);
                imap_client->proxy_rcvd_state = IMAP_PROXY_RCVD_STATE_LOGIN;
 
                line += 2;
@@ -402,7 +402,7 @@ int imap_proxy_parse_line(struct client *client, const char *line)
                return 0;
        } else if (str_begins(line, "C ")) {
                /* Reply to CAPABILITY command we sent */
-               imap_client->proxy_sent_state &= ~IMAP_PROXY_SENT_STATE_CAPABILITY;
+               imap_client->proxy_sent_state &= ENUM_NEGATE(IMAP_PROXY_SENT_STATE_CAPABILITY);
                imap_client->proxy_rcvd_state = IMAP_PROXY_RCVD_STATE_CAPABILITY;
                if (str_begins(line, "C OK ") &&
                    HAS_NO_BITS(imap_client->proxy_sent_state,
@@ -420,7 +420,7 @@ int imap_proxy_parse_line(struct client *client, const char *line)
                /* Reply to ID command we sent, ignore it unless
                   pipelining is disabled, in which case send
                   either STARTTLS or login */
-               imap_client->proxy_sent_state &= ~IMAP_PROXY_SENT_STATE_ID;
+               imap_client->proxy_sent_state &= ENUM_NEGATE(IMAP_PROXY_SENT_STATE_ID);
                imap_client->proxy_rcvd_state = IMAP_PROXY_RCVD_STATE_ID;
 
                if (client->proxy_nopipelining) {
index c38da081869593aaf8116bbe58306684537a4981..10c4b5dfff27cb99833093ababb4678c69a49c23 100644 (file)
@@ -35,18 +35,18 @@ mailbox_flags2str(struct cmd_list_context *ctx, string_t *str,
 
        if ((flags & MAILBOX_NONEXISTENT) != 0 && !ctx->used_listext) {
                flags |= MAILBOX_NOSELECT;
-               flags &= ~MAILBOX_NONEXISTENT;
+               flags &= ENUM_NEGATE(MAILBOX_NONEXISTENT);
        }
 
        if ((ctx->list_flags & MAILBOX_LIST_ITER_RETURN_CHILDREN) == 0)
-               flags &= ~(MAILBOX_CHILDREN|MAILBOX_NOCHILDREN);
+               flags &= ENUM_NEGATE(MAILBOX_CHILDREN | MAILBOX_NOCHILDREN);
 
        if ((flags & MAILBOX_CHILD_SUBSCRIBED) != 0 &&
            (flags & MAILBOX_SUBSCRIBED) == 0 && !ctx->used_listext) {
                /* LSUB uses \Noselect for this */
                flags |= MAILBOX_NOSELECT;
        } else if ((ctx->list_flags & MAILBOX_LIST_ITER_RETURN_SUBSCRIBED) == 0)
-               flags &= ~MAILBOX_SUBSCRIBED;
+               flags &= ENUM_NEGATE(MAILBOX_SUBSCRIBED);
        imap_mailbox_flags2str(str, flags);
 
        if ((ctx->list_flags & MAILBOX_LIST_ITER_RETURN_SPECIALUSE) != 0 &&
index 9344695a3c4b63ef3b954126ea5b390321cfc486..bb0f9deacd3d01a3509ef504fc9c75139022768c 100644 (file)
@@ -181,7 +181,7 @@ static void imap_search_result_save(struct imap_search_context *ctx)
                imap_append_quoted(str, ctx->cmd->tag);
                str_append_c(str, ']');
                client_send_line(client, str_c(str));
-               ctx->return_options &= ~SEARCH_RETURN_UPDATE;
+               ctx->return_options &= ENUM_NEGATE(SEARCH_RETURN_UPDATE);
                imap_search_context_free(ctx);
                return;
        }
index ecbc83c35ab21353f92dfee2c43864fb91810634..2a6b02d3a7db076f5819f1a4b0ef22968313de82 100644 (file)
@@ -176,7 +176,7 @@ imap_sync_init(struct client *client, struct mailbox *box,
 
        if (client->notify_immediate_expunges) {
                /* NOTIFY enabled without SELECTED-DELAYED */
-               flags &= ~MAILBOX_SYNC_FLAG_NO_EXPUNGES;
+               flags &= ENUM_NEGATE(MAILBOX_SYNC_FLAG_NO_EXPUNGES);
        }
 
        ctx = i_new(struct imap_sync_context, 1);
@@ -678,7 +678,7 @@ static void get_common_sync_flags(struct client *client,
        }
        i_assert(noexpunges_count == 0 || noexpunges_count == count);
        if (fast_count != count)
-               *flags_r &= ~MAILBOX_SYNC_FLAG_FAST;
+               *flags_r &= ENUM_NEGATE(MAILBOX_SYNC_FLAG_FAST);
 
        i_assert((*flags_r & MAILBOX_SYNC_FLAG_FIX_INCONSISTENT) == 0);
 }
index a7f4123daf8d50bd8528e2d09507626b864d0b6a..9f848dd242e4260749c71fce30f13b7adef7cb52 100644 (file)
@@ -96,14 +96,14 @@ cdb_dict_lookup(struct dict *_dict, pool_t pool,
        if ((dict->flag & CDB_WITH_NULL) != 0) {
                ret = cdb_find(&dict->cdb, key, (unsigned)strlen(key)+1);
                if (ret > 0)
-                       dict->flag &= ~CDB_WITHOUT_NULL;
+                       dict->flag &= ENUM_NEGATE(CDB_WITHOUT_NULL);
        }
 
        /* ...or not */
        if (ret == 0 && (dict->flag & CDB_WITHOUT_NULL) != 0) {
                ret = cdb_find(&dict->cdb, key, (unsigned)strlen(key));
                if (ret > 0)
-                       dict->flag &= ~CDB_WITH_NULL;
+                       dict->flag &= ENUM_NEGATE(CDB_WITH_NULL);
        }
 
        if (ret <= 0) {
index 42d2bc68804fe2f6a84244d32c8e5891c241297b..c7ae0476a55955afabeacd97fee2fc65f7b4f28a 100644 (file)
@@ -279,12 +279,12 @@ struct fs_file *fs_file_init_with_event(struct fs *fs, struct event *event,
        T_BEGIN {
                file = fs->v.file_alloc();
                file->fs = fs;
-               file->flags = mode_flags & ~FS_OPEN_MODE_MASK;
+               file->flags = mode_flags & ENUM_NEGATE(FS_OPEN_MODE_MASK);
                file->event = fs_create_event(fs, event);
                event_set_ptr(file->event, FS_EVENT_FIELD_FS, fs);
                event_set_ptr(file->event, FS_EVENT_FIELD_FILE, file);
                fs->v.file_init(file, path, mode_flags & FS_OPEN_MODE_MASK,
-                               mode_flags & ~FS_OPEN_MODE_MASK);
+                               mode_flags & ENUM_NEGATE(FS_OPEN_MODE_MASK));
        } T_END;
 
        fs->files_open_count++;
@@ -335,7 +335,7 @@ void fs_file_set_flags(struct fs_file *file,
                       enum fs_open_flags remove_flags)
 {
        file->flags |= add_flags;
-       file->flags &= ~remove_flags;
+       file->flags &= ENUM_NEGATE(remove_flags);
 
        if (file->parent != NULL)
                fs_file_set_flags(file->parent, add_flags, remove_flags);
index 85009f1479b8237dac32ccd0eee4aa5ba4283d07..5459c3e7943b23bc2753e2f8d9af4593f4bc3848 100644 (file)
@@ -88,7 +88,7 @@ static enum fs_properties fs_metawrap_get_properties(struct fs *_fs)
        if (fs->wrap_metadata) {
                /* we don't have a quick stat() to see the file's size,
                   because of the metadata header */
-               props &= ~FS_PROPERTY_STAT;
+               props &= ENUM_NEGATE(FS_PROPERTY_STAT);
                /* Copying can copy the whole metadata. */
                props |= FS_PROPERTY_COPY_METADATA;
        }
@@ -113,7 +113,7 @@ fs_metawrap_file_init(struct fs_file *_file, const char *path,
        file->open_mode = mode;
 
        /* avoid unnecessarily creating two seekable streams */
-       flags &= ~FS_OPEN_FLAG_SEEKABLE;
+       flags &= ENUM_NEGATE(FS_OPEN_FLAG_SEEKABLE);
 
        file->file.parent = fs_file_init_parent(_file, path, mode | flags);
        if (file->fs->wrap_metadata && mode == FS_OPEN_MODE_READONLY &&
index 6336fc9f8a5a0ca3e8e7c3639615fc1f558cc557..71448a9c2c2c29747c0902ab564cae49ec44c684 100644 (file)
@@ -72,7 +72,7 @@
 
 const char *mail_cache_decision_to_string(enum mail_cache_decision_type dec)
 {
-       switch (dec & ~MAIL_CACHE_DECISION_FORCED) {
+       switch (dec & ENUM_NEGATE(MAIL_CACHE_DECISION_FORCED)) {
        case MAIL_CACHE_DECISION_NO:
                return "no";
        case MAIL_CACHE_DECISION_TEMP:
index e217b2c29073c7b5938072130c28ba19fee6566d..63d0714650c12da06bb9ad73cfb2e95f87d08da1 100644 (file)
@@ -37,7 +37,7 @@ static bool field_has_fixed_size(enum mail_cache_field_type type)
 
 static bool field_decision_is_valid(enum mail_cache_decision_type type)
 {
-       switch (type & ~MAIL_CACHE_DECISION_FORCED) {
+       switch (type & ENUM_NEGATE(MAIL_CACHE_DECISION_FORCED)) {
        case MAIL_CACHE_DECISION_NO:
        case MAIL_CACHE_DECISION_TEMP:
        case MAIL_CACHE_DECISION_YES:
@@ -394,7 +394,7 @@ int mail_cache_header_fields_read(struct mail_cache *cache)
 
                /* ignore any forced-flags in the file */
                enum mail_cache_decision_type file_dec =
-                       decisions[i] & ~MAIL_CACHE_DECISION_FORCED;
+                       decisions[i] & ENUM_NEGATE(MAIL_CACHE_DECISION_FORCED);
 
                if (hash_table_lookup_full(cache->field_name_hash, names,
                                           &orig_key, &orig_value)) {
@@ -405,7 +405,7 @@ int mail_cache_header_fields_read(struct mail_cache *cache)
                        if ((cur_dec & MAIL_CACHE_DECISION_FORCED) != 0) {
                                /* Forced decision. If the decision has
                                   changed, update the fields in the file. */
-                               if ((cur_dec & ~MAIL_CACHE_DECISION_FORCED) != file_dec)
+                               if ((cur_dec & ENUM_NEGATE(MAIL_CACHE_DECISION_FORCED)) != file_dec)
                                        cache->field_header_write_pending = TRUE;
                        } else if (cache->fields[fidx].decision_dirty) {
                                /* Decisions have recently been updated
index bb5a513ebf2ca999cd5a2b64c6c8bb875320b3a8..907310053a0ce26718fbe93f1004802b3aace425 100644 (file)
@@ -69,7 +69,7 @@ mail_cache_purge_field(struct mail_cache_copy_context *ctx,
        }
        *field_seen = ctx->field_seen_value;
 
-       dec = cache_field->decision & ~MAIL_CACHE_DECISION_FORCED;
+       dec = cache_field->decision & ENUM_NEGATE(MAIL_CACHE_DECISION_FORCED);
        if (ctx->new_msg) {
                if (dec == MAIL_CACHE_DECISION_NO)
                        return;
@@ -191,7 +191,7 @@ mail_cache_purge_check_field(struct mail_cache_copy_context *ctx,
        priv->field.decision = dec;
 
        /* drop all fields we don't want */
-       if ((dec & ~MAIL_CACHE_DECISION_FORCED) == MAIL_CACHE_DECISION_NO) {
+       if ((dec & ENUM_NEGATE(MAIL_CACHE_DECISION_FORCED)) == MAIL_CACHE_DECISION_NO) {
                priv->used = FALSE;
                priv->field.last_used = 0;
        }
index 84c0da56000b30d8c60eeb3b327b2f873e4ab766..76e948a327bc88ef3cd861c7a4e3c3641fbe4f2c 100644 (file)
@@ -886,7 +886,7 @@ bool mail_cache_field_want_add(struct mail_cache_transaction_ctx *ctx,
        mail_cache_transaction_refresh_decisions(ctx);
 
        decision = mail_cache_field_get_decision(ctx->view->cache, field_idx);
-       decision &= ~MAIL_CACHE_DECISION_FORCED;
+       decision &= ENUM_NEGATE(MAIL_CACHE_DECISION_FORCED);
        switch (decision) {
        case MAIL_CACHE_DECISION_NO:
                return FALSE;
index 7cbd5e31bca2fb7a0095d3fc497f6035088a3f0a..ba48beaf63e3f9de6f75d261774bb398941ce944 100644 (file)
@@ -227,7 +227,7 @@ static void mail_index_map_clear_recent_flags(struct mail_index_map *map)
 
        for (seq = 1; seq <= map->hdr.messages_count; seq++) {
                rec = MAIL_INDEX_REC_AT_SEQ(map, seq);
-               rec->flags &= ~MAIL_RECENT;
+               rec->flags &= ENUM_NEGATE(MAIL_RECENT);
        }
 }
 
index 39b21c642f9485ea8cf70c7bbfcd4b594d5b5604..b85b8a8f5e5e6d2c0ff961dfc09e66eca3104af8 100644 (file)
@@ -984,7 +984,7 @@ int mail_index_sync_map(struct mail_index_map **_map,
 
        had_dirty = (map->hdr.flags & MAIL_INDEX_HDR_FLAG_HAVE_DIRTY) != 0;
        if (had_dirty)
-               map->hdr.flags &= ~MAIL_INDEX_HDR_FLAG_HAVE_DIRTY;
+               map->hdr.flags &= ENUM_NEGATE(MAIL_INDEX_HDR_FLAG_HAVE_DIRTY);
 
        if (map->hdr_base != map->hdr_copy_buf->data) {
                /* if syncing updates the header, it updates hdr_copy_buf
index f74e11cc4b180f46f8213644e9d4cadd3c4cc761..ae43d2e8578bb918875344e8e5cf726874023b3c 100644 (file)
@@ -376,7 +376,7 @@ mail_index_sync_begin_init(struct mail_index *index,
        if (!locked) {
                /* it looks like we have something to sync. lock the file and
                   check again. */
-               flags &= ~MAIL_INDEX_SYNC_FLAG_REQUIRE_CHANGES;
+               flags &= ENUM_NEGATE(MAIL_INDEX_SYNC_FLAG_REQUIRE_CHANGES);
                return mail_index_sync_begin_init(index, flags, log_file_seq,
                                                  log_file_offset);
        }
@@ -988,7 +988,7 @@ void mail_index_sync_flags_apply(const struct mail_index_sync_rec *sync_rec,
 {
        i_assert(sync_rec->type == MAIL_INDEX_SYNC_TYPE_FLAGS);
 
-       *flags = (*flags & ~sync_rec->remove_flags) | sync_rec->add_flags;
+       *flags = (*flags & ENUM_NEGATE(sync_rec->remove_flags)) | sync_rec->add_flags;
 }
 
 bool mail_index_sync_keywords_apply(const struct mail_index_sync_rec *sync_rec,
index 53cb6add131875db588943cab778b791c585d960..c7bcbd92eed363ad8f607f003db2276ba6846c0d 100644 (file)
@@ -500,10 +500,10 @@ mail_index_insert_flag_update(struct mail_index_transaction *t,
 
                updates[idx].add_flags =
                        (updates[idx].add_flags | u.add_flags) &
-                       ~u.remove_flags;
+                       ENUM_NEGATE(u.remove_flags);
                updates[idx].remove_flags =
                        (updates[idx].remove_flags | u.remove_flags) &
-                       ~u.add_flags;
+                       ENUM_NEGATE(u.add_flags);
                u.uid1 = updates[idx].uid2 + 1;
 
                if (updates[idx].add_flags == 0 &&
@@ -561,7 +561,7 @@ static void mail_index_record_modify_flags(struct mail_index_record *rec,
                rec->flags |= flags;
                break;
        case MODIFY_REMOVE:
-               rec->flags &= ~flags;
+               rec->flags &= ENUM_NEGATE(flags);
                break;
        }
 }
@@ -604,7 +604,7 @@ void mail_index_update_flags_range(struct mail_index_transaction *t,
        switch (modify_type) {
        case MODIFY_REPLACE:
                u.add_flags = flags;
-               u.remove_flags = ~flags & MAIL_INDEX_FLAGS_MASK;
+               u.remove_flags = ENUM_NEGATE(flags) & MAIL_INDEX_FLAGS_MASK;
                break;
        case MODIFY_ADD:
                if (flags == 0)
@@ -1335,7 +1335,7 @@ void mail_index_unset_fscked(struct mail_index_transaction *t)
 
        /* remove fsck'd-flag if it exists. */
        if ((new_hdr.flags & MAIL_INDEX_HDR_FLAG_FSCKD) != 0) {
-               new_hdr.flags &= ~MAIL_INDEX_HDR_FLAG_FSCKD;
+               new_hdr.flags &= ENUM_NEGATE(MAIL_INDEX_HDR_FLAG_FSCKD);
                mail_index_update_header(t,
                        offsetof(struct mail_index_header, flags),
                        &new_hdr.flags, sizeof(new_hdr.flags), FALSE);
index 75ff66453e530164900c2f5852a7dbe82d24815a..dc320c304b14bdb2070e1c24495eea45703e574b 100644 (file)
@@ -122,7 +122,7 @@ tview_apply_flag_updates(struct mail_index_view_transaction *tview,
        trec = PTR_OFFSET(tview->recs, (seq-1) * tview->record_size);
        memcpy(trec, rec, map->hdr.record_size);
        trec->flags |= updates[idx].add_flags;
-       trec->flags &= ~updates[idx].remove_flags;
+       trec->flags &= ENUM_NEGATE(updates[idx].remove_flags);
        return trec;
 }
 
index f355eefc812500549fef4c984c3050f6e3bf82b8..1aa52fac7668e8b0c510e3fe40ec3353819882b8 100644 (file)
@@ -358,7 +358,7 @@ static int view_sync_apply_lost_changes(struct mail_index_view_sync_ctx *ctx,
                i_zero(&flag_update);
                flag_update.uid1 = flag_update.uid2 = new_rec->uid;
                flag_update.add_flags = new_rec->flags;
-               flag_update.remove_flags = ~new_rec->flags & 0xff;
+               flag_update.remove_flags = ENUM_NEGATE(new_rec->flags) & 0xff;
                if (mail_index_sync_record(&ctx->sync_map_ctx, &thdr,
                                           &flag_update) < 0)
                        return -1;
index 34f55faf8345c1cea222bdef3143c9effed5cc57..df07b4464202f0b7b806fc2f5255c1a9461dfa95 100644 (file)
@@ -48,7 +48,7 @@ mail_transaction_log_mark_corrupted(struct mail_transaction_log_file *file)
                        file->filepath, "fcntl(F_GETFL)");
                return;
        }
-       if (fcntl(file->fd, F_SETFL, flags & ~O_APPEND) < 0) {
+       if (fcntl(file->fd, F_SETFL, flags & ENUM_NEGATE(O_APPEND)) < 0) {
                mail_index_file_set_syscall_error(file->log->index,
                        file->filepath, "fcntl(F_SETFL)");
                return;
index a51c62dc4f25d1d5ffd5b86009661e73f0647f2e..1b0fb68feff5b9f3ecbe13d41176d76b213cba1d 100644 (file)
@@ -582,7 +582,7 @@ log_view_is_record_valid(struct mail_transaction_log_file *file,
                                "expunge record missing protection mask");
                        return FALSE;
                }
-               rec_type &= ~MAIL_TRANSACTION_EXPUNGE_PROT;
+               rec_type &= ENUM_NEGATE(MAIL_TRANSACTION_EXPUNGE_PROT);
        }
        if ((hdr->type & MAIL_TRANSACTION_EXPUNGE_GUID) != 0) {
                if (rec_type != (MAIL_TRANSACTION_EXPUNGE_GUID |
@@ -591,7 +591,7 @@ log_view_is_record_valid(struct mail_transaction_log_file *file,
                                "expunge guid record missing protection mask");
                        return FALSE;
                }
-               rec_type &= ~MAIL_TRANSACTION_EXPUNGE_PROT;
+               rec_type &= ENUM_NEGATE(MAIL_TRANSACTION_EXPUNGE_PROT);
        }
 
        if (rec_size == 0) {
@@ -841,7 +841,7 @@ int mail_transaction_log_view_next(struct mail_transaction_log_view *view,
            (MAIL_TRANSACTION_EXPUNGE | MAIL_TRANSACTION_EXPUNGE_PROT) ||
            (hdr->type & MAIL_TRANSACTION_TYPE_MASK) ==
            (MAIL_TRANSACTION_EXPUNGE_GUID | MAIL_TRANSACTION_EXPUNGE_PROT))
-               view->tmp_hdr.type = hdr->type & ~MAIL_TRANSACTION_EXPUNGE_PROT;
+               view->tmp_hdr.type = hdr->type & ENUM_NEGATE(MAIL_TRANSACTION_EXPUNGE_PROT);
        else
                view->tmp_hdr.type = hdr->type;
 
index ba99d48d40179acafa513868dcc8553aee610f1b..525754b8a8c58e86516ada87e5f2c4fd04f23cde 100644 (file)
@@ -715,7 +715,7 @@ static void test_mail_cache_purge_field_changes_int(enum test_drop drop)
        for (i = 0; i < N_ELEMENTS(cache_fields); i++) {
                const char *value = t_strdup_printf("%s-value",
                                                    cache_fields[i].name);
-               if ((cache_fields[i].decision & ~MAIL_CACHE_DECISION_FORCED) !=
+               if ((cache_fields[i].decision & ENUM_NEGATE(MAIL_CACHE_DECISION_FORCED)) !=
                    MAIL_CACHE_DECISION_NO) {
                        mail_cache_add(cache_trans, 1, cache_fields[i].idx,
                                       value, strlen(value));
index 65c71e7dd985c0a78e9a043199560516c1cfc0f3..d7d80aee26bec4f477c6337af77cfa723b97fbb1 100644 (file)
@@ -358,7 +358,7 @@ static void test_mail_index_flag_update_random(void)
                case 1:
                        modify_type = MODIFY_REMOVE;
                        for (seq = seq1; seq <= seq2; seq++)
-                               flags[seq] &= ~change;
+                               flags[seq] &= ENUM_NEGATE(change);
                        break;
                case 2:
                        modify_type = MODIFY_REPLACE;
index e8c4f91eb799963ac103aed65240f91dca038156..3e346fd44ce13b4003dfbbff9d3c1e445d72620a 100644 (file)
@@ -79,7 +79,7 @@ void message_decoder_set_return_binary(struct message_decoder_context *ctx,
        if (set)
                ctx->flags |= MESSAGE_DECODER_FLAG_RETURN_BINARY;
        else
-               ctx->flags &= ~MESSAGE_DECODER_FLAG_RETURN_BINARY;
+               ctx->flags &= ENUM_NEGATE(MESSAGE_DECODER_FLAG_RETURN_BINARY);
        message_decode_body_init_charset(ctx, ctx->prev_part);
 }
 
index 8baf622e59a7596a482020743611a6d9f4eda7d6..6ab4c3266f6271b5c066ba7b7c7818e088ab9840 100644 (file)
@@ -597,7 +597,7 @@ static int parse_next_header(struct message_parser_ctx *ctx,
                        parse_next_body_multipart_init(ctx);
                        ctx->multipart = TRUE;
                } else {
-                       part->flags &= ~MESSAGE_PART_FLAG_MULTIPART;
+                       part->flags &= ENUM_NEGATE(MESSAGE_PART_FLAG_MULTIPART);
                }
        }
 
@@ -706,7 +706,7 @@ static int parse_next_header(struct message_parser_ctx *ctx,
                   !parse_too_many_nested_mime_parts(ctx)) {
                ctx->parse_next_block = parse_next_body_message_rfc822_init;
        } else {
-               part->flags &= ~MESSAGE_PART_FLAG_MESSAGE_RFC822;
+               part->flags &= ENUM_NEGATE(MESSAGE_PART_FLAG_MESSAGE_RFC822);
                if (ctx->boundaries != NULL)
                        ctx->parse_next_block = parse_next_body_to_boundary;
                else
index c5a18814878a36ff836b4860a9584efbf70b0bcc..7d30d5bc0935ec7f6903a7bc61a2a216e2f85f7c 100644 (file)
@@ -196,7 +196,7 @@ void smtp_server_connection_set_ssl_streams(struct smtp_server_connection *conn,
                                            struct ostream *output)
 {
        conn->ssl_secured = TRUE;
-       conn->set.capabilities &= ~SMTP_CAPABILITY_STARTTLS;
+       conn->set.capabilities &= ENUM_NEGATE(SMTP_CAPABILITY_STARTTLS);
 
        smtp_server_connection_set_streams(conn, input, output);
 }
@@ -410,7 +410,7 @@ int smtp_server_connection_ssl_init(struct smtp_server_connection *conn)
        }
 
        conn->ssl_secured = TRUE;
-       conn->set.capabilities &= ~SMTP_CAPABILITY_STARTTLS;
+       conn->set.capabilities &= ENUM_NEGATE(SMTP_CAPABILITY_STARTTLS);
 
        if (conn->ssl_start)
                smtp_server_connection_ready(conn);
@@ -981,7 +981,7 @@ smtp_server_connection_create(
 
        conn->ssl_start = ssl_start;
        if (ssl_start)
-               conn->set.capabilities &= ~SMTP_CAPABILITY_STARTTLS;
+               conn->set.capabilities &= ENUM_NEGATE(SMTP_CAPABILITY_STARTTLS);
 
        /* Halt input until started */
        smtp_server_connection_halt(conn);
@@ -1221,7 +1221,7 @@ void smtp_server_connection_login(struct smtp_server_connection *conn,
        i_assert(conn->username == NULL);
        i_assert(conn->helo_domain == NULL);
 
-       conn->set.capabilities &= ~SMTP_CAPABILITY_STARTTLS;
+       conn->set.capabilities &= ENUM_NEGATE(SMTP_CAPABILITY_STARTTLS);
        conn->username = i_strdup(username);
        if (helo != NULL && *helo != '\0') {
                conn->helo_domain = i_strdup(helo);
index fe9b05956e1307017853ec807f053f3a71790828..36478aa2e255128e2dc2cbaa06b18f86ed8e5931 100644 (file)
@@ -619,7 +619,7 @@ ssl_iostream_context_init_common(struct ssl_iostream_context *ctx,
                                 const char **error_r)
 {
        unsigned long ssl_ops = SSL_OP_NO_SSLv2 |
-               (SSL_OP_ALL & ~SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS);
+               (SSL_OP_ALL & ENUM_NEGATE(SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS));
 
        ctx->pool = pool_alloconly_create("ssl iostream context", 4096);
 
index 9252704c64fe7ead5f96a3af42e22dd9304101be..ecf4dec76434e8db329c7382ed6a6e8a611c0925 100644 (file)
@@ -104,7 +104,7 @@ int cydir_save_begin(struct mail_save_context *_ctx, struct istream *input)
                return -1;
 
        /* add to index */
-       save_flags = _ctx->data.flags & ~MAIL_RECENT;
+       save_flags = _ctx->data.flags & ENUM_NEGATE(MAIL_RECENT);
        mail_index_append(ctx->trans, 0, &ctx->seq);
        mail_index_update_flags(ctx->trans, ctx->seq, MODIFY_REPLACE,
                                save_flags);
index 9a2d2e59307cc2aa8fe5fd895d4bedad23d0eb53..363461d8c361cada301cb1d1d971c2f32a7620db 100644 (file)
@@ -47,7 +47,7 @@ cydir_mailbox_alloc(struct mail_storage *storage, struct mailbox_list *list,
        pool_t pool;
 
        /* cydir can't work without index files */
-       flags &= ~MAILBOX_FLAG_NO_INDEX_FILES;
+       flags &= ENUM_NEGATE(MAILBOX_FLAG_NO_INDEX_FILES);
 
        pool = pool_alloconly_create("cydir mailbox", 1024*3);
        mbox = p_new(pool, struct cydir_mailbox, 1);
index 06d6effb5fa6f55a671eb973a6fc4a349b8b94ca..c5af8cc66de924323028e143b28f6258da03b41f 100644 (file)
@@ -17,7 +17,7 @@ void dbox_save_add_to_index(struct dbox_save_context *ctx)
        struct mail_save_data *mdata = &ctx->ctx.data;
        enum mail_flags save_flags;
 
-       save_flags = mdata->flags & ~MAIL_RECENT;
+       save_flags = mdata->flags & ENUM_NEGATE(MAIL_RECENT);
        mail_index_append(ctx->trans, mdata->uid, &ctx->seq);
        mail_index_update_flags(ctx->trans, ctx->seq, MODIFY_REPLACE,
                                save_flags);
index 071a30804b81500f411d04a8c472068557990ecb..001af75dcc616d93a3041f879a7c27dea501e254 100644 (file)
@@ -221,7 +221,7 @@ mdbox_mail_update_flags(struct mail *mail, enum modify_type modify_type,
 {
        if ((flags & DBOX_INDEX_FLAG_ALT) != 0) {
                mdbox_purge_alt_flag_change(mail, modify_type != MODIFY_REMOVE);
-               flags &= ~DBOX_INDEX_FLAG_ALT;
+               flags &= ENUM_NEGATE(DBOX_INDEX_FLAG_ALT);
                if (flags == 0 && modify_type != MODIFY_REPLACE)
                        return;
        }
index fbd4604449ae10826d6a18b44602185ecb6eeac7..df2bce551d933405d1c6771156e5f193c31570ea 100644 (file)
@@ -151,7 +151,7 @@ mdbox_mailbox_alloc(struct mail_storage *storage, struct mailbox_list *list,
        pool_t pool;
 
        /* dbox can't work without index files */
-       flags &= ~MAILBOX_FLAG_NO_INDEX_FILES;
+       flags &= ENUM_NEGATE(MAILBOX_FLAG_NO_INDEX_FILES);
 
        pool = pool_alloconly_create("mdbox mailbox", 1024*3);
        mbox = p_new(pool, struct mdbox_mailbox, 1);
index 9bf7aa41cb3b49d43ce06b05805fdbf1bfac6072..48a3f59afb00eaaea4c1f65af3111dc3a7b8864e 100644 (file)
@@ -109,7 +109,7 @@ sdbox_copy_hardlink(struct mail_save_context *_ctx, struct mail *mail)
        src_file = sdbox_file_init(src_mbox, mail->uid);
        dest_file = sdbox_file_init(dest_mbox, 0);
 
-       ctx->ctx.data.flags &= ~DBOX_INDEX_FLAG_ALT;
+       ctx->ctx.data.flags &= ENUM_NEGATE(DBOX_INDEX_FLAG_ALT);
 
        src_path = src_file->primary_path;
        dest_path = dest_file->primary_path;
index 01f28c681b2e832278d8951de61c099a4e4ad83b..4d3fb4a0d9aed909e9a98a22ae33d18d193d55d5 100644 (file)
@@ -123,7 +123,7 @@ sdbox_mailbox_alloc(struct mail_storage *storage, struct mailbox_list *list,
        pool_t pool;
 
        /* dbox can't work without index files */
-       flags &= ~MAILBOX_FLAG_NO_INDEX_FILES;
+       flags &= ENUM_NEGATE(MAILBOX_FLAG_NO_INDEX_FILES);
 
        pool = pool_alloconly_create("sdbox mailbox", 1024*3);
        mbox = p_new(pool, struct sdbox_mailbox, 1);
index 47c3355395ca4e435c35a81ac949ec7551bcc7e6..3d0291ef8a454ae1ade03220ab2d55470c34d0a5 100644 (file)
@@ -255,7 +255,7 @@ static void imapc_untagged_lsub(const struct imapc_untagged_reply *reply,
                else {
                        /* LSUB \Noselect means that the mailbox isn't
                           subscribed, but it has children that are */
-                       node->flags &= ~MAILBOX_NOSELECT;
+                       node->flags &= ENUM_NEGATE(MAILBOX_NOSELECT);
                }
        }
 }
index 133b8ff9670e6481eb4ff3ced2dc24cbfb7e5ecf..663748bde7be589365e4e28eaec13776caa89a23 100644 (file)
@@ -221,7 +221,7 @@ imapc_mail_send_fetch(struct mail *_mail, enum mail_fetch_field fields,
        _mail->mail_stream_opened = TRUE;
 
        /* drop any fields that we may already be fetching currently */
-       fields &= ~mail->fetching_fields;
+       fields &= ENUM_NEGATE(mail->fetching_fields);
        if (headers_have_subset(mail->fetching_headers, headers))
                headers = NULL;
        if (fields == 0 && headers == NULL)
@@ -424,40 +424,40 @@ imapc_mail_have_fields(struct imapc_mail *imail, enum mail_fetch_field fields)
        if ((fields & MAIL_FETCH_RECEIVED_DATE) != 0) {
                if (imail->imail.data.received_date == (time_t)-1)
                        return FALSE;
-               fields &= ~MAIL_FETCH_RECEIVED_DATE;
+               fields &= ENUM_NEGATE(MAIL_FETCH_RECEIVED_DATE);
        }
        if ((fields & MAIL_FETCH_SAVE_DATE) != 0) {
                i_assert(HAS_ALL_BITS(mbox->capabilities,
                                      IMAPC_CAPABILITY_SAVEDATE));
                if (imail->imail.data.save_date == (time_t)-1)
                        return FALSE;
-               fields &= ~MAIL_FETCH_SAVE_DATE;
+               fields &= ENUM_NEGATE(MAIL_FETCH_SAVE_DATE);
        }
        if ((fields & (MAIL_FETCH_PHYSICAL_SIZE | MAIL_FETCH_VIRTUAL_SIZE)) != 0) {
                if (imail->imail.data.physical_size == UOFF_T_MAX)
                        return FALSE;
-               fields &= ~(MAIL_FETCH_PHYSICAL_SIZE | MAIL_FETCH_VIRTUAL_SIZE);
+               fields &= ENUM_NEGATE(MAIL_FETCH_PHYSICAL_SIZE | MAIL_FETCH_VIRTUAL_SIZE);
        }
        if ((fields & MAIL_FETCH_GUID) != 0) {
                if (imail->imail.data.guid == NULL)
                        return FALSE;
-               fields &= ~MAIL_FETCH_GUID;
+               fields &= ENUM_NEGATE(MAIL_FETCH_GUID);
        }
        if ((fields & MAIL_FETCH_IMAP_BODY) != 0) {
                if (imail->imail.data.body == NULL)
                        return FALSE;
-               fields &= ~MAIL_FETCH_IMAP_BODY;
+               fields &= ENUM_NEGATE(MAIL_FETCH_IMAP_BODY);
        }
        if ((fields & MAIL_FETCH_IMAP_BODYSTRUCTURE) != 0) {
                if (imail->imail.data.bodystructure == NULL)
                        return FALSE;
-               fields &= ~MAIL_FETCH_IMAP_BODYSTRUCTURE;
+               fields &= ENUM_NEGATE(MAIL_FETCH_IMAP_BODYSTRUCTURE);
        }
        if ((fields & (MAIL_FETCH_STREAM_HEADER |
                       MAIL_FETCH_STREAM_BODY)) != 0) {
                if (imail->imail.data.stream == NULL)
                        return FALSE;
-               fields &= ~(MAIL_FETCH_STREAM_HEADER | MAIL_FETCH_STREAM_BODY);
+               fields &= ENUM_NEGATE(MAIL_FETCH_STREAM_HEADER | MAIL_FETCH_STREAM_BODY);
        }
        i_assert(fields == 0);
        return TRUE;
index fc9b522644eccbf2d74c1a62af46351552dc0f51..ce517693fa309740f4b159791857e1b8bee354d3 100644 (file)
@@ -544,7 +544,7 @@ static void imapc_untagged_fetch(const struct imapc_untagged_reply *reply,
        }
        /* FIXME: we should ideally also pass these through so they show up
           to clients. */
-       flags &= ~MAIL_RECENT;
+       flags &= ENUM_NEGATE(MAIL_RECENT);
 
        /* if this is a reply to some FETCH request, update the mail's fields */
        array_foreach(&mbox->fetch_requests, fetch_requestp) {
index 9fff77736c69165d50f97faea4e238f72b5035a1..fd1efbe373d226cfe4e8fd24c6e46e684897dbe8 100644 (file)
@@ -223,7 +223,8 @@ static int imapc_save_append(struct imapc_save_context *ctx)
                string_t *str = t_str_new(64);
 
                str_append(str, " (");
-               imap_write_flags(str, mdata->flags & ~MAIL_RECENT, NULL);
+               imap_write_flags(str, mdata->flags & ENUM_NEGATE(MAIL_RECENT),
+                                NULL);
                if (mdata->keywords != NULL)
                        imapc_append_keywords(str, mdata->keywords);
                str_append_c(str, ')');
index 2e758b129e5f19af097e400d6cfccf2e45a3b139..2746fdd3a3647095f9d938842f00ba1146d9f011 100644 (file)
@@ -1110,7 +1110,7 @@ static int imapc_mailbox_get_metadata(struct mailbox *box,
                /* a bit ugly way to do this, but better than nothing for now.
                   FIXME: if indexes are enabled, keep this there. */
                mail_generate_guid_128_hash(box->name, metadata_r->guid);
-               items &= ~MAILBOX_METADATA_GUID;
+               items &= ENUM_NEGATE(MAILBOX_METADATA_GUID);
        }
        if ((items & MAILBOX_METADATA_BACKEND_NAMESPACE) != 0) {
                if (imapc_mailbox_get_namespaces(mbox) < 0)
@@ -1121,7 +1121,7 @@ static int imapc_mailbox_get_metadata(struct mailbox *box,
                        metadata_r->backend_ns_prefix = ns->prefix;
                        metadata_r->backend_ns_type = ns->type;
                }
-               items &= ~MAILBOX_METADATA_BACKEND_NAMESPACE;
+               items &= ENUM_NEGATE(MAILBOX_METADATA_BACKEND_NAMESPACE);
        }
        if (items != 0) {
                if (index_mailbox_get_metadata(box, items, metadata_r) < 0)
index eb9695f53b6f5a27d3fa4db5219bad69de4e1236..d67b96e8318c4b304493b7ee52f89066c1c4389d 100644 (file)
@@ -466,7 +466,7 @@ int index_mail_parse_headers_internal(struct index_mail *mail,
        if (index_mail_stream_check_failure(mail) < 0)
                return -1;
        data->hdr_size_set = TRUE;
-       data->access_part &= ~PARSE_HDR;
+       data->access_part &= ENUM_NEGATE(PARSE_HDR);
        return 0;
 }
 
index 706b7eeb31e2f9e00e3c9eabaaf7db5553634909..bc5c89bd81491286b122fdf12787975d51aa0b1a 100644 (file)
@@ -264,7 +264,7 @@ enum mail_flags index_mail_get_flags(struct mail *_mail)
        if (index_mail_get_pvt(_mail)) {
                /* mailbox has private flags */
                pvt_flags_mask = mailbox_get_private_flags_mask(_mail->box);
-               flags &= ~pvt_flags_mask;
+               flags &= ENUM_NEGATE(pvt_flags_mask);
                rec = mail_index_lookup(_mail->transaction->view_pvt,
                                        mail->seq_pvt);
                flags |= rec->flags & pvt_flags_mask;
@@ -728,10 +728,10 @@ static void index_mail_body_parsed_cache_flags(struct index_mail *mail)
 
        /* cache flags should never get unset as long as the message doesn't
           change, but try to handle it anyway */
-       cache_flags &= ~(MAIL_CACHE_FLAG_BINARY_HEADER |
-                        MAIL_CACHE_FLAG_BINARY_BODY |
-                        MAIL_CACHE_FLAG_HAS_NULS |
-                        MAIL_CACHE_FLAG_HAS_NO_NULS);
+       cache_flags &= ENUM_NEGATE(MAIL_CACHE_FLAG_BINARY_HEADER |
+                                  MAIL_CACHE_FLAG_BINARY_BODY |
+                                  MAIL_CACHE_FLAG_HAS_NULS |
+                                  MAIL_CACHE_FLAG_HAS_NO_NULS);
        if (message_parts_have_nuls(data->parts)) {
                _mail->has_nuls = TRUE;
                _mail->has_no_nuls = FALSE;
@@ -2270,7 +2270,7 @@ void index_mail_update_flags(struct mail *_mail, enum modify_type modify_type,
                /* mailbox has private flags */
                pvt_flags_mask = mailbox_get_private_flags_mask(_mail->box);
                pvt_flags = flags & pvt_flags_mask;
-               flags &= ~pvt_flags_mask;
+               flags &= ENUM_NEGATE(pvt_flags_mask);
                if (index_mail_update_pvt_flags(_mail, modify_type, pvt_flags)) {
                        mail_index_update_flags(_mail->transaction->itrans_pvt,
                                                mail->seq_pvt,
index 2ddfa0e1324bd31b29227255ca1b07ece055e3eb..12c536b327111d4adbc1ad84a09e7eddf983c80a 100644 (file)
@@ -209,7 +209,7 @@ static int search_arg_match_index(struct index_search_context *ctx,
        case SEARCH_FLAGS:
                /* recent flag shouldn't be set, but indexes from v1.0.x
                   may contain it. */
-               flags = rec->flags & ~MAIL_RECENT;
+               flags = rec->flags & ENUM_NEGATE(MAIL_RECENT);
                if ((arg->value.flags & MAIL_RECENT) != 0 &&
                    mailbox_recent_flags_have_uid(ctx->box, rec->uid))
                        flags |= MAIL_RECENT;
@@ -218,7 +218,7 @@ static int search_arg_match_index(struct index_search_context *ctx,
                           no private flags */
                } else {
                        pvt_flags_mask = mailbox_get_private_flags_mask(ctx->box);
-                       flags &= ~pvt_flags_mask;
+                       flags &= ENUM_NEGATE(pvt_flags_mask);
                        if (index_search_get_pvt(ctx, rec->uid)) {
                                rec = mail_index_lookup(ctx->mail_ctx.transaction->view_pvt,
                                                        ctx->pvt_seq);
index 41887945891cbb2cf2385ea90416e58134449bf3..9d751b9c019f162dfc23cd5eedbdd714eca3dd64 100644 (file)
@@ -205,7 +205,7 @@ get_metadata_cache_fields(struct mailbox *box,
        cache_fields = t_new(ARRAY_TYPE(mailbox_cache_field), 1);
        t_array_init(cache_fields, count);
        for (i = 0; i < count; i++) {
-               dec = fields[i].decision & ~MAIL_CACHE_DECISION_FORCED;
+               dec = fields[i].decision & ENUM_NEGATE(MAIL_CACHE_DECISION_FORCED);
                if (dec != MAIL_CACHE_DECISION_NO) {
                        cf = array_append_space(cache_fields);
                        cf->name = fields[i].name;
@@ -309,7 +309,7 @@ int index_mailbox_get_metadata(struct mailbox *box,
                metadata_r->backend_ns_prefix = "";
                metadata_r->backend_ns_type =
                        mailbox_list_get_namespace(box->list)->type;
-               items &= ~MAILBOX_METADATA_BACKEND_NAMESPACE;
+               items &= ENUM_NEGATE(MAILBOX_METADATA_BACKEND_NAMESPACE);
        }
        if (items == 0)
                return 0;
index f8237c8f1ae427289858279e98ce6630c04f9529..f5b2b99a19d831832cea2bf47b7ed7e200ef7418 100644 (file)
@@ -295,7 +295,7 @@ int index_storage_mailbox_open(struct mailbox *box, bool move_to_memory)
 
        index_flags = ibox->index_flags;
        if (move_to_memory)
-               index_flags &= ~MAIL_INDEX_OPEN_FLAG_CREATE;
+               index_flags &= ENUM_NEGATE(MAIL_INDEX_OPEN_FLAG_CREATE);
 
        if (index_storage_mailbox_alloc_index(box) < 0)
                return -1;
@@ -972,7 +972,7 @@ mail_copy_cache_field(struct mail_save_context *ctx, struct mail *src_mail,
        dest_field = mail_cache_register_get_field(dest_trans->box->cache,
                                                   dest_field_idx);
        if ((dest_field->decision &
-            ~MAIL_CACHE_DECISION_FORCED) == MAIL_CACHE_DECISION_NO) {
+            ENUM_NEGATE(MAIL_CACHE_DECISION_FORCED)) == MAIL_CACHE_DECISION_NO) {
                /* field not wanted in destination mailbox */
                return;
        }
index c35f70794da352f9251bbdd8c2df235fe878d037..ac689086bb06a04da6b621646e5f2f3a7bff640a 100644 (file)
@@ -130,23 +130,23 @@ maildir_filename_flags_full_set(struct maildir_keywords_sync_ctx *ctx,
 
                if ((flags_left & MAIL_DRAFT) != 0 && nextflag > 'D') {
                        str_append_c(flags_str, 'D');
-                       flags_left &= ~MAIL_DRAFT;
+                       flags_left &= ENUM_NEGATE(MAIL_DRAFT);
                }
                if ((flags_left & MAIL_FLAGGED) != 0 && nextflag > 'F') {
                        str_append_c(flags_str, 'F');
-                       flags_left &= ~MAIL_FLAGGED;
+                       flags_left &= ENUM_NEGATE(MAIL_FLAGGED);
                }
                if ((flags_left & MAIL_ANSWERED) != 0 && nextflag > 'R') {
                        str_append_c(flags_str, 'R');
-                       flags_left &= ~MAIL_ANSWERED;
+                       flags_left &= ENUM_NEGATE(MAIL_ANSWERED);
                }
                if ((flags_left & MAIL_SEEN) != 0 && nextflag > 'S') {
                        str_append_c(flags_str, 'S');
-                       flags_left &= ~MAIL_SEEN;
+                       flags_left &= ENUM_NEGATE(MAIL_SEEN);
                }
                if ((flags_left & MAIL_DELETED) != 0 && nextflag > 'T') {
                        str_append_c(flags_str, 'T');
-                       flags_left &= ~MAIL_DELETED;
+                       flags_left &= ENUM_NEGATE(MAIL_DELETED);
                }
 
                if (keywords != NULL && array_is_created(keywords) &&
index 7f4e55cd423ae03bf84b204e603224f66722a3ec..f9c1a96626c8d0d82fbcc018f8921864c0051117 100644 (file)
@@ -234,7 +234,7 @@ static int maildir_get_pop3_state(struct index_mail *mail)
                MAIL_FETCH_VIRTUAL_SIZE;
 
        if (mail->data.wanted_headers != NULL ||
-           (mail->data.wanted_fields & ~allowed_pop3_fields) != 0)
+           (mail->data.wanted_fields & ENUM_NEGATE(allowed_pop3_fields)) != 0)
                not_pop3_only = TRUE;
 
        /* get vsize decisions */
@@ -243,7 +243,7 @@ static int maildir_get_pop3_state(struct index_mail *mail)
        if (not_pop3_only) {
                vsize_dec = mail_cache_field_get_decision(box->cache,
                                                          vsize_idx);
-               vsize_dec &= ~MAIL_CACHE_DECISION_FORCED;
+               vsize_dec &= ENUM_NEGATE(MAIL_CACHE_DECISION_FORCED);
        } else {
                /* also check if there are any non-[pv]size cached fields */
                vsize_dec = MAIL_CACHE_DECISION_NO;
@@ -251,7 +251,7 @@ static int maildir_get_pop3_state(struct index_mail *mail)
                                                      pool_datastack_create(),
                                                      &count);
                for (i = 0; i < count; i++) {
-                       dec = fields[i].decision & ~MAIL_CACHE_DECISION_FORCED;
+                       dec = fields[i].decision & ENUM_NEGATE(MAIL_CACHE_DECISION_FORCED);
                        if (fields[i].idx == vsize_idx)
                                vsize_dec = dec;
                        else if (dec != MAIL_CACHE_DECISION_NO &&
index b8dbe569af941ca18863f8d4a8ff3b575dcb792b..6a79532692b50049e9f472437d2c0d4160b71d3b 100644 (file)
@@ -179,7 +179,8 @@ maildir_save_add(struct mail_save_context *_ctx, const char *tmp_fname,
        /* insert into index */
        mail_index_append(ctx->trans, mdata->uid, &ctx->seq);
        mail_index_update_flags(ctx->trans, ctx->seq,
-                               MODIFY_REPLACE, mdata->flags & ~MAIL_RECENT);
+                               MODIFY_REPLACE,
+                               mdata->flags & ENUM_NEGATE(MAIL_RECENT));
        if (mdata->keywords != NULL) {
                mail_index_update_keywords(ctx->trans, ctx->seq,
                                           MODIFY_REPLACE, mdata->keywords);
index 928d6b1044d818c2434142b24118da1a5a4014b9..d632fb5aa0ff6b29750ed126063b9d7dd0f00416 100644 (file)
@@ -223,7 +223,7 @@ int maildir_sync_index_begin(struct maildir_mailbox *mbox,
        sync_flags = index_storage_get_sync_flags(&mbox->box);
        /* don't drop recent messages if we're saving messages */
        if (maildir_sync_ctx == NULL)
-               sync_flags &= ~MAIL_INDEX_SYNC_FLAG_DROP_RECENT;
+               sync_flags &= ENUM_NEGATE(MAIL_INDEX_SYNC_FLAG_DROP_RECENT);
 
        if (index_storage_expunged_sync_begin(_box, &sync_ctx, &view,
                                              &trans, sync_flags) < 0)
@@ -506,7 +506,7 @@ int maildir_sync_index(struct maildir_index_sync_context *ctx,
 
                /* the private flags are kept only in indexes. don't use them
                   at all even for newly seen mails */
-               ctx->flags &= ~private_flags_mask;
+               ctx->flags &= ENUM_NEGATE(private_flags_mask);
 
        again:
                seq++;
index 5562fd9dbeee612a4dd6ff77ae8378991827d221..bb17b9c59c94e60088e899374d7d37df33b78b2e 100644 (file)
@@ -1578,7 +1578,7 @@ static void maildir_uidlist_mark_all(struct maildir_uidlist *uidlist,
                        recs[i]->flags |= MAILDIR_UIDLIST_REC_FLAG_NONSYNCED;
        } else {
                for (i = 0; i < count; i++)
-                       recs[i]->flags &= ~MAILDIR_UIDLIST_REC_FLAG_NONSYNCED;
+                       recs[i]->flags &= ENUM_NEGATE(MAILDIR_UIDLIST_REC_FLAG_NONSYNCED);
        }
 }
 
@@ -1720,9 +1720,9 @@ maildir_uidlist_sync_next_partial(struct maildir_uidlist_sync_ctx *ctx,
                }
        }
 
-       rec->flags &= ~MAILDIR_UIDLIST_REC_FLAG_NEW_DIR;
+       rec->flags &= ENUM_NEGATE(MAILDIR_UIDLIST_REC_FLAG_NEW_DIR);
        rec->flags = (rec->flags | flags) &
-               ~MAILDIR_UIDLIST_REC_FLAG_NONSYNCED;
+               ENUM_NEGATE(MAILDIR_UIDLIST_REC_FLAG_NONSYNCED);
 
        ctx->finished = FALSE;
        *rec_r = rec;
@@ -1794,8 +1794,8 @@ int maildir_uidlist_sync_next_uid(struct maildir_uidlist_sync_ctx *ctx,
                /* probably was in new/ and now we're seeing it in cur/.
                   remove new/moved flags so if this happens again we'll know
                   to check for duplicates. */
-               rec->flags &= ~(MAILDIR_UIDLIST_REC_FLAG_NEW_DIR |
-                               MAILDIR_UIDLIST_REC_FLAG_MOVED);
+               rec->flags &= ENUM_NEGATE(MAILDIR_UIDLIST_REC_FLAG_NEW_DIR |
+                                         MAILDIR_UIDLIST_REC_FLAG_MOVED);
                if (strcmp(rec->filename, filename) != 0)
                        rec->filename = p_strdup(ctx->record_pool, filename);
        } else {
@@ -1826,7 +1826,7 @@ int maildir_uidlist_sync_next_uid(struct maildir_uidlist_sync_ctx *ctx,
                        uidlist->next_uid = uid + 1;
        }
 
-       rec->flags = (rec->flags | flags) & ~MAILDIR_UIDLIST_REC_FLAG_NONSYNCED;
+       rec->flags = (rec->flags | flags) & ENUM_NEGATE(MAILDIR_UIDLIST_REC_FLAG_NONSYNCED);
        *rec_r = rec;
        return 1;
 }
@@ -1905,7 +1905,7 @@ void maildir_uidlist_update_fname(struct maildir_uidlist *uidlist,
        if (rec == NULL)
                return;
 
-       rec->flags &= ~MAILDIR_UIDLIST_REC_FLAG_NONSYNCED;
+       rec->flags &= ENUM_NEGATE(MAILDIR_UIDLIST_REC_FLAG_NONSYNCED);
        if (strcmp(rec->filename, filename) != 0)
                rec->filename = p_strdup(uidlist->record_pool, filename);
 }
@@ -1958,7 +1958,7 @@ static void maildir_uidlist_assign_uids(struct maildir_uidlist_sync_ctx *ctx)
                i_assert(recs[dest]->uid == (uint32_t)-1);
                i_assert(ctx->uidlist->next_uid < (uint32_t)-1);
                recs[dest]->uid = ctx->uidlist->next_uid++;
-               recs[dest]->flags &= ~MAILDIR_UIDLIST_REC_FLAG_MOVED;
+               recs[dest]->flags &= ENUM_NEGATE(MAILDIR_UIDLIST_REC_FLAG_MOVED);
        }
 
        if (ctx->uidlist->locked_refresh && ctx->uidlist->initial_read)
index c7772668d110afca2ee3544851bfb8c978d90e17..2b83ba5adf59541ed2e6c700437c41e97a9e52bd 100644 (file)
@@ -474,7 +474,7 @@ int mbox_save_begin(struct mail_save_context *_ctx, struct istream *input)
 
                mail_index_append(ctx->trans, ctx->next_uid, &ctx->seq);
                mail_index_update_flags(ctx->trans, ctx->seq, MODIFY_REPLACE,
-                                       save_flags & ~MAIL_RECENT);
+                                       save_flags & ENUM_NEGATE(MAIL_RECENT));
                if (mdata->keywords != NULL) {
                        mail_index_update_keywords(ctx->trans, ctx->seq,
                                                   MODIFY_REPLACE,
index ee73052d9b50896a4d29530498943ba95cb916c1..762c5244fa694a4389fc9fbf2989aac64f04d761 100644 (file)
@@ -385,7 +385,7 @@ static void mbox_sync_update_header_real(struct mbox_sync_mail_context *ctx)
        i_assert(ctx->mail.uid != 0 || ctx->mail.pseudo);
 
        if (!ctx->sync_ctx->keep_recent)
-               ctx->mail.flags &= ~MAIL_RECENT;
+               ctx->mail.flags &= ENUM_NEGATE(MAIL_RECENT);
 
        mbox_sync_update_status(ctx);
        mbox_sync_update_xstatus(ctx);
@@ -413,16 +413,16 @@ mbox_sync_update_header_from_real(struct mbox_sync_mail_context *ctx,
            (ctx->mail.flags & STATUS_FLAGS_MASK) !=
            (mail->flags & STATUS_FLAGS_MASK) ||
            (ctx->mail.flags & MAIL_RECENT) != 0) {
-               ctx->mail.flags = (ctx->mail.flags & ~STATUS_FLAGS_MASK) |
+               ctx->mail.flags = (ctx->mail.flags & ENUM_NEGATE(STATUS_FLAGS_MASK)) |
                        (mail->flags & STATUS_FLAGS_MASK);
                if (!ctx->sync_ctx->keep_recent)
-                        ctx->mail.flags &= ~MAIL_RECENT;
+                        ctx->mail.flags &= ENUM_NEGATE(MAIL_RECENT);
                mbox_sync_update_status(ctx);
        }
        if (mail->xstatus_broken ||
            (ctx->mail.flags & XSTATUS_FLAGS_MASK) !=
            (mail->flags & XSTATUS_FLAGS_MASK)) {
-               ctx->mail.flags = (ctx->mail.flags & ~XSTATUS_FLAGS_MASK) |
+               ctx->mail.flags = (ctx->mail.flags & ENUM_NEGATE(XSTATUS_FLAGS_MASK)) |
                        (mail->flags & XSTATUS_FLAGS_MASK);
                mbox_sync_update_xstatus(ctx);
        }
index a0939ac8f206fd51c1e1b9b4c663f59a2fd8a4c8..5e09e8ba06f45e728ca28b879d5d3c26ca9153ee 100644 (file)
@@ -343,7 +343,7 @@ static void mbox_sync_get_dirty_flags(struct mbox_sync_mail_context *mail_ctx,
 
        /* default to undirtying the message. it gets added back if
           flags/keywords don't match what is in the index. */
-       mail_ctx->mail.flags &= ~MAIL_INDEX_MAIL_FLAG_DIRTY;
+       mail_ctx->mail.flags &= ENUM_NEGATE(MAIL_INDEX_MAIL_FLAG_DIRTY);
 
        /* replace flags */
        idx_flags = rec->flags & MAIL_FLAGS_NONRECENT;
@@ -420,10 +420,10 @@ static void mbox_sync_update_index(struct mbox_sync_mail_context *mail_ctx,
        ARRAY_TYPE(keyword_indexes) idx_keywords;
        uint8_t mbox_flags;
 
-       mbox_flags = mail->flags & ~MAIL_RECENT;
+       mbox_flags = mail->flags & ENUM_NEGATE(MAIL_RECENT);
        if (!sync_ctx->delay_writes) {
                /* changes are written to the mbox file */
-               mbox_flags &= ~MAIL_INDEX_MAIL_FLAG_DIRTY;
+               mbox_flags &= ENUM_NEGATE(MAIL_INDEX_MAIL_FLAG_DIRTY);
        } else if (mail_ctx->need_rewrite) {
                /* make sure this message gets written later */
                mbox_flags |= MAIL_INDEX_MAIL_FLAG_DIRTY;
index 7910e00bae562013155206eef0b1d1b8eba5c81a..d1e761b3e52a96ed91363b0c56c086f7596e80db 100644 (file)
@@ -240,7 +240,7 @@ static int pop3c_mailbox_get_metadata(struct mailbox *box,
                /* a bit ugly way to do this, but better than nothing for now.
                   FIXME: if indexes are enabled, keep this there. */
                mail_generate_guid_128_hash(box->name, metadata_r->guid);
-               items &= ~MAILBOX_METADATA_GUID;
+               items &= ENUM_NEGATE(MAILBOX_METADATA_GUID);
        }
        if (items != 0) {
                if (index_mailbox_get_metadata(box, items, metadata_r) < 0)
index b54d27b31f711b9e675f566067cbe823a8fea280..cb95fdaa2eec271e80135ba25a80508f7b107a81 100644 (file)
@@ -36,7 +36,7 @@ raw_storage_create_from_set(const struct setting_parser_info *set_info,
        ns = mail_namespaces_init_empty(user);
        /* raw storage doesn't have INBOX. We especially don't want LIST to
           return INBOX. */
-       ns->flags &= ~NAMESPACE_FLAG_INBOX_USER;
+       ns->flags &= ENUM_NEGATE(NAMESPACE_FLAG_INBOX_USER);
        ns->flags |= NAMESPACE_FLAG_NOQUOTA | NAMESPACE_FLAG_NOACL;
        ns->set = ns_set;
        /* absolute paths are ok with raw storage */
index 69fefb5d43d60e4280dd4fe98596a6a3f8183b77..585bf106593ec29ed72965bdb634fa4b7e7c3c60 100644 (file)
@@ -158,7 +158,7 @@ dir_entry_get(struct fs_list_iterate_context *ctx, const char *dir_path,
        if (strcmp(d->d_name, ctx->ctx.list->set.maildir_name) == 0) {
                /* mail storage's internal directory (e.g. dbox-Mails).
                   this also means that the parent is selectable */
-               dir->info_flags &= ~MAILBOX_NOSELECT;
+               dir->info_flags &= ENUM_NEGATE(MAILBOX_NOSELECT);
                dir->info_flags |= MAILBOX_SELECT;
                return 0;
        }
@@ -222,7 +222,7 @@ dir_entry_get(struct fs_list_iterate_context *ctx, const char *dir_path,
                return 0;
 
        /* mailbox exists - make sure parent knows it has children */
-       dir->info_flags &= ~(MAILBOX_NOCHILDREN | MAILBOX_NOINFERIORS);
+       dir->info_flags &= ENUM_NEGATE(MAILBOX_NOCHILDREN | MAILBOX_NOINFERIORS);
        dir->info_flags |= MAILBOX_CHILDREN;
 
        if (match != IMAP_MATCH_YES && (match & IMAP_MATCH_CHILDREN) == 0) {
@@ -570,10 +570,10 @@ int fs_list_iter_deinit(struct mailbox_list_iterate_context *_ctx)
 static void inbox_flags_set(struct fs_list_iterate_context *ctx)
 {
        /* INBOX is always selectable */
-       ctx->info.flags &= ~(MAILBOX_NOSELECT | MAILBOX_NONEXISTENT);
+       ctx->info.flags &= ENUM_NEGATE(MAILBOX_NOSELECT | MAILBOX_NONEXISTENT);
 
        if (mail_namespace_is_inbox_noinferiors(ctx->info.ns)) {
-               ctx->info.flags &= ~(MAILBOX_CHILDREN|MAILBOX_NOCHILDREN);
+               ctx->info.flags &= ENUM_NEGATE(MAILBOX_CHILDREN | MAILBOX_NOCHILDREN);
                ctx->info.flags |= MAILBOX_NOINFERIORS;
        }
 }
@@ -719,7 +719,7 @@ fs_list_entry(struct fs_list_iterate_context *ctx,
                /* although it could be selected with this name,
                   it would be confusing for clients to see the same
                   mails in both INBOX and <ns prefix>/INBOX. */
-               ctx->info.flags &= ~MAILBOX_SELECT;
+               ctx->info.flags &= ENUM_NEGATE(MAILBOX_SELECT);
                ctx->info.flags |= MAILBOX_NOSELECT;
        } else if ((ns->flags & NAMESPACE_FLAG_INBOX_ANY) != 0 &&
                   list_file_is_any_inbox(ctx, storage_name)) {
@@ -728,7 +728,7 @@ fs_list_entry(struct fs_list_iterate_context *ctx,
                        return 0;
                }
                /* shared/user/INBOX */
-               ctx->info.flags &= ~(MAILBOX_NOSELECT | MAILBOX_NONEXISTENT);
+               ctx->info.flags &= ENUM_NEGATE(MAILBOX_NOSELECT | MAILBOX_NONEXISTENT);
                ctx->info.flags |= MAILBOX_SELECT;
                ctx->inbox_found = TRUE;
        }
index c662a13af2df1d18a5456d7b32bfcd6c9d8ad35e..d62daf1f6d0786523d4374886c9a42590a4813de 100644 (file)
@@ -312,9 +312,9 @@ index_list_mailbox_create_selectable(struct mailbox *box,
        i_assert(guid_128_is_empty(rec.guid));
 
        /* make it selectable */
-       node->flags &= ~(MAILBOX_LIST_INDEX_FLAG_NONEXISTENT |
-                        MAILBOX_LIST_INDEX_FLAG_NOSELECT |
-                        MAILBOX_LIST_INDEX_FLAG_NOINFERIORS);
+       node->flags &= ENUM_NEGATE(MAILBOX_LIST_INDEX_FLAG_NONEXISTENT |
+                                  MAILBOX_LIST_INDEX_FLAG_NOSELECT |
+                                  MAILBOX_LIST_INDEX_FLAG_NOINFERIORS);
        mail_index_update_flags(sync_ctx->trans, seq, MODIFY_REPLACE,
                                (enum mail_flags)node->flags);
 
@@ -806,7 +806,7 @@ index_list_rename_mailbox(struct mailbox_list *_oldlist, const char *oldname,
        if ((newnode->flags & MAILBOX_LIST_INDEX_FLAG_CORRUPTED_NAME) != 0) {
                /* mailbox is renamed - clear away the corruption flag so the
                   new name will be written to the mailbox index header. */
-               newnode->flags &= ~MAILBOX_LIST_INDEX_FLAG_CORRUPTED_NAME;
+               newnode->flags &= ENUM_NEGATE(MAILBOX_LIST_INDEX_FLAG_CORRUPTED_NAME);
                mail_index_update_flags(sync_ctx->trans, oldseq, MODIFY_REMOVE,
                        (enum mail_flags)MAILBOX_LIST_INDEX_FLAG_CORRUPTED_NAME);
        }
index c3387583f83c1066e06f6b732c5057945707ff54..8719af67bbaa45b024e1482832ffddb1a681b087 100644 (file)
@@ -94,7 +94,8 @@ mailbox_list_index_update_info(struct mailbox_list_index_iterate_context *ctx)
                /* listing INBOX itself */
                ctx->info.vname = "INBOX";
                if (mail_namespace_is_inbox_noinferiors(ctx->info.ns)) {
-                       ctx->info.flags &= ~(MAILBOX_CHILDREN|MAILBOX_NOCHILDREN);
+                       ctx->info.flags &= ENUM_NEGATE(MAILBOX_CHILDREN |
+                                                      MAILBOX_NOCHILDREN);
                        ctx->info.flags |= MAILBOX_NOINFERIORS;
                }
        } else {
index 33cd49f9b0551e320b6b63b22451db251ebfbae5..26c49d8f8d218b4a3509daa3156fc6d42dfb7dcc 100644 (file)
@@ -159,7 +159,7 @@ index_list_get_status(struct mailbox *box, enum mailbox_status_items items,
 {
        struct index_list_mailbox *ibox = INDEX_LIST_STORAGE_CONTEXT(box);
 
-       if ((items & ~CACHED_STATUS_ITEMS) == 0 && !box->opened) {
+       if ((items & ENUM_NEGATE(CACHED_STATUS_ITEMS)) == 0 && !box->opened) {
                if (index_list_get_cached_status(box, items, status_r) > 0)
                        return 0;
                /* nonsynced / error, fallback to doing it the slow way */
@@ -276,13 +276,13 @@ index_list_try_get_metadata(struct mailbox *box,
        }
        /* see if we have a chance of fulfilling this without opening
           the mailbox. */
-       noncached_items = items & ~(MAILBOX_METADATA_GUID |
-                                   MAILBOX_METADATA_VIRTUAL_SIZE |
-                                   MAILBOX_METADATA_FIRST_SAVE_DATE);
+       noncached_items = items & ENUM_NEGATE(MAILBOX_METADATA_GUID |
+                                             MAILBOX_METADATA_VIRTUAL_SIZE |
+                                             MAILBOX_METADATA_FIRST_SAVE_DATE);
        if ((noncached_items & MAILBOX_METADATA_PHYSICAL_SIZE) != 0 &&
            box->mail_vfuncs->get_physical_size ==
            box->mail_vfuncs->get_virtual_size)
-               noncached_items = items & ~MAILBOX_METADATA_PHYSICAL_SIZE;
+               noncached_items = items & ENUM_NEGATE(MAILBOX_METADATA_PHYSICAL_SIZE);
 
        if (noncached_items != 0)
                return 0;
index 66872904cb569b3e0a880e9c2601e6794d5d4f54..ad5f98105b3476acaf8f2fcbeee89a7ecc287470 100644 (file)
@@ -197,7 +197,7 @@ mailbox_list_index_node_clear_exists(struct mailbox_list_index_node *node)
                if (node->children != NULL)
                        mailbox_list_index_node_clear_exists(node->children);
 
-               node->flags &= ~MAILBOX_LIST_INDEX_FLAG_SYNC_EXISTS;
+               node->flags &= ENUM_NEGATE(MAILBOX_LIST_INDEX_FLAG_SYNC_EXISTS);
                node = node->next;
        }
 }
index 092c0f57a4a05aff23742229dde57b6a22224e09..36132877b977ee1bb42b650b46081329d61ad7dc 100644 (file)
@@ -358,8 +358,7 @@ static int mailbox_list_index_parse_records(struct mailbox_list_index *ilist,
                if (!ilist->has_backing_store && !guid_128_is_empty(irec->guid) &&
                    (rec->flags & (MAILBOX_LIST_INDEX_FLAG_NONEXISTENT |
                                   MAILBOX_LIST_INDEX_FLAG_NOSELECT)) != 0) {
-                       node->flags &= ~(MAILBOX_LIST_INDEX_FLAG_NONEXISTENT |
-                                        MAILBOX_LIST_INDEX_FLAG_NOSELECT);
+                       node->flags &= ENUM_NEGATE(MAILBOX_LIST_INDEX_FLAG_NONEXISTENT | MAILBOX_LIST_INDEX_FLAG_NOSELECT);
                        *error_r = t_strdup_printf(
                                "non-selectable mailbox '%s' (uid=%u) already has GUID - "
                                "marking it selectable", node->name, node->uid);
index 95ad8c52c966734e14c428fab69d72840e822b89..ae7235ef1c75dd97c07f5400c17fdb65b957917d 100644 (file)
@@ -450,7 +450,7 @@ mailbox_list_ns_prefix_return(struct ns_list_iterate_context *ctx,
            ns->prefix[5] == mail_namespace_get_sep(ns)) {
                /* prefix=INBOX/ (or prefix=INBOX/something/) namespace exists.
                   so we can create children to INBOX. */
-               ctx->inbox_info.flags &= ~MAILBOX_NOINFERIORS;
+               ctx->inbox_info.flags &= ENUM_NEGATE(MAILBOX_NOINFERIORS);
        }
 
        if (ns->prefix_len == 0 || !mailbox_list_ns_prefix_match(ctx, ns))
@@ -636,7 +636,7 @@ mailbox_list_ns_iter_try_next(struct mailbox_list_iterate_context *_ctx,
                    info->vname[5] == mail_namespace_get_sep(info->ns)) {
                        /* we know now that INBOX has children */
                        ctx->inbox_info.flags |= MAILBOX_CHILDREN;
-                       ctx->inbox_info.flags &= ~MAILBOX_NOINFERIORS;
+                       ctx->inbox_info.flags &= ENUM_NEGATE(MAILBOX_NOINFERIORS);
                }
                if (info->ns->prefix_len > 0 &&
                    strncmp(info->vname, info->ns->prefix,
@@ -860,7 +860,7 @@ mailbox_list_iter_autocreate_filter(struct mailbox_list_iterate_context *ctx,
                if ((ctx->flags & MAILBOX_LIST_ITER_SELECT_SUBSCRIBED) != 0)
                        info->flags |= MAILBOX_CHILD_SUBSCRIBED;
                else {
-                       info->flags &= ~MAILBOX_NOCHILDREN;
+                       info->flags &= ENUM_NEGATE(MAILBOX_NOCHILDREN);
                        info->flags |= MAILBOX_CHILDREN;
                }
        }
@@ -874,9 +874,9 @@ mailbox_list_iter_autocreate_filter(struct mailbox_list_iterate_context *ctx,
                                              FALSE, &idx);
        }
        if ((match2 & AUTOCREATE_MATCH_RESULT_YES) != 0)
-               info->flags &= ~MAILBOX_NONEXISTENT;
+               info->flags &= ENUM_NEGATE(MAILBOX_NONEXISTENT);
        if ((match2 & AUTOCREATE_MATCH_RESULT_CHILDREN) != 0) {
-               info->flags &= ~MAILBOX_NOCHILDREN;
+               info->flags &= ENUM_NEGATE(MAILBOX_NOCHILDREN);
                info->flags |= MAILBOX_CHILDREN;
        }
 
@@ -965,7 +965,7 @@ static bool autocreate_iter_autobox(struct mailbox_list_iterate_context *ctx,
                                      MAILBOX_CHILD_SUBSCRIBED));
                if ((old_flags & MAILBOX_NONEXISTENT) == 0) {
                        actx->new_info.flags |= MAILBOX_CHILDREN;
-                       actx->new_info.flags &= ~MAILBOX_NOCHILDREN;
+                       actx->new_info.flags &= ENUM_NEGATE(MAILBOX_NOCHILDREN);
                }
                if ((old_flags & MAILBOX_SUBSCRIBED) != 0)
                        actx->new_info.flags |= MAILBOX_CHILD_SUBSCRIBED;
@@ -1121,7 +1121,7 @@ mailbox_list_iter_update_real(struct mailbox_list_iter_update_context *ctx,
                                if (!ctx->update_only && add_matched)
                                        node->flags |= MAILBOX_MATCHED;
                                if ((always_flags & MAILBOX_CHILDREN) != 0)
-                                       node->flags &= ~MAILBOX_NOCHILDREN;
+                                       node->flags &= ENUM_NEGATE(MAILBOX_NOCHILDREN);
                                node->flags |= always_flags;
                        }
                        /* We don't want to show the parent mailboxes unless
@@ -1146,7 +1146,7 @@ mailbox_list_iter_update_real(struct mailbox_list_iter_update_context *ctx,
 
                name = t_strdup_until(name, p);
                create_flags |= MAILBOX_NONEXISTENT;
-               create_flags &= ~MAILBOX_NOCHILDREN;
+               create_flags &= ENUM_NEGATE(MAILBOX_NOCHILDREN);
                always_flags = MAILBOX_CHILDREN | ctx->parent_flags;
        }
 }
index 28dafd7510894bd94e132414df794fd74734db5e..6d799aff7eacb28b14d1cc7afebc281b5bd793cf 100644 (file)
@@ -39,7 +39,7 @@ static void node_fix_parents(struct mailbox_node *node)
                        node->flags |= MAILBOX_NONEXISTENT;
 
                node->flags |= MAILBOX_CHILDREN;
-               node->flags &= ~MAILBOX_NOCHILDREN;
+               node->flags &= ENUM_NEGATE(MAILBOX_NOCHILDREN);
        }
 }
 
@@ -80,7 +80,7 @@ maildir_fill_parents(struct maildir_list_iterate_context *ctx,
                        if (!update_only)
                                node->flags |= MAILBOX_MATCHED;
                        node->flags |= MAILBOX_CHILDREN;
-                       node->flags &= ~MAILBOX_NOCHILDREN;
+                       node->flags &= ENUM_NEGATE(MAILBOX_NOCHILDREN);
                        node_fix_parents(node);
                }
        }
@@ -101,7 +101,7 @@ static void maildir_set_children(struct maildir_list_iterate_context *ctx,
 
                node = mailbox_tree_lookup(ctx->tree_ctx, vname);
                if (node != NULL) {
-                       node->flags &= ~MAILBOX_NOCHILDREN;
+                       node->flags &= ENUM_NEGATE(MAILBOX_NOCHILDREN);
                        node->flags |= MAILBOX_CHILDREN;
                        break;
                }
@@ -134,7 +134,7 @@ maildir_fill_inbox(struct maildir_list_iterate_context *ctx,
        if (update_only) {
                node = mailbox_tree_lookup(ctx->tree_ctx, inbox_name);
                if (node != NULL)
-                       node->flags &= ~MAILBOX_NONEXISTENT;
+                       node->flags &= ENUM_NEGATE(MAILBOX_NONEXISTENT);
                return 0;
        }
 
@@ -147,7 +147,7 @@ maildir_fill_inbox(struct maildir_list_iterate_context *ctx,
                if (created)
                        node->flags = MAILBOX_NOCHILDREN;
                else
-                       node->flags &= ~MAILBOX_NONEXISTENT;
+                       node->flags &= ENUM_NEGATE(MAILBOX_NONEXISTENT);
                node->flags |= MAILBOX_MATCHED;
        }
        return 0;
@@ -338,7 +338,7 @@ maildir_fill_readdir_entry(struct maildir_list_iterate_context *ctx,
 
        /* we know the children flags ourself, so ignore if any of
           them were set. */
-       flags &= ~(MAILBOX_NOINFERIORS | MAILBOX_CHILDREN | MAILBOX_NOCHILDREN);
+       flags &= ENUM_NEGATE(MAILBOX_NOINFERIORS | MAILBOX_CHILDREN | MAILBOX_NOCHILDREN);
 
        if ((match & IMAP_MATCH_PARENT) != 0)
                maildir_fill_parents(ctx, glob, update_only, vname);
@@ -352,7 +352,7 @@ maildir_fill_readdir_entry(struct maildir_list_iterate_context *ctx,
                        if (created)
                                node->flags = MAILBOX_NOCHILDREN;
                        else
-                               node->flags &= ~MAILBOX_NONEXISTENT;
+                               node->flags &= ENUM_NEGATE(MAILBOX_NONEXISTENT);
                        if (!update_only)
                                node->flags |= MAILBOX_MATCHED;
                        node->flags |= flags;
@@ -509,7 +509,7 @@ maildir_list_iter_next(struct mailbox_list_iterate_context *_ctx)
        if (strcmp(ctx->info.vname, "INBOX") == 0 &&
            mail_namespace_is_inbox_noinferiors(ctx->info.ns)) {
                i_assert((ctx->info.flags & MAILBOX_NOCHILDREN) != 0);
-               ctx->info.flags &= ~MAILBOX_NOCHILDREN;
+               ctx->info.flags &= ENUM_NEGATE(MAILBOX_NOCHILDREN);
                ctx->info.flags |= MAILBOX_NOINFERIORS;
        }
        if ((_ctx->flags & MAILBOX_LIST_ITER_RETURN_SUBSCRIBED) != 0 &&
index 0123c8cb80be11e0798f252a9b76ddabf2916622..9f46ac9fc098b0630df7df777d6c74511c784623 100644 (file)
@@ -184,7 +184,7 @@ void mailbox_list_set_subscription_flags(struct mailbox_list *list,
 {
        struct mailbox_node *node;
 
-       *flags &= ~(MAILBOX_SUBSCRIBED | MAILBOX_CHILD_SUBSCRIBED);
+       *flags &= ENUM_NEGATE(MAILBOX_SUBSCRIBED | MAILBOX_CHILD_SUBSCRIBED);
 
        node = mailbox_tree_lookup(list->subscriptions, vname);
        if (node != NULL) {
@@ -298,7 +298,7 @@ mailbox_list_subscriptions_iter_next(struct mailbox_list_iterate_context *_ctx)
 
        }
 
-       ctx->info.flags &= ~(MAILBOX_SUBSCRIBED | MAILBOX_CHILD_SUBSCRIBED);
+       ctx->info.flags &= ENUM_NEGATE(MAILBOX_SUBSCRIBED | MAILBOX_CHILD_SUBSCRIBED);
        ctx->info.flags |=
                node->flags & (MAILBOX_SUBSCRIBED | MAILBOX_CHILD_SUBSCRIBED);
        return &ctx->info;
index c853a2698b9dc0f02e4f1563d90fff6c736f13aa..1d3ea9d3d47b118bd11ec94921786907fa08be6c 100644 (file)
@@ -959,7 +959,7 @@ mail_storage_service_init(struct master_service *service,
            getuid() != 0) {
                /* service { user } isn't root. the permission drop can't be
                   temporary. */
-               flags &= ~MAIL_STORAGE_SERVICE_FLAG_TEMP_PRIV_DROP;
+               flags &= ENUM_NEGATE(MAIL_STORAGE_SERVICE_FLAG_TEMP_PRIV_DROP);
        }
 
        (void)umask(0077);
@@ -1017,11 +1017,11 @@ mail_storage_service_input_get_flags(struct mail_storage_service_ctx *ctx,
 {
        enum mail_storage_service_flags flags;
 
-       flags = (ctx->flags & ~input->flags_override_remove) |
+       flags = (ctx->flags & ENUM_NEGATE(input->flags_override_remove)) |
                input->flags_override_add;
        if (input->no_userdb_lookup) {
                /* FIXME: for API backwards compatibility only */
-               flags &= ~MAIL_STORAGE_SERVICE_FLAG_USERDB_LOOKUP;
+               flags &= ENUM_NEGATE(MAIL_STORAGE_SERVICE_FLAG_USERDB_LOOKUP);
        }
        return flags;
 }
index 8ab84ce8e2c0fc224b0b026e0c8afc49e862f9f3..80880e29a06be105c1be28d96d62c07f39bfdc65 100644 (file)
@@ -1760,7 +1760,7 @@ int mailbox_mark_index_deleted(struct mailbox *box, bool del)
        old_flag = box->flags & MAILBOX_FLAG_OPEN_DELETED;
        box->flags |= MAILBOX_FLAG_OPEN_DELETED;
        ret = mailbox_open(box);
-       box->flags = (box->flags & ~MAILBOX_FLAG_OPEN_DELETED) | old_flag;
+       box->flags = (box->flags & ENUM_NEGATE(MAILBOX_FLAG_OPEN_DELETED)) | old_flag;
        if (ret < 0)
                return -1;
 
@@ -2474,7 +2474,7 @@ void mailbox_save_set_flags(struct mail_save_context *ctx,
        if (ctx->data.keywords != NULL)
                mailbox_keywords_unref(&ctx->data.keywords);
 
-       ctx->data.flags = flags & ~mailbox_get_private_flags_mask(box);
+       ctx->data.flags = flags & ENUM_NEGATE(mailbox_get_private_flags_mask(box));
        ctx->data.pvt_flags = flags & mailbox_get_private_flags_mask(box);
        ctx->data.keywords = keywords;
        if (keywords != NULL)
index 78ca638f7a2722c36fe7025693fe152ad66e4df5..908356959fc6268c41bf92a1b8b12c015c83507e 100644 (file)
@@ -299,7 +299,7 @@ mailbox_attribute_set_common(struct mailbox_transaction_context *t,
                        i_unreached();
                }
                /* the value was validated. */
-               type_flags &= ~MAIL_ATTRIBUTE_TYPE_FLAG_VALIDATED;
+               type_flags &= ENUM_NEGATE(MAIL_ATTRIBUTE_TYPE_FLAG_VALIDATED);
        }
 
        ret = t->box->v.attribute_set(t, type_flags, key, value);
@@ -378,7 +378,7 @@ mailbox_attribute_get_common(struct mailbox *box,
                case MAIL_ATTRIBUTE_INTERNAL_RANK_OVERRIDE:
                        /* we already checked that this attribute has
                           validated-flag */
-                       type_flags &= ~MAIL_ATTRIBUTE_TYPE_FLAG_VALIDATED;
+                       type_flags &= ENUM_NEGATE(MAIL_ATTRIBUTE_TYPE_FLAG_VALIDATED);
 
                        if (iattr->get == NULL)
                                break;
index c2cda9ade256c7f9384c224a299e684d4cce5707..bb9c12894494c744705dbb4ed3f9f7255b6169ee 100644 (file)
@@ -30,7 +30,7 @@ static void askpass_str(const char *prompt, buffer_t *pass)
                if (tcgetattr(fd, &old_tio) == 0) {
                        restore_tio = TRUE;
                        tio = old_tio;
-                       tio.c_lflag &= ~(ECHO | ECHONL);
+                       tio.c_lflag &= ENUM_NEGATE(ECHO | ECHONL);
                        (void)tcsetattr(fd, TCSAFLUSH, &tio);
                }
        } else {
index 0456186595e14ec2c3498ba5285c6d7294abfe5d..302beea709d9559ae48117fc05aa490e64d6798e 100644 (file)
@@ -108,7 +108,7 @@ void fd_set_nonblock(int fd, bool nonblock)
        if (nonblock)
                flags |= O_NONBLOCK;
        else
-               flags &= ~O_NONBLOCK;
+               flags &= ENUM_NEGATE(O_NONBLOCK);
 
        if (fcntl(fd, F_SETFL, flags) < 0)
                i_fatal("fcntl(%d, F_SETFL) failed: %m", fd);
index 4016dae6a345948e35be614a3844301254a85389..02cdce67120835b41756124b0ba84e15eff096bf 100644 (file)
@@ -121,12 +121,12 @@ void io_loop_handle_remove(struct io_file *io, bool closed ATTR_UNUSED)
        i_free(io);
 
        if ((condition & IO_READ) != 0) {
-               ctx->fds[index].events &= ~(POLLIN|POLLPRI);
-               ctx->fds[index].revents &= ~(POLLIN|POLLPRI);
+               ctx->fds[index].events &= ENUM_NEGATE(POLLIN | POLLPRI);
+               ctx->fds[index].revents &= ENUM_NEGATE(POLLIN | POLLPRI);
        }
        if ((condition & IO_WRITE) != 0) {
-               ctx->fds[index].events &= ~POLLOUT;
-               ctx->fds[index].revents &= ~POLLOUT;
+               ctx->fds[index].events &= ENUM_NEGATE(POLLOUT);
+               ctx->fds[index].revents &= ENUM_NEGATE(POLLOUT);
        }
 
        if ((ctx->fds[index].events & (POLLIN|POLLOUT)) == 0) {
@@ -195,13 +195,13 @@ void io_loop_handler_run_internal(struct ioloop *ioloop)
                                pollfd->revents = 0;
                        } else if ((io->io.condition & IO_READ) != 0) {
                                call = (pollfd->revents & IO_POLL_INPUT) != 0;
-                               pollfd->revents &= ~IO_POLL_INPUT;
+                               pollfd->revents &= ENUM_NEGATE(IO_POLL_INPUT);
                        } else if ((io->io.condition & IO_WRITE) != 0) {
                                call = (pollfd->revents & IO_POLL_OUTPUT) != 0;
-                               pollfd->revents &= ~IO_POLL_OUTPUT;
+                               pollfd->revents &= ENUM_NEGATE(IO_POLL_OUTPUT);
                        } else if ((io->io.condition & IO_ERROR) != 0) {
                                call = (pollfd->revents & IO_POLL_ERROR) != 0;
-                               pollfd->revents &= ~IO_POLL_ERROR;
+                               pollfd->revents &= ENUM_NEGATE(IO_POLL_ERROR);
                        } else {
                                call = FALSE;
                        }
index 11b9e6833cea978fd3d348b4949f44a881235e34..8883f65ec0716d28ed693a77e0da1de009127ade 100644 (file)
@@ -146,7 +146,7 @@ o_stream_temp_sendv(struct ostream_private *stream,
        enum ostream_send_istream_result res;
 
 
-       tstream->flags &= ~IOSTREAM_TEMP_FLAG_TRY_FD_DUP;
+       tstream->flags &= ENUM_NEGATE(IOSTREAM_TEMP_FLAG_TRY_FD_DUP);
        if (tstream->dupstream != NULL) {
                if (o_stream_temp_dup_cancel(tstream, &res))
                        return -1;
@@ -256,7 +256,7 @@ o_stream_temp_send_istream(struct ostream_private *_outstream,
        if ((outstream->flags & IOSTREAM_TEMP_FLAG_TRY_FD_DUP) != 0) {
                if (o_stream_temp_dup_istream(outstream, instream, &res))
                        return res;
-               outstream->flags &= ~IOSTREAM_TEMP_FLAG_TRY_FD_DUP;
+               outstream->flags &= ENUM_NEGATE(IOSTREAM_TEMP_FLAG_TRY_FD_DUP);
        }
        return io_stream_copy(&outstream->ostream.ostream, instream);
 }
index b4a940b3e5ca6cdcac3fa9ea00e0683e3cabc11d..fe69faf99a105356bda60ed61db9c2df1fef5e31 100644 (file)
@@ -462,7 +462,7 @@ int net_listen_full(const struct ip_addr *my_ip, in_port_t *port,
                if (setsockopt(fd, SOL_SOCKET, SO_REUSEPORT,
                               &opt, sizeof(opt)) < 0)
 #endif
-                       *flags &= ~NET_LISTEN_FLAG_REUSEPORT;
+                       *flags &= ENUM_NEGATE(NET_LISTEN_FLAG_REUSEPORT);
        }
 
        /* If using IPv6, bind only to IPv6 if possible. This avoids
index a139f8b1290e2f4311826b5db41cdd47fd14d90a..8f07d56c7d9235f06fbe8b6f42915e4afb149892 100644 (file)
@@ -237,7 +237,7 @@ acl_cache_update_rights_mask(struct acl_cache *cache,
                /* remove changed bits from old mask */
                size = I_MIN(old_mask->size, change_mask->size);
                for (i = 0; i < size; i++)
-                       old_mask->mask[i] &= ~change_mask->mask[i];
+                       old_mask->mask[i] &= ENUM_NEGATE(change_mask->mask[i]);
                break;
        case ACL_MODIFY_MODE_REPLACE:
                if (old_mask == NULL && change_mask == NULL)
@@ -361,7 +361,7 @@ acl_cache_my_current_rights_recalculate(struct acl_object_cache *obj_cache)
                /* apply the negative rights. they override positive rights. */
                size = I_MIN(mask->size, obj_cache->my_neg_rights->size);
                for (i = 0; i < size; i++)
-                       mask->mask[i] &= ~obj_cache->my_neg_rights->mask[i];
+                       mask->mask[i] &= ENUM_NEGATE(obj_cache->my_neg_rights->mask[i]);
        }
 
        obj_cache->my_current_rights = mask;
index bedf44b602cd2f27d924dd5da54f883d3781a31c..95a25b1f337fac2779bd73a06a84192b9e730046 100644 (file)
@@ -356,10 +356,10 @@ acl_mailbox_list_info_is_visible(struct mailbox_list_iterate_context *_ctx)
                if ((_ctx->flags & MAILBOX_LIST_ITER_RETURN_NO_FLAGS) != 0) {
                        /* don't waste time checking if there are visible
                           children, but also don't return incorrect flags */
-                       info->flags &= ~MAILBOX_CHILDREN;
+                       info->flags &= ENUM_NEGATE(MAILBOX_CHILDREN);
                } else if ((info->flags & MAILBOX_CHILDREN) != 0 &&
                           !iter_mailbox_has_visible_children(_ctx, FALSE, FALSE)) {
-                       info->flags &= ~MAILBOX_CHILDREN;
+                       info->flags &= ENUM_NEGATE(MAILBOX_CHILDREN);
                        info->flags |= MAILBOX_NOCHILDREN;
                }
                return ret;
index b240d07f009bca208bcd6e063159a06ddfd0eade..b682ddcd86d638484f560b7842d838ecf6445aba 100644 (file)
@@ -281,9 +281,9 @@ acl_mail_update_flags(struct mail *_mail, enum modify_type modify_type,
                if (!acl_flags)
                        flags &= MAIL_SEEN | MAIL_DELETED;
                if (!acl_flag_seen)
-                       flags &= ~MAIL_SEEN;
+                       flags &= ENUM_NEGATE(MAIL_SEEN);
                if (!acl_flag_del)
-                       flags &= ~MAIL_DELETED;
+                       flags &= ENUM_NEGATE(MAIL_DELETED);
        } else if (!acl_flags || !acl_flag_seen || !acl_flag_del) {
                /* we don't have permission to replace all the flags. */
                if (!acl_flags && !acl_flag_seen && !acl_flag_del) {
@@ -293,7 +293,8 @@ acl_mail_update_flags(struct mail *_mail, enum modify_type modify_type,
 
                /* handle this by first removing the allowed flags and
                   then adding the allowed flags */
-               acl_mail_update_flags(_mail, MODIFY_REMOVE, ~flags);
+               acl_mail_update_flags(_mail, MODIFY_REMOVE,
+                                     ENUM_NEGATE(flags));
                if (flags != 0)
                        acl_mail_update_flags(_mail, MODIFY_ADD, flags);
                return;
@@ -370,12 +371,12 @@ acl_save_get_flags(struct mailbox *box, enum mail_flags *flags,
                return -1;
 
        if (!acl_flag_seen) {
-               *flags &= ~MAIL_SEEN;
-               *pvt_flags &= ~MAIL_SEEN;
+               *flags &= ENUM_NEGATE(MAIL_SEEN);
+               *pvt_flags &= ENUM_NEGATE(MAIL_SEEN);
        }
        if (!acl_flag_del) {
-               *flags &= ~MAIL_DELETED;
-               *pvt_flags &= ~MAIL_DELETED;
+               *flags &= ENUM_NEGATE(MAIL_DELETED);
+               *pvt_flags &= ENUM_NEGATE(MAIL_DELETED);
        }
        if (!acl_flags) {
                *flags &= MAIL_SEEN | MAIL_DELETED;
@@ -591,9 +592,9 @@ static int acl_mailbox_get_status(struct mailbox *box,
                        status_r->allow_new_keywords = FALSE;
                }
                if (acl_mailbox_right_lookup(box, ACL_STORAGE_RIGHT_WRITE_DELETED) <= 0)
-                       status_r->permanent_flags &= ~MAIL_DELETED;
+                       status_r->permanent_flags &= ENUM_NEGATE(MAIL_DELETED);
                if (acl_mailbox_right_lookup(box, ACL_STORAGE_RIGHT_WRITE_SEEN) <= 0)
-                       status_r->permanent_flags &= ~MAIL_SEEN;
+                       status_r->permanent_flags &= ENUM_NEGATE(MAIL_SEEN);
        }
        return 0;
 }
index 74605efa3436b89f34424dce80c905f42586a256..bfb2b3462116e6e94af1914fe3b38c1f719172e0 100644 (file)
@@ -124,7 +124,7 @@ fs_compress_file_init(struct fs_file *_file, const char *path,
        file->open_mode = mode;
 
        /* avoid unnecessarily creating two seekable streams */
-       flags &= ~FS_OPEN_FLAG_SEEKABLE;
+       flags &= ENUM_NEGATE(FS_OPEN_FLAG_SEEKABLE);
 
        file->file.parent = fs_file_init_parent(_file, path, mode | flags);
        if (mode == FS_OPEN_MODE_READONLY &&
index 47ea74d04140b86f23eb4af9bc7c8a3c48b9c35f..963dbdfdb4291f86218a0d2911a68ef826311d28 100644 (file)
@@ -139,7 +139,7 @@ fts_backend_lucene_init(struct fts_backend *_backend, const char **error_r)
 
        if (fuser->set.use_libfts) {
                /* change our flags so we get proper input */
-               _backend->flags &= ~FTS_BACKEND_FLAG_FUZZY_SEARCH;
+               _backend->flags &= ENUM_NEGATE(FTS_BACKEND_FLAG_FUZZY_SEARCH);
                _backend->flags |= FTS_BACKEND_FLAG_TOKENIZED_INPUT;
        }
        path = mailbox_list_get_root_forced(_backend->ns->list,
index fbd8d5a38ee4f06735e332de1e86b451f9e8e157..2bb83f81c47b3f1fb705ced114ab17b4162bfaf4 100644 (file)
@@ -189,7 +189,7 @@ fts_backend_solr_init(struct fts_backend *_backend, const char **error_r)
        }
        if (fuser->set.use_libfts) {
                /* change our flags so we get proper input */
-               _backend->flags &= ~FTS_BACKEND_FLAG_FUZZY_SEARCH;
+               _backend->flags &= ENUM_NEGATE(FTS_BACKEND_FLAG_FUZZY_SEARCH);
                _backend->flags |= FTS_BACKEND_FLAG_TOKENIZED_INPUT;
        }
 
index 7bdf507ac4dbfc36afec60bf0fe32ac36171dcaf..b6a489843a2f27ac96b1d0521ce49c0f6a91e3f6 100644 (file)
@@ -364,7 +364,7 @@ static void lazy_expunge_mail_expunge(struct mail *_mail)
 
        save_ctx = mailbox_save_alloc(lt->dest_trans);
        mailbox_save_copy_flags(save_ctx, _mail);
-       save_ctx->data.flags &= ~MAIL_DELETED;
+       save_ctx->data.flags &= ENUM_NEGATE(MAIL_DELETED);
 
        mmail->recursing = TRUE;
        if (mailbox_move(&save_ctx, _mail) < 0 && !_mail->expunged)
index e6203c3c72cd787f83c92c586e2a89e1d88660b8..1651dc9ea11df16fd28f71e383c39f34d6f6d170 100644 (file)
@@ -150,7 +150,7 @@ fs_crypt_file_init(struct fs_file *_file, const char *path,
        file->open_mode = mode;
 
        /* avoid unnecessarily creating two seekable streams */
-       flags &= ~FS_OPEN_FLAG_SEEKABLE;
+       flags &= ENUM_NEGATE(FS_OPEN_FLAG_SEEKABLE);
 
        file->file.parent = fs_file_init_parent(_file, path, mode | flags);
        if (mode == FS_OPEN_MODE_READONLY &&
index fb73048c94e24f83ef91b8b519aadd3e8b982bee..a1d08ee58050cea9172bec3f731557db113c066d 100644 (file)
@@ -133,7 +133,7 @@ quota_get_status(struct mailbox *box, enum mailbox_status_items items,
                }
                quota_transaction_rollback(&qt);
 
-               if ((items & ~STATUS_CHECK_OVER_QUOTA) == 0) {
+               if ((items & ENUM_NEGATE(STATUS_CHECK_OVER_QUOTA)) == 0) {
                        /* don't bother calling parent, it may unnecessarily
                           try to open the mailbox */
                        return ret < 0 ? -1 : 0;
index 8d32b0c4a5e38e51b297deb39364ec40cf7546ab..9b4bb089e3721aead038dba06c57e4a0f902a3cf 100644 (file)
@@ -256,7 +256,7 @@ replication_want_sync_changes(const struct mail_transaction_commit_changes *chan
        /* Replication needs to be triggered on all the user-visible changes,
           but not e.g. due to writes to cache file. */
        return (changes->changes_mask &
-               ~MAIL_INDEX_TRANSACTION_CHANGE_OTHERS) != 0;
+               ENUM_NEGATE(MAIL_INDEX_TRANSACTION_CHANGE_OTHERS)) != 0;
 }
 
 static void
index 7d6f5c3f05ddb39ab262fa67bd3aaa778c7b9905..6c7261a87a51546a7041dec059983da85b1a2f9f 100644 (file)
@@ -187,7 +187,7 @@ static int virtual_backend_box_alloc(struct virtual_mailbox *mbox,
        i_assert(bbox->box == NULL);
 
        if (!bbox->clear_recent)
-               flags &= ~MAILBOX_FLAG_DROP_RECENT;
+               flags &= ENUM_NEGATE(MAILBOX_FLAG_DROP_RECENT);
 
        mailbox = bbox->name;
        ns = mail_namespace_find(user->namespaces, mailbox);
index 6727738740d26d5261b907cf49c99062f94b7e90..f6df7767115141126670f71933a58dc16855cd85 100644 (file)
@@ -81,7 +81,8 @@ static void virtual_sync_external_flags(struct virtual_sync_context *ctx,
        flags = mail_get_flags(bbox->sync_mail);
 
        /* we don't need to keep recent flags here */
-       mail_index_update_flags(ctx->trans, vseq, MODIFY_REPLACE, flags & ~(MAIL_RECENT));
+       mail_index_update_flags(ctx->trans, vseq, MODIFY_REPLACE,
+                               flags & ENUM_NEGATE(MAIL_RECENT));
 
        /* copy keywords */
        kw_names = mail_get_keywords(bbox->sync_mail);
index 6a439791f1d3679b03592bee15b838689d2f601e..71388cb8cb556ee2d1e3a18291cedec81704f34c 100644 (file)
@@ -385,9 +385,9 @@ int main(int argc, char *argv[])
                switch (c) {
                case 'f':
                        if (strcmp(optarg, "in") == 0)
-                               flags &= ~RAWLOG_FLAG_LOG_OUTPUT;
+                               flags &= ENUM_NEGATE(RAWLOG_FLAG_LOG_OUTPUT);
                        else if (strcmp(optarg, "out") == 0)
-                               flags &= ~RAWLOG_FLAG_LOG_INPUT;
+                               flags &= ENUM_NEGATE(RAWLOG_FLAG_LOG_INPUT);
                        else
                                i_fatal("Invalid filter: %s", optarg);
                        break;