Module Name: src Committed By: dsl Date: Sat Aug 15 16:50:29 UTC 2009
Modified Files: src/usr.bin/sort: files.c fsort.c fsort.h msort.c Log Message: linebuf and linebuf_size are only used inside seq() - which also not only has its own static variable, but will also extend the buffer. Remove linebuf/size and change seq() to use a private, locally managed buffer. To generate a diff of this commit: cvs rdiff -u -r1.30 -r1.31 src/usr.bin/sort/files.c cvs rdiff -u -r1.33 -r1.34 src/usr.bin/sort/fsort.c cvs rdiff -u -r1.13 -r1.14 src/usr.bin/sort/fsort.h cvs rdiff -u -r1.19 -r1.20 src/usr.bin/sort/msort.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/sort/files.c diff -u src/usr.bin/sort/files.c:1.30 src/usr.bin/sort/files.c:1.31 --- src/usr.bin/sort/files.c:1.30 Sat Aug 15 16:10:40 2009 +++ src/usr.bin/sort/files.c Sat Aug 15 16:50:29 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: files.c,v 1.30 2009/08/15 16:10:40 dsl Exp $ */ +/* $NetBSD: files.c,v 1.31 2009/08/15 16:50:29 dsl Exp $ */ /*- * Copyright (c) 2000-2003 The NetBSD Foundation, Inc. @@ -65,7 +65,7 @@ #include "fsort.h" #ifndef lint -__RCSID("$NetBSD: files.c,v 1.30 2009/08/15 16:10:40 dsl Exp $"); +__RCSID("$NetBSD: files.c,v 1.31 2009/08/15 16:50:29 dsl Exp $"); __SCCSID("@(#)files.c 8.1 (Berkeley) 6/6/93"); #endif /* not lint */ @@ -278,8 +278,7 @@ if (flno >= 0) fstack[flno].fp = 0; } else { - ((char *) line->data)[60] = '\000'; - warnx("makekey: line too long: ignoring %.100s...", + warnx("makekey: line too long: ignoring %.60s...", (char *)line->data); } } @@ -291,18 +290,22 @@ static int seq(FILE *fp, DBT *line) { - static u_char *buf, flag = 1; + static u_char *buf; + static size_t buf_size = DEFLLEN; u_char *end, *pos; int c; - u_char *nlinebuf; + u_char *new_buf; - if (flag) { + if (!buf) { /* one-time initialization */ - flag = 0; - buf = linebuf; + buf = malloc(buf_size); + if (!buf) + err(2, "malloc of linebuf for %zu bytes failed", + buf_size); line->data = buf; } - end = buf + linebuf_size; + + end = buf + buf_size; pos = buf; while ((c = getc(fp)) != EOF) { if ((*pos++ = c) == REC_D) { @@ -310,25 +313,28 @@ return (0); } if (pos == end) { - nlinebuf = realloc(linebuf, linebuf_size * 2); - if (!nlinebuf) - err(2, "realloc of linebuf to %lu bytes failed", - (unsigned long)linebuf_size * 2); - linebuf = nlinebuf; - linebuf_size *= 2; + /* Long line - double size of buffer */ + buf_size *= 2; + new_buf = realloc(buf, buf_size); + if (!new_buf) + err(2, "realloc of linebuf to %zu bytes failed", + buf_size); - end = linebuf + linebuf_size; - pos = linebuf + (pos - buf); - line->data = buf = linebuf; - continue; + end = new_buf + buf_size; + pos = new_buf + (pos - buf); + buf = new_buf; + line->data = buf; } } + if (pos != buf) { + /* EOF part way through line - add line terminator */ *pos++ = REC_D; line->size = pos - buf; return (0); - } else - return (EOF); + } + + return (EOF); } /* Index: src/usr.bin/sort/fsort.c diff -u src/usr.bin/sort/fsort.c:1.33 src/usr.bin/sort/fsort.c:1.34 --- src/usr.bin/sort/fsort.c:1.33 Sat Aug 15 09:48:46 2009 +++ src/usr.bin/sort/fsort.c Sat Aug 15 16:50:29 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: fsort.c,v 1.33 2009/08/15 09:48:46 dsl Exp $ */ +/* $NetBSD: fsort.c,v 1.34 2009/08/15 16:50:29 dsl Exp $ */ /*- * Copyright (c) 2000-2003 The NetBSD Foundation, Inc. @@ -72,7 +72,7 @@ #include "fsort.h" #ifndef lint -__RCSID("$NetBSD: fsort.c,v 1.33 2009/08/15 09:48:46 dsl Exp $"); +__RCSID("$NetBSD: fsort.c,v 1.34 2009/08/15 16:50:29 dsl Exp $"); __SCCSID("@(#)fsort.c 8.1 (Berkeley) 6/6/93"); #endif /* not lint */ @@ -80,9 +80,8 @@ #include <string.h> static const u_char **keylist = 0; -u_char *buffer = 0, *linebuf = 0; +u_char *buffer = 0; size_t bufsize = DEFBUFSIZE; -size_t linebuf_size; #define FSORTMAX 4 int PANIC = FSORTMAX; @@ -123,11 +122,6 @@ buffer = malloc(bufsize); keylist = malloc(MAXNUM * sizeof(u_char *)); memset(keylist, 0, MAXNUM * sizeof(u_char *)); - if (!SINGL_FLD) { - linebuf_size = DEFLLEN; - if ((linebuf = malloc(linebuf_size)) == NULL) - errx(2, "cannot allocate memory"); - } } bufend = buffer + bufsize; if (binno >= 0) { Index: src/usr.bin/sort/fsort.h diff -u src/usr.bin/sort/fsort.h:1.13 src/usr.bin/sort/fsort.h:1.14 --- src/usr.bin/sort/fsort.h:1.13 Mon Apr 28 20:24:15 2008 +++ src/usr.bin/sort/fsort.h Sat Aug 15 16:50:29 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: fsort.h,v 1.13 2008/04/28 20:24:15 martin Exp $ */ +/* $NetBSD: fsort.h,v 1.14 2009/08/15 16:50:29 dsl Exp $ */ /*- * Copyright (c) 2000-2003 The NetBSD Foundation, Inc. @@ -84,8 +84,8 @@ */ #define MERGE_FNUM 16 -extern u_char *buffer, *linebuf; -extern size_t bufsize, linebuf_size; +extern u_char *buffer; +extern size_t bufsize; /* temp files in the stack have a file descriptor, a largest bin (maxb) * which becomes the last non-empty bin (lastb) when the actual largest Index: src/usr.bin/sort/msort.c diff -u src/usr.bin/sort/msort.c:1.19 src/usr.bin/sort/msort.c:1.20 --- src/usr.bin/sort/msort.c:1.19 Sat Aug 15 09:48:46 2009 +++ src/usr.bin/sort/msort.c Sat Aug 15 16:50:29 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: msort.c,v 1.19 2009/08/15 09:48:46 dsl Exp $ */ +/* $NetBSD: msort.c,v 1.20 2009/08/15 16:50:29 dsl Exp $ */ /*- * Copyright (c) 2000-2003 The NetBSD Foundation, Inc. @@ -65,7 +65,7 @@ #include "fsort.h" #ifndef lint -__RCSID("$NetBSD: msort.c,v 1.19 2009/08/15 09:48:46 dsl Exp $"); +__RCSID("$NetBSD: msort.c,v 1.20 2009/08/15 16:50:29 dsl Exp $"); __SCCSID("@(#)msort.c 8.1 (Berkeley) 6/6/93"); #endif /* not lint */ @@ -106,12 +106,6 @@ if (!buffer) err(2, "fmerge(): malloc"); memset(buffer, 0, bufsize); - - if (!linebuf && !SINGL_FLD) { - linebuf_size = DEFLLEN; - linebuf = malloc(linebuf_size); - memset(linebuf, 0, linebuf_size); - } } if (binno >= 0) @@ -343,8 +337,6 @@ int c; RECHEADER *crec, *prec, *trec; - if (!SINGL_FLD) - linebuf = malloc(DEFLLEN); buffer = malloc(2 * (DEFLLEN + sizeof(TRECHEADER))); crec = (RECHEADER *) buffer; crec_end = buffer + DEFLLEN + sizeof(TRECHEADER);