Module Name: src
Committed By: christos
Date: Sat Apr 17 17:57:39 UTC 2010
Modified Files:
src/lib/libc/string: swab.3 swab.c
Log Message:
Change and document for POSIX compliance.
To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 src/lib/libc/string/swab.3
cvs rdiff -u -r1.12 -r1.13 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.3
diff -u src/lib/libc/string/swab.3:1.10 src/lib/libc/string/swab.3:1.11
--- src/lib/libc/string/swab.3:1.10 Sat Apr 17 13:50:13 2010
+++ src/lib/libc/string/swab.3 Sat Apr 17 13:57:39 2010
@@ -26,7 +26,7 @@
.\" SUCH DAMAGE.
.\"
.\" from: @(#)swab.3 8.1 (Berkeley) 6/4/93
-.\" $NetBSD: swab.3,v 1.10 2010/04/17 17:50:13 christos Exp $
+.\" $NetBSD: swab.3,v 1.11 2010/04/17 17:57:39 christos Exp $
.\"
.Dd April 17, 2010
.Dt SWAB 3
@@ -51,9 +51,17 @@
.Fa dst ,
swapping adjacent bytes.
.Pp
-The argument
+If
.Fa len
-must be even number.
+is negative or zero
+.Nm
+does nothing.
+If
+.Fa len
+is odd,
+.Nm copies
+.Fa len - 1
+bytes and the disposition of the last byte is unspecified.
.Sh SEE ALSO
.Xr bzero 3 ,
.Xr memset 3
Index: src/lib/libc/string/swab.c
diff -u src/lib/libc/string/swab.c:1.12 src/lib/libc/string/swab.c:1.13
--- src/lib/libc/string/swab.c:1.12 Thu Aug 7 12:43:53 2003
+++ src/lib/libc/string/swab.c Sat Apr 17 13:57:39 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: swab.c,v 1.12 2003/08/07 16:43:53 agc Exp $ */
+/* $NetBSD: swab.c,v 1.13 2010/04/17 17:57:39 christos 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.12 2003/08/07 16:43:53 agc Exp $");
+__RCSID("$NetBSD: swab.c,v 1.13 2010/04/17 17:57:39 christos Exp $");
#endif
#endif /* LIBC_SCCS and not lint */
@@ -45,12 +45,17 @@
#include <unistd.h>
void
-swab(const void *from, void *to, size_t len)
+swab(const void * __restrict from, void * __restrict to, ssize_t len)
{
char temp;
const char *fp;
char *tp;
+ if (len & 1)
+ len--;
+ if (len <= 0)
+ return;
+
_DIAGASSERT(from != NULL);
_DIAGASSERT(to != NULL);