if (!m)
m = *pm = av_mallocz(sizeof(*m));
+ if (!m)
+ goto err_out;
if (tag) {
if (flags & AV_DICT_DONT_OVERWRITE) {
m->elems[m->count].key = (char*)(intptr_t)key;
else
m->elems[m->count].key = av_strdup(key);
+ if (!m->elems[m->count].key)
+ goto err_out;
if (flags & AV_DICT_DONT_STRDUP_VAL) {
m->elems[m->count].value = (char*)(intptr_t)value;
} else if (oldval && flags & AV_DICT_APPEND) {
m->count++;
}
if (!m->count) {
- av_free(m->elems);
+ av_freep(&m->elems);
av_freep(pm);
}
return 0;
err_out:
- if (!m->count) {
- av_free(m->elems);
+ if (m && !m->count) {
+ av_freep(&m->elems);
av_freep(pm);
}
if (flags & AV_DICT_DONT_STRDUP_KEY) av_free((void*)key);
if (m) {
while (m->count--) {
- av_free(m->elems[m->count].key);
- av_free(m->elems[m->count].value);
+ av_freep(&m->elems[m->count].key);
+ av_freep(&m->elems[m->count].value);
}
- av_free(m->elems);
+ av_freep(&m->elems);
}
av_freep(pm);
}