From 408e7dfaf2eb735804f62728de679972867c30d5 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Mon, 3 May 2021 13:53:10 -0700
Subject: [PATCH] replace __pure__ with compiler attribute 'pure'

Remove defining __deprecated__

Upstream-Status: Inappropriate [Untested with dietlibc]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
 byte.h     |  22 ++++++----
 critbit.h  |  12 ++++--
 fmt.h      | 100 +++++++++++++++++++++++---------------------
 str.h      |  22 ++++++----
 stralloc.h |  20 +++++----
 5 files changed, 103 insertions(+), 73 deletions(-)

--- a/byte.h
+++ b/byte.h
@@ -2,6 +2,16 @@
 #ifndef BYTE_H
 #define BYTE_H
 
+#ifndef __has_attribute
+  #define __has_attribute(x) 0
+#endif
+
+#if __has_attribute(pure)
+#define __PURE __attribute__ ((pure))
+#else
+#define __PURE
+#endif
+
 /* for size_t: */
 #include <stddef.h>
 
@@ -9,17 +19,13 @@
 extern "C" {
 #endif
 
-#ifndef __pure__
-#define __pure__
-#endif
-
 /* byte_chr returns the smallest integer i between 0 and len-1
  * inclusive such that one[i] equals needle, or len if not found. */
-size_t byte_chr(const void* haystack, size_t len, char needle) __pure__;
+size_t byte_chr(const void* haystack, size_t len, char needle) __PURE;
 
 /* byte_rchr returns the largest integer i between 0 and len-1 inclusive
  * such that one[i] equals needle, or len if not found. */
-size_t byte_rchr(const void* haystack,size_t len,char needle) __pure__;
+size_t byte_rchr(const void* haystack,size_t len,char needle) __PURE;
 
 /* byte_copy copies in[0] to out[0], in[1] to out[1], ... and in[len-1]
  * to out[len-1]. */
@@ -34,14 +40,14 @@ void byte_copyr(void* out, size_t len, c
  * than, equal to, or greater than the string b[0], b[1], ...,
  * b[len-1]. When the strings are different, byte_diff does not read
  * bytes past the first difference. */
-int byte_diff(const void* a, size_t len, const void* b) __pure__;
+int byte_diff(const void* a, size_t len, const void* b) __PURE;
 
 /* byte_zero sets the bytes out[0], out[1], ..., out[len-1] to 0 */
 void byte_zero(void* out, size_t len);
 
 #define byte_equal(s,n,t) (!byte_diff((s),(n),(t)))
 
-int byte_equal_notimingattack(const void* a, size_t len,const void* b) __pure__;
+int byte_equal_notimingattack(const void* a, size_t len,const void* b) __PURE;
 
 #if defined(__i386__) || defined(__x86_64__)
 #define UNALIGNED_ACCESS_OK
--- a/critbit.h
+++ b/critbit.h
@@ -8,15 +8,21 @@ extern "C" {
 /* for __pure__ if we are compiling under dietlibc */
 #include <stddef.h>
 
-#ifndef __pure__
-#define __pure__
+#ifndef __has_attribute
+  #define __has_attribute(x) 0
+#endif
+
+#if __has_attribute(pure)
+#define __PURE __attribute__ ((pure))
+#else
+#define __PURE
 #endif
 
 typedef struct {
   void *root;
 } critbit0_tree;
 
-int critbit0_contains(critbit0_tree *t, const char *u) __pure__;
+int critbit0_contains(critbit0_tree *t, const char *u) __PURE;
 int critbit0_insert(critbit0_tree *t, const char *u);
 int critbit0_delete(critbit0_tree *t, const char *u);
 void critbit0_clear(critbit0_tree *t);
--- a/fmt.h
+++ b/fmt.h
@@ -2,6 +2,16 @@
 #ifndef FMT_H
 #define FMT_H
 
+#ifndef __has_attribute
+  #define __has_attribute(x) 0
+#endif
+
+#if __has_attribute(pure)
+#define __PURE __attribute__ ((pure))
+#else
+#define __PURE
+#endif
+
 /* for size_t: */
 #include <stddef.h>
 /* for uint32_t */
@@ -15,10 +25,6 @@
 extern "C" {
 #endif
 
-#ifndef __pure__
-#define __pure__
-#endif
-
 #define FMT_LONG  41 /* enough space to hold -2^127 in decimal, plus \0 */
 #define FMT_ULONG 40 /* enough space to hold 2^128 - 1 in decimal, plus \0 */
 #define FMT_8LONG 44 /* enough space to hold 2^128 - 1 in octal, plus \0 */
@@ -46,31 +52,31 @@ extern "C" {
 /* convert signed src integer -23 to ASCII '-','2','3', return number of
  * bytes of value in output format (3 in this example).
  * If dest is not NULL, write result to dest */
-size_t fmt_long(char *dest,signed long src) __pure__;
+size_t fmt_long(char *dest,signed long src) __PURE;
 
 /* convert unsigned src integer 23 to ASCII '2','3', return number of
  * bytes of value in output format (2 in this example).
  * If dest is not NULL, write result to dest */
-size_t fmt_ulong(char *dest,unsigned long src) __pure__;
+size_t fmt_ulong(char *dest,unsigned long src) __PURE;
 
 /* convert unsigned src integer 0x23 to ASCII '2','3', return number of
  * bytes of value in output format (2 in this example).
  * If dest is not NULL, write result to dest */
-size_t fmt_xlong(char *dest,unsigned long src) __pure__;
+size_t fmt_xlong(char *dest,unsigned long src) __PURE;
 
 /* convert unsigned src integer 023 to ASCII '2','3', return number of
  * bytes of value in output format (2 in this example).
  * If dest is not NULL, write result to dest */
-size_t fmt_8long(char *dest,unsigned long src) __pure__;
+size_t fmt_8long(char *dest,unsigned long src) __PURE;
 
 /* like fmt_long but for long long */
-size_t fmt_longlong(char *dest,signed long long src) __pure__;
+size_t fmt_longlong(char *dest,signed long long src) __PURE;
 
 /* like fmt_ulong but for unsigned long long */
-size_t fmt_ulonglong(char *dest,unsigned long long src) __pure__;
+size_t fmt_ulonglong(char *dest,unsigned long long src) __PURE;
 
 /* like fmt_xlong but for unsigned long long */
-size_t fmt_xlonglong(char *dest,unsigned long long src) __pure__;
+size_t fmt_xlonglong(char *dest,unsigned long long src) __PURE;
 
 #define fmt_uint(dest,src) fmt_ulong(dest,src)
 #define fmt_int(dest,src) fmt_long(dest,src)
@@ -81,22 +87,22 @@ size_t fmt_xlonglong(char *dest,unsigned
  * Does not truncate! */
 /* fmt_ulong0(buf,23,4) -> '0','0','2','3' return 4 */
 /* fmt_ulong0(buf,234,2) -> '2','3','4', return 3 */
-size_t fmt_ulong0(char *,unsigned long src,size_t padto) __pure__;
+size_t fmt_ulong0(char *,unsigned long src,size_t padto) __PURE;
 
 #define fmt_uint0(buf,src,padto) fmt_ulong0(buf,src,padto)
 
 /* convert src double 1.7 to ASCII '1','.','7', return length.
  * If dest is not NULL, write result to dest */
-size_t fmt_double(char *dest, double d,int max,int prec) __pure__;
+size_t fmt_double(char *dest, double d,int max,int prec) __PURE;
 
 /* if src is negative, write '-' and return 1.
  * if src is positive, write '+' and return 1.
  * otherwise return 0 */
-size_t fmt_plusminus(char *dest,int src) __pure__;
+size_t fmt_plusminus(char *dest,int src) __PURE;
 
 /* if src is negative, write '-' and return 1.
  * otherwise return 0. */
-size_t fmt_minus(char *dest,int src) __pure__;
+size_t fmt_minus(char *dest,int src) __PURE;
 
 /* copy str to dest until \0 byte, return number of copied bytes. */
 /* fmt_str(NULL,str) == strlen(str) */
@@ -108,11 +114,11 @@ size_t fmt_minus(char *dest,int src) __p
  * This is more efficient because strcat needs to scan the string to
  * find the end and append.
  */
-size_t fmt_str(char *dest,const char *src) __pure__;
+size_t fmt_str(char *dest,const char *src) __PURE;
 
 /* copy str to dest until \0 byte or limit bytes copied.
  * return number of copied bytes. */
-size_t fmt_strn(char *dest,const char *src,size_t limit) __pure__;
+size_t fmt_strn(char *dest,const char *src,size_t limit) __PURE;
 
 /* copy n bytes from src to dest, return n */
 static inline size_t fmt_copybytes(char* dest,const char* src,size_t n) {
@@ -124,56 +130,56 @@ static inline size_t fmt_copybytes(char*
  * write padlen-srclen spaces, if that is >= 0.  Then copy srclen
  * characters from src.  Truncate only if total length is larger than
  * maxlen.  Return number of characters written. */
-size_t fmt_pad(char* dest,const char* src,size_t srclen,size_t padlen,size_t maxlen) __pure__;
+size_t fmt_pad(char* dest,const char* src,size_t srclen,size_t padlen,size_t maxlen) __PURE;
 
 /* "foo" -> "foo  "
  * append padlen-srclen spaces after dest, if that is >= 0.  Truncate
  * only if total length is larger than maxlen.  Return number of
  * characters written. */
-size_t fmt_fill(char* dest,size_t srclen,size_t padlen,size_t maxlen) __pure__;
+size_t fmt_fill(char* dest,size_t srclen,size_t padlen,size_t maxlen) __PURE;
 
 /* 1 -> "1", 4900 -> "4.9k", 2300000 -> "2.3M" */
-size_t fmt_human(char* dest,unsigned long long l) __pure__;
+size_t fmt_human(char* dest,unsigned long long l) __PURE;
 
 /* 1 -> "1", 4900 -> "4.8k", 2300000 -> "2.2M" */
-size_t fmt_humank(char* dest,unsigned long long l) __pure__;
+size_t fmt_humank(char* dest,unsigned long long l) __PURE;
 
 /* "Sun, 06 Nov 1994 08:49:37 GMT" */
 size_t fmt_httpdate(char* dest,time_t t);	/* not marked pure because it calls gmtime */
 
 /* "2014-05-27T19:22:16.247Z" */
-size_t fmt_iso8601(char* dest,time_t t) __pure__;
+size_t fmt_iso8601(char* dest,time_t t) __PURE;
 
 #define FMT_UTF8 5
 #define FMT_ASN1LENGTH 17 /* enough space to hold 2^128-1 */
 #define FMT_ASN1TAG 19 /* enough space to hold 2^128-1 */
 
 /* some variable length encodings for integers */
-size_t fmt_utf8(char* dest,uint32_t n) __pure__;	/* can store 0-0x7fffffff */
-size_t fmt_asn1derlength(char* dest,unsigned long long l) __pure__;	/* 0-0x7f: 1 byte, above that 1+bytes_needed bytes */
-size_t fmt_asn1dertag(char* dest,unsigned long long l) __pure__;	/* 1 byte for each 7 bits; upper bit = more bytes coming */
+size_t fmt_utf8(char* dest,uint32_t n) __PURE;	/* can store 0-0x7fffffff */
+size_t fmt_asn1derlength(char* dest,unsigned long long l) __PURE;	/* 0-0x7f: 1 byte, above that 1+bytes_needed bytes */
+size_t fmt_asn1dertag(char* dest,unsigned long long l) __PURE;	/* 1 byte for each 7 bits; upper bit = more bytes coming */
 
 /* Google Protocol Buffers, https://developers.google.com/protocol-buffers/docs/encoding */
-size_t fmt_varint(char* dest,unsigned long long l) __pure__;	/* protocol buffers encoding; like asn1dertag but little endian */
-size_t fmt_pb_tag(char* dest,size_t fieldno,unsigned char type) __pure__;	/* protocol buffer tag */
-size_t fmt_pb_type0_int(char* dest,unsigned long long l) __pure__;	/* protocol buffers encoding: type 0 bool/enum/int32/uint32/int64/uint64 */
-size_t fmt_pb_type0_sint(char* dest,signed long long l) __pure__;/* protocol buffers encoding: type 0 sint32/sint64 */
-size_t fmt_pb_type1_double(char* dest,double d) __pure__;	/* protocol buffers encoding: double (64-bit little endian blob) */
-size_t fmt_pb_type1_fixed64(char* dest,uint64_t l) __pure__;	/* protocol buffers encoding: 64-bit little endian blob */
+size_t fmt_varint(char* dest,unsigned long long l) __PURE;	/* protocol buffers encoding; like asn1dertag but little endian */
+size_t fmt_pb_tag(char* dest,size_t fieldno,unsigned char type) __PURE;	/* protocol buffer tag */
+size_t fmt_pb_type0_int(char* dest,unsigned long long l) __PURE;	/* protocol buffers encoding: type 0 bool/enum/int32/uint32/int64/uint64 */
+size_t fmt_pb_type0_sint(char* dest,signed long long l) __PURE;/* protocol buffers encoding: type 0 sint32/sint64 */
+size_t fmt_pb_type1_double(char* dest,double d) __PURE;	/* protocol buffers encoding: double (64-bit little endian blob) */
+size_t fmt_pb_type1_fixed64(char* dest,uint64_t l) __PURE;	/* protocol buffers encoding: 64-bit little endian blob */
 
 /* fmt_pb_type2_string can return 0 if (s,l) is clearly invalid */
-size_t fmt_pb_type2_string(char* dest,const char* s,size_t l) __pure__;	/* protocol buffers encoding: varint length + blob */
-size_t fmt_pb_type5_float(char* dest,float f) __pure__;		/* protocol buffers encoding: float (32-bit little endian blob) */
-size_t fmt_pb_type5_fixed32(char* dest,uint32_t l) __pure__;	/* protocol buffers encoding: 32-bit little endian blob */
-
-size_t fmt_pb_int(char* dest,size_t fieldno,unsigned long long l) __pure__;
-size_t fmt_pb_sint(char* dest,size_t fieldno,signed long long l) __pure__;
-size_t fmt_pb_double(char* dest,size_t fieldno,double d) __pure__;
-size_t fmt_pb_float(char* dest,size_t fieldno,float f) __pure__;
-size_t fmt_pb_string(char* dest,size_t fieldno,const char* s,size_t l) __pure__;
+size_t fmt_pb_type2_string(char* dest,const char* s,size_t l) __PURE;	/* protocol buffers encoding: varint length + blob */
+size_t fmt_pb_type5_float(char* dest,float f) __PURE;		/* protocol buffers encoding: float (32-bit little endian blob) */
+size_t fmt_pb_type5_fixed32(char* dest,uint32_t l) __PURE;	/* protocol buffers encoding: 32-bit little endian blob */
+
+size_t fmt_pb_int(char* dest,size_t fieldno,unsigned long long l) __PURE;
+size_t fmt_pb_sint(char* dest,size_t fieldno,signed long long l) __PURE;
+size_t fmt_pb_double(char* dest,size_t fieldno,double d) __PURE;
+size_t fmt_pb_float(char* dest,size_t fieldno,float f) __PURE;
+size_t fmt_pb_string(char* dest,size_t fieldno,const char* s,size_t l) __PURE;
 
 /* fmt_netstring can return 0 if (src,len) is clearly invalid */
-size_t fmt_netstring(char* dest,const char* src,size_t len) __pure__;
+size_t fmt_netstring(char* dest,const char* src,size_t len) __PURE;
 
 /* Marshaling helper functions.
  * Escape one character, no matter if it needs escaping or not.
@@ -185,27 +191,27 @@ size_t fmt_netstring(char* dest,const ch
  * unicode codepoint) may be limited to 0x7f, 0xff or 0x10ffff. */
 
 /* XML escaping: '&' -> '&amp;', '<' -> '&lt;', 'ö' -> '&#xf6;' */
-size_t fmt_escapecharxml(char* dest,uint32_t ch) __pure__;
+size_t fmt_escapecharxml(char* dest,uint32_t ch) __PURE;
 /* HTML escaping is the same as XML escaping. */
-size_t fmt_escapecharhtml(char* dest,uint32_t ch) __pure__;
+size_t fmt_escapecharhtml(char* dest,uint32_t ch) __PURE;
 
 /* JSON escaping: '\' -> '\\', '"' -> '\"', 'ö' -> '\u00f6' */
-size_t fmt_escapecharjson(char* dest,uint32_t ch) __pure__;
+size_t fmt_escapecharjson(char* dest,uint32_t ch) __PURE;
 
 /* MIME quoted-printable escaping: 'ö' -> '=f6', characters > 0xff not supported */
-size_t fmt_escapecharquotedprintable(char* dest,uint32_t ch) __pure__;
+size_t fmt_escapecharquotedprintable(char* dest,uint32_t ch) __PURE;
 
 /* MIME quoted-printable escaping with UTF-8: 'ö' -> '=c3=b6', characters > 0x7fffffff not supported */
-size_t fmt_escapecharquotedprintableutf8(char* dest,uint32_t ch) __pure__;
+size_t fmt_escapecharquotedprintableutf8(char* dest,uint32_t ch) __PURE;
 
 /* C99 style escaping: '\' -> '\\', newline -> '\n', 0xc2 -> '\302' */
-size_t fmt_escapecharc(char* dest,uint32_t ch) __pure__;
+size_t fmt_escapecharc(char* dest,uint32_t ch) __PURE;
 
 /* internal functions, may be independently useful */
 char fmt_tohex(char c) __attribute__((__const__));
 
 #define fmt_strm(b,...) fmt_strm_internal(b,__VA_ARGS__,(char*)0)
-size_t fmt_strm_internal(char* dest,...) __pure__;
+size_t fmt_strm_internal(char* dest,...) __PURE;
 
 #ifndef MAX_ALLOCA
 #define MAX_ALLOCA 100000
--- a/str.h
+++ b/str.h
@@ -8,8 +8,14 @@
 extern "C" {
 #endif
 
-#ifndef __pure__
-#define __pure__
+#ifndef __has_attribute
+  #define __has_attribute(x) 0
+#endif
+
+#if __has_attribute(pure)
+#define __PURE __attribute__ ((pure))
+#else
+#define __PURE
 #endif
 
 /* str_copy copies leading bytes from in to out until \0.
@@ -21,7 +27,7 @@ size_t str_copy(char *out,const char *in
  * equal to, or greater than the string b[0], b[1], ..., b[m-1]=='\0'.
  * If the strings are different, str_diff does not read bytes past the
  * first difference. */
-int str_diff(const char *a,const char *b) __pure__;
+int str_diff(const char *a,const char *b) __PURE;
 
 /* str_diffn returns negative, 0, or positive, depending on whether the
  * string a[0], a[1], ..., a[n]=='\0' is lexicographically smaller than,
@@ -29,24 +35,24 @@ int str_diff(const char *a,const char *b
  * If the strings are different, str_diffn does not read bytes past the
  * first difference. The strings will be considered equal if the first
  * limit characters match. */
-int str_diffn(const char *a,const char *b,size_t limit) __pure__;
+int str_diffn(const char *a,const char *b,size_t limit) __PURE;
 
 #ifdef __dietlibc__
 #include <string.h>
 #define str_len(foo) strlen(foo)
 #else
 /* str_len returns the index of \0 in s */
-size_t str_len(const char *s) __pure__;
+size_t str_len(const char *s) __PURE;
 #endif
 
 /* str_chr returns the index of the first occurance of needle or \0 in haystack */
-size_t str_chr(const char *haystack,char needle) __pure__;
+size_t str_chr(const char *haystack,char needle) __PURE;
 
 /* str_rchr returns the index of the last occurance of needle or \0 in haystack */
-size_t str_rchr(const char *haystack,char needle) __pure__;
+size_t str_rchr(const char *haystack,char needle) __PURE;
 
 /* str_start returns 1 if the b is a prefix of a, 0 otherwise */
-int str_start(const char *a,const char *b) __pure__;
+int str_start(const char *a,const char *b) __PURE;
 
 /* convenience shortcut to test for string equality */
 #define str_equal(s,t) (!str_diff((s),(t)))
--- a/stralloc.h
+++ b/stralloc.h
@@ -2,16 +2,22 @@
 #ifndef STRALLOC_H
 #define STRALLOC_H
 
+#ifndef __has_attribute
+  #define __has_attribute(x) 0
+#endif
+
+#if __has_attribute(pure)
+#define __PURE __attribute__ ((pure))
+#else
+#define __PURE
+#endif
+
 #include <stddef.h>
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-#ifndef __pure__
-#define __pure__
-#endif
-
 /* stralloc is the internal data structure all functions are working on.
  * s is the string.
  * len is the used length of the string.
@@ -101,17 +107,17 @@ static inline int stralloc_APPEND(strall
 /* stralloc_starts returns 1 if the \0-terminated string in "in", without
  * the terminating \0, is a prefix of the string stored in sa. Otherwise
  * it returns 0. sa must already be allocated. */
-int stralloc_starts(stralloc* sa,const char* in) __pure__;
+int stralloc_starts(stralloc* sa,const char* in) __PURE;
 
 /* stralloc_diff returns negative, 0, or positive, depending on whether
  * a is lexicographically smaller than, equal to, or greater than the
  * string b. */
-int stralloc_diff(const stralloc* a,const stralloc* b) __pure__;
+int stralloc_diff(const stralloc* a,const stralloc* b) __PURE;
 
 /* stralloc_diffs returns negative, 0, or positive, depending on whether
  * a is lexicographically smaller than, equal to, or greater than the
  * string b[0], b[1], ..., b[n]=='\0'. */
-int stralloc_diffs(const stralloc* a,const char* b) __pure__;
+int stralloc_diffs(const stralloc* a,const char* b) __PURE;
 
 #define stralloc_equal(a,b) (!stralloc_diff((a),(b)))
 #define stralloc_equals(a,b) (!stralloc_diffs((a),(b)))
--- a/scan.h
+++ b/scan.h
@@ -15,8 +15,14 @@
 extern "C" {
 #endif
 
-#ifndef __pure__
-#define __pure__
+#ifndef __has_attribute
+  #define __has_attribute(x) 0
+#endif
+
+#if __has_attribute(pure)
+#define __PURE __attribute__ ((pure))
+#else
+#define __PURE
 #endif
 
 /* This file declared functions used to decode / scan / unmarshal
@@ -84,18 +90,18 @@ size_t scan_double(const char *in, doubl
 size_t scan_plusminus(const char *src,signed int *dest);
 
 /* return the highest integer n<=limit so that isspace(in[i]) for all 0<=i<=n */
-size_t scan_whitenskip(const char *in,size_t limit) __pure__;
+size_t scan_whitenskip(const char *in,size_t limit) __PURE;
 
 /* return the highest integer n<=limit so that !isspace(in[i]) for all 0<=i<=n */
-size_t scan_nonwhitenskip(const char *in,size_t limit) __pure__;
+size_t scan_nonwhitenskip(const char *in,size_t limit) __PURE;
 
 /* return the highest integer n<=limit so that in[i] is element of
  * charset (ASCIIZ string) for all 0<=i<=n */
-size_t scan_charsetnskip(const char *in,const char *charset,size_t limit) __pure__;
+size_t scan_charsetnskip(const char *in,const char *charset,size_t limit) __PURE;
 
 /* return the highest integer n<=limit so that in[i] is not element of
  * charset (ASCIIZ string) for all 0<=i<=n */
-size_t scan_noncharsetnskip(const char *in,const char *charset,size_t limit) __pure__;
+size_t scan_noncharsetnskip(const char *in,const char *charset,size_t limit) __PURE;
 
 /* try to parse ASCII GMT date; does not understand time zones. */
 /* example dates:
@@ -103,17 +109,17 @@ size_t scan_noncharsetnskip(const char *
  *   "Sunday, 06-Nov-94 08:49:37 GMT"
  *   "Sun Nov  6 08:49:37 1994"
  */
-size_t scan_httpdate(const char *in,time_t *t) __pure__;
+size_t scan_httpdate(const char *in,time_t *t) __PURE;
 
 /* try to parse ASCII ISO-8601 date; does not understand time zones. */
 /* example date: "2014-05-27T19:22:16Z" */
-size_t scan_iso8601(const char* in,struct timespec* t) __pure__;
+size_t scan_iso8601(const char* in,struct timespec* t) __PURE;
 
 /* some variable length encodings for integers */
-size_t scan_utf8(const char* in,size_t len,uint32_t* n) __pure__;
-size_t scan_utf8_sem(const char* in,size_t len,uint32_t* n) __pure__;
-size_t scan_asn1derlength(const char* in,size_t len,unsigned long long* n) __pure__;
-size_t scan_asn1dertag(const char* in,size_t len,unsigned long long* n) __pure__;
+size_t scan_utf8(const char* in,size_t len,uint32_t* n) __PURE;
+size_t scan_utf8_sem(const char* in,size_t len,uint32_t* n) __PURE;
+size_t scan_asn1derlength(const char* in,size_t len,unsigned long long* n) __PURE;
+size_t scan_asn1dertag(const char* in,size_t len,unsigned long long* n) __PURE;
 
 /* Google protocol buffers */
 /* A protocol buffer is a sequence of (tag,value).
@@ -121,16 +127,16 @@ size_t scan_asn1dertag(const char* in,si
  *   which field in your struct is being sent. Integers must have type
  *   0, double type 1, strings type 2 and floats type 5. However, you
  *   have to check this yourself.
- */ 
-size_t scan_varint(const char* in,size_t len, unsigned long long* n) __pure__;	/* internal */
-size_t scan_pb_tag(const char* in,size_t len, size_t* fieldno,unsigned char* type) __pure__;
+ */
+size_t scan_varint(const char* in,size_t len, unsigned long long* n) __PURE;	/* internal */
+size_t scan_pb_tag(const char* in,size_t len, size_t* fieldno,unsigned char* type) __PURE;
 
 /* Then, depending on the field number, validate the type and call the
  * corresponding of these functions to parse the value */
-size_t scan_pb_type0_int(const char* in,size_t len,unsigned long long* l) __pure__;
-size_t scan_pb_type0_sint(const char* in,size_t len,signed long long* l) __pure__;
-size_t scan_pb_type1_double(const char* in,size_t len,double* d) __pure__;
-size_t scan_pb_type1_fixed64(const char* in,size_t len,uint64_t* b) __pure__;
+size_t scan_pb_type0_int(const char* in,size_t len,unsigned long long* l) __PURE;
+size_t scan_pb_type0_sint(const char* in,size_t len,signed long long* l) __PURE;
+size_t scan_pb_type1_double(const char* in,size_t len,double* d) __PURE;
+size_t scan_pb_type1_fixed64(const char* in,size_t len,uint64_t* b) __PURE;
 /* NOTE: scan_pb_type2_stringlen only parses the length of the string,
  * not the string itself. It will return the number of bytes parsed in
  * the length, then set slen to the value of the length integer it just
@@ -141,9 +147,9 @@ size_t scan_pb_type1_fixed64(const char*
  * parsing early without having to read and allocate memory for the rest
  * (potentially gigabytes) of the data announced by one unreasonable
  * string length value. */
-size_t scan_pb_type2_stringlen(const char* in,size_t len,const char** string, size_t* slen) __pure__;
-size_t scan_pb_type5_float(const char* in,size_t len,float* f) __pure__;
-size_t scan_pb_type5_fixed32(const char* in,size_t len,uint32_t* b) __pure__;
+size_t scan_pb_type2_stringlen(const char* in,size_t len,const char** string, size_t* slen) __PURE;
+size_t scan_pb_type5_float(const char* in,size_t len,float* f) __PURE;
+size_t scan_pb_type5_fixed32(const char* in,size_t len,uint32_t* b) __PURE;
 
 /* parse a netstring, input buffer is in (len bytes).
  * if parsing is successful:
@@ -153,7 +159,7 @@ size_t scan_pb_type5_fixed32(const char*
  *   return 0
  * Note: *dest will point inside the input buffer!
  */
-size_t scan_netstring(const char* in,size_t len,char** dest,size_t* slen) __pure__;
+size_t scan_netstring(const char* in,size_t len,char** dest,size_t* slen) __PURE;
 
 /* internal function that might be useful independently */
 /* convert from hex ASCII, return 0 to 15 for success or -1 for failure */
--- a/scan/scan_httpdate.c
+++ b/scan/scan_httpdate.c
@@ -1,5 +1,4 @@
 #define _GNU_SOURCE
-#define __deprecated__
 #include "scan.h"
 #include "byte.h"
 #include "case.h"
--- a/scan/scan_iso8601.c
+++ b/scan/scan_iso8601.c
@@ -1,5 +1,4 @@
 #define _GNU_SOURCE
-#define __deprecated__
 #include "scan.h"
 #include "byte.h"
 #include "case.h"
