summaryrefslogtreecommitdiff
path: root/include/libHX/ctype_helper.h
diff options
context:
space:
mode:
authorJörg Frings-Fürst <debian@jff-webhosting.net>2015-02-04 14:09:54 +0100
committerJörg Frings-Fürst <debian@jff-webhosting.net>2015-02-04 14:09:54 +0100
commitbd82d030011cd8b9655e5ded6b6df9343b42a6bd (patch)
treede82d886dfea0cb7dbb6e80436218a25cb211bc3 /include/libHX/ctype_helper.h
Imported Upstream version 3.22upstream/3.22
Diffstat (limited to 'include/libHX/ctype_helper.h')
-rw-r--r--include/libHX/ctype_helper.h86
1 files changed, 86 insertions, 0 deletions
diff --git a/include/libHX/ctype_helper.h b/include/libHX/ctype_helper.h
new file mode 100644
index 0000000..2ba0a7a
--- /dev/null
+++ b/include/libHX/ctype_helper.h
@@ -0,0 +1,86 @@
+#ifndef _LIBHX_CTYPE_H
+#define _LIBHX_CTYPE_H 1
+
+#ifdef __cplusplus
+# include <cctype>
+#else
+# include <ctype.h>
+# include <stdbool.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * ctype.h workarounds. The is*() functions takes an int, but people
+ * commonly pass in a char. Because char can technically be signed, the
+ * value would be sign-extended during promotion to the int type which the
+ * ctype family functions take.
+ *
+ * The HX_ ctype related functions therefore explicitly take an unsigned char,
+ * and thus knowingly make it impossible to pass in stdio's "EOF" (-1).
+ * [When was the last time you did a isalpha(EOF) anyway?]
+ *
+ * Because, again, this all works due to implicit type conversion, these
+ * wrappers look rather plain. Oh, also note we are returning the much
+ * more modern "bool".
+ *
+ * And not all ctype functions are provided - no need so far, and I do not
+ * want to clutter it before needing it.
+ */
+static __inline__ bool HX_isalnum(unsigned char c)
+{
+ return isalnum(c);
+}
+
+static __inline__ bool HX_isalpha(unsigned char c)
+{
+ return isalpha(c);
+}
+
+static __inline__ bool HX_isdigit(unsigned char c)
+{
+ return isdigit(c);
+}
+
+static __inline__ bool HX_islower(unsigned char c)
+{
+ return islower(c);
+}
+
+static __inline__ bool HX_isprint(unsigned char c)
+{
+ return isprint(c);
+}
+
+static __inline__ bool HX_isspace(unsigned char c)
+{
+ return isspace(c);
+}
+
+static __inline__ bool HX_isupper(unsigned char c)
+{
+ return isupper(c);
+}
+
+static __inline__ bool HX_isxdigit(unsigned char c)
+{
+ return isxdigit(c);
+}
+
+static __inline__ unsigned char HX_tolower(unsigned char c)
+{
+ return tolower(c);
+}
+
+static __inline__ unsigned char HX_toupper(unsigned char c)
+{
+ return toupper(c);
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* _LIBHX_CTYPE_H */