1
0
mirror of https://github.com/moparisthebest/pacman synced 2024-12-22 07:48:50 -05:00

pacsort, introduce define for escape_char error code

The signedness of char is implementation defined. On systems where
char is unsigned, comparing a variable of type char with -1 is never
true, due to integer promotion rules. To avoid this, introduce a
define for invalid field separators where -1 is cast to char. This will
ensure that the return value check works for both unsigned and signed char.

Fixes one warning [-Wtype-limits] for comparissons with -1 when compiling
with -funsigned-char.

Signed-off-by: Rikard Falkeborn <rikard.falkeborn@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
Rikard Falkeborn 2015-12-31 14:19:30 +01:00 committed by Allan McRae
parent 875c017e4d
commit 88f348f2b1

View File

@ -28,6 +28,7 @@
#include "util-common.h" #include "util-common.h"
#define DELIM ' ' #define DELIM ' '
#define INVALD_ESCAPE_CHAR ((char)-1)
#ifndef MIN #ifndef MIN
#define MIN(a, b) \ #define MIN(a, b) \
@ -385,13 +386,13 @@ static int vercmp(const void *p1, const void *p2)
static char escape_char(const char *string) static char escape_char(const char *string)
{ {
if(!string) { if(!string) {
return -1; return INVALD_ESCAPE_CHAR;
} }
const size_t len = strlen(string); const size_t len = strlen(string);
if(len > 2) { if(len > 2) {
return -1; return INVALD_ESCAPE_CHAR;
} }
if(len == 1) { if(len == 1) {
@ -399,7 +400,7 @@ static char escape_char(const char *string)
} }
if(*string != '\\') { if(*string != '\\') {
return -1; return INVALD_ESCAPE_CHAR;
} }
switch(string[1]) { switch(string[1]) {
@ -412,7 +413,7 @@ static char escape_char(const char *string)
case '0': case '0':
return '\0'; return '\0';
default: default:
return -1; return INVALD_ESCAPE_CHAR;
} }
} }
@ -463,7 +464,7 @@ static int parse_options(int argc, char **argv)
break; break;
case 't': case 't':
opts.delim = escape_char(optarg); opts.delim = escape_char(optarg);
if(opts.delim == -1) { if(opts.delim == INVALD_ESCAPE_CHAR) {
fprintf(stderr, "error: invalid field separator -- `%s'\n", optarg); fprintf(stderr, "error: invalid field separator -- `%s'\n", optarg);
return 1; return 1;
} }