summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2002-04-03 10:55:50 +0000
committerEric Andersen <andersen@codepoet.org>2002-04-03 10:55:50 +0000
commitbeca89d99a21e0fb1da16541d4206cfb3afbae82 (patch)
tree89b438ab79cd60d0726c9d7d4b65674675483c5e
parentae9317047b75e773c37e9aab2d8fff1652954e71 (diff)
downloaduClibc-alpine-beca89d99a21e0fb1da16541d4206cfb3afbae82.tar.bz2
uClibc-alpine-beca89d99a21e0fb1da16541d4206cfb3afbae82.tar.xz
Add the xopen swab() function, contributed by Kensuke Otake <kensuke@phreaker.net>
-rw-r--r--libc/unistd/Makefile2
-rw-r--r--libc/unistd/swab.c18
2 files changed, 19 insertions, 1 deletions
diff --git a/libc/unistd/Makefile b/libc/unistd/Makefile
index c325eae3a..97cd21c49 100644
--- a/libc/unistd/Makefile
+++ b/libc/unistd/Makefile
@@ -27,7 +27,7 @@ DIRS:=
CSRC=execl.c execlp.c execv.c execvep.c execvp.c execle.c getcwd.c \
sleep.c usleep.c getpass.c sysconf_src.c getlogin.c \
- fpathconf.c confstr.c pathconf.c
+ fpathconf.c confstr.c pathconf.c swab.c
ifeq ($(strip $(HAS_MMU)),true)
CSRC+=daemon.c
endif
diff --git a/libc/unistd/swab.c b/libc/unistd/swab.c
new file mode 100644
index 000000000..c63ca7284
--- /dev/null
+++ b/libc/unistd/swab.c
@@ -0,0 +1,18 @@
+#include <unistd.h>
+#include <sys/types.h>
+
+/* swab() swaps the position of two adjacent bytes, every two bytes.
+ * Contributed by Kensuke Otake <kensuke@phreaker.net> */
+
+void swab(const void *source, void *dest, ssize_t count) {
+ const char *from = (const char *)source;
+ char *to = (char *)dest;
+
+ count &= ~((ssize_t)1);
+
+ while (count > 1) {
+ const char b0 = from[--count], b1 = from[--count];
+ to[count] = b0;
+ to[count + 1] = b1;
+ }
+}