[hackers] [sbase] Allocate the arg buffer once to its maximum size || sin
commit 1233cf31e5e2a5e40652dcaea3410967974705b6
Author: sin <sin_AT_2f30.org>
Date: Tue Jan 7 16:26:55 2014 +0000
Allocate the arg buffer once to its maximum size
diff --git a/xargs.c b/xargs.c
index d18cb88..1c7b437 100644
--- a/xargs.c
+++ b/xargs.c
_AT_@ -14,7 +14,7 @@ enum {
static int inputc(void);
static void deinputc(int);
-static void fillargbuf(int);
+static int fillargbuf(int);
static int eatspace(void);
static int parsequote(int);
static int parseescape(void);
_AT_@ -25,8 +25,8 @@ static void runcmd(void);
static char **cmd;
static char *argb;
-static size_t argbsz = 1;
-static size_t argbpos;
+static long argmaxsz;
+static long argbpos;
static int nerrors = 0;
static char *eofstr;
static int rflag = 0;
_AT_@ -40,7 +40,7 @@ usage(void)
int
main(int argc, char *argv[])
{
- long argsz, argmaxsz;
+ long argsz;
char *arg;
int i;
_AT_@ -65,7 +65,7 @@ main(int argc, char *argv[])
if (!cmd)
eprintf("malloc:");
- argb = malloc(argbsz);
+ argb = malloc(argmaxsz);
if (!argb)
eprintf("malloc:");
_AT_@ -120,16 +120,13 @@ deinputc(int ch)
ungetc(ch, stdin);
}
-static void
+static int
fillargbuf(int ch)
{
- if (argbpos >= argbsz) {
- argbsz *= 2;
- argb = realloc(argb, argbsz);
- if (!argb)
- eprintf("realloc:");
- }
+ if (argbpos >= argmaxsz)
+ return -1;
argb[argbpos] = ch;
+ return 0;
}
static int
_AT_@ -156,11 +153,13 @@ parsequote(int q)
while ((ch = inputc()) != EOF) {
if (ch == q) {
- fillargbuf('
Received on Tue Jan 07 2014 - 18:04:43 CET
This archive was generated by hypermail 2.3.0
: Tue Jan 07 2014 - 18:12:10 CET