summaryrefslogtreecommitdiff
path: root/lib/libc/string
diff options
context:
space:
mode:
authorRay Lai <ray@cvs.openbsd.org>2008-03-15 21:54:10 +0000
committerRay Lai <ray@cvs.openbsd.org>2008-03-15 21:54:10 +0000
commit50316be7bf1b3797fd1196f7cdac27a1a2fa905c (patch)
tree3c1e08fef2a7476ea3b7bc95d63d710c1a149509 /lib/libc/string
parent2d2da217eeb2b589e8671b4211fdb6b8c3431b57 (diff)
- len is size_t, but n uses len and is an int. Matching those types
should be good, plus it prevents weird things from happening if len > INT_MAX. - Since n is now size_t, compare it against 0 instead of >= 0. - temp is used to store individual bytes, so use char instead (matches fp and tp). - millert noted that the comma operator may not guarantee order of execution, so replace with semicolons. Found by lint, OK millert.
Diffstat (limited to 'lib/libc/string')
-rw-r--r--lib/libc/string/swab.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/lib/libc/string/swab.c b/lib/libc/string/swab.c
index b53717dcde4..b74db7e62a5 100644
--- a/lib/libc/string/swab.c
+++ b/lib/libc/string/swab.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: swab.c,v 1.7 2005/08/08 08:05:37 espie Exp $ */
+/* $OpenBSD: swab.c,v 1.8 2008/03/15 21:54:09 ray Exp $ */
/*
* Copyright (c) 1988 Regents of the University of California.
* All rights reserved.
@@ -36,19 +36,25 @@
void
swab(const void *from, void *to, size_t len)
{
- unsigned long temp;
- int n;
+ size_t n;
char *fp, *tp;
+ char temp;
- n = (len >> 1) + 1;
+ n = (len / 2) + 1;
fp = (char *)from;
tp = (char *)to;
-#define STEP temp = *fp++,*tp++ = *fp++,*tp++ = temp
+#define STEP do { \
+ temp = *fp++; \
+ *tp++ = *fp++; \
+ *tp++ = temp; \
+} while (0)
/* round to multiple of 8 */
while ((--n) & 07)
STEP;
n >>= 3;
- while (--n >= 0) {
+ if (n == 0)
+ return;
+ while (n-- != 0) {
STEP; STEP; STEP; STEP;
STEP; STEP; STEP; STEP;
}