svn commit: r345944 - stable/9/sys/sys
Hans Petter Selasky
hselasky at FreeBSD.org
Tue Sep 3 14:06:21 UTC 2019
Author: hselasky
Date: Fri Apr 5 11:37:17 2019
New Revision: 345944
URL: https://svnweb.freebsd.org/changeset/base/345944
Log:
MFC r345499:
Change all kernel C-type macros into static inline functions.
The current kernel C-type macros might obscurely hide the fact that
the input argument might be used multiple times.
This breaks code like:
isalpha(*ptr++)
Use static inline functions instead of macros to fix this.
Reviewed by: kib @
Differential Revision: https://reviews.freebsd.org/D19694
Sponsored by: Mellanox Technologies
Modified:
stable/9/sys/sys/ctype.h
Directory Properties:
stable/9/sys/ (props changed)
stable/9/sys/sys/ (props changed)
Modified: stable/9/sys/sys/ctype.h
==============================================================================
--- stable/9/sys/sys/ctype.h Fri Apr 5 11:35:58 2019 (r345943)
+++ stable/9/sys/sys/ctype.h Fri Apr 5 11:37:17 2019 (r345944)
@@ -39,19 +39,65 @@
#ifdef _KERNEL
-#define isspace(c) ((c) == ' ' || ((c) >= '\t' && (c) <= '\r'))
-#define isascii(c) (((c) & ~0x7f) == 0)
-#define isupper(c) ((c) >= 'A' && (c) <= 'Z')
-#define islower(c) ((c) >= 'a' && (c) <= 'z')
-#define isalpha(c) (isupper(c) || islower(c))
-#define isdigit(c) ((c) >= '0' && (c) <= '9')
-#define isxdigit(c) (isdigit(c) \
- || ((c) >= 'A' && (c) <= 'F') \
- || ((c) >= 'a' && (c) <= 'f'))
-#define isprint(c) ((c) >= ' ' && (c) <= '~')
+static __inline int
+isspace(int c)
+{
+ return (c == ' ' || (c >= '\t' && c <= '\r'));
+}
-#define toupper(c) ((c) - 0x20 * (((c) >= 'a') && ((c) <= 'z')))
-#define tolower(c) ((c) + 0x20 * (((c) >= 'A') && ((c) <= 'Z')))
+static __inline int
+isascii(int c)
+{
+ return ((c & ~0x7f) == 0);
+}
+
+static __inline int
+isupper(int c)
+{
+ return (c >= 'A' && c <= 'Z');
+}
+
+static __inline int
+islower(int c)
+{
+ return (c >= 'a' && c <= 'z');
+}
+
+static __inline int
+isalpha(int c)
+{
+ return (isupper(c) || islower(c));
+}
+
+static __inline int
+isdigit(int c)
+{
+ return (c >= '0' && c <= '9');
+}
+
+static __inline int
+isxdigit(int c)
+{
+ return (isdigit(c) || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f'));
+}
+
+static __inline int
+isprint(int c)
+{
+ return (c >= ' ' && c <= '~');
+}
+
+static __inline int
+toupper(int c)
+{
+ return (c - 0x20 * ((c >= 'a') && (c <= 'z')));
+}
+
+static __inline int
+tolower(int c)
+{
+ return (c + 0x20 * ((c >= 'A') && (c <= 'Z')));
+}
#endif
#endif /* !_SYS_CTYPE_H_ */
More information about the svn-src-stable
mailing list