Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 03 Sep 2019 14:06:17 -0000
From:      Hans Petter Selasky <hselasky@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org
Subject:   svn commit: r345942 - stable/12/sys/sys
Message-ID:  <201904051135.x35BZ2C8013667@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: hselasky
Date: Fri Apr  5 11:35:02 2019
New Revision: 345942
URL: https://svnweb.freebsd.org/changeset/base/345942

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/12/sys/sys/ctype.h
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/sys/ctype.h
==============================================================================
--- stable/12/sys/sys/ctype.h	Fri Apr  5 11:34:13 2019	(r345941)
+++ stable/12/sys/sys/ctype.h	Fri Apr  5 11:35:02 2019	(r345942)
@@ -41,19 +41,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_ */





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201904051135.x35BZ2C8013667>