basic/json: silence gcc warning about limited range of data type
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 15 Nov 2018 13:50:07 +0000 (14:50 +0100)
committerLennart Poettering <lennart@poettering.net>
Thu, 15 Nov 2018 14:39:06 +0000 (15:39 +0100)
With gcc-7.1.1-3.fc26.aarch64:
../src/basic/json.c: In function ‘json_format’:
../src/basic/json.c:1409:40: warning: comparison is always true due to limited range of data type [-Wtype-limits]
                                 if (*q >= 0 && *q < ' ')
                                        ^~
../src/basic/json.c: In function ‘inc_lines_columns’:
../src/basic/json.c:1762:31: warning: comparison is always true due to limited range of data type [-Wtype-limits]
                 } else if (*s >= 0 && *s < 127) /* Process ASCII chars quickly */
                               ^~

Cast to (signed char) silences the warning, but a cast to (int) for some reason
doesn't.

src/basic/json.c

index 53ac80a..eec6ea7 100644 (file)
@@ -1406,7 +1406,7 @@ static int json_format(FILE *f, JsonVariant *v, unsigned flags, const char *pref
                                 break;
 
                         default:
-                                if (*q >= 0 && *q < ' ')
+                                if ((signed char) *q >= 0 && *q < ' ')
                                         fprintf(f, "\\u%04x", *q);
                                 else
                                         fputc(*q, f);
@@ -1759,7 +1759,7 @@ static void inc_lines_columns(unsigned *line, unsigned *column, const char *s, s
                 if (*s == '\n') {
                         (*line)++;
                         *column = 1;
-                } else if (*s >= 0 && *s < 127) /* Process ASCII chars quickly */
+                } else if ((signed char) *s >= 0 && *s < 127) /* Process ASCII chars quickly */
                         (*column)++;
                 else {
                         int w;