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.

Reply via email to