summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Meyering <meyering@redhat.com>2011-04-24 19:02:10 +0200
committerJim Meyering <meyering@redhat.com>2011-04-25 10:24:30 +0200
commit349d7fe0e307d59d508b3579317ee8d4eacfeb9c (patch)
tree97d92955127a8bf559e227fbe801987246c3a0d2
parentd35ef05dc0564cf696408eae985444879a399e29 (diff)
downloadgnulib-349d7fe0e307d59d508b3579317ee8d4eacfeb9c.tar.gz
use _GL_ATTRIBUTE_CONST and _GL_ATTRIBUTE_PURE
-rw-r--r--lib/argmatch.c10
-rw-r--r--lib/argv-iter.c10
-rw-r--r--lib/base64.c10
-rw-r--r--lib/basename-lgpl.c10
-rw-r--r--lib/c-ctype.c10
-rw-r--r--lib/c-strncasecmp.c10
-rw-r--r--lib/chdir-long.c10
-rw-r--r--lib/exclude.c10
-rw-r--r--lib/file-type.c10
-rw-r--r--lib/filenamecat-lgpl.c10
-rw-r--r--lib/filevercmp.c10
-rw-r--r--lib/freadahead.c10
-rw-r--r--lib/fts.c10
-rw-r--r--lib/hash-pjw.c10
-rw-r--r--lib/hash-triple.c10
-rw-r--r--lib/hash.c28
-rw-r--r--lib/i-ring.c10
-rw-r--r--lib/isnan.c10
-rw-r--r--lib/memcasecmp.c10
-rw-r--r--lib/memchr2.c10
-rw-r--r--lib/memcmp2.c10
-rw-r--r--lib/parse-datetime.y10
-rw-r--r--lib/propername.c10
-rw-r--r--lib/quotearg.c10
-rw-r--r--lib/sockets.c10
-rw-r--r--lib/strnlen1.c10
-rw-r--r--lib/uniwidth/width.c10
27 files changed, 252 insertions, 36 deletions
diff --git a/lib/argmatch.c b/lib/argmatch.c
index 9a3eca4d4c..45fc4c35c9 100644
--- a/lib/argmatch.c
+++ b/lib/argmatch.c
@@ -57,6 +57,14 @@
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)
{
diff --git a/lib/argv-iter.c b/lib/argv-iter.c
index 340e588905..b77f70c861 100644
--- a/lib/argv-iter.c
+++ b/lib/argv-iter.c
@@ -22,6 +22,14 @@
#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;
diff --git a/lib/base64.c b/lib/base64.c
index 99fcc57c3c..89e83e6499 100644
--- a/lib/base64.c
+++ b/lib/base64.c
@@ -53,6 +53,14 @@
#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)];
diff --git a/lib/basename-lgpl.c b/lib/basename-lgpl.c
index 529bc35d72..f2738cd407 100644
--- a/lib/basename-lgpl.c
+++ b/lib/basename-lgpl.c
@@ -22,11 +22,19 @@
#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);
diff --git a/lib/c-ctype.c b/lib/c-ctype.c
index 335cde5d08..fc15642916 100644
--- a/lib/c-ctype.c
+++ b/lib/c-ctype.c
@@ -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);
diff --git a/lib/c-strncasecmp.c b/lib/c-strncasecmp.c
index 0085185ab2..280f09b5ab 100644
--- a/lib/c-strncasecmp.c
+++ b/lib/c-strncasecmp.c
@@ -24,7 +24,15 @@
#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;
diff --git a/lib/chdir-long.c b/lib/chdir-long.c
index 96b750cb46..d042abfdab 100644
--- a/lib/chdir-long.c
+++ b/lib/chdir-long.c
@@ -32,6 +32,14 @@
# 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, "/");
diff --git a/lib/exclude.c b/lib/exclude.c
index df49714a6b..fe74f361c6 100644
--- a/lib/exclude.c
+++ b/lib/exclude.c
@@ -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 = "\\?*[]";
diff --git a/lib/file-type.c b/lib/file-type.c
index 109db44024..f7090cdd1d 100644
--- a/lib/file-type.c
+++ b/lib/file-type.c
@@ -25,7 +25,15 @@
#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
diff --git a/lib/filenamecat-lgpl.c b/lib/filenamecat-lgpl.c
index 8cb2da43d1..1e3e63a24b 100644
--- a/lib/filenamecat-lgpl.c
+++ b/lib/filenamecat-lgpl.c
@@ -31,10 +31,18 @@
# 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++)
diff --git a/lib/filevercmp.c b/lib/filevercmp.c
index f6ed2481f6..b2f309b3a9 100644
--- a/lib/filevercmp.c
+++ b/lib/filevercmp.c
@@ -26,6 +26,14 @@
#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;
diff --git a/lib/freadahead.c b/lib/freadahead.c
index 27f5c9579f..ecc0ed569b 100644
--- a/lib/freadahead.c
+++ b/lib/freadahead.c
@@ -22,7 +22,15 @@
#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 */
diff --git a/lib/fts.c b/lib/fts.c
index ad762dd779..1b06f82efa 100644
--- 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;
diff --git a/lib/hash-pjw.c b/lib/hash-pjw.c
index 743bb576cc..7df27ae1fc 100644
--- a/lib/hash-pjw.c
+++ b/lib/hash-pjw.c
@@ -23,11 +23,19 @@
#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;
diff --git a/lib/hash-triple.c b/lib/hash-triple.c
index 1649377894..56cbe7c3e9 100644
--- a/lib/hash-triple.c
+++ b/lib/hash-triple.c
@@ -29,6 +29,14 @@
#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;
diff --git a/lib/hash.c b/lib/hash.c
index f3de2aaaac..9a969ac318 100644
--- a/lib/hash.c
+++ b/lib/hash.c
@@ -43,6 +43,14 @@
# 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)
diff --git a/lib/i-ring.c b/lib/i-ring.c
index b603b0b0e8..8beef688aa 100644
--- a/lib/i-ring.c
+++ b/lib/i-ring.c
@@ -21,6 +21,14 @@
#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;
diff --git a/lib/isnan.c b/lib/isnan.c
index d9c653dea8..92fc250667 100644
--- a/lib/isnan.c
+++ b/lib/isnan.c
@@ -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
diff --git a/lib/memcasecmp.c b/lib/memcasecmp.c
index 6ae7c4f65d..b5c93fb4e6 100644
--- a/lib/memcasecmp.c
+++ b/lib/memcasecmp.c
@@ -24,11 +24,19 @@
#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;
diff --git a/lib/memchr2.c b/lib/memchr2.c
index 2e3c7cda62..b830b9d0b2 100644
--- a/lib/memchr2.c
+++ b/lib/memchr2.c
@@ -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
diff --git a/lib/memcmp2.c b/lib/memcmp2.c
index 14ab666ded..9b22bbac03 100644
--- a/lib/memcmp2.c
+++ b/lib/memcmp2.c
@@ -21,7 +21,15 @@
#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);
diff --git a/lib/parse-datetime.y b/lib/parse-datetime.y
index d77955f40d..07008524eb 100644
--- a/lib/parse-datetime.y
+++ b/lib/parse-datetime.y
@@ -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;
diff --git a/lib/propername.c b/lib/propername.c
index b74923de95..f2e80d15a7 100644
--- a/lib/propername.c
+++ b/lib/propername.c
@@ -38,6 +38,14 @@
#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. */
diff --git a/lib/quotearg.c b/lib/quotearg.c
index fb4955993e..18b788adee 100644
--- a/lib/quotearg.c
+++ b/lib/quotearg.c
@@ -42,6 +42,14 @@
#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;
diff --git a/lib/sockets.c b/lib/sockets.c
index 42b8f9ea58..9a448097c4 100644
--- a/lib/sockets.c
+++ b/lib/sockets.c
@@ -22,6 +22,14 @@
/* 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
diff --git a/lib/strnlen1.c b/lib/strnlen1.c
index f64ce104a3..f735bffe5c 100644
--- a/lib/strnlen1.c
+++ b/lib/strnlen1.c
@@ -21,10 +21,18 @@
#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);
diff --git a/lib/uniwidth/width.c b/lib/uniwidth/width.c
index a314e71bf0..f882257e87 100644
--- a/lib/uniwidth/width.c
+++ b/lib/uniwidth/width.c
@@ -22,6 +22,14 @@
#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. */