summaryrefslogtreecommitdiff
path: root/lib/memcoll.c
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>1999-11-04 23:13:12 +0000
committerJim Meyering <jim@meyering.net>1999-11-04 23:13:12 +0000
commit67ec190a9992e5b30dc11ecb8262f07b7e43de44 (patch)
treea43743a21edc4d3a9deca87e6edb16240dab6986 /lib/memcoll.c
parent4b47f20e6a9eab15b70ee638454931ab9dd3c208 (diff)
downloadcoreutils-67ec190a9992e5b30dc11ecb8262f07b7e43de44.tar.xz
(memcoll): The two arguments cannot be
adjacent any more, so remove the alloca/copy workaround for that case.
Diffstat (limited to 'lib/memcoll.c')
-rw-r--r--lib/memcoll.c47
1 files changed, 5 insertions, 42 deletions
diff --git a/lib/memcoll.c b/lib/memcoll.c
index 11a61ad60..09f9f2dd1 100644
--- a/lib/memcoll.c
+++ b/lib/memcoll.c
@@ -21,60 +21,23 @@
# include <config.h>
#endif
-#ifndef __GNUC__
-# ifdef HAVE_ALLOCA_H
-# include <alloca.h>
-# else
-# ifdef _AIX
- # pragma alloca
-# else
-# ifdef _WIN32
-# include <malloc.h>
-# include <io.h>
-# else
-# ifndef alloca
-char *alloca ();
-# endif
-# endif
-# endif
-# endif
-#endif
-
#if HAVE_STRING_H
# include <string.h>
#endif
/* Compare S1 (with length S1LEN) and S2 (with length S2LEN) according
- to the LC_COLLATE locale. S1 and S2 do not overlap, but may be
+ to the LC_COLLATE locale. S1 and S2 do not overlap, and are not
adjacent. Temporarily modify the bytes after S1 and S2, but
restore their original contents before returning. */
int
memcoll (char *s1, size_t s1len, char *s2, size_t s2len)
{
int diff;
- char n1;
- char n2;
-
- /* We will temporarily set the bytes after S1 and S2 to zero, so if
- S1 and S2 are adjacent, compare to a temporary copy of the
- earlier, to avoid temporarily stomping on the later. */
-
- if (s1 + s1len == s2)
- {
- char *s2copy = alloca (s2len + 1);
- memcpy (s2copy, s2, s2len);
- s2 = s2copy;
- }
-
- if (s2 + s2len == s1)
- {
- char *s1copy = alloca (s1len + 1);
- memcpy (s1copy, s1, s1len);
- s1 = s1copy;
- }
+ char n1 = s1[s1len];
+ char n2 = s2[s2len];
- n1 = s1[s1len]; s1[s1len++] = '\0';
- n2 = s2[s2len]; s2[s2len++] = '\0';
+ s1[s1len++] = '\0';
+ s2[s2len++] = '\0';
while (! (diff = strcoll (s1, s2)))
{