Module Name: src
Committed By: martin
Date: Tue Jan 4 17:14:07 UTC 2011
Modified Files:
src/lib/libc/string: swab.c
Log Message:
Special-case the (unlikely in practice) call with len = 2 - previously
the code would not have swapped anything. Problem pointed out by
sparc64 automatic test run.
To generate a diff of this commit:
cvs rdiff -u -r1.17 -r1.18 src/lib/libc/string/swab.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/lib/libc/string/swab.c
diff -u src/lib/libc/string/swab.c:1.17 src/lib/libc/string/swab.c:1.18
--- src/lib/libc/string/swab.c:1.17 Sun Apr 18 11:39:39 2010
+++ src/lib/libc/string/swab.c Tue Jan 4 17:14:07 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: swab.c,v 1.17 2010/04/18 11:39:39 apb Exp $ */
+/* $NetBSD: swab.c,v 1.18 2011/01/04 17:14:07 martin Exp $ */
/*
* Copyright (c) 1988, 1993
@@ -37,7 +37,7 @@
#if 0
static char sccsid[] = "@(#)swab.c 8.1 (Berkeley) 6/4/93";
#else
-__RCSID("$NetBSD: swab.c,v 1.17 2010/04/18 11:39:39 apb Exp $");
+__RCSID("$NetBSD: swab.c,v 1.18 2011/01/04 17:14:07 martin Exp $");
#endif
#endif /* LIBC_SCCS and not lint */
@@ -61,6 +61,12 @@
fp = (const char *)from;
tp = (char *)to;
#define STEP temp = *fp++,*tp++ = *fp++,*tp++ = temp
+
+ if (__predict_false(len == 1)) {
+ STEP;
+ return;
+ }
+
/* round to multiple of 8 */
while ((--len % 8) != 0)
STEP;