No OOM in vim_strnsave_up()

And some cleanup in strsave_up()
This commit is contained in:
Felipe Oliveira Carvalho
2014-05-30 21:51:03 -03:00
parent d0fe14fdfe
commit f7e64c3c5f
2 changed files with 10 additions and 22 deletions

View File

@@ -13,6 +13,7 @@
#include "nvim/ex_docmd.h" #include "nvim/ex_docmd.h"
#include "nvim/ex_getln.h" #include "nvim/ex_getln.h"
#include "nvim/fileio.h" #include "nvim/fileio.h"
#include "nvim/func_attr.h"
#include "nvim/fold.h" #include "nvim/fold.h"
#include "nvim/getchar.h" #include "nvim/getchar.h"
#include "nvim/mark.h" #include "nvim/mark.h"
@@ -214,11 +215,9 @@ char_u *vim_strsave_up(char_u *string)
* Like vim_strnsave(), but make all characters uppercase. * Like vim_strnsave(), but make all characters uppercase.
* This uses ASCII lower-to-upper case translation, language independent. * This uses ASCII lower-to-upper case translation, language independent.
*/ */
char_u *vim_strnsave_up(char_u *string, int len) char_u *vim_strnsave_up(char_u *string, int len) FUNC_ATTR_NONNULL_RET
{ {
char_u *p1; char_u *p1 = vim_strnsave(string, len);
p1 = vim_strnsave(string, len);
vim_strup(p1); vim_strup(p1);
return p1; return p1;
} }
@@ -251,19 +250,16 @@ char_u *strup_save(char_u *orig)
int l; int l;
if (enc_utf8) { if (enc_utf8) {
int c, uc; int c = utf_ptr2char(p);
int newl; int uc = utf_toupper(c);
char_u *s;
c = utf_ptr2char(p);
uc = utf_toupper(c);
/* Reallocate string when byte count changes. This is rare, /* Reallocate string when byte count changes. This is rare,
* thus it's OK to do another malloc()/free(). */ * thus it's OK to do another malloc()/free(). */
l = utf_ptr2len(p); l = utf_ptr2len(p);
newl = utf_char2len(uc); int newl = utf_char2len(uc);
if (newl != l) { if (newl != l) {
s = xmalloc(STRLEN(res) + 1 + newl - l); // TODO(philix): use xrealloc() in strup_save()
char_u *s = xmalloc(STRLEN(res) + 1 + newl - l);
memmove(s, res, p - res); memmove(s, res, p - res);
STRCPY(s + (p - res) + newl, p + l); STRCPY(s + (p - res) + newl, p + l);
p = s + (p - res); p = s + (p - res);

View File

@@ -4399,10 +4399,6 @@ syn_cmd_region (
++key_end; ++key_end;
free(key); free(key);
key = vim_strnsave_up(rest, (int)(key_end - rest)); key = vim_strnsave_up(rest, (int)(key_end - rest));
if (key == NULL) { /* out of memory */
rest = NULL;
break;
}
if (STRCMP(key, "MATCHGROUP") == 0) if (STRCMP(key, "MATCHGROUP") == 0)
item = ITEM_MATCHGROUP; item = ITEM_MATCHGROUP;
else if (STRCMP(key, "START") == 0) else if (STRCMP(key, "START") == 0)
@@ -4692,12 +4688,8 @@ static void syn_combine_list(short **clstr1, short **clstr2, int list_op)
*/ */
static int syn_scl_name2id(char_u *name) static int syn_scl_name2id(char_u *name)
{ {
char_u *name_u; // Avoid using stricmp() too much, it's slow on some systems
char_u *name_u = vim_strsave_up(name);
/* Avoid using stricmp() too much, it's slow on some systems */
name_u = vim_strsave_up(name);
if (name_u == NULL)
return 0;
int i; int i;
for (i = curwin->w_s->b_syn_clusters.ga_len; --i >= 0; ) { for (i = curwin->w_s->b_syn_clusters.ga_len; --i >= 0; ) {
if (SYN_CLSTR(curwin->w_s)[i].scl_name_u != NULL if (SYN_CLSTR(curwin->w_s)[i].scl_name_u != NULL