mirror of https://github.com/mirror/busybox.git
ash: memalloc: Add growstackto helper
Upstream commit: Date: Sat, 19 May 2018 02:39:46 +0800 memalloc: Add growstackto helper This patch adds the growstackto helper which repeatedly calls growstackblock until the requested size is reached. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>1_32_stable
parent
74aaf05170
commit
c55847fedb
29
shell/ash.c
29
shell/ash.c
|
@ -1740,6 +1740,15 @@ growstackstr(void)
|
||||||
return (char *)stackblock() + len;
|
return (char *)stackblock() + len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
growstackto(size_t len)
|
||||||
|
{
|
||||||
|
while (stackblocksize() < len)
|
||||||
|
growstackblock();
|
||||||
|
|
||||||
|
return stackblock();
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Called from CHECKSTRSPACE.
|
* Called from CHECKSTRSPACE.
|
||||||
*/
|
*/
|
||||||
|
@ -1747,18 +1756,8 @@ static char *
|
||||||
makestrspace(size_t newlen, char *p)
|
makestrspace(size_t newlen, char *p)
|
||||||
{
|
{
|
||||||
size_t len = p - g_stacknxt;
|
size_t len = p - g_stacknxt;
|
||||||
size_t size;
|
|
||||||
|
|
||||||
for (;;) {
|
return growstackto(len + newlen) + len;
|
||||||
size_t nleft;
|
|
||||||
|
|
||||||
size = stackblocksize();
|
|
||||||
nleft = size - len;
|
|
||||||
if (nleft >= newlen)
|
|
||||||
break;
|
|
||||||
growstackblock();
|
|
||||||
}
|
|
||||||
return (char *)stackblock() + len;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
|
@ -2584,9 +2583,7 @@ path_advance(const char **path, const char *name)
|
||||||
for (p = start; *p && *p != ':' && *p != '%'; p++)
|
for (p = start; *p && *p != ':' && *p != '%'; p++)
|
||||||
continue;
|
continue;
|
||||||
len = p - start + strlen(name) + 2; /* "2" is for '/' and '\0' */
|
len = p - start + strlen(name) + 2; /* "2" is for '/' and '\0' */
|
||||||
while (stackblocksize() < len)
|
q = growstackto(len);
|
||||||
growstackblock();
|
|
||||||
q = stackblock();
|
|
||||||
if (p != start) {
|
if (p != start) {
|
||||||
q = mempcpy(q, start, p - start);
|
q = mempcpy(q, start, p - start);
|
||||||
*q++ = '/';
|
*q++ = '/';
|
||||||
|
@ -12836,9 +12833,7 @@ parsebackq: {
|
||||||
/* Ignore any pushed back tokens left from the backquote parsing. */
|
/* Ignore any pushed back tokens left from the backquote parsing. */
|
||||||
if (oldstyle)
|
if (oldstyle)
|
||||||
tokpushback = 0;
|
tokpushback = 0;
|
||||||
while (stackblocksize() <= savelen)
|
out = growstackto(savelen + 1);
|
||||||
growstackblock();
|
|
||||||
STARTSTACKSTR(out);
|
|
||||||
if (str) {
|
if (str) {
|
||||||
memcpy(out, str, savelen);
|
memcpy(out, str, savelen);
|
||||||
STADJUST(savelen, out);
|
STADJUST(savelen, out);
|
||||||
|
|
Loading…
Reference in New Issue