Prefer ialloc for wordsplit

* lib/wordsplit.c (alloc_space, wsplt_assign_var, expvar)
(wordsplit_tildexpand, wordsplit_pathexpand)
(wordsplit_get_words): Use ialloc API on idx_t args.
This commit is contained in:
Paul Eggert
2024-08-04 00:24:15 -07:00
parent 9a2344b183
commit 83926613a4

View File

@@ -342,7 +342,7 @@ alloc_space (struct wordsplit *wsp, idx_t count)
wordn = offs_plus_count <= ALLOC_INIT ? ALLOC_INIT : offs_plus_count; wordn = offs_plus_count <= ALLOC_INIT ? ALLOC_INIT : offs_plus_count;
/* Use calloc so that the initial ws_offs words are zero. */ /* Use calloc so that the initial ws_offs words are zero. */
wordv = calloc (wordn, sizeof *wordv); wordv = icalloc (wordn, sizeof *wordv);
} }
else else
{ {
@@ -356,11 +356,11 @@ alloc_space (struct wordsplit *wsp, idx_t count)
idx_t halfn = wsp->ws_wordn >> 1; idx_t halfn = wsp->ws_wordn >> 1;
wordv = (halfn <= minincr || ckd_add (&wordn, wsp->ws_wordn, halfn) wordv = (halfn <= minincr || ckd_add (&wordn, wsp->ws_wordn, halfn)
? nullptr ? nullptr
: reallocarray (wsp->ws_wordv, wordn, sizeof *wordv)); : ireallocarray (wsp->ws_wordv, wordn, sizeof *wordv));
if (!wordv) if (!wordv)
wordv = (ckd_add (&wordn, wsp->ws_wordn, minincr) wordv = (ckd_add (&wordn, wsp->ws_wordn, minincr)
? nullptr ? nullptr
: reallocarray (wsp->ws_wordv, wordn, sizeof *wordv)); : ireallocarray (wsp->ws_wordv, wordn, sizeof *wordv));
} }
if (!wordv) if (!wordv)
@@ -1081,7 +1081,7 @@ wsplt_assign_var (struct wordsplit *wsp, char const *name, idx_t namelen,
sz = i + n + 1; sz = i + n + 1;
newenv = calloc (sz, sizeof *newenv); newenv = icalloc (sz, sizeof *newenv);
if (!newenv) if (!newenv)
return _wsplt_nomem (wsp); return _wsplt_nomem (wsp);
@@ -1120,7 +1120,7 @@ wsplt_assign_var (struct wordsplit *wsp, char const *name, idx_t namelen,
{ {
if (ckd_add (&wsp->ws_envsiz, wsp->ws_envsiz, wsp->ws_envsiz >> 1)) if (ckd_add (&wsp->ws_envsiz, wsp->ws_envsiz, wsp->ws_envsiz >> 1))
return _wsplt_nomem (wsp); return _wsplt_nomem (wsp);
newenv = reallocarray (wsp->ws_envbuf, newenv = ireallocarray (wsp->ws_envbuf,
wsp->ws_envsiz, sizeof *newenv); wsp->ws_envsiz, sizeof *newenv);
if (!newenv) if (!newenv)
return _wsplt_nomem (wsp); return _wsplt_nomem (wsp);
@@ -1441,7 +1441,7 @@ expvar (struct wordsplit *wsp, char const *str, idx_t len,
wsnode_insert (wsp, newnode, *ptail); wsnode_insert (wsp, newnode, *ptail);
*ptail = newnode; *ptail = newnode;
newnode->flags = _WSNF_WORD | _WSNF_NOEXPAND | flg; newnode->flags = _WSNF_WORD | _WSNF_NOEXPAND | flg;
newnode->v.word = malloc (size + 1); newnode->v.word = imalloc (size + 1);
if (!newnode->v.word) if (!newnode->v.word)
return _wsplt_nomem (wsp); return _wsplt_nomem (wsp);
memcpy (newnode->v.word, start, size); memcpy (newnode->v.word, start, size);
@@ -1747,10 +1747,9 @@ wordsplit_tildexpand (struct wordsplit *wsp)
str = wsnode_ptr (wsp, p); str = wsnode_ptr (wsp, p);
if (str[0] == '~') if (str[0] == '~')
{ {
idx_t i, size, dlen; idx_t i;
idx_t slen = wsnode_len (p); idx_t slen = wsnode_len (p);
struct passwd *pw; struct passwd *pw;
char *newstr;
for (i = 1; i < slen && str[i] != '/'; i++) for (i = 1; i < slen && str[i] != '/'; i++)
; ;
@@ -1760,7 +1759,7 @@ wordsplit_tildexpand (struct wordsplit *wsp)
{ {
if (i > usize) if (i > usize)
{ {
char *p = realloc (uname, i); char *p = irealloc (uname, i);
if (!p) if (!p)
{ {
free (uname); free (uname);
@@ -1780,9 +1779,9 @@ wordsplit_tildexpand (struct wordsplit *wsp)
if (!pw) if (!pw)
continue; continue;
dlen = strlen (pw->pw_dir); idx_t dlen = strlen (pw->pw_dir);
size = slen - i + dlen; idx_t size = slen - i + dlen;
newstr = malloc (size); char *newstr = imalloc (size);
if (!newstr) if (!newstr)
{ {
free (uname); free (uname);
@@ -1844,9 +1843,8 @@ wordsplit_pathexpand (struct wordsplit *wsp)
int i; int i;
glob_t g; glob_t g;
struct wordsplit_node *prev; struct wordsplit_node *prev;
char *pattern;
pattern = malloc (slen + 1); char *pattern = imalloc (slen + 1);
if (!pattern) if (!pattern)
return _wsplt_nomem (wsp); return _wsplt_nomem (wsp);
memcpy (pattern, str, slen); memcpy (pattern, str, slen);
@@ -2560,7 +2558,7 @@ void
wordsplit_get_words (struct wordsplit *ws, idx_t *wordc, char ***wordv) wordsplit_get_words (struct wordsplit *ws, idx_t *wordc, char ***wordv)
{ {
/* Tell the memory manager that ws->ws_wordv can be shrunk. */ /* Tell the memory manager that ws->ws_wordv can be shrunk. */
char **p = realloc (ws->ws_wordv, char **p = irealloc (ws->ws_wordv,
(ws->ws_wordc + 1) * sizeof (ws->ws_wordv[0])); (ws->ws_wordc + 1) * sizeof (ws->ws_wordv[0]));
*wordv = p ? p : ws->ws_wordv; *wordv = p ? p : ws->ws_wordv;
*wordc = ws->ws_wordc; *wordc = ws->ws_wordc;