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.