bug-tar
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug-tar] Re: [PATCH] avoid compiler warning


From: Eric Blake
Subject: [Bug-tar] Re: [PATCH] avoid compiler warning
Date: Tue, 12 May 2009 19:56:11 +0000 (UTC)
User-agent: Loom/3.14 (http://gmane.org/)

Sergey Poznyakoff <gray <at> gnu.org.ua> writes:

> 
> Eric Blake <ebb9 <at> byu.net> ha escrit:
> 
> > I noticed some use of undefined behavior of ctype macros (not all platforms 
> > guarantee that isxxx(char) produces sane results, when the high bit is
> > set).
> 
> Thanks, Eric.  I'll apply this.

And another one, for paxutils (necessary for 'make check' in tar).


From: Eric Blake <address@hidden>
Date: Tue, 12 May 2009 13:52:38 -0600
Subject: [PATCH] Avoid undefined ctype usage.

* tests/argcv.c (escaped_length, escape_copy, argcv_string): Pass
correct type to ctype macros.
* tests/genfile.c (print_stat, exec_command): Likewise.

Signed-off-by: Eric Blake <address@hidden>
---
 tests/argcv.c   |    9 +++++----
 tests/genfile.c |   10 +++++-----
 2 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/tests/argcv.c b/tests/argcv.c
index c9f2743..c609094 100644
--- a/tests/argcv.c
+++ b/tests/argcv.c
@@ -1,5 +1,6 @@
 /* argcv.c - simple functions for parsing input based on whitespace
-   Copyright (C) 1999, 2000, 2001, 2007 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2000, 2001, 2007, 2009 Free Software
+   Foundation, Inc.

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
@@ -153,7 +154,7 @@ escaped_length (const char *str, int *quote)
          len += 2;
          *quote = 1;
        }
-      else if (isprint (*str))
+      else if (isprint ((unsigned char) *str))
        len++;
       else if (argcv_escape_char (*str) != -1)
        len += 2;
@@ -249,7 +250,7 @@ escape_copy (char *dst, const char *src)
          *dst++ = '\\';
          *dst++ = '"';
        }
-      else if (*src != '\t' && isprint(*src))
+      else if (*src != '\t' && isprint ((unsigned char) *src))
        *dst++ = *src;      
       else
        {
@@ -368,7 +369,7 @@ argcv_string (int argc, char **argv, char **pstring)
        buffer[j++] = '"';
     }

-  for (; j > 0 && isspace (buffer[j-1]); j--)
+  for (; j > 0 && isspace ((unsigned char) buffer[j - 1]); j--)
     ;
   buffer[j] = 0;
   if (pstring)
diff --git a/tests/genfile.c b/tests/genfile.c
index 1b338bc..3cceb02 100644
--- a/tests/genfile.c
+++ b/tests/genfile.c
@@ -2,7 +2,7 @@
    Print statistics for existing files.

    Copyright (C) 1995, 1996, 1997, 2001, 2003, 2004, 2005, 2006, 2007,
-   2008 Free Software Foundation, Inc.
+   2008, 2009 Free Software Foundation, Inc.

    François Pinard <address@hidden>, 1995.
    Sergey Poznyakoff <address@hidden>, 2004, 2005, 2006, 2007, 2008.
@@ -574,7 +574,7 @@ print_stat (const char *name)
        {
          mode_t mask = ~0;

-         if (ispunct (p[4]))
+         if (ispunct ((unsigned char) p[4]))
            {
              char *q;

@@ -771,12 +771,12 @@ exec_command (void)

   while ((p = fgets (buf, sizeof buf, fp)))
     {
-      while (*p && !isspace (*p) && *p != ':')
+      while (*p && !isspace ((unsigned char) *p) && *p != ':')
        p++;

       if (*p == ':')
        {
-         for (p++; *p && isspace (*p); p++)
+         for (p++; *p && isspace ((unsigned char) *p); p++)
            ;

          if (*p
@@ -784,7 +784,7 @@ exec_command (void)
            {
              char *end;
              size_t n = strtoul (p + sizeof CHECKPOINT_TEXT - 1, &end, 10);
-             if (!(*end && !isspace (*end)))
+             if (!(*end && !isspace ((unsigned char) *end)))
                {
                  process_checkpoint (n);
                  continue;
-- 
1.6.2.4







reply via email to

[Prev in Thread] Current Thread [Next in Thread]