From 353b92d13d3ab6276998239c827287151e16bc8d Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 13 Nov 2020 11:47:36 +0100 Subject: Remove use of C character class functions that may use locale Some of these cause warnings, and should never have been used in the first place since they depend on locale. --- NEWS | 3 ++- src/n3.c | 3 +-- src/serd_internal.h | 1 - src/string_utils.h | 15 +++++++++++++-- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/NEWS b/NEWS index 057a9994..fe031155 100644 --- a/NEWS +++ b/NEWS @@ -2,10 +2,11 @@ serd (0.30.7) unstable; * Fix potential memory error when serialising URIs * Move headers to an include directory + * Remove use of C character class functions that may use locale * Split up and reorganize unit tests * Use aligned allocation via C11 or Windows API where possible - -- David Robillard Thu, 12 Nov 2020 19:18:33 +0000 + -- David Robillard Fri, 13 Nov 2020 11:53:07 +0000 serd (0.30.6) stable; diff --git a/src/n3.c b/src/n3.c index 2e85ea66..f2c42081 100644 --- a/src/n3.c +++ b/src/n3.c @@ -24,7 +24,6 @@ #include "serd/serd.h" #include -#include #include #include #include @@ -714,7 +713,7 @@ read_IRIREF(SerdReader* reader, Ref* dest) break; default: if (c <= 0x20) { - if (isprint(c)) { + if (is_print(c)) { r_err(reader, SERD_ERR_BAD_SYNTAX, "invalid IRI character `%c' (escape %%%02X)\n", c, (unsigned)c); diff --git a/src/serd_internal.h b/src/serd_internal.h index 03d4edbd..2090476e 100644 --- a/src/serd_internal.h +++ b/src/serd_internal.h @@ -20,7 +20,6 @@ #include "serd/serd.h" #include -#include #include #include #include diff --git a/src/string_utils.h b/src/string_utils.h index b80bf5aa..b4c2702e 100644 --- a/src/string_utils.h +++ b/src/string_utils.h @@ -20,7 +20,6 @@ #include "serd/serd.h" #include -#include #include #include #include @@ -74,6 +73,12 @@ is_space(const char c) } } +static inline bool +is_print(const int c) +{ + return c >= 0x20 && c <= 0x7E; +} + static inline bool is_base64(const uint8_t c) { @@ -93,11 +98,17 @@ serd_substrlen(const uint8_t* str, size_t* n_bytes, SerdNodeFlags* flags); +static inline char +serd_to_upper(const char c) +{ + return (char)((c >= 'a' && c <= 'z') ? c - 32 : c); +} + static inline int serd_strncasecmp(const char* s1, const char* s2, size_t n) { for (; n > 0 && *s2; s1++, s2++, --n) { - if (toupper(*s1) != toupper(*s2)) { + if (serd_to_upper(*s1) != serd_to_upper(*s2)) { return ((*(const uint8_t*)s1 < *(const uint8_t*)s2) ? -1 : +1); } } -- cgit v1.2.1