X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fxmemcoll.c;h=56f1871d2355e4c0ac48a26415abd0e61340f208;hb=1bb384c44db25aef8f8b455cef22af32d8401abc;hp=36958f4af494456647e6e2dea99e7636188edc79;hpb=9f31a7914f9d65fbc1225f503491dcc90e90c357;p=gnulib.git diff --git a/lib/xmemcoll.c b/lib/xmemcoll.c index 36958f4af..56f1871d2 100644 --- a/lib/xmemcoll.c +++ b/lib/xmemcoll.c @@ -1,6 +1,6 @@ /* Locale-specific memory comparison. - Copyright (C) 2002-2004, 2006, 2009-2010 Free Software Foundation, Inc. + Copyright (C) 2002-2004, 2006, 2009-2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -31,9 +31,10 @@ #include "quotearg.h" #include "xmemcoll.h" -static inline void -collate_error (int collation_errno, const char *s1, size_t s1len, - const char *s2, size_t s2len) +static void +collate_error (int collation_errno, + char const *s1, size_t s1len, + char const *s2, size_t s2len) { error (0, collation_errno, _("string comparison failed")); error (0, 0, _("Set LC_ALL='C' to work around the problem.")); @@ -54,23 +55,22 @@ xmemcoll (char *s1, size_t s1len, char *s2, size_t s2len) { int diff = memcoll (s1, s1len, s2, s2len); int collation_errno = errno; - if (collation_errno) collate_error (collation_errno, s1, s1len, s2, s2len); - return diff; } -/* Like xmemcoll, but S1 and S2 are known to be NUL delimited, thus - no modifications to S1 and S2 are needed. */ +/* Compare S1 (a memory block of size S1SIZE, with a NUL as last byte) + and S2 (a memory block of size S2SIZE, with a NUL as last byte) + according to the LC_COLLATE locale. S1SIZE and S2SIZE must be > 0. + Report an error and exit if there is an error. */ int -xmemcoll0 (const char *s1, size_t s1len, const char *s2, size_t s2len) +xmemcoll0 (char const *s1, size_t s1size, char const *s2, size_t s2size) { - int diff = memcoll0 (s1, s1len, s2, s2len); + int diff = memcoll0 (s1, s1size, s2, s2size); int collation_errno = errno; - if (collation_errno) - collate_error (collation_errno, s1, s1len, s2, s2len); + collate_error (collation_errno, s1, s1size - 1, s2, s2size - 1); return diff; }