X-Git-Url: https://git.hcoop.net/bpt/guile.git/blobdiff_plain/32299e49e83b941082bee348c993630bb455a324..005de2e8273853e155c21767b1c8bdb4f3f3ca53:/lib/unistr.in.h diff --git a/lib/unistr.in.h b/lib/unistr.in.h index 83aeeee68..27067898e 100644 --- a/lib/unistr.in.h +++ b/lib/unistr.in.h @@ -66,17 +66,20 @@ extern "C" { /* Check whether an UTF-8 string is well-formed. Return NULL if valid, or a pointer to the first invalid unit otherwise. */ extern const uint8_t * - u8_check (const uint8_t *s, size_t n); + u8_check (const uint8_t *s, size_t n) + _UC_ATTRIBUTE_PURE; /* Check whether an UTF-16 string is well-formed. Return NULL if valid, or a pointer to the first invalid unit otherwise. */ extern const uint16_t * - u16_check (const uint16_t *s, size_t n); + u16_check (const uint16_t *s, size_t n) + _UC_ATTRIBUTE_PURE; /* Check whether an UCS-4 string is well-formed. Return NULL if valid, or a pointer to the first invalid unit otherwise. */ extern const uint32_t * - u32_check (const uint32_t *s, size_t n); + u32_check (const uint32_t *s, size_t n) + _UC_ATTRIBUTE_PURE; /* Elementary string conversions. */ @@ -119,11 +122,14 @@ extern uint16_t * failure. */ /* Similar to mblen(), except that s must not be NULL. */ extern int - u8_mblen (const uint8_t *s, size_t n); + u8_mblen (const uint8_t *s, size_t n) + _UC_ATTRIBUTE_PURE; extern int - u16_mblen (const uint16_t *s, size_t n); + u16_mblen (const uint16_t *s, size_t n) + _UC_ATTRIBUTE_PURE; extern int - u32_mblen (const uint32_t *s, size_t n); + u32_mblen (const uint32_t *s, size_t n) + _UC_ATTRIBUTE_PURE; /* Return the length (number of units) of the first character in S, putting its 'ucs4_t' representation in *PUC. Upon failure, *PUC is set to 0xfffd, @@ -400,38 +406,50 @@ extern uint32_t * /* Compare S1 and S2, each of length N. */ /* Similar to memcmp(). */ extern int - u8_cmp (const uint8_t *s1, const uint8_t *s2, size_t n); + u8_cmp (const uint8_t *s1, const uint8_t *s2, size_t n) + _UC_ATTRIBUTE_PURE; extern int - u16_cmp (const uint16_t *s1, const uint16_t *s2, size_t n); + u16_cmp (const uint16_t *s1, const uint16_t *s2, size_t n) + _UC_ATTRIBUTE_PURE; extern int - u32_cmp (const uint32_t *s1, const uint32_t *s2, size_t n); + u32_cmp (const uint32_t *s1, const uint32_t *s2, size_t n) + _UC_ATTRIBUTE_PURE; /* Compare S1 and S2. */ /* Similar to the gnulib function memcmp2(). */ extern int - u8_cmp2 (const uint8_t *s1, size_t n1, const uint8_t *s2, size_t n2); + u8_cmp2 (const uint8_t *s1, size_t n1, const uint8_t *s2, size_t n2) + _UC_ATTRIBUTE_PURE; extern int - u16_cmp2 (const uint16_t *s1, size_t n1, const uint16_t *s2, size_t n2); + u16_cmp2 (const uint16_t *s1, size_t n1, const uint16_t *s2, size_t n2) + _UC_ATTRIBUTE_PURE; extern int - u32_cmp2 (const uint32_t *s1, size_t n1, const uint32_t *s2, size_t n2); + u32_cmp2 (const uint32_t *s1, size_t n1, const uint32_t *s2, size_t n2) + _UC_ATTRIBUTE_PURE; /* Search the string at S for UC. */ /* Similar to memchr(). */ extern uint8_t * - u8_chr (const uint8_t *s, size_t n, ucs4_t uc); + u8_chr (const uint8_t *s, size_t n, ucs4_t uc) + _UC_ATTRIBUTE_PURE; extern uint16_t * - u16_chr (const uint16_t *s, size_t n, ucs4_t uc); + u16_chr (const uint16_t *s, size_t n, ucs4_t uc) + _UC_ATTRIBUTE_PURE; extern uint32_t * - u32_chr (const uint32_t *s, size_t n, ucs4_t uc); + u32_chr (const uint32_t *s, size_t n, ucs4_t uc) + _UC_ATTRIBUTE_PURE; /* Count the number of Unicode characters in the N units from S. */ /* Similar to mbsnlen(). */ extern size_t - u8_mbsnlen (const uint8_t *s, size_t n); + u8_mbsnlen (const uint8_t *s, size_t n) + _UC_ATTRIBUTE_PURE; extern size_t - u16_mbsnlen (const uint16_t *s, size_t n); + u16_mbsnlen (const uint16_t *s, size_t n) + _UC_ATTRIBUTE_PURE; extern size_t - u32_mbsnlen (const uint32_t *s, size_t n); + u32_mbsnlen (const uint32_t *s, size_t n) + _UC_ATTRIBUTE_PURE; /* Elementary string functions with memory allocation. */ @@ -448,11 +466,14 @@ extern uint32_t * /* Return the length (number of units) of the first character in S. Return 0 if it is the NUL character. Return -1 upon failure. */ extern int - u8_strmblen (const uint8_t *s); + u8_strmblen (const uint8_t *s) + _UC_ATTRIBUTE_PURE; extern int - u16_strmblen (const uint16_t *s); + u16_strmblen (const uint16_t *s) + _UC_ATTRIBUTE_PURE; extern int - u32_strmblen (const uint32_t *s); + u32_strmblen (const uint32_t *s) + _UC_ATTRIBUTE_PURE; /* Return the length (number of units) of the first character in S, putting its 'ucs4_t' representation in *PUC. Return 0 if it is the NUL @@ -487,20 +508,26 @@ extern const uint32_t * /* Return the number of units in S. */ /* Similar to strlen(), wcslen(). */ extern size_t - u8_strlen (const uint8_t *s); + u8_strlen (const uint8_t *s) + _UC_ATTRIBUTE_PURE; extern size_t - u16_strlen (const uint16_t *s); + u16_strlen (const uint16_t *s) + _UC_ATTRIBUTE_PURE; extern size_t - u32_strlen (const uint32_t *s); + u32_strlen (const uint32_t *s) + _UC_ATTRIBUTE_PURE; /* Return the number of units in S, but at most MAXLEN. */ /* Similar to strnlen(), wcsnlen(). */ extern size_t - u8_strnlen (const uint8_t *s, size_t maxlen); + u8_strnlen (const uint8_t *s, size_t maxlen) + _UC_ATTRIBUTE_PURE; extern size_t - u16_strnlen (const uint16_t *s, size_t maxlen); + u16_strnlen (const uint16_t *s, size_t maxlen) + _UC_ATTRIBUTE_PURE; extern size_t - u32_strnlen (const uint32_t *s, size_t maxlen); + u32_strnlen (const uint32_t *s, size_t maxlen) + _UC_ATTRIBUTE_PURE; /* Copy SRC to DEST. */ /* Similar to strcpy(), wcscpy(). */ @@ -562,16 +589,20 @@ extern uint32_t * #ifdef __sun /* Avoid a collision with the u8_strcmp() function in Solaris 11 libc. */ extern int - u8_strcmp_gnu (const uint8_t *s1, const uint8_t *s2); + u8_strcmp_gnu (const uint8_t *s1, const uint8_t *s2) + _UC_ATTRIBUTE_PURE; # define u8_strcmp u8_strcmp_gnu #else extern int - u8_strcmp (const uint8_t *s1, const uint8_t *s2); + u8_strcmp (const uint8_t *s1, const uint8_t *s2) + _UC_ATTRIBUTE_PURE; #endif extern int - u16_strcmp (const uint16_t *s1, const uint16_t *s2); + u16_strcmp (const uint16_t *s1, const uint16_t *s2) + _UC_ATTRIBUTE_PURE; extern int - u32_strcmp (const uint32_t *s1, const uint32_t *s2); + u32_strcmp (const uint32_t *s1, const uint32_t *s2) + _UC_ATTRIBUTE_PURE; /* Compare S1 and S2 using the collation rules of the current locale. Return -1 if S1 < S2, 0 if S1 = S2, 1 if S1 > S2. @@ -587,11 +618,14 @@ extern int /* Compare no more than N units of S1 and S2. */ /* Similar to strncmp(), wcsncmp(). */ extern int - u8_strncmp (const uint8_t *s1, const uint8_t *s2, size_t n); + u8_strncmp (const uint8_t *s1, const uint8_t *s2, size_t n) + _UC_ATTRIBUTE_PURE; extern int - u16_strncmp (const uint16_t *s1, const uint16_t *s2, size_t n); + u16_strncmp (const uint16_t *s1, const uint16_t *s2, size_t n) + _UC_ATTRIBUTE_PURE; extern int - u32_strncmp (const uint32_t *s1, const uint32_t *s2, size_t n); + u32_strncmp (const uint32_t *s1, const uint32_t *s2, size_t n) + _UC_ATTRIBUTE_PURE; /* Duplicate S, returning an identical malloc'd string. */ /* Similar to strdup(), wcsdup(). */ @@ -605,74 +639,98 @@ extern uint32_t * /* Find the first occurrence of UC in STR. */ /* Similar to strchr(), wcschr(). */ extern uint8_t * - u8_strchr (const uint8_t *str, ucs4_t uc); + u8_strchr (const uint8_t *str, ucs4_t uc) + _UC_ATTRIBUTE_PURE; extern uint16_t * - u16_strchr (const uint16_t *str, ucs4_t uc); + u16_strchr (const uint16_t *str, ucs4_t uc) + _UC_ATTRIBUTE_PURE; extern uint32_t * - u32_strchr (const uint32_t *str, ucs4_t uc); + u32_strchr (const uint32_t *str, ucs4_t uc) + _UC_ATTRIBUTE_PURE; /* Find the last occurrence of UC in STR. */ /* Similar to strrchr(), wcsrchr(). */ extern uint8_t * - u8_strrchr (const uint8_t *str, ucs4_t uc); + u8_strrchr (const uint8_t *str, ucs4_t uc) + _UC_ATTRIBUTE_PURE; extern uint16_t * - u16_strrchr (const uint16_t *str, ucs4_t uc); + u16_strrchr (const uint16_t *str, ucs4_t uc) + _UC_ATTRIBUTE_PURE; extern uint32_t * - u32_strrchr (const uint32_t *str, ucs4_t uc); + u32_strrchr (const uint32_t *str, ucs4_t uc) + _UC_ATTRIBUTE_PURE; /* Return the length of the initial segment of STR which consists entirely of Unicode characters not in REJECT. */ /* Similar to strcspn(), wcscspn(). */ extern size_t - u8_strcspn (const uint8_t *str, const uint8_t *reject); + u8_strcspn (const uint8_t *str, const uint8_t *reject) + _UC_ATTRIBUTE_PURE; extern size_t - u16_strcspn (const uint16_t *str, const uint16_t *reject); + u16_strcspn (const uint16_t *str, const uint16_t *reject) + _UC_ATTRIBUTE_PURE; extern size_t - u32_strcspn (const uint32_t *str, const uint32_t *reject); + u32_strcspn (const uint32_t *str, const uint32_t *reject) + _UC_ATTRIBUTE_PURE; /* Return the length of the initial segment of STR which consists entirely of Unicode characters in ACCEPT. */ /* Similar to strspn(), wcsspn(). */ extern size_t - u8_strspn (const uint8_t *str, const uint8_t *accept); + u8_strspn (const uint8_t *str, const uint8_t *accept) + _UC_ATTRIBUTE_PURE; extern size_t - u16_strspn (const uint16_t *str, const uint16_t *accept); + u16_strspn (const uint16_t *str, const uint16_t *accept) + _UC_ATTRIBUTE_PURE; extern size_t - u32_strspn (const uint32_t *str, const uint32_t *accept); + u32_strspn (const uint32_t *str, const uint32_t *accept) + _UC_ATTRIBUTE_PURE; /* Find the first occurrence in STR of any character in ACCEPT. */ /* Similar to strpbrk(), wcspbrk(). */ extern uint8_t * - u8_strpbrk (const uint8_t *str, const uint8_t *accept); + u8_strpbrk (const uint8_t *str, const uint8_t *accept) + _UC_ATTRIBUTE_PURE; extern uint16_t * - u16_strpbrk (const uint16_t *str, const uint16_t *accept); + u16_strpbrk (const uint16_t *str, const uint16_t *accept) + _UC_ATTRIBUTE_PURE; extern uint32_t * - u32_strpbrk (const uint32_t *str, const uint32_t *accept); + u32_strpbrk (const uint32_t *str, const uint32_t *accept) + _UC_ATTRIBUTE_PURE; /* Find the first occurrence of NEEDLE in HAYSTACK. */ /* Similar to strstr(), wcsstr(). */ extern uint8_t * - u8_strstr (const uint8_t *haystack, const uint8_t *needle); + u8_strstr (const uint8_t *haystack, const uint8_t *needle) + _UC_ATTRIBUTE_PURE; extern uint16_t * - u16_strstr (const uint16_t *haystack, const uint16_t *needle); + u16_strstr (const uint16_t *haystack, const uint16_t *needle) + _UC_ATTRIBUTE_PURE; extern uint32_t * - u32_strstr (const uint32_t *haystack, const uint32_t *needle); + u32_strstr (const uint32_t *haystack, const uint32_t *needle) + _UC_ATTRIBUTE_PURE; /* Test whether STR starts with PREFIX. */ extern bool - u8_startswith (const uint8_t *str, const uint8_t *prefix); + u8_startswith (const uint8_t *str, const uint8_t *prefix) + _UC_ATTRIBUTE_PURE; extern bool - u16_startswith (const uint16_t *str, const uint16_t *prefix); + u16_startswith (const uint16_t *str, const uint16_t *prefix) + _UC_ATTRIBUTE_PURE; extern bool - u32_startswith (const uint32_t *str, const uint32_t *prefix); + u32_startswith (const uint32_t *str, const uint32_t *prefix) + _UC_ATTRIBUTE_PURE; /* Test whether STR ends with SUFFIX. */ extern bool - u8_endswith (const uint8_t *str, const uint8_t *suffix); + u8_endswith (const uint8_t *str, const uint8_t *suffix) + _UC_ATTRIBUTE_PURE; extern bool - u16_endswith (const uint16_t *str, const uint16_t *suffix); + u16_endswith (const uint16_t *str, const uint16_t *suffix) + _UC_ATTRIBUTE_PURE; extern bool - u32_endswith (const uint32_t *str, const uint32_t *suffix); + u32_endswith (const uint32_t *str, const uint32_t *suffix) + _UC_ATTRIBUTE_PURE; /* Divide STR into tokens separated by characters in DELIM. This interface is actually more similar to wcstok than to strtok. */