From: Aki Tuomi Date: Thu, 20 Aug 2020 05:35:59 +0000 (+0300) Subject: global: Use ENUM_NEGATE() macro where necessary X-Git-Tag: 2.3.13~78 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4684a4a0e8d82e75bdd6c40e7a4405964f8112ea;p=thirdparty%2Fdovecot%2Fcore.git global: Use ENUM_NEGATE() macro where necessary --- diff --git a/src/auth/auth-fields.c b/src/auth/auth-fields.c index 9ac4a82575..07713901c4 100644 --- a/src/auth/auth-fields.c +++ b/src/auth/auth-fields.c @@ -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) diff --git a/src/doveadm/doveadm-dump-index.c b/src/doveadm/doveadm-dump-index.c index 3f90cf294b..249c68a817 100644 --- a/src/doveadm/doveadm-dump-index.c +++ b/src/doveadm/doveadm-dump-index.c @@ -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; diff --git a/src/doveadm/doveadm-mail-mailbox-cache.c b/src/doveadm/doveadm-mail-mailbox-cache.c index eb396b9b40..8eb5165a87 100644 --- a/src/doveadm/doveadm-mail-mailbox-cache.c +++ b/src/doveadm/doveadm-mail-mailbox-cache.c @@ -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; diff --git a/src/doveadm/doveadm-mail-mailbox-status.c b/src/doveadm/doveadm-mail-mailbox-status.c index f8ecc6d27a..60a979cb02 100644 --- a/src/doveadm/doveadm-mail-mailbox-status.c +++ b/src/doveadm/doveadm-mail-mailbox-status.c @@ -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); } diff --git a/src/doveadm/dsync/dsync-brain.c b/src/doveadm/dsync/dsync-brain.c index 90568341fa..f4ff877651 100644 --- a/src/doveadm/dsync/dsync-brain.c +++ b/src/doveadm/dsync/dsync-brain.c @@ -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) diff --git a/src/doveadm/dsync/dsync-ibc-stream.c b/src/doveadm/dsync/dsync-ibc-stream.c index e27b325977..d8a18702ad 100644 --- a/src/doveadm/dsync/dsync-ibc-stream.c +++ b/src/doveadm/dsync/dsync-ibc-stream.c @@ -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; diff --git a/src/doveadm/dsync/dsync-transaction-log-scan.c b/src/doveadm/dsync/dsync-transaction-log-scan.c index fb6b5ec562..dd2834ad5e 100644 --- a/src/doveadm/dsync/dsync-transaction-log-scan.c +++ b/src/doveadm/dsync/dsync-transaction-log-scan.c @@ -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); } } } diff --git a/src/imap-login/imap-proxy.c b/src/imap-login/imap-proxy.c index c7f3daa19a..e06996083a 100644 --- a/src/imap-login/imap-proxy.c +++ b/src/imap-login/imap-proxy.c @@ -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) { diff --git a/src/imap/cmd-list.c b/src/imap/cmd-list.c index c38da08186..10c4b5dfff 100644 --- a/src/imap/cmd-list.c +++ b/src/imap/cmd-list.c @@ -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 && diff --git a/src/imap/imap-search.c b/src/imap/imap-search.c index 9344695a3c..bb0f9deacd 100644 --- a/src/imap/imap-search.c +++ b/src/imap/imap-search.c @@ -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; } diff --git a/src/imap/imap-sync.c b/src/imap/imap-sync.c index ecbc83c35a..2a6b02d3a7 100644 --- a/src/imap/imap-sync.c +++ b/src/imap/imap-sync.c @@ -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); } diff --git a/src/lib-dict-backend/dict-cdb.c b/src/lib-dict-backend/dict-cdb.c index a7f4123daf..9f848dd242 100644 --- a/src/lib-dict-backend/dict-cdb.c +++ b/src/lib-dict-backend/dict-cdb.c @@ -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) { diff --git a/src/lib-fs/fs-api.c b/src/lib-fs/fs-api.c index 42d2bc6880..c7ae0476a5 100644 --- a/src/lib-fs/fs-api.c +++ b/src/lib-fs/fs-api.c @@ -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); diff --git a/src/lib-fs/fs-metawrap.c b/src/lib-fs/fs-metawrap.c index 85009f1479..5459c3e794 100644 --- a/src/lib-fs/fs-metawrap.c +++ b/src/lib-fs/fs-metawrap.c @@ -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 && diff --git a/src/lib-index/mail-cache-decisions.c b/src/lib-index/mail-cache-decisions.c index 6336fc9f8a..71448a9c2c 100644 --- a/src/lib-index/mail-cache-decisions.c +++ b/src/lib-index/mail-cache-decisions.c @@ -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: diff --git a/src/lib-index/mail-cache-fields.c b/src/lib-index/mail-cache-fields.c index e217b2c290..63d0714650 100644 --- a/src/lib-index/mail-cache-fields.c +++ b/src/lib-index/mail-cache-fields.c @@ -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 diff --git a/src/lib-index/mail-cache-purge.c b/src/lib-index/mail-cache-purge.c index bb5a513ebf..907310053a 100644 --- a/src/lib-index/mail-cache-purge.c +++ b/src/lib-index/mail-cache-purge.c @@ -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; } diff --git a/src/lib-index/mail-cache-transaction.c b/src/lib-index/mail-cache-transaction.c index 84c0da5600..76e948a327 100644 --- a/src/lib-index/mail-cache-transaction.c +++ b/src/lib-index/mail-cache-transaction.c @@ -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; diff --git a/src/lib-index/mail-index-map-hdr.c b/src/lib-index/mail-index-map-hdr.c index 7cbd5e31bc..ba48beaf63 100644 --- a/src/lib-index/mail-index-map-hdr.c +++ b/src/lib-index/mail-index-map-hdr.c @@ -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); } } diff --git a/src/lib-index/mail-index-sync-update.c b/src/lib-index/mail-index-sync-update.c index 39b21c642f..b85b8a8f5e 100644 --- a/src/lib-index/mail-index-sync-update.c +++ b/src/lib-index/mail-index-sync-update.c @@ -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 diff --git a/src/lib-index/mail-index-sync.c b/src/lib-index/mail-index-sync.c index f74e11cc4b..ae43d2e857 100644 --- a/src/lib-index/mail-index-sync.c +++ b/src/lib-index/mail-index-sync.c @@ -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, diff --git a/src/lib-index/mail-index-transaction-update.c b/src/lib-index/mail-index-transaction-update.c index 53cb6add13..c7bcbd92ee 100644 --- a/src/lib-index/mail-index-transaction-update.c +++ b/src/lib-index/mail-index-transaction-update.c @@ -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); diff --git a/src/lib-index/mail-index-transaction-view.c b/src/lib-index/mail-index-transaction-view.c index 75ff66453e..dc320c304b 100644 --- a/src/lib-index/mail-index-transaction-view.c +++ b/src/lib-index/mail-index-transaction-view.c @@ -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; } diff --git a/src/lib-index/mail-index-view-sync.c b/src/lib-index/mail-index-view-sync.c index f355eefc81..1aa52fac76 100644 --- a/src/lib-index/mail-index-view-sync.c +++ b/src/lib-index/mail-index-view-sync.c @@ -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; diff --git a/src/lib-index/mail-transaction-log-file.c b/src/lib-index/mail-transaction-log-file.c index 34f55faf83..df07b44642 100644 --- a/src/lib-index/mail-transaction-log-file.c +++ b/src/lib-index/mail-transaction-log-file.c @@ -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; diff --git a/src/lib-index/mail-transaction-log-view.c b/src/lib-index/mail-transaction-log-view.c index a51c62dc4f..1b0fb68fef 100644 --- a/src/lib-index/mail-transaction-log-view.c +++ b/src/lib-index/mail-transaction-log-view.c @@ -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; diff --git a/src/lib-index/test-mail-cache-purge.c b/src/lib-index/test-mail-cache-purge.c index ba99d48d40..525754b8a8 100644 --- a/src/lib-index/test-mail-cache-purge.c +++ b/src/lib-index/test-mail-cache-purge.c @@ -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)); diff --git a/src/lib-index/test-mail-index-transaction-update.c b/src/lib-index/test-mail-index-transaction-update.c index 65c71e7dd9..d7d80aee26 100644 --- a/src/lib-index/test-mail-index-transaction-update.c +++ b/src/lib-index/test-mail-index-transaction-update.c @@ -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; diff --git a/src/lib-mail/message-decoder.c b/src/lib-mail/message-decoder.c index e8c4f91eb7..3e346fd44c 100644 --- a/src/lib-mail/message-decoder.c +++ b/src/lib-mail/message-decoder.c @@ -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); } diff --git a/src/lib-mail/message-parser.c b/src/lib-mail/message-parser.c index 8baf622e59..6ab4c3266f 100644 --- a/src/lib-mail/message-parser.c +++ b/src/lib-mail/message-parser.c @@ -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 diff --git a/src/lib-smtp/smtp-server-connection.c b/src/lib-smtp/smtp-server-connection.c index c5a1881487..7d30d5bc09 100644 --- a/src/lib-smtp/smtp-server-connection.c +++ b/src/lib-smtp/smtp-server-connection.c @@ -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); diff --git a/src/lib-ssl-iostream/iostream-openssl-context.c b/src/lib-ssl-iostream/iostream-openssl-context.c index fe9b05956e..36478aa2e2 100644 --- a/src/lib-ssl-iostream/iostream-openssl-context.c +++ b/src/lib-ssl-iostream/iostream-openssl-context.c @@ -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); diff --git a/src/lib-storage/index/cydir/cydir-save.c b/src/lib-storage/index/cydir/cydir-save.c index 9252704c64..ecf4dec764 100644 --- a/src/lib-storage/index/cydir/cydir-save.c +++ b/src/lib-storage/index/cydir/cydir-save.c @@ -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); diff --git a/src/lib-storage/index/cydir/cydir-storage.c b/src/lib-storage/index/cydir/cydir-storage.c index 9a2d2e5930..363461d8c3 100644 --- a/src/lib-storage/index/cydir/cydir-storage.c +++ b/src/lib-storage/index/cydir/cydir-storage.c @@ -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); diff --git a/src/lib-storage/index/dbox-common/dbox-save.c b/src/lib-storage/index/dbox-common/dbox-save.c index 06d6effb5f..c5af8cc66d 100644 --- a/src/lib-storage/index/dbox-common/dbox-save.c +++ b/src/lib-storage/index/dbox-common/dbox-save.c @@ -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); diff --git a/src/lib-storage/index/dbox-multi/mdbox-mail.c b/src/lib-storage/index/dbox-multi/mdbox-mail.c index 071a30804b..001af75dcc 100644 --- a/src/lib-storage/index/dbox-multi/mdbox-mail.c +++ b/src/lib-storage/index/dbox-multi/mdbox-mail.c @@ -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; } diff --git a/src/lib-storage/index/dbox-multi/mdbox-storage.c b/src/lib-storage/index/dbox-multi/mdbox-storage.c index fbd4604449..df2bce551d 100644 --- a/src/lib-storage/index/dbox-multi/mdbox-storage.c +++ b/src/lib-storage/index/dbox-multi/mdbox-storage.c @@ -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); diff --git a/src/lib-storage/index/dbox-single/sdbox-copy.c b/src/lib-storage/index/dbox-single/sdbox-copy.c index 9bf7aa41cb..48a3f59afb 100644 --- a/src/lib-storage/index/dbox-single/sdbox-copy.c +++ b/src/lib-storage/index/dbox-single/sdbox-copy.c @@ -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; diff --git a/src/lib-storage/index/dbox-single/sdbox-storage.c b/src/lib-storage/index/dbox-single/sdbox-storage.c index 01f28c681b..4d3fb4a0d9 100644 --- a/src/lib-storage/index/dbox-single/sdbox-storage.c +++ b/src/lib-storage/index/dbox-single/sdbox-storage.c @@ -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); diff --git a/src/lib-storage/index/imapc/imapc-list.c b/src/lib-storage/index/imapc/imapc-list.c index 47c3355395..3d0291ef8a 100644 --- a/src/lib-storage/index/imapc/imapc-list.c +++ b/src/lib-storage/index/imapc/imapc-list.c @@ -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); } } } diff --git a/src/lib-storage/index/imapc/imapc-mail-fetch.c b/src/lib-storage/index/imapc/imapc-mail-fetch.c index 133b8ff967..663748bde7 100644 --- a/src/lib-storage/index/imapc/imapc-mail-fetch.c +++ b/src/lib-storage/index/imapc/imapc-mail-fetch.c @@ -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; diff --git a/src/lib-storage/index/imapc/imapc-mailbox.c b/src/lib-storage/index/imapc/imapc-mailbox.c index fc9b522644..ce517693fa 100644 --- a/src/lib-storage/index/imapc/imapc-mailbox.c +++ b/src/lib-storage/index/imapc/imapc-mailbox.c @@ -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) { diff --git a/src/lib-storage/index/imapc/imapc-save.c b/src/lib-storage/index/imapc/imapc-save.c index 9fff77736c..fd1efbe373 100644 --- a/src/lib-storage/index/imapc/imapc-save.c +++ b/src/lib-storage/index/imapc/imapc-save.c @@ -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, ')'); diff --git a/src/lib-storage/index/imapc/imapc-storage.c b/src/lib-storage/index/imapc/imapc-storage.c index 2e758b129e..2746fdd3a3 100644 --- a/src/lib-storage/index/imapc/imapc-storage.c +++ b/src/lib-storage/index/imapc/imapc-storage.c @@ -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) diff --git a/src/lib-storage/index/index-mail-headers.c b/src/lib-storage/index/index-mail-headers.c index eb9695f53b..d67b96e831 100644 --- a/src/lib-storage/index/index-mail-headers.c +++ b/src/lib-storage/index/index-mail-headers.c @@ -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; } diff --git a/src/lib-storage/index/index-mail.c b/src/lib-storage/index/index-mail.c index 706b7eeb31..bc5c89bd81 100644 --- a/src/lib-storage/index/index-mail.c +++ b/src/lib-storage/index/index-mail.c @@ -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, diff --git a/src/lib-storage/index/index-search.c b/src/lib-storage/index/index-search.c index 2ddfa0e132..12c536b327 100644 --- a/src/lib-storage/index/index-search.c +++ b/src/lib-storage/index/index-search.c @@ -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); diff --git a/src/lib-storage/index/index-status.c b/src/lib-storage/index/index-status.c index 4188794589..9d751b9c01 100644 --- a/src/lib-storage/index/index-status.c +++ b/src/lib-storage/index/index-status.c @@ -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; diff --git a/src/lib-storage/index/index-storage.c b/src/lib-storage/index/index-storage.c index f8237c8f1a..f5b2b99a19 100644 --- a/src/lib-storage/index/index-storage.c +++ b/src/lib-storage/index/index-storage.c @@ -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; } diff --git a/src/lib-storage/index/maildir/maildir-filename-flags.c b/src/lib-storage/index/maildir/maildir-filename-flags.c index c35f70794d..ac689086bb 100644 --- a/src/lib-storage/index/maildir/maildir-filename-flags.c +++ b/src/lib-storage/index/maildir/maildir-filename-flags.c @@ -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) && diff --git a/src/lib-storage/index/maildir/maildir-mail.c b/src/lib-storage/index/maildir/maildir-mail.c index 7f4e55cd42..f9c1a96626 100644 --- a/src/lib-storage/index/maildir/maildir-mail.c +++ b/src/lib-storage/index/maildir/maildir-mail.c @@ -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 && diff --git a/src/lib-storage/index/maildir/maildir-save.c b/src/lib-storage/index/maildir/maildir-save.c index b8dbe569af..6a79532692 100644 --- a/src/lib-storage/index/maildir/maildir-save.c +++ b/src/lib-storage/index/maildir/maildir-save.c @@ -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); diff --git a/src/lib-storage/index/maildir/maildir-sync-index.c b/src/lib-storage/index/maildir/maildir-sync-index.c index 928d6b1044..d632fb5aa0 100644 --- a/src/lib-storage/index/maildir/maildir-sync-index.c +++ b/src/lib-storage/index/maildir/maildir-sync-index.c @@ -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++; diff --git a/src/lib-storage/index/maildir/maildir-uidlist.c b/src/lib-storage/index/maildir/maildir-uidlist.c index 5562fd9dbe..bb17b9c59c 100644 --- a/src/lib-storage/index/maildir/maildir-uidlist.c +++ b/src/lib-storage/index/maildir/maildir-uidlist.c @@ -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) diff --git a/src/lib-storage/index/mbox/mbox-save.c b/src/lib-storage/index/mbox/mbox-save.c index c7772668d1..2b83ba5adf 100644 --- a/src/lib-storage/index/mbox/mbox-save.c +++ b/src/lib-storage/index/mbox/mbox-save.c @@ -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, diff --git a/src/lib-storage/index/mbox/mbox-sync-update.c b/src/lib-storage/index/mbox/mbox-sync-update.c index ee73052d9b..762c5244fa 100644 --- a/src/lib-storage/index/mbox/mbox-sync-update.c +++ b/src/lib-storage/index/mbox/mbox-sync-update.c @@ -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); } diff --git a/src/lib-storage/index/mbox/mbox-sync.c b/src/lib-storage/index/mbox/mbox-sync.c index a0939ac8f2..5e09e8ba06 100644 --- a/src/lib-storage/index/mbox/mbox-sync.c +++ b/src/lib-storage/index/mbox/mbox-sync.c @@ -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; diff --git a/src/lib-storage/index/pop3c/pop3c-storage.c b/src/lib-storage/index/pop3c/pop3c-storage.c index 7910e00bae..d1e761b3e5 100644 --- a/src/lib-storage/index/pop3c/pop3c-storage.c +++ b/src/lib-storage/index/pop3c/pop3c-storage.c @@ -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) diff --git a/src/lib-storage/index/raw/raw-storage.c b/src/lib-storage/index/raw/raw-storage.c index b54d27b31f..cb95fdaa2e 100644 --- a/src/lib-storage/index/raw/raw-storage.c +++ b/src/lib-storage/index/raw/raw-storage.c @@ -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 */ diff --git a/src/lib-storage/list/mailbox-list-fs-iter.c b/src/lib-storage/list/mailbox-list-fs-iter.c index 69fefb5d43..585bf10659 100644 --- a/src/lib-storage/list/mailbox-list-fs-iter.c +++ b/src/lib-storage/list/mailbox-list-fs-iter.c @@ -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 /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; } diff --git a/src/lib-storage/list/mailbox-list-index-backend.c b/src/lib-storage/list/mailbox-list-index-backend.c index c662a13af2..d62daf1f6d 100644 --- a/src/lib-storage/list/mailbox-list-index-backend.c +++ b/src/lib-storage/list/mailbox-list-index-backend.c @@ -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); } diff --git a/src/lib-storage/list/mailbox-list-index-iter.c b/src/lib-storage/list/mailbox-list-index-iter.c index c3387583f8..8719af67bb 100644 --- a/src/lib-storage/list/mailbox-list-index-iter.c +++ b/src/lib-storage/list/mailbox-list-index-iter.c @@ -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 { diff --git a/src/lib-storage/list/mailbox-list-index-status.c b/src/lib-storage/list/mailbox-list-index-status.c index 33cd49f9b0..26c49d8f8d 100644 --- a/src/lib-storage/list/mailbox-list-index-status.c +++ b/src/lib-storage/list/mailbox-list-index-status.c @@ -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; diff --git a/src/lib-storage/list/mailbox-list-index-sync.c b/src/lib-storage/list/mailbox-list-index-sync.c index 66872904cb..ad5f98105b 100644 --- a/src/lib-storage/list/mailbox-list-index-sync.c +++ b/src/lib-storage/list/mailbox-list-index-sync.c @@ -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; } } diff --git a/src/lib-storage/list/mailbox-list-index.c b/src/lib-storage/list/mailbox-list-index.c index 092c0f57a4..36132877b9 100644 --- a/src/lib-storage/list/mailbox-list-index.c +++ b/src/lib-storage/list/mailbox-list-index.c @@ -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); diff --git a/src/lib-storage/list/mailbox-list-iter.c b/src/lib-storage/list/mailbox-list-iter.c index 95ad8c52c9..ae7235ef1c 100644 --- a/src/lib-storage/list/mailbox-list-iter.c +++ b/src/lib-storage/list/mailbox-list-iter.c @@ -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; } } diff --git a/src/lib-storage/list/mailbox-list-maildir-iter.c b/src/lib-storage/list/mailbox-list-maildir-iter.c index 28dafd7510..6d799aff7e 100644 --- a/src/lib-storage/list/mailbox-list-maildir-iter.c +++ b/src/lib-storage/list/mailbox-list-maildir-iter.c @@ -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 && diff --git a/src/lib-storage/list/mailbox-list-subscriptions.c b/src/lib-storage/list/mailbox-list-subscriptions.c index 0123c8cb80..9f46ac9fc0 100644 --- a/src/lib-storage/list/mailbox-list-subscriptions.c +++ b/src/lib-storage/list/mailbox-list-subscriptions.c @@ -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; diff --git a/src/lib-storage/mail-storage-service.c b/src/lib-storage/mail-storage-service.c index c853a2698b..1d3ea9d3d4 100644 --- a/src/lib-storage/mail-storage-service.c +++ b/src/lib-storage/mail-storage-service.c @@ -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; } diff --git a/src/lib-storage/mail-storage.c b/src/lib-storage/mail-storage.c index 8ab84ce8e2..80880e29a0 100644 --- a/src/lib-storage/mail-storage.c +++ b/src/lib-storage/mail-storage.c @@ -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) diff --git a/src/lib-storage/mailbox-attribute.c b/src/lib-storage/mailbox-attribute.c index 78ca638f7a..908356959f 100644 --- a/src/lib-storage/mailbox-attribute.c +++ b/src/lib-storage/mailbox-attribute.c @@ -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; diff --git a/src/lib/askpass.c b/src/lib/askpass.c index c2cda9ade2..bb9c128944 100644 --- a/src/lib/askpass.c +++ b/src/lib/askpass.c @@ -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 { diff --git a/src/lib/fd-util.c b/src/lib/fd-util.c index 0456186595..302beea709 100644 --- a/src/lib/fd-util.c +++ b/src/lib/fd-util.c @@ -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); diff --git a/src/lib/ioloop-poll.c b/src/lib/ioloop-poll.c index 4016dae6a3..02cdce6712 100644 --- a/src/lib/ioloop-poll.c +++ b/src/lib/ioloop-poll.c @@ -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; } diff --git a/src/lib/iostream-temp.c b/src/lib/iostream-temp.c index 11b9e6833c..8883f65ec0 100644 --- a/src/lib/iostream-temp.c +++ b/src/lib/iostream-temp.c @@ -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); } diff --git a/src/lib/net.c b/src/lib/net.c index b4a940b3e5..fe69faf99a 100644 --- a/src/lib/net.c +++ b/src/lib/net.c @@ -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 diff --git a/src/plugins/acl/acl-cache.c b/src/plugins/acl/acl-cache.c index a139f8b129..8f07d56c7d 100644 --- a/src/plugins/acl/acl-cache.c +++ b/src/plugins/acl/acl-cache.c @@ -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; diff --git a/src/plugins/acl/acl-mailbox-list.c b/src/plugins/acl/acl-mailbox-list.c index bedf44b602..95a25b1f33 100644 --- a/src/plugins/acl/acl-mailbox-list.c +++ b/src/plugins/acl/acl-mailbox-list.c @@ -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; diff --git a/src/plugins/acl/acl-mailbox.c b/src/plugins/acl/acl-mailbox.c index b240d07f00..b682ddcd86 100644 --- a/src/plugins/acl/acl-mailbox.c +++ b/src/plugins/acl/acl-mailbox.c @@ -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; } diff --git a/src/plugins/fs-compress/fs-compress.c b/src/plugins/fs-compress/fs-compress.c index 74605efa34..bfb2b34621 100644 --- a/src/plugins/fs-compress/fs-compress.c +++ b/src/plugins/fs-compress/fs-compress.c @@ -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 && diff --git a/src/plugins/fts-lucene/fts-backend-lucene.c b/src/plugins/fts-lucene/fts-backend-lucene.c index 47ea74d041..963dbdfdb4 100644 --- a/src/plugins/fts-lucene/fts-backend-lucene.c +++ b/src/plugins/fts-lucene/fts-backend-lucene.c @@ -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, diff --git a/src/plugins/fts-solr/fts-backend-solr.c b/src/plugins/fts-solr/fts-backend-solr.c index fbd8d5a38e..2bb83f81c4 100644 --- a/src/plugins/fts-solr/fts-backend-solr.c +++ b/src/plugins/fts-solr/fts-backend-solr.c @@ -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; } diff --git a/src/plugins/lazy-expunge/lazy-expunge-plugin.c b/src/plugins/lazy-expunge/lazy-expunge-plugin.c index 7bdf507ac4..b6a489843a 100644 --- a/src/plugins/lazy-expunge/lazy-expunge-plugin.c +++ b/src/plugins/lazy-expunge/lazy-expunge-plugin.c @@ -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) diff --git a/src/plugins/mail-crypt/fs-crypt-common.c b/src/plugins/mail-crypt/fs-crypt-common.c index e6203c3c72..1651dc9ea1 100644 --- a/src/plugins/mail-crypt/fs-crypt-common.c +++ b/src/plugins/mail-crypt/fs-crypt-common.c @@ -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 && diff --git a/src/plugins/quota/quota-storage.c b/src/plugins/quota/quota-storage.c index fb73048c94..a1d08ee580 100644 --- a/src/plugins/quota/quota-storage.c +++ b/src/plugins/quota/quota-storage.c @@ -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; diff --git a/src/plugins/replication/replication-plugin.c b/src/plugins/replication/replication-plugin.c index 8d32b0c4a5..9b4bb089e3 100644 --- a/src/plugins/replication/replication-plugin.c +++ b/src/plugins/replication/replication-plugin.c @@ -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 diff --git a/src/plugins/virtual/virtual-storage.c b/src/plugins/virtual/virtual-storage.c index 7d6f5c3f05..6c7261a87a 100644 --- a/src/plugins/virtual/virtual-storage.c +++ b/src/plugins/virtual/virtual-storage.c @@ -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); diff --git a/src/plugins/virtual/virtual-sync.c b/src/plugins/virtual/virtual-sync.c index 6727738740..f6df776711 100644 --- a/src/plugins/virtual/virtual-sync.c +++ b/src/plugins/virtual/virtual-sync.c @@ -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); diff --git a/src/util/rawlog.c b/src/util/rawlog.c index 6a439791f1..71388cb8cb 100644 --- a/src/util/rawlog.c +++ b/src/util/rawlog.c @@ -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;