vlc | branch: master | Thomas Guillem <[email protected]> | Sun Jun 5 17:14:44 2016 +0200| [f299ee62a46414da3269085e90f257a1d6d54012] | committer: Thomas Guillem
config: remove usage of abort > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=f299ee62a46414da3269085e90f257a1d6d54012 --- src/config/core.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/config/core.c b/src/config/core.c index 322b5f0..67a3526 100644 --- a/src/config/core.c +++ b/src/config/core.c @@ -360,8 +360,13 @@ ssize_t config_GetIntChoices (vlc_object_t *obj, const char *name, return cfg->list.i_cb(obj, name, values, texts); } - int64_t *vals = xmalloc (sizeof (*vals) * count); - char **txts = xmalloc (sizeof (*txts) * count); + int64_t *vals = malloc (sizeof (*vals) * count); + char **txts = malloc (sizeof (*txts) * count); + if (vals == NULL || txts == NULL) + { + errno = ENOMEM; + goto error; + } for (size_t i = 0; i < count; i++) { @@ -370,12 +375,22 @@ ssize_t config_GetIntChoices (vlc_object_t *obj, const char *name, txts[i] = strdup ((cfg->list_text[i] != NULL) ? vlc_gettext (cfg->list_text[i]) : ""); if (unlikely(txts[i] == NULL)) - abort (); + { + for (int j = i - 1; j >= 0; --j) + free(txts[j]); + errno = ENOMEM; + goto error; + } } *values = vals; *texts = txts; return count; +error: + + free(vals); + free(txts); + return -1; } _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
