summaryrefslogtreecommitdiffstats
path: root/libc/string/memcmp.c
diff options
context:
space:
mode:
author"Steven J. Hill" <sjhill@realitydiluted.com>2006-01-07 02:32:27 +0000
committer"Steven J. Hill" <sjhill@realitydiluted.com>2006-01-07 02:32:27 +0000
commite523bd15353350c3480b8a1820a0944b0fa8212e (patch)
tree60485116f9c62c306bb753f12f9d4eb79d16aa4e /libc/string/memcmp.c
parent3b3434516a3415d7e0f4e1d50c553876dcb337b2 (diff)
downloaduClibc-alpine-e523bd15353350c3480b8a1820a0944b0fa8212e.tar.bz2
uClibc-alpine-e523bd15353350c3480b8a1820a0944b0fa8212e.tar.xz
Big fricking merge from trunk.
Diffstat (limited to 'libc/string/memcmp.c')
-rw-r--r--libc/string/memcmp.c39
1 files changed, 33 insertions, 6 deletions
diff --git a/libc/string/memcmp.c b/libc/string/memcmp.c
index 5963dd174..9808b3785 100644
--- a/libc/string/memcmp.c
+++ b/libc/string/memcmp.c
@@ -1,16 +1,43 @@
/*
+ * Copyright (C) 2002 Manuel Novoa III
* Copyright (C) 2000-2005 Erik Andersen <andersen@uclibc.org>
*
* Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
*/
-#define L_memcmp
-#define Wmemcmp __memcmp
+#include "_string.h"
-#include "wstring.c"
+#ifdef WANT_WIDE
+# define __Wmemcmp __wmemcmp
+# define Wmemcmp wmemcmp
+#else
+# define __Wmemcmp __memcmp
+# define Wmemcmp memcmp
+#endif
-strong_alias(__memcmp, memcmp)
+int attribute_hidden __Wmemcmp(const Wvoid *s1, const Wvoid *s2, size_t n)
+{
+ register const Wuchar *r1 = (const Wuchar *) s1;
+ register const Wuchar *r2 = (const Wuchar *) s2;
-weak_alias(memcmp, bcmp)
+#ifdef WANT_WIDE
+ while (n && (*r1 == *r2)) {
+ ++r1;
+ ++r2;
+ --n;
+ }
-#undef L_memcmp
+ return (n == 0) ? 0 : ((*r1 < *r2) ? -1 : 1);
+#else
+ int r = 0;
+
+ while (n-- && ((r = ((int)(*r1++)) - *r2++) == 0));
+
+ return r;
+#endif
+}
+
+strong_alias(__Wmemcmp,Wmemcmp)
+#ifndef WANT_WIDE
+strong_alias(__memcmp,bcmp)
+#endif