Skip to content

Commit

Permalink
exmdb_provider: replace common_util_get_propvals with TPROPVAL_ARRAY:…
Browse files Browse the repository at this point in the history
…:get

The functions really are the same, despite the different allocation strategies
in the mutating functions (common_util_set_propvals vs. TPROPVAL_ARRAY::set).
  • Loading branch information
jengelh committed Nov 22, 2021
1 parent 04eab13 commit bf2790b
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 125 deletions.
25 changes: 6 additions & 19 deletions exch/exmdb_provider/common_util.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -130,19 +130,6 @@ void common_util_remove_propvals(
}
}

void* common_util_get_propvals(
const TPROPVAL_ARRAY *parray, uint32_t proptag)
{
int i;

for (i=0; i<parray->count; i++) {
if (proptag == parray->ppropval[i].proptag) {
return (void*)parray->ppropval[i].pvalue;
}
}
return NULL;
}

BOOL common_util_essdn_to_username(const char *pessdn,
char *username, size_t ulen)
{
Expand Down Expand Up @@ -887,8 +874,8 @@ BOOL cu_check_msgsize_overflow(sqlite3 *psqlite, uint32_t qtag)
0, 0, psqlite, &proptags, &propvals)) {
return FALSE;
}
auto ptotal = static_cast<uint64_t *>(common_util_get_propvals(&propvals, PR_MESSAGE_SIZE_EXTENDED));
auto qv_kb = static_cast<uint32_t *>(common_util_get_propvals(&propvals, qtag));
auto ptotal = propvals.get<uint64_t>(PR_MESSAGE_SIZE_EXTENDED);
auto qv_kb = propvals.get<uint32_t>(qtag);
return ptotal != nullptr && qv_kb != nullptr &&
*ptotal >= static_cast<uint64_t>(*qv_kb) * 1024;
}
Expand Down Expand Up @@ -5431,15 +5418,15 @@ BOOL common_util_recipients_to_list(
if (NULL == pnode) {
return FALSE;
}
pnode->pdata = common_util_get_propvals(prcpts->pparray[i], PR_SMTP_ADDRESS);
pnode->pdata = prcpts->pparray[i]->getval(PR_SMTP_ADDRESS);
if (NULL != pnode->pdata) {
double_list_append_as_tail(plist, pnode);
continue;
}
pvalue = common_util_get_propvals(prcpts->pparray[i], PR_ADDRTYPE);
pvalue = prcpts->pparray[i]->getval(PR_ADDRTYPE);
if (NULL == pvalue) {
CONVERT_ENTRYID:
pvalue = common_util_get_propvals(prcpts->pparray[i], PR_ENTRYID);
pvalue = prcpts->pparray[i]->getval(PR_ENTRYID);
if (NULL == pvalue) {
return FALSE;
}
Expand All @@ -5452,7 +5439,7 @@ BOOL common_util_recipients_to_list(
return FALSE;
} else {
if (strcasecmp(static_cast<char *>(pvalue), "SMTP") == 0) {
pnode->pdata = common_util_get_propvals(prcpts->pparray[i], PR_EMAIL_ADDRESS);
pnode->pdata = prcpts->pparray[i]->getval(PR_EMAIL_ADDRESS);
if (NULL == pnode->pdata) {
goto CONVERT_ENTRYID;
}
Expand Down
2 changes: 0 additions & 2 deletions exch/exmdb_provider/common_util.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,6 @@ void common_util_set_propvals(TPROPVAL_ARRAY *parray,
const TAGGED_PROPVAL *ppropval);
void common_util_remove_propvals(
TPROPVAL_ARRAY *parray, uint32_t proptag);
void* common_util_get_propvals(
const TPROPVAL_ARRAY *parray, uint32_t proptag);
extern BOOL common_util_essdn_to_username(const char *pessdn, char *username, size_t);
extern BOOL common_util_username_to_essdn(const char *username, char *dn, size_t);
void common_util_pass_service(int service_id, void *func);
Expand Down
81 changes: 30 additions & 51 deletions exch/exmdb_provider/folder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -400,7 +400,6 @@ BOOL exmdb_server_create_folder_by_properties(const char *dir,
uint32_t cpid, const TPROPVAL_ARRAY *pproperties,
uint64_t *pfolder_id)
{
void *pvalue;
uint32_t art;
uint32_t hcn;
uint32_t type;
Expand All @@ -421,7 +420,7 @@ BOOL exmdb_server_create_folder_by_properties(const char *dir,
TAGGED_PROPVAL tmp_propval;
PROBLEM_ARRAY tmp_problems;

pvalue = common_util_get_propvals(pproperties, PROP_TAG_FOLDERID);
auto pvalue = pproperties->getval(PROP_TAG_FOLDERID);
if (NULL == pvalue) {
tmp_fid = 0;
} else {
Expand All @@ -430,20 +429,20 @@ BOOL exmdb_server_create_folder_by_properties(const char *dir,
(TPROPVAL_ARRAY*)pproperties, PROP_TAG_FOLDERID);
}
*pfolder_id = 0;
pvalue = common_util_get_propvals(pproperties, PROP_TAG_PARENTFOLDERID);
pvalue = pproperties->getval(PROP_TAG_PARENTFOLDERID);
if (pvalue == nullptr || rop_util_get_replid(*static_cast<uint64_t *>(pvalue)) != 1) {
fprintf(stderr, "E-1581: create_folder_b_p request with no parent or wrong EID\n");
return TRUE;
}
parent_id = rop_util_get_gc_value(*(uint64_t*)pvalue);
common_util_remove_propvals(
(TPROPVAL_ARRAY*)pproperties, PROP_TAG_PARENTFOLDERID);
pname = static_cast<char *>(common_util_get_propvals(pproperties, PR_DISPLAY_NAME));
pname = pproperties->get<char>(PR_DISPLAY_NAME);
if (pname == nullptr) {
fprintf(stderr, "E-1582: create_folder_b_p request with no name\n");
return TRUE;
}
pvalue = common_util_get_propvals(pproperties, PROP_TAG_CHANGENUMBER);
pvalue = pproperties->getval(PROP_TAG_CHANGENUMBER);
if (pvalue == nullptr) {
fprintf(stderr, "E-1583: create_folder_b_p request without CN\n");
return TRUE;
Expand All @@ -455,7 +454,7 @@ BOOL exmdb_server_create_folder_by_properties(const char *dir,
fprintf(stderr, "E-1584: create_folder_b_p request without PCL\n");
return TRUE;
}
pvalue = common_util_get_propvals(pproperties, PR_FOLDER_TYPE);
pvalue = pproperties->getval(PR_FOLDER_TYPE);
if (NULL == pvalue) {
type = FOLDER_GENERIC;
} else {
Expand Down Expand Up @@ -2503,19 +2502,19 @@ BOOL exmdb_server_empty_folder_permission(
static bool ufp_add(const TPROPVAL_ARRAY &propvals, db_item_ptr &pdb,
bool b_freebusy, uint64_t fid_val, xstmt &pstmt)
{
auto pvalue = common_util_get_propvals(&propvals, PR_ENTRYID);
auto pvalue = propvals.getval(PR_ENTRYID);
char username[UADDR_SIZE];
if (NULL != pvalue) {
if (!common_util_addressbook_entryid_to_username(static_cast<BINARY *>(pvalue), username, GX_ARRAY_SIZE(username)))
return true;
} else {
pvalue = common_util_get_propvals(&propvals, PR_SMTP_ADDRESS);
pvalue = propvals.getval(PR_SMTP_ADDRESS);
if (NULL == pvalue) {
return true;
}
gx_strlcpy(username, static_cast<char *>(pvalue), GX_ARRAY_SIZE(username));
}
pvalue = common_util_get_propvals(&propvals, PROP_TAG_MEMBERRIGHTS);
pvalue = propvals.getval(PROP_TAG_MEMBERRIGHTS);
if (NULL == pvalue) {
return true;
}
Expand Down Expand Up @@ -2555,7 +2554,7 @@ static bool ufp_modify(const TPROPVAL_ARRAY &propvals, db_item_ptr &pdb,
bool b_freebusy, uint64_t fid_val)
{
static constexpr uint64_t DEFAULT = 0, ANONYMOUS = UINT64_MAX;
auto pvalue = common_util_get_propvals(&propvals, PROP_TAG_MEMBERID);
auto pvalue = propvals.getval(PROP_TAG_MEMBERID);
if (NULL == pvalue) {
return true;
}
Expand Down Expand Up @@ -2610,7 +2609,7 @@ static bool ufp_modify(const TPROPVAL_ARRAY &propvals, db_item_ptr &pdb,
gx_sql_col_uint64(pstmt1, 0) != fid_val)
return true;
pstmt1.finalize();
pvalue = common_util_get_propvals(&propvals, PROP_TAG_MEMBERRIGHTS);
pvalue = propvals.getval(PROP_TAG_MEMBERRIGHTS);
if (NULL == pvalue) {
return true;
}
Expand Down Expand Up @@ -2640,7 +2639,7 @@ static bool ufp_modify(const TPROPVAL_ARRAY &propvals, db_item_ptr &pdb,
static bool ufp_remove(const TPROPVAL_ARRAY &propvals, db_item_ptr &pdb,
uint64_t fid_val)
{
auto pvalue = common_util_get_propvals(&propvals, PROP_TAG_MEMBERID);
auto pvalue = propvals.getval(PROP_TAG_MEMBERID);
if (NULL == pvalue) {
return true;
}
Expand Down Expand Up @@ -2744,20 +2743,12 @@ BOOL exmdb_server_update_folder_rule(const char *dir,
const RULE_DATA *prow, BOOL *pb_exceed)
{
int i;
char *pname;
void *pvalue;
uint32_t state;
char *pprovider;
uint32_t seq_id;
uint64_t fid_val;
uint64_t rule_id;
uint32_t *plevel;
EXT_PUSH ext_push;
char sql_string[256];
BINARY *pprovider_bin;
uint32_t *puser_flags;
RULE_ACTIONS *paction;
RESTRICTION *pcondition;
char action_buff[256*1024];
char condition_buff[256*1024];

Expand All @@ -2783,14 +2774,12 @@ BOOL exmdb_server_update_folder_rule(const char *dir,
sqlite3_exec(pdb->psqlite, "ROLLBACK", NULL, NULL, NULL);
return TRUE;
}
pname = static_cast<char *>(common_util_get_propvals(
&prow[i].propvals, PR_RULE_NAME));
pprovider = static_cast<char *>(common_util_get_propvals(
&prow[i].propvals, PR_RULE_PROVIDER));
auto pname = prow[i].propvals.get<const char>(PR_RULE_NAME);
auto pprovider = prow[i].propvals.get<const char>(PR_RULE_PROVIDER);
if (NULL == pprovider) {
continue;
}
pvalue = common_util_get_propvals(&prow[i].propvals, PR_RULE_SEQUENCE);
auto pvalue = prow[i].propvals.getval(PR_RULE_SEQUENCE);
if (NULL == pvalue) {
snprintf(sql_string, arsizeof(sql_string), "SELECT max(sequence)"
" FROM rules WHERE folder_id=%llu", LLU(fid_val));
Expand All @@ -2804,25 +2793,20 @@ BOOL exmdb_server_update_folder_rule(const char *dir,
} else {
seq_id = *(uint32_t*)pvalue;
}
pvalue = common_util_get_propvals(&prow[i].propvals, PR_RULE_STATE);
pvalue = prow[i].propvals.getval(PR_RULE_STATE);
state = pvalue == nullptr ? 0 : *static_cast<uint32_t *>(pvalue);
plevel = static_cast<uint32_t *>(common_util_get_propvals(
&prow[i].propvals, PR_RULE_LEVEL));
puser_flags = static_cast<uint32_t *>(common_util_get_propvals(
&prow[i].propvals, PR_RULE_USER_FLAGS));
pprovider_bin = static_cast<BINARY *>(common_util_get_propvals(
&prow[i].propvals, PR_RULE_PROVIDER_DATA));
pcondition = static_cast<RESTRICTION *>(common_util_get_propvals(
&prow[i].propvals, PR_RULE_CONDITION));
auto plevel = prow[i].propvals.get<const uint32_t>(PR_RULE_LEVEL);
auto puser_flags = prow[i].propvals.get<const uint32_t>(PR_RULE_USER_FLAGS);
auto pprovider_bin = prow[i].propvals.get<const BINARY>(PR_RULE_PROVIDER_DATA);
auto pcondition = prow[i].propvals.get<RESTRICTION>(PR_RULE_CONDITION);
if (NULL == pcondition) {
continue;
}
if (!ext_push.init(condition_buff, sizeof(condition_buff), 0) ||
ext_push.p_restriction(pcondition) != EXT_ERR_SUCCESS)
goto RULE_FAILURE;
int condition_len = ext_push.m_offset;
paction = static_cast<RULE_ACTIONS *>(common_util_get_propvals(
&prow[i].propvals, PR_RULE_ACTIONS));
auto paction = prow[i].propvals.get<RULE_ACTIONS>(PR_RULE_ACTIONS);
if (NULL == paction) {
continue;
}
Expand Down Expand Up @@ -2870,7 +2854,7 @@ BOOL exmdb_server_update_folder_rule(const char *dir,
break;
}
case ROW_MODIFY: {
pvalue = common_util_get_propvals(&prow[i].propvals, PR_RULE_ID);
auto pvalue = prow[i].propvals.getval(PR_RULE_ID);
if (NULL == pvalue) {
continue;
}
Expand All @@ -2884,7 +2868,7 @@ BOOL exmdb_server_update_folder_rule(const char *dir,
gx_sql_col_uint64(pstmt1, 0) != fid_val)
continue;
pstmt1.finalize();
pprovider = static_cast<char *>(common_util_get_propvals(&prow[i].propvals, PR_RULE_PROVIDER));
auto pprovider = prow[i].propvals.get<const char>(PR_RULE_PROVIDER);
if (NULL != pprovider) {
snprintf(sql_string, arsizeof(sql_string), "UPDATE rules SET"
" provider=? WHERE rule_id=%llu", LLU(rule_id));
Expand All @@ -2897,7 +2881,7 @@ BOOL exmdb_server_update_folder_rule(const char *dir,
}
pstmt1.finalize();
}
pvalue = common_util_get_propvals(&prow[i].propvals, PR_RULE_SEQUENCE);
pvalue = prow[i].propvals.getval(PR_RULE_SEQUENCE);
if (NULL != pvalue) {
seq_id = *(uint32_t*)pvalue;
snprintf(sql_string, arsizeof(sql_string), "UPDATE rules SET sequence=%u"
Expand All @@ -2907,7 +2891,7 @@ BOOL exmdb_server_update_folder_rule(const char *dir,
goto RULE_FAILURE;
}
}
pvalue = common_util_get_propvals(&prow[i].propvals, PR_RULE_STATE);
pvalue = prow[i].propvals.getval(PR_RULE_STATE);
if (NULL != pvalue) {
state = *(uint32_t*)pvalue;
snprintf(sql_string, arsizeof(sql_string), "UPDATE rules SET state=%u"
Expand All @@ -2917,8 +2901,7 @@ BOOL exmdb_server_update_folder_rule(const char *dir,
goto RULE_FAILURE;
}
}
plevel = static_cast<uint32_t *>(common_util_get_propvals(
&prow[i].propvals, PR_RULE_LEVEL));
auto plevel = prow[i].propvals.get<uint32_t>(PR_RULE_LEVEL);
if (NULL != plevel) {
snprintf(sql_string, arsizeof(sql_string), "UPDATE rules SET level=%u"
" WHERE rule_id=%llu", *plevel, LLU(rule_id));
Expand All @@ -2927,8 +2910,7 @@ BOOL exmdb_server_update_folder_rule(const char *dir,
goto RULE_FAILURE;
}
}
puser_flags = static_cast<uint32_t *>(common_util_get_propvals(
&prow[i].propvals, PR_RULE_USER_FLAGS));
auto puser_flags = prow[i].propvals.get<uint32_t>(PR_RULE_USER_FLAGS);
if (NULL != puser_flags) {
snprintf(sql_string, arsizeof(sql_string), "UPDATE rules SET user_flags=%u"
" WHERE rule_id=%llu", *puser_flags, LLU(rule_id));
Expand All @@ -2937,8 +2919,7 @@ BOOL exmdb_server_update_folder_rule(const char *dir,
goto RULE_FAILURE;
}
}
pprovider_bin = static_cast<BINARY *>(common_util_get_propvals(
&prow[i].propvals, PR_RULE_PROVIDER_DATA));
auto pprovider_bin = prow[i].propvals.get<BINARY>(PR_RULE_PROVIDER_DATA);
if (NULL != pprovider_bin) {
snprintf(sql_string, arsizeof(sql_string), "UPDATE rules SET "
"provider_data=? WHERE rule_id=%llu", LLU(rule_id));
Expand All @@ -2952,8 +2933,7 @@ BOOL exmdb_server_update_folder_rule(const char *dir,
}
pstmt1.finalize();
}
pcondition = static_cast<RESTRICTION *>(common_util_get_propvals(
&prow[i].propvals, PR_RULE_CONDITION));
auto pcondition = prow[i].propvals.get<RESTRICTION>(PR_RULE_CONDITION);
if (NULL != pcondition) {
if (!ext_push.init(condition_buff, sizeof(condition_buff), 0) ||
ext_push.p_restriction(pcondition) != EXT_ERR_SUCCESS)
Expand All @@ -2972,8 +2952,7 @@ BOOL exmdb_server_update_folder_rule(const char *dir,
}
pstmt1.finalize();
}
paction = static_cast<RULE_ACTIONS *>(common_util_get_propvals(
&prow[i].propvals, PR_RULE_ACTIONS));
auto paction = prow[i].propvals.get<RULE_ACTIONS>(PR_RULE_ACTIONS);
if (NULL != paction) {
if (!ext_push.init(action_buff, sizeof(action_buff), 0) ||
ext_push.p_rule_actions(paction) != EXT_ERR_SUCCESS)
Expand All @@ -2995,7 +2974,7 @@ BOOL exmdb_server_update_folder_rule(const char *dir,
break;
}
case ROW_REMOVE: {
pvalue = common_util_get_propvals(&prow[i].propvals, PR_RULE_ID);
auto pvalue = prow[i].propvals.getval(PR_RULE_ID);
if (NULL == pvalue) {
continue;
}
Expand Down
Loading

0 comments on commit bf2790b

Please sign in to comment.