diff options
Diffstat (limited to 'bin/sh/memalloc.h')
-rw-r--r-- | bin/sh/memalloc.h | 26 |
1 files changed, 12 insertions, 14 deletions
diff --git a/bin/sh/memalloc.h b/bin/sh/memalloc.h index 88848dd..425004e 100644 --- a/bin/sh/memalloc.h +++ b/bin/sh/memalloc.h @@ -45,8 +45,7 @@ struct stackmark { extern char *stacknxt; extern int stacknleft; -extern int sstrnleft; -extern int herefd; +extern char *sstrend; pointer ckmalloc(size_t); pointer ckrealloc(pointer, int); @@ -56,11 +55,8 @@ pointer stalloc(int); void stunalloc(pointer); void setstackmark(struct stackmark *); void popstackmark(struct stackmark *); -void growstackblock(void); -void grabstackblock(int); char *growstackstr(void); -char *makestrspace(void); -void ungrabstackstr(char *, char *); +char *makestrspace(int, char *); char *stputbin(const char *data, int len, char *p); char *stputs(const char *data, char *p); @@ -68,10 +64,11 @@ char *stputs(const char *data, char *p); #define stackblock() stacknxt #define stackblocksize() stacknleft -#define STARTSTACKSTR(p) p = stackblock(), sstrnleft = stackblocksize() -#define STPUTC(c, p) (--sstrnleft >= 0? (*p++ = (c)) : (p = growstackstr(), --sstrnleft, *p++ = (c))) -#define CHECKSTRSPACE(n, p) { if (sstrnleft < n) p = makestrspace(); } -#define USTPUTC(c, p) (--sstrnleft, *p++ = (c)) +#define grabstackblock(n) stalloc(n) +#define STARTSTACKSTR(p) p = stackblock() +#define STPUTC(c, p) do { if (p == sstrend) p = growstackstr(); *p++ = (c); } while(0) +#define CHECKSTRSPACE(n, p) { if (sstrend - p < n) p = makestrspace(n, p); } +#define USTPUTC(c, p) (*p++ = (c)) /* * STACKSTRNUL's use is where we want to be able to turn a stack * (non-sentinel, character counting string) into a C string, @@ -79,10 +76,11 @@ char *stputs(const char *data, char *p); * Note: Because of STACKSTRNUL's semantics, STACKSTRNUL cannot be used * on a stack that will grabstackstr()ed. */ -#define STACKSTRNUL(p) (sstrnleft == 0? (p = growstackstr(), *p = '\0') : (*p = '\0')) -#define STUNPUTC(p) (++sstrnleft, --p) +#define STACKSTRNUL(p) (p == sstrend ? (p = growstackstr(), *p = '\0') : (*p = '\0')) +#define STUNPUTC(p) (--p) #define STTOPC(p) p[-1] -#define STADJUST(amount, p) (p += (amount), sstrnleft -= (amount)) -#define grabstackstr(p) stalloc(stackblocksize() - sstrnleft) +#define STADJUST(amount, p) (p += (amount)) +#define grabstackstr(p) stalloc((char *)p - stackblock()) +#define ungrabstackstr(s, p) stunalloc((s)) #define STPUTBIN(s, len, p) p = stputbin((s), (len), p) #define STPUTS(s, p) p = stputs((s), p) |