From 62c3c07d04a8e48ce221fe84fd73e2fefb94c760 Mon Sep 17 00:00:00 2001 From: Ron Yorston Date: Sun, 31 Dec 2023 14:07:09 +0000 Subject: win32: fix clang error/warning Since clang doesn't seem to know about ffs(3) make it use __builtin_ffs() instead. Fix a warning in process_escape() in winansi.c: result of comparison of constant -1 with expression of type 'WORD' (aka 'unsigned short') is always true. Change the error value returned by process_colour() from -1 to 0xffff. Costs 16 bytes. --- include/mingw.h | 4 ++++ win32/winansi.c | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/include/mingw.h b/include/mingw.h index 88da85243..4abdcf459 100644 --- a/include/mingw.h +++ b/include/mingw.h @@ -236,7 +236,11 @@ int strverscmp(const char *s1, const char *s2); /* * strings.h */ +#if !defined(__clang__) int ffs(int i); +#else +# define ffs(i) __builtin_ffs(i) +#endif /* * sys/ioctl.h diff --git a/win32/winansi.c b/win32/winansi.c index ff4f4b118..6142a244c 100644 --- a/win32/winansi.c +++ b/win32/winansi.c @@ -518,7 +518,7 @@ static char *process_colour(char *str, WORD *attr) { long val = strtol(str, (char **)&str, 10); - *attr = -1; /* error return */ + *attr = 0xffff; /* error return */ switch (val) { case 2: str = process_24bit(str + 1, attr); @@ -628,7 +628,7 @@ static char *process_escape(char *pos) break; case 38: /* 8/24 bit */ str = process_colour(str + 1, &t); - if (t != -1) { + if (t != 0xffff) { attr &= ~(FOREGROUND_ALL|FOREGROUND_INTENSITY); attr |= t; } @@ -652,7 +652,7 @@ static char *process_escape(char *pos) break; case 48: /* 8/24 bit */ str = process_colour(str + 1, &t); - if (t != -1) { + if (t != 0xffff) { attr &= ~(BACKGROUND_ALL|BACKGROUND_INTENSITY); attr |= t << 4; } -- cgit v1.2.3-55-g6feb