static void cmd_dict_unset(int argc, char *argv[]) { struct dict *dict; struct dict_transaction_context *trans; dict = cmd_dict_init(&argc, &argv, 1, 0, cmd_dict_unset); trans = dict_transaction_begin(dict); dict_unset(trans, argv[0]); if (dict_transaction_commit(&trans) <= 0) { i_error("dict_transaction_commit() failed"); doveadm_exit_code = EX_TEMPFAIL; } dict_deinit(&dict); }
int main(int argc, char *argv[]) { dicthdl d = dict_new(false, 1, NULL); dict_set(d, "hola", "lola"); dict_set(d, "pita", "chula"); puts(dict_get(d, "hola")); puts(dict_get(d, "pita")); dict_unset(d, "hola"); dict_get(d, "hola"); puts(dict_get(d, "pita")); dict_free(d); return EXIT_SUCCESS; }
int index_storage_attribute_set(struct mailbox_transaction_context *t, enum mail_attribute_type type, const char *key, const struct mail_attribute_value *value, bool internal_attribute) { struct dict_transaction_context *dtrans; const char *mailbox_prefix; bool pvt = type == MAIL_ATTRIBUTE_TYPE_PRIVATE; time_t ts = value->last_change != 0 ? value->last_change : ioloop_time; int ret = 0; if (!internal_attribute && !MAILBOX_ATTRIBUTE_KEY_IS_USER_ACCESSIBLE(key)) { mail_storage_set_error(t->box->storage, MAIL_ERROR_PARAMS, "Internal attributes cannot be changed directly"); return -1; } if (index_storage_attribute_get_dict_trans(t, type, &dtrans, &mailbox_prefix) < 0) return -1; T_BEGIN { const char *prefixed_key = key_get_prefixed(type, mailbox_prefix, key); const char *value_str; if (mailbox_attribute_value_to_string(t->box->storage, value, &value_str) < 0) { ret = -1; } else if (value_str != NULL) { dict_set(dtrans, prefixed_key, value_str); mail_index_attribute_set(t->itrans, pvt, key, ts, strlen(value_str)); } else { dict_unset(dtrans, prefixed_key); mail_index_attribute_unset(t->itrans, pvt, key, ts); } } T_END; return ret; }