Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c4edb9ec authored by Dima Zavin's avatar Dima Zavin Committed by Android (Google) Code Review
Browse files

Merge "cutils: str_parms: when deleting entry, need to also remove key"

parents b1108c85 efd7501d
Loading
Loading
Loading
Loading
+44 −9
Original line number Diff line number Diff line
@@ -70,19 +70,57 @@ err:
    return NULL;
}

struct remove_ctxt {
    struct str_parms *str_parms;
    const char *key;
};

static bool remove_pair(void *key, void *value, void *context)
{
    struct str_parms *str_parms = context;
    struct remove_ctxt *ctxt = context;
    bool should_continue;

    /*
     * - if key is not supplied, then we are removing all entries,
     *   so remove key and continue (i.e. return true)
     * - if key is supplied and matches, then remove it and don't
     *   continue (return false). Otherwise, return true and keep searching
     *   for key.
     *
     */
    if (!ctxt->key) {
        should_continue = true;
        goto do_remove;
    } else if (!strcmp(ctxt->key, key)) {
        should_continue = false;
        goto do_remove;
    }

    return true;

    hashmapRemove(str_parms->map, key);
do_remove:
    hashmapRemove(ctxt->str_parms->map, key);
    free(key);
    free(value);
    return true;
    return should_continue;
}

void str_parms_del(struct str_parms *str_parms, const char *key)
{
    struct remove_ctxt ctxt = {
        .str_parms = str_parms,
        .key = key,
    };
    hashmapForEach(str_parms->map, remove_pair, &ctxt);
}

void str_parms_destroy(struct str_parms *str_parms)
{
    hashmapForEach(str_parms->map, remove_pair, str_parms);
    struct remove_ctxt ctxt = {
        .str_parms = str_parms,
    };

    hashmapForEach(str_parms->map, remove_pair, &ctxt);
    hashmapFree(str_parms->map);
    free(str_parms);
}
@@ -151,11 +189,6 @@ err_create_str_parms:
    return NULL;
}

void str_parms_del(struct str_parms *str_parms, const char *key)
{
    hashmapRemove(str_parms->map, (void *)key);
}

int str_parms_add_str(struct str_parms *str_parms, const char *key,
                      const char *value)
{
@@ -305,6 +338,8 @@ static void test_str_parms_str(const char *str)

    str_parms = str_parms_create_str(str);
    str_parms_add_str(str_parms, "dude", "woah");
    str_parms_add_str(str_parms, "dude", "woah");
    str_parms_del(str_parms, "dude");
    str_parms_dump(str_parms);
    out_str = str_parms_to_str(str_parms);
    str_parms_destroy(str_parms);