use _GL_ATTRIBUTE_CONST and _GL_ATTRIBUTE_PURE
authorJim Meyering <meyering@redhat.com>
Sun, 24 Apr 2011 17:02:10 +0000 (19:02 +0200)
committerJim Meyering <meyering@redhat.com>
Mon, 25 Apr 2011 08:24:30 +0000 (10:24 +0200)
27 files changed:
lib/argmatch.c
lib/argv-iter.c
lib/base64.c
lib/basename-lgpl.c
lib/c-ctype.c
lib/c-strncasecmp.c
lib/chdir-long.c
lib/exclude.c
lib/file-type.c
lib/filenamecat-lgpl.c
lib/filevercmp.c
lib/freadahead.c
lib/fts.c
lib/hash-pjw.c
lib/hash-triple.c
lib/hash.c
lib/i-ring.c
lib/isnan.c
lib/memcasecmp.c
lib/memchr2.c
lib/memcmp2.c
lib/parse-datetime.y
lib/propername.c
lib/quotearg.c
lib/sockets.c
lib/strnlen1.c
lib/uniwidth/width.c

index 9a3eca4d4c5e7bbc10125153a52db293214bc24c..45fc4c35c965c800c7227533d736bc43acae0692 100644 (file)
 ARGMATCH_DIE_DECL;
 #endif
 
+/* The attribute __pure__ was added in gcc 2.96.  */
+#undef _GL_ATTRIBUTE_PURE
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
 static void
 __argmatch_die (void)
 {
@@ -79,7 +87,7 @@ argmatch_exit_fn argmatch_die = __argmatch_die;
      "no", "nope" -> 1
    "y" is a valid argument, for `0', and "n" for `1'.  */
 
-ptrdiff_t
+ptrdiff_t _GL_ATTRIBUTE_PURE
 argmatch (const char *arg, const char *const *arglist,
           const char *vallist, size_t valsize)
 {
index 340e5889056e37806913604851b06d158c5fc50d..b77f70c861665b9e4aa7833bf9aa39976a4b03f7 100644 (file)
 #include <stdlib.h>
 #include <string.h>
 
+/* The attribute __pure__ was added in gcc 2.96.  */
+#undef _GL_ATTRIBUTE_PURE
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
 struct argv_iterator
 {
   /* Test FP to determine whether in read-mode or argv-mode. */
@@ -96,7 +104,7 @@ argv_iter (struct argv_iterator *ai, enum argv_iter_err *err)
     }
 }
 
-size_t
+size_t _GL_ATTRIBUTE_PURE
 argv_iter_n_args (struct argv_iterator const *ai)
 {
   return ai->fp ? ai->item_idx : ai->p - ai->arg_list;
index 99fcc57c3cc220159cd4d5dc1ba54557e3c625b4..89e83e6499358b4c402daff849ed48cabb61d394 100644 (file)
 
 #include <string.h>
 
+/* The attribute __const__ was added in gcc 2.95.  */
+#undef _GL_ATTRIBUTE_CONST
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
+# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__))
+#else
+# define _GL_ATTRIBUTE_CONST /* empty */
+#endif
+
 /* C89 compliant way to cast 'char' to 'unsigned char'. */
 static inline unsigned char
 to_uchar (char ch)
@@ -295,7 +303,7 @@ static const signed char b64[0x100] = {
 /* Return true if CH is a character from the Base64 alphabet, and
    false otherwise.  Note that '=' is padding and not considered to be
    part of the alphabet.  */
-bool
+bool _GL_ATTRIBUTE_CONST
 isbase64 (char ch)
 {
   return uchar_in_range (to_uchar (ch)) && 0 <= b64[to_uchar (ch)];
index 529bc35d7292e5509c045eef2e814603fae680f0..f2738cd407451f646eea381e35e18bb15e409fa5 100644 (file)
 
 #include <string.h>
 
+/* The attribute __pure__ was added in gcc 2.96.  */
+#undef _GL_ATTRIBUTE_PURE
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
 /* Return the address of the last file name component of NAME.  If
    NAME has no relative file name components because it is a file
    system root, return the empty string.  */
 
-char *
+char * _GL_ATTRIBUTE_PURE
 last_component (char const *name)
 {
   char const *base = name + FILE_SYSTEM_PREFIX_LEN (name);
index 335cde5d08af66add5bbc2e0924ff2f659bb8554..fc15642916b99569b7c1ad95fa712454d6f2e58e 100644 (file)
@@ -22,9 +22,17 @@ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
 #define NO_C_CTYPE_MACROS
 #include "c-ctype.h"
 
+/* The attribute __const__ was added in gcc 2.95.  */
+#undef _GL_ATTRIBUTE_CONST
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
+# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__))
+#else
+# define _GL_ATTRIBUTE_CONST /* empty */
+#endif
+
 /* The function isascii is not locale dependent. Its use in EBCDIC is
    questionable. */
-bool
+bool _GL_ATTRIBUTE_CONST
 c_isascii (int c)
 {
   return (c >= 0x00 && c <= 0x7f);
index 0085185ab2543f6a414b56b33879d6bc0fe37691..280f09b5ab4d443b5e7e19a8e3ba45be489abd3d 100644 (file)
 
 #include "c-ctype.h"
 
-int
+/* The attribute __pure__ was added in gcc 2.96.  */
+#undef _GL_ATTRIBUTE_PURE
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
+int _GL_ATTRIBUTE_PURE
 c_strncasecmp (const char *s1, const char *s2, size_t n)
 {
   register const unsigned char *p1 = (const unsigned char *) s1;
index 96b750cb46d8fbe1489fff83c88e4cdc9d3eb9fa..d042abfdab900a459c2e822698084f2efd1bf429 100644 (file)
 # error "compile this file only if your system defines PATH_MAX"
 #endif
 
+/* The attribute __pure__ was added in gcc 2.96.  */
+#undef _GL_ATTRIBUTE_PURE
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
 /* The results of openat() in this file are not leaked to any
    single-threaded code that could use stdio.
    FIXME - if the kernel ever adds support for multi-thread safety for
@@ -83,7 +91,7 @@ cdb_advance_fd (struct cd_buf *cdb, char const *dir)
 }
 
 /* Return a pointer to the first non-slash in S.  */
-static inline char *
+static inline char * _GL_ATTRIBUTE_PURE
 find_non_slash (char const *s)
 {
   size_t n_slash = strspn (s, "/");
index df49714a6be7eb68cdb037aebac61cd451ddf792..fe74f361c6ca1431e5513802df79b53a71ac90d7 100644 (file)
@@ -60,6 +60,14 @@ verify (((EXCLUDE_ANCHORED | EXCLUDE_INCLUDE | EXCLUDE_WILDCARDS)
             | FNM_CASEFOLD | FNM_EXTMATCH))
         == 0);
 
+/* The attribute __pure__ was added in gcc 2.96.  */
+#undef _GL_ATTRIBUTE_PURE
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
 
 /* Exclusion patterns are grouped into a singly-linked list of
    "exclusion segments".  Each segment represents a set of patterns
@@ -111,7 +119,7 @@ struct exclude
   };
 
 /* Return true if str has wildcard characters */
-bool
+bool _GL_ATTRIBUTE_PURE
 fnmatch_pattern_has_wildcards (const char *str, int options)
 {
   const char *cset = "\\?*[]";
index 109db44024538c69790b394098cbc12ca1416d4b..f7090cdd1dc5ae20de6fe449f7af5bff5c44f8f8 100644 (file)
 #include <gettext.h>
 #define _(text) gettext (text)
 
-char const *
+/* The attribute __pure__ was added in gcc 2.96.  */
+#undef _GL_ATTRIBUTE_PURE
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
+char const * _GL_ATTRIBUTE_PURE
 file_type (struct stat const *st)
 {
   /* See POSIX 1003.1-2001 XCU Table 4-8 lines 17093-17107 for some of
index 8cb2da43d1840918d4c42334f206a75a817cf9ec..1e3e63a24b6d83ed6536d387b7c95d096f8113ea 100644 (file)
 # define mempcpy(D, S, N) ((void *) ((char *) memcpy (D, S, N) + (N)))
 #endif
 
+/* The attribute __pure__ was added in gcc 2.96.  */
+#undef _GL_ATTRIBUTE_PURE
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
 /* Return the longest suffix of F that is a relative file name.
    If it has no such suffix, return the empty string.  */
 
-static char const *
+static char const * _GL_ATTRIBUTE_PURE
 longest_relative_suffix (char const *f)
 {
   for (f += FILE_SYSTEM_PREFIX_LEN (f); ISSLASH (*f); f++)
index f6ed2481f6edf9019a62e18f7a131362d71e6491..b2f309b3a9b857f92067406b8e81b64fe874ed61 100644 (file)
 #include <c-ctype.h>
 #include <limits.h>
 
+/* The attribute __pure__ was added in gcc 2.96.  */
+#undef _GL_ATTRIBUTE_PURE
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
 /* Match a file suffix defined by this regular expression:
    /(\.[A-Za-z~][A-Za-z0-9~]*)*$/
    Scan the string *STR and return a pointer to the matching suffix, or
@@ -80,7 +88,7 @@ order (unsigned char c)
    section on the `Version' control field.  This version of the code
    implements that from s5.6.12 of Debian Policy v3.8.0.1
    http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Version */
-static int
+static int _GL_ATTRIBUTE_PURE
 verrevcmp (const char *s1, size_t s1_len, const char *s2, size_t s2_len)
 {
   size_t s1_pos = 0;
index 27f5c9579fabd968332edbe029a639adcf841999..ecc0ed569bd2b4309bd2c207c40067ee13354da8 100644 (file)
 #include <stdlib.h>
 #include "stdio-impl.h"
 
-size_t
+/* The attribute __pure__ was added in gcc 2.96.  */
+#undef _GL_ATTRIBUTE_PURE
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
+size_t _GL_ATTRIBUTE_PURE
 freadahead (FILE *fp)
 {
 #if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
index ad762dd779cf6ca1de3971b8fcc4c2f9edcc05e9..1b06f82efa2da60f1837d0b01518ce7527fe4173 100644 (file)
--- a/lib/fts.c
+++ b/lib/fts.c
@@ -261,6 +261,14 @@ bool fts_debug = false;
     }                                                           \
   while (false)
 
+/* The attribute __pure__ was added in gcc 2.96.  */
+#undef _GL_ATTRIBUTE_PURE
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
 static void
 fd_ring_clear (I_ring *fd_ring)
 {
@@ -1906,7 +1914,7 @@ fts_padjust (FTS *sp, FTSENT *head)
 }
 
 static size_t
-internal_function
+internal_function _GL_ATTRIBUTE_PURE
 fts_maxarglen (char * const *argv)
 {
         size_t len, max;
index 743bb576cca2d02b93503b9a988366b9e0b1d30a..7df27ae1fc6ebe672b5c531abf28177a55156a64 100644 (file)
 
 #define SIZE_BITS (sizeof (size_t) * CHAR_BIT)
 
+/* The attribute __pure__ was added in gcc 2.96.  */
+#undef _GL_ATTRIBUTE_PURE
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
 /* A hash function for NUL-terminated char* strings using
    the method described by Bruno Haible.
    See http://www.haible.de/bruno/hashfunc.html.  */
 
-size_t
+size_t _GL_ATTRIBUTE_PURE
 hash_pjw (const void *x, size_t tablesize)
 {
   const char *s;
index 1649377894a06dc6fa357ef6c997f66488e9b979..56cbe7c3e92c9ee5a36c774f1e749406aa6f317a 100644 (file)
 
 #define STREQ(a, b) (strcmp (a, b) == 0)
 
+/* The attribute __pure__ was added in gcc 2.96.  */
+#undef _GL_ATTRIBUTE_PURE
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
 /* Hash an F_triple, and *do* consider the file name.  */
 size_t
 triple_hash (void const *x, size_t table_size)
@@ -41,7 +49,7 @@ triple_hash (void const *x, size_t table_size)
 }
 
 /* Hash an F_triple, without considering the file name.  */
-size_t
+size_t _GL_ATTRIBUTE_PURE
 triple_hash_no_name (void const *x, size_t table_size)
 {
   struct F_triple const *p = x;
index f3de2aaaace2420e353691ccbeb45e5784528a1f..9a969ac31813bf6c7de55a2e903cc28b1998a6e6 100644 (file)
 # endif
 #endif
 
+/* The attribute __const__ was added in gcc 2.95.  */
+#undef _GL_ATTRIBUTE_CONST
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
+# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__))
+#else
+# define _GL_ATTRIBUTE_CONST /* empty */
+#endif
+
 struct hash_entry
   {
     void *data;
@@ -146,7 +154,7 @@ static const Hash_tuning default_tuning =
    number of buckets (used plus unused), or the maximum number of slots, are
    the same quantity.  */
 
-size_t
+size_t _GL_ATTRIBUTE_PURE
 hash_get_n_buckets (const Hash_table *table)
 {
   return table->n_buckets;
@@ -154,7 +162,7 @@ hash_get_n_buckets (const Hash_table *table)
 
 /* Return the number of slots in use (non-empty buckets).  */
 
-size_t
+size_t _GL_ATTRIBUTE_PURE
 hash_get_n_buckets_used (const Hash_table *table)
 {
   return table->n_buckets_used;
@@ -162,7 +170,7 @@ hash_get_n_buckets_used (const Hash_table *table)
 
 /* Return the number of active entries.  */
 
-size_t
+size_t _GL_ATTRIBUTE_PURE
 hash_get_n_entries (const Hash_table *table)
 {
   return table->n_entries;
@@ -170,7 +178,7 @@ hash_get_n_entries (const Hash_table *table)
 
 /* Return the length of the longest chain (bucket).  */
 
-size_t
+size_t _GL_ATTRIBUTE_PURE
 hash_get_max_bucket_length (const Hash_table *table)
 {
   struct hash_entry const *bucket;
@@ -197,7 +205,7 @@ hash_get_max_bucket_length (const Hash_table *table)
 /* Do a mild validation of a hash table, by traversing it and checking two
    statistics.  */
 
-bool
+bool _GL_ATTRIBUTE_PURE
 hash_table_ok (const Hash_table *table)
 {
   struct hash_entry const *bucket;
@@ -284,7 +292,7 @@ hash_lookup (const Hash_table *table, const void *entry)
 
 /* Return the first data in the table, or NULL if the table is empty.  */
 
-void *
+void * _GL_ATTRIBUTE_PURE
 hash_get_first (const Hash_table *table)
 {
   struct hash_entry const *bucket;
@@ -401,7 +409,7 @@ hash_do_for_each (const Hash_table *table, Hash_processor processor,
    algorithms tend to be domain-specific, so what's good for [diffutils'] io.c
    may not be good for your application."  */
 
-size_t
+size_t _GL_ATTRIBUTE_PURE
 hash_string (const char *string, size_t n_buckets)
 {
 # define HASH_ONE_CHAR(Value, Byte) \
@@ -440,7 +448,7 @@ hash_string (const char *string, size_t n_buckets)
 /* Return true if CANDIDATE is a prime number.  CANDIDATE should be an odd
    number at least equal to 11.  */
 
-static bool
+static bool _GL_ATTRIBUTE_CONST
 is_prime (size_t candidate)
 {
   size_t divisor = 3;
@@ -459,7 +467,7 @@ is_prime (size_t candidate)
 /* Round a given CANDIDATE number up to the nearest prime, and return that
    prime.  Primes lower than 10 are merely skipped.  */
 
-static size_t
+static size_t _GL_ATTRIBUTE_CONST
 next_prime (size_t candidate)
 {
   /* Skip small primes.  */
@@ -540,7 +548,7 @@ check_tuning (Hash_table *table)
    TUNING, or return 0 if there is no possible way to allocate that
    many entries.  */
 
-static size_t
+static size_t _GL_ATTRIBUTE_PURE
 compute_bucket_size (size_t candidate, const Hash_tuning *tuning)
 {
   if (!tuning->is_n_buckets)
index b603b0b0e80510d1b7c62330392d94ba7a4b2b8a..8beef688aa488e1c4ca1f50b04679b49744a11ed 100644 (file)
 
 #include <stdlib.h>
 
+/* The attribute __pure__ was added in gcc 2.96.  */
+#undef _GL_ATTRIBUTE_PURE
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
 void
 i_ring_init (I_ring *ir, int default_val)
 {
@@ -33,7 +41,7 @@ i_ring_init (I_ring *ir, int default_val)
   ir->ir_default_val = default_val;
 }
 
-bool
+bool _GL_ATTRIBUTE_PURE
 i_ring_empty (I_ring const *ir)
 {
   return ir->ir_empty;
index d9c653dea8387c74ac2f8aa26280276c3459f1b7..92fc2506675d061ca0cc3732e31bb34cc514ecc8 100644 (file)
@@ -79,7 +79,15 @@ extern int rpl_isnanf (float x);
   ((sizeof (DOUBLE) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
 typedef union { DOUBLE value; unsigned int word[NWORDS]; } memory_double;
 
-int
+/* The attribute __const__ was added in gcc 2.95.  */
+#undef _GL_ATTRIBUTE_CONST
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
+# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__))
+#else
+# define _GL_ATTRIBUTE_CONST /* empty */
+#endif
+
+int _GL_ATTRIBUTE_CONST
 FUNC (DOUBLE x)
 {
 #ifdef KNOWN_EXPBIT0_LOCATION
index 6ae7c4f65dd0f742ee99139ddd95bada304456eb..b5c93fb4e642617cd2f1032e4546e3bb836834a6 100644 (file)
 #include <ctype.h>
 #include <limits.h>
 
+/* The attribute __pure__ was added in gcc 2.96.  */
+#undef _GL_ATTRIBUTE_PURE
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
 /* Like memcmp, but ignore differences in case.
    Convert to upper case (not lower) before comparing so that
    join -i works with sort -f.  */
 
-int
+int _GL_ATTRIBUTE_PURE
 memcasecmp (const void *vs1, const void *vs2, size_t n)
 {
   size_t i;
index 2e3c7cda6211beb920e6ab3af87a5846cd70f502..b830b9d0b2950f4bdd25e3267dfeaa6b88f40e37 100644 (file)
@@ -29,10 +29,18 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 #include <stdint.h>
 #include <string.h>
 
+/* The attribute __pure__ was added in gcc 2.96.  */
+#undef _GL_ATTRIBUTE_PURE
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
 /* Return the first address of either C1 or C2 (treated as unsigned
    char) that occurs within N bytes of the memory region S.  If
    neither byte appears, return NULL.  */
-void *
+void * _GL_ATTRIBUTE_PURE
 memchr2 (void const *s, int c1_in, int c2_in, size_t n)
 {
   /* On 32-bit hardware, choosing longword to be a 32-bit unsigned
index 14ab666ded7e12c5120948922d12d5f4e37c7b6b..9b22bbac03fe78bebb63e28a3031d8405f09d14a 100644 (file)
 
 #include <string.h>
 
-int
+/* The attribute __pure__ was added in gcc 2.96.  */
+#undef _GL_ATTRIBUTE_PURE
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
+int _GL_ATTRIBUTE_PURE
 memcmp2 (const char *s1, size_t n1, const char *s2, size_t n2)
 {
   int cmp = memcmp (s1, s2, n1 <= n2 ? n1 : n2);
index d77955f40d5dec92b7c8e04d829c06529156f6b3..07008524eb1ca4a3b6b41ebd2ed2bfc7a2350a23 100644 (file)
@@ -113,6 +113,14 @@ typedef long int long_time_t;
 typedef time_t long_time_t;
 #endif
 
+/* The attribute __pure__ was added in gcc 2.96.  */
+#undef _GL_ATTRIBUTE_PURE
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
 /* Lots of this code assumes time_t and time_t-like values fit into
    long_time_t.  */
 verify (TYPE_MINIMUM (long_time_t) <= TYPE_MINIMUM (time_t)
@@ -868,7 +876,7 @@ to_year (textint textyear)
   return year;
 }
 
-static table const *
+static table const * _GL_ATTRIBUTE_PURE
 lookup_zone (parser_control const *pc, char const *name)
 {
   table const *tp;
index b74923de957f88afe165c00fbc73ac149dcebcb6..f2e80d15a7965d8466383c13fbb06d94f3beda84 100644 (file)
 #include "xalloc.h"
 #include "gettext.h"
 
+/* The attribute __const__ was added in gcc 2.95.  */
+#undef _GL_ATTRIBUTE_CONST
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
+# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__))
+#else
+# define _GL_ATTRIBUTE_CONST /* empty */
+#endif
+
 
 /* Tests whether STRING contains trim (SUB), starting and ending at word
    boundaries.
@@ -148,7 +156,7 @@ mbsstr_trimmed_wordbounded (const char *string, const char *sub)
 
 /* Return the localization of NAME.  NAME is written in ASCII.  */
 
-const char *
+const char * _GL_ATTRIBUTE_CONST
 proper_name (const char *name)
 {
   /* See whether there is a translation.   */
index fb4955993ed6fd36aa732bd775380cf1547bd2dd..18b788adeecc0f503c414186f5a5f09b9a306f76 100644 (file)
 
 #define INT_BITS (sizeof (int) * CHAR_BIT)
 
+/* The attribute __pure__ was added in gcc 2.96.  */
+#undef _GL_ATTRIBUTE_PURE
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
 struct quoting_options
 {
   /* Basic quoting style.  */
@@ -105,7 +113,7 @@ clone_quoting_options (struct quoting_options *o)
 }
 
 /* Get the value of O's quoting style.  If O is null, use the default.  */
-enum quoting_style
+enum quoting_style _GL_ATTRIBUTE_PURE
 get_quoting_style (struct quoting_options *o)
 {
   return (o ? o : &default_quoting_options)->style;
index 42b8f9ea58e19b1ef06d4c8e66e55c2b998f9a10..9a448097c47fcebaecf864ff64ab2eb37154f821 100644 (file)
 /* Specification.  */
 #include "sockets.h"
 
+/* The attribute __const__ was added in gcc 2.95.  */
+#undef _GL_ATTRIBUTE_CONST
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
+# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__))
+#else
+# define _GL_ATTRIBUTE_CONST /* empty */
+#endif
+
 #if WINDOWS_SOCKETS
 
 /* This includes winsock2.h on MinGW. */
@@ -103,7 +111,7 @@ static int initialized_sockets_version /* = 0 */;
 
 #endif /* WINDOWS_SOCKETS */
 
-int
+int _GL_ATTRIBUTE_CONST
 gl_sockets_startup (int version _GL_UNUSED)
 {
 #if WINDOWS_SOCKETS
index f64ce104a32750943fe8b7883b10d4269815c2c4..f735bffe5c184f41ac3b2a507a86ab2ebf9a2bba 100644 (file)
 
 #include <string.h>
 
+/* The attribute __pure__ was added in gcc 2.96.  */
+#undef _GL_ATTRIBUTE_PURE
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
 /* Find the length of STRING + 1, but scan at most MAXLEN bytes.
    If no '\0' terminator is found in that many characters, return MAXLEN.  */
 /* This is the same as strnlen (string, maxlen - 1) + 1.  */
-size_t
+size_t _GL_ATTRIBUTE_PURE
 strnlen1 (const char *string, size_t maxlen)
 {
   const char *end = (const char *) memchr (string, '\0', maxlen);
index a314e71bf0332b69668bef7d3f6da32d2e9bbe6d..f882257e87097f06a3d7412a10208685bf1a10fd 100644 (file)
 
 #include "cjk.h"
 
+/* The attribute __pure__ was added in gcc 2.96.  */
+#undef _GL_ATTRIBUTE_PURE
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
 /*
  * Non-spacing attribute table.
  * Consists of:
@@ -311,7 +319,7 @@ static const signed char nonspacing_table_ind[240] = {
 };
 
 /* Determine number of column positions required for UC.  */
-int
+int _GL_ATTRIBUTE_PURE
 uc_width (ucs4_t uc, const char *encoding)
 {
   /* Test for non-spacing or control character.  */