OSDN Git Service

Fix portability bugs: char values passed to <ctype.h> functions must
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 4 Jan 2004 04:17:01 +0000 (04:17 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 4 Jan 2004 04:17:01 +0000 (04:17 +0000)
be cast to unsigned char.  We have learned this the hard way before.

src/interfaces/ecpg/compatlib/informix.c
src/interfaces/ecpg/pgtypeslib/datetime.c

index 562ab92..5773c45 100644 (file)
@@ -464,7 +464,7 @@ rstrdate(char *str, date * d)
        for (i=0,j=0; i < 10; i++ )
        {
                /* ignore non-digits */
-               if ( isdigit(str[i]) )
+               if ( isdigit((unsigned char) str[i]) )
                {
                        
                        /* j only increments if it is a digit */
@@ -910,8 +910,8 @@ void
 rupshift(char *str)
 {
        for (; *str != '\0'; str++)
-               if (islower(*str))
-                       *str = toupper(*str);
+               if (islower((unsigned char) *str))
+                       *str = toupper((unsigned char) *str);
        return;
 }
 
index 3d5ba11..b4c4a6d 100644 (file)
@@ -405,7 +405,7 @@ PGTYPESdate_defmt_asc(date * d, char *fmt, char *str)
        reading_digit = 1;
        for (i = 0; str[i]; i++)
        {
-               if (!isdigit(str[i]))
+               if (!isdigit((unsigned char) str[i]))
                {
                        reading_digit = 0;
                        break;
@@ -495,7 +495,7 @@ PGTYPESdate_defmt_asc(date * d, char *fmt, char *str)
 
                /* convert the whole string to lower case */
                for (i = 0; str_copy[i]; i++)
-                       str_copy[i] = (char) tolower(str_copy[i]);
+                       str_copy[i] = (char) tolower((unsigned char) str_copy[i]);
        }
 
        /* look for numerical tokens */
@@ -503,14 +503,14 @@ PGTYPESdate_defmt_asc(date * d, char *fmt, char *str)
        token_count = 0;
        for (i = 0; i < strlen(str_copy); i++)
        {
-               if (!isdigit(str_copy[i]) && reading_digit)
+               if (!isdigit((unsigned char) str_copy[i]) && reading_digit)
                {
                        /* the token is finished */
                        token[token_count][1] = i - 1;
                        reading_digit = 0;
                        token_count++;
                }
-               else if (isdigit(str_copy[i]) && !reading_digit)
+               else if (isdigit((unsigned char) str_copy[i]) && !reading_digit)
                {
                        /* we have found a token */
                        token[token_count][0] = i;
@@ -565,7 +565,7 @@ PGTYPESdate_defmt_asc(date * d, char *fmt, char *str)
                {
                        for (j = 0; j < PGTYPES_DATE_MONTH_MAXLENGTH; j++)
                        {
-                               month_lower_tmp[j] = (char) tolower(list[i][j]);
+                               month_lower_tmp[j] = (char) tolower((unsigned char) list[i][j]);
                                if (!month_lower_tmp[j])
                                {
                                        /* properly terminated */