diff options
author | Ray Lai <ray@cvs.openbsd.org> | 2008-03-15 21:54:10 +0000 |
---|---|---|
committer | Ray Lai <ray@cvs.openbsd.org> | 2008-03-15 21:54:10 +0000 |
commit | 50316be7bf1b3797fd1196f7cdac27a1a2fa905c (patch) | |
tree | 3c1e08fef2a7476ea3b7bc95d63d710c1a149509 /lib/libc/string | |
parent | 2d2da217eeb2b589e8671b4211fdb6b8c3431b57 (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.c | 18 |
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; } |