aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFelipe Oliveira Carvalho <felipekde@gmail.com>2014-05-28 18:08:57 -0300
committerFelipe Oliveira Carvalho <felipekde@gmail.com>2014-06-16 01:31:34 -0300
commit6f29364632192a046839c24b8256da627fbb1067 (patch)
tree86baf6edc54d46f20c830d738bea71f33a7f9ac4 /src
parentc3f88060db0d5cd3124a580e0c2af7957d1d0912 (diff)
downloadrneovim-6f29364632192a046839c24b8256da627fbb1067.tar.gz
rneovim-6f29364632192a046839c24b8256da627fbb1067.tar.bz2
rneovim-6f29364632192a046839c24b8256da627fbb1067.zip
No OOM in dictitem_alloc()
Diffstat (limited to 'src')
-rw-r--r--src/nvim/eval.c28
1 files changed, 7 insertions, 21 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index 8a2f1520e1..249076a504 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -2237,8 +2237,6 @@ static void set_var_lval(lval_T *lp, char_u *endp, typval_T *rettv, int copy, ch
/* Need to add an item to the Dictionary. */
di = dictitem_alloc(lp->ll_newkey);
- if (di == NULL)
- return;
if (dict_add(lp->ll_tv->vval.v_dict, di) == FAIL) {
free(di);
return;
@@ -5683,7 +5681,7 @@ dict_free (
* The "key" is copied to the new item.
* Note that the value of the item "di_tv" still needs to be initialized!
*/
-dictitem_T *dictitem_alloc(char_u *key)
+dictitem_T *dictitem_alloc(char_u *key) FUNC_ATTR_NONNULL_RET
{
dictitem_T *di = xmalloc(sizeof(dictitem_T) + STRLEN(key));
STRCPY(di->di_key, key);
@@ -5756,8 +5754,6 @@ static dict_T *dict_copy(dict_T *orig, int deep, int copyID)
--todo;
di = dictitem_alloc(hi->hi_key);
- if (di == NULL)
- break;
if (deep) {
if (item_copy(&HI2DI(hi)->di_tv, &di->di_tv, deep,
copyID) == FAIL) {
@@ -5795,15 +5791,13 @@ int dict_add(dict_T *d, dictitem_T *item)
/*
* Add a number or string entry to dictionary "d".
* When "str" is NULL use number "nr", otherwise use "str".
- * Returns FAIL when out of memory and when key already exists.
+ * Returns FAIL when key already exists.
*/
int dict_add_nr_str(dict_T *d, char *key, long nr, char_u *str)
{
dictitem_T *item;
item = dictitem_alloc((char_u *)key);
- if (item == NULL)
- return FAIL;
item->di_tv.v_lock = 0;
if (str == NULL) {
item->di_tv.v_type = VAR_NUMBER;
@@ -5825,11 +5819,8 @@ int dict_add_nr_str(dict_T *d, char *key, long nr, char_u *str)
*/
int dict_add_list(dict_T *d, char *key, list_T *list)
{
- dictitem_T *item;
+ dictitem_T *item = dictitem_alloc((char_u *)key);
- item = dictitem_alloc((char_u *)key);
- if (item == NULL)
- return FAIL;
item->di_tv.v_lock = 0;
item->di_tv.v_type = VAR_LIST;
item->di_tv.vval.v_list = list;
@@ -6038,11 +6029,10 @@ static int get_dict_tv(char_u **arg, typval_T *rettv, int evaluate)
}
item = dictitem_alloc(key);
clear_tv(&tvkey);
- if (item != NULL) {
- item->di_tv = tv;
- item->di_tv.v_lock = 0;
- if (dict_add(d, item) == FAIL)
- dictitem_free(item);
+ item->di_tv = tv;
+ item->di_tv.v_lock = 0;
+ if (dict_add(d, item) == FAIL) {
+ dictitem_free(item);
}
}
@@ -17069,10 +17059,6 @@ void ex_function(exarg_T *eap)
if (fudi.fd_di == NULL) {
/* add new dict entry */
fudi.fd_di = dictitem_alloc(fudi.fd_newkey);
- if (fudi.fd_di == NULL) {
- free(fp);
- goto erret;
- }
if (dict_add(fudi.fd_dict, fudi.fd_di) == FAIL) {
free(fudi.fd_di);
free(fp);