Module Name: src Committed By: dsl Date: Sun Aug 16 19:53:43 UTC 2009
Modified Files: src/usr.bin/sort: append.c files.c fsort.c msort.c sort.h Log Message: Replace all uses of sizeof(TRECHEADER) with REC_DATA_OFFSET - which is defined as offsetof(RECHEADER, data). Delete TRECHEADER. To generate a diff of this commit: cvs rdiff -u -r1.15 -r1.16 src/usr.bin/sort/append.c cvs rdiff -u -r1.32 -r1.33 src/usr.bin/sort/files.c cvs rdiff -u -r1.34 -r1.35 src/usr.bin/sort/fsort.c cvs rdiff -u -r1.20 -r1.21 src/usr.bin/sort/msort.c cvs rdiff -u -r1.21 -r1.22 src/usr.bin/sort/sort.h 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/append.c diff -u src/usr.bin/sort/append.c:1.15 src/usr.bin/sort/append.c:1.16 --- src/usr.bin/sort/append.c:1.15 Sat Aug 15 09:48:46 2009 +++ src/usr.bin/sort/append.c Sun Aug 16 19:53:43 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: append.c,v 1.15 2009/08/15 09:48:46 dsl Exp $ */ +/* $NetBSD: append.c,v 1.16 2009/08/16 19:53:43 dsl Exp $ */ /*- * Copyright (c) 2000-2003 The NetBSD Foundation, Inc. @@ -64,7 +64,7 @@ #include "sort.h" #ifndef lint -__RCSID("$NetBSD: append.c,v 1.15 2009/08/15 09:48:46 dsl Exp $"); +__RCSID("$NetBSD: append.c,v 1.16 2009/08/16 19:53:43 dsl Exp $"); __SCCSID("@(#)append.c 8.1 (Berkeley) 6/6/93"); #endif /* not lint */ @@ -81,7 +81,7 @@ else \ radixsort(ppos, n, wts1, REC_D); \ for (; ppos < cpos; ppos++) { \ - prec = (const RECHEADER *) (*ppos - sizeof(TRECHEADER));\ + prec = (const RECHEADER *) (*ppos - REC_DATA_OFFSET);\ put(prec, fp); \ } \ } else put(prec, fp); \ @@ -110,7 +110,7 @@ wts1 = ascii; } lastkey = keylist + nelem; - depth += sizeof(TRECHEADER); + depth += REC_DATA_OFFSET; if (SINGL_FLD && (UNIQUE || wts1 != wts)) { ppos = keylist; prec = (const RECHEADER *) (*ppos - depth); Index: src/usr.bin/sort/files.c diff -u src/usr.bin/sort/files.c:1.32 src/usr.bin/sort/files.c:1.33 --- src/usr.bin/sort/files.c:1.32 Sat Aug 15 18:40:01 2009 +++ src/usr.bin/sort/files.c Sun Aug 16 19:53:43 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: files.c,v 1.32 2009/08/15 18:40:01 dsl Exp $ */ +/* $NetBSD: files.c,v 1.33 2009/08/16 19:53:43 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.32 2009/08/15 18:40:01 dsl Exp $"); +__RCSID("$NetBSD: files.c,v 1.33 2009/08/16 19:53:43 dsl Exp $"); __SCCSID("@(#)files.c 8.1 (Berkeley) 6/6/93"); #endif /* not lint */ @@ -124,17 +124,17 @@ } } } - if ((u_char *) pos > end - sizeof(TRECHEADER)) + if ((u_char *) pos > end - REC_DATA_OFFSET) return (BUFFEND); - fread(pos, sizeof(TRECHEADER), 1, fp); + fread(pos, REC_DATA_OFFSET, 1, fp); if (end - pos->data < (ptrdiff_t)pos->length) { - hp = ((u_char *)pos) + sizeof(TRECHEADER); - for (i = sizeof(TRECHEADER); i ; i--) + hp = ((u_char *)pos) + REC_DATA_OFFSET; + for (i = REC_DATA_OFFSET; i ; i--) ungetc(*--hp, fp); return (BUFFEND); } fread(pos->data, pos->length, 1, fp); - nleft -= pos->length + sizeof(TRECHEADER); + nleft -= pos->length + REC_DATA_OFFSET; if (nleft == 0 && binno == fstack[infl0].maxb) fclose(fp); return (0); @@ -338,7 +338,7 @@ void putrec(const RECHEADER *rec, FILE *fp) { - EWRITE(rec, 1, rec->length + sizeof(TRECHEADER), fp); + EWRITE(rec, 1, rec->length + REC_DATA_OFFSET, fp); } /* @@ -361,15 +361,15 @@ FILE *fp; fp = fstack[flno].fp; - if ((u_char *) rec > end - sizeof(TRECHEADER)) + if ((u_char *) rec > end - REC_DATA_OFFSET) return (BUFFEND); - if (!fread(rec, 1, sizeof(TRECHEADER), fp)) { + if (!fread(rec, 1, REC_DATA_OFFSET, fp)) { fclose(fp); fstack[flno].fp = 0; return (EOF); } if (end - rec->data < (ptrdiff_t)rec->length) { - for (i = sizeof(TRECHEADER) - 1; i >= 0; i--) + for (i = REC_DATA_OFFSET - 1; i >= 0; i--) ungetc(*((char *) rec + i), fp); return (BUFFEND); } Index: src/usr.bin/sort/fsort.c diff -u src/usr.bin/sort/fsort.c:1.34 src/usr.bin/sort/fsort.c:1.35 --- src/usr.bin/sort/fsort.c:1.34 Sat Aug 15 16:50:29 2009 +++ src/usr.bin/sort/fsort.c Sun Aug 16 19:53:43 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: fsort.c,v 1.34 2009/08/15 16:50:29 dsl Exp $ */ +/* $NetBSD: fsort.c,v 1.35 2009/08/16 19:53:43 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.34 2009/08/15 16:50:29 dsl Exp $"); +__RCSID("$NetBSD: fsort.c,v 1.35 2009/08/16 19:53:43 dsl Exp $"); __SCCSID("@(#)fsort.c 8.1 (Berkeley) 6/6/93"); #endif /* not lint */ @@ -163,7 +163,7 @@ break; } crec =(RECHEADER *)((char *) crec + - SALIGN(crec->length) + sizeof(TRECHEADER)); + SALIGN(crec->length) + REC_DATA_OFFSET); } if (c == BUFFEND && nelem < MAXNUM @@ -345,7 +345,7 @@ const u_char **ak, *r; memset(tsizes, 0, sizeof(tsizes)); - depth += sizeof(TRECHEADER); + depth += REC_DATA_OFFSET; an = &a[n]; for (ak = a; ak < an; ak++) { histo[c = tr[**ak]]++; @@ -368,7 +368,7 @@ for (ak = a, c = 0; c < 256; c++) { an = bin[c + 1]; n = an - ak; - tsizes[c] += n * sizeof(TRECHEADER); + tsizes[c] += n * REC_DATA_OFFSET; /* tell getnext how many elements in this bin, this segment. */ EWRITE(&tsizes[c], sizeof(size_t), 1, fp); sizes[c] += tsizes[c]; Index: src/usr.bin/sort/msort.c diff -u src/usr.bin/sort/msort.c:1.20 src/usr.bin/sort/msort.c:1.21 --- src/usr.bin/sort/msort.c:1.20 Sat Aug 15 16:50:29 2009 +++ src/usr.bin/sort/msort.c Sun Aug 16 19:53:43 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: msort.c,v 1.20 2009/08/15 16:50:29 dsl Exp $ */ +/* $NetBSD: msort.c,v 1.21 2009/08/16 19:53:43 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.20 2009/08/15 16:50:29 dsl Exp $"); +__RCSID("$NetBSD: msort.c,v 1.21 2009/08/16 19:53:43 dsl Exp $"); __SCCSID("@(#)msort.c 8.1 (Berkeley) 6/6/93"); #endif /* not lint */ @@ -337,11 +337,11 @@ int c; RECHEADER *crec, *prec, *trec; - buffer = malloc(2 * (DEFLLEN + sizeof(TRECHEADER))); + buffer = malloc(2 * (DEFLLEN + REC_DATA_OFFSET)); crec = (RECHEADER *) buffer; - crec_end = buffer + DEFLLEN + sizeof(TRECHEADER); - prec = (RECHEADER *) (buffer + DEFLLEN + sizeof(TRECHEADER)); - prec_end = buffer + 2*(DEFLLEN + sizeof(TRECHEADER)); + crec_end = buffer + DEFLLEN + REC_DATA_OFFSET; + prec = (RECHEADER *) (buffer + DEFLLEN + REC_DATA_OFFSET); + prec_end = buffer + 2*(DEFLLEN + REC_DATA_OFFSET); wts = ftbl->weights; if (SINGL_FLD && (ftbl->flags & F)) wts1 = (ftbl->flags & R) ? Rascii : ascii; Index: src/usr.bin/sort/sort.h diff -u src/usr.bin/sort/sort.h:1.21 src/usr.bin/sort/sort.h:1.22 --- src/usr.bin/sort/sort.h:1.21 Sat Aug 15 18:40:01 2009 +++ src/usr.bin/sort/sort.h Sun Aug 16 19:53:43 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: sort.h,v 1.21 2009/08/15 18:40:01 dsl Exp $ */ +/* $NetBSD: sort.h,v 1.22 2009/08/16 19:53:43 dsl Exp $ */ /*- * Copyright (c) 2000-2003 The NetBSD Foundation, Inc. @@ -106,8 +106,12 @@ /* length of record is currently limited to maximum string length (size_t) */ typedef size_t length_t; -/* a record is a key/line pair starting at rec.data. It has a total length +/* A record is a key/line pair starting at rec.data. It has a total length * and an offset to the start of the line half of the pair. + * In order to use (s)radixsort, the array of pointers often points + * to the data field (and sometimes not the first byte even!). + * This means the code has to 'back up' by the correct number of bytes + * in order to get the actual header. */ typedef struct recheader { length_t length; @@ -115,10 +119,7 @@ u_char data[1]; } RECHEADER; -typedef struct trecheader { - length_t length; - length_t offset; -} TRECHEADER; +#define REC_DATA_OFFSET offsetof(RECHEADER, data) /* This is the column as seen by struct field. It is used by enterfield. * They are matched with corresponding coldescs during initialization.