Patchwork lib, net: make isodigit public and use it

login
register
mail settings
Submitter Andy Shevchenko
Date April 10, 2013, 9:23 a.m.
Message ID <1365585826-14824-1-git-send-email-andriy.shevchenko@linux.intel.com>
Download mbox | patch
Permalink /patch/235348/
State Not Applicable
Delegated to: David Miller
Headers show

Comments

Andy Shevchenko - April 10, 2013, 9:23 a.m.
There are at least two users of isodigit. Let's make it a public function of
ctype.h.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 include/linux/ctype.h | 6 ++++++
 lib/dynamic_debug.c   | 1 -
 net/sunrpc/cache.c    | 1 -
 3 files changed, 6 insertions(+), 2 deletions(-)
Denis Kirjanov - April 10, 2013, 12:43 p.m.
what about #define isoctal(c) (((c) & ~7) ?

On 4/10/13, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> There are at least two users of isodigit. Let's make it a public function
> of
> ctype.h.
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> ---
>  include/linux/ctype.h | 6 ++++++
>  lib/dynamic_debug.c   | 1 -
>  net/sunrpc/cache.c    | 1 -
>  3 files changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/include/linux/ctype.h b/include/linux/ctype.h
> index 8acfe31..653589e 100644
> --- a/include/linux/ctype.h
> +++ b/include/linux/ctype.h
> @@ -61,4 +61,10 @@ static inline char _tolower(const char c)
>  	return c | 0x20;
>  }
>
> +/* Fast check for octal digit */
> +static inline int isodigit(const char c)
> +{
> +	return c >= '0' && c <= '7';
> +}
> +
>  #endif
> diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
> index 5276b99..4603245 100644
> --- a/lib/dynamic_debug.c
> +++ b/lib/dynamic_debug.c
> @@ -281,7 +281,6 @@ static inline int parse_lineno(const char *str, unsigned
> int *val)
>   * allow the user to express a query which matches a format
>   * containing embedded spaces.
>   */
> -#define isodigit(c)		((c) >= '0' && (c) <= '7')
>  static char *unescape(char *str)
>  {
>  	char *in = str;
> diff --git a/net/sunrpc/cache.c b/net/sunrpc/cache.c
> index 05ea9ac..80fe5c8 100644
> --- a/net/sunrpc/cache.c
> +++ b/net/sunrpc/cache.c
> @@ -1210,7 +1210,6 @@ EXPORT_SYMBOL_GPL(sunrpc_cache_pipe_upcall);
>   * key and content are both parsed by cache
>   */
>
> -#define isodigit(c) (isdigit(c) && c <= '7')
>  int qword_get(char **bpp, char *dest, int bufsize)
>  {
>  	/* return bytes copied, or -1 on error */
> --
> 1.8.2.rc0.22.gb3600c3
>
> --
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Andy Shevchenko - April 10, 2013, 1:03 p.m.
On Wed, 2013-04-10 at 16:43 +0400, Denis Kirjanov wrote: 
> what about #define isoctal(c) (((c) & ~7) ?

Few reasons why not:
- the name isodigit is used already
- above name is more logical to existing isdigit & isxdigit
- macro is usually worse than inline function
- your implementation is not strict to octal digits

> 
> On 4/10/13, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> > There are at least two users of isodigit. Let's make it a public function
> > of
> > ctype.h.
> >
> > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> > ---
> >  include/linux/ctype.h | 6 ++++++
> >  lib/dynamic_debug.c   | 1 -
> >  net/sunrpc/cache.c    | 1 -
> >  3 files changed, 6 insertions(+), 2 deletions(-)
> >
> > diff --git a/include/linux/ctype.h b/include/linux/ctype.h
> > index 8acfe31..653589e 100644
> > --- a/include/linux/ctype.h
> > +++ b/include/linux/ctype.h
> > @@ -61,4 +61,10 @@ static inline char _tolower(const char c)
> >  	return c | 0x20;
> >  }
> >
> > +/* Fast check for octal digit */
> > +static inline int isodigit(const char c)
> > +{
> > +	return c >= '0' && c <= '7';
> > +}
> > +
> >  #endif
> > diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
> > index 5276b99..4603245 100644
> > --- a/lib/dynamic_debug.c
> > +++ b/lib/dynamic_debug.c
> > @@ -281,7 +281,6 @@ static inline int parse_lineno(const char *str, unsigned
> > int *val)
> >   * allow the user to express a query which matches a format
> >   * containing embedded spaces.
> >   */
> > -#define isodigit(c)		((c) >= '0' && (c) <= '7')
> >  static char *unescape(char *str)
> >  {
> >  	char *in = str;
> > diff --git a/net/sunrpc/cache.c b/net/sunrpc/cache.c
> > index 05ea9ac..80fe5c8 100644
> > --- a/net/sunrpc/cache.c
> > +++ b/net/sunrpc/cache.c
> > @@ -1210,7 +1210,6 @@ EXPORT_SYMBOL_GPL(sunrpc_cache_pipe_upcall);
> >   * key and content are both parsed by cache
> >   */
> >
> > -#define isodigit(c) (isdigit(c) && c <= '7')
> >  int qword_get(char **bpp, char *dest, int bufsize)
> >  {
> >  	/* return bytes copied, or -1 on error */
> > --
> > 1.8.2.rc0.22.gb3600c3
> >
> > --
> > To unsubscribe from this list: send the line "unsubscribe netdev" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> >
David Laight - April 10, 2013, 1:05 p.m.
> what about #define isoctal(c) (((c) & ~7) ?

I presume you meant (((c) & ~7) == '0')

Actually the compiler will convert:
    c >= '0' && c <= '7';
into
	(unsigned)(c - '0') <= '7' - '0';
so it makes no significant difference.

Whether adding it to ctype.h is a good idea is a different
problem for the C standards people.

	David




--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/include/linux/ctype.h b/include/linux/ctype.h
index 8acfe31..653589e 100644
--- a/include/linux/ctype.h
+++ b/include/linux/ctype.h
@@ -61,4 +61,10 @@  static inline char _tolower(const char c)
 	return c | 0x20;
 }
 
+/* Fast check for octal digit */
+static inline int isodigit(const char c)
+{
+	return c >= '0' && c <= '7';
+}
+
 #endif
diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
index 5276b99..4603245 100644
--- a/lib/dynamic_debug.c
+++ b/lib/dynamic_debug.c
@@ -281,7 +281,6 @@  static inline int parse_lineno(const char *str, unsigned int *val)
  * allow the user to express a query which matches a format
  * containing embedded spaces.
  */
-#define isodigit(c)		((c) >= '0' && (c) <= '7')
 static char *unescape(char *str)
 {
 	char *in = str;
diff --git a/net/sunrpc/cache.c b/net/sunrpc/cache.c
index 05ea9ac..80fe5c8 100644
--- a/net/sunrpc/cache.c
+++ b/net/sunrpc/cache.c
@@ -1210,7 +1210,6 @@  EXPORT_SYMBOL_GPL(sunrpc_cache_pipe_upcall);
  * key and content are both parsed by cache
  */
 
-#define isodigit(c) (isdigit(c) && c <= '7')
 int qword_get(char **bpp, char *dest, int bufsize)
 {
 	/* return bytes copied, or -1 on error */