From: Dale Weiler Date: Fri, 26 Jul 2013 12:28:02 +0000 (+0000) Subject: Fix the ctype replacements to work with macro arguments that have side-effect, with... X-Git-Tag: v0.3.0~72 X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fgmqcc.git;a=commitdiff_plain;h=629fe05083a7955b69f049cd28593a50cb19d3e7 Fix the ctype replacements to work with macro arguments that have side-effect, with exception to isspace which *might* need to become a function. --- diff --git a/gmqcc.h b/gmqcc.h index 593ab81..202ae14 100644 --- a/gmqcc.h +++ b/gmqcc.h @@ -106,11 +106,6 @@ GMQCC_IND_STRING(GMQCC_VERSION_PATCH) \ # define GMQCC_WARN # define GMQCC_USED #endif /*! defined(__GNUC__) || defined (__CLANG__) */ -/* - * This is a hack to silent clang regarding empty - * body if statements. - */ -#define GMQCC_SUPPRESS_EMPTY_BODY do { } while (0) /* * Inline is not supported in < C90, however some compilers @@ -259,7 +254,7 @@ GMQCC_IND_STRING(GMQCC_VERSION_PATCH) \ # include struct dirent { - long d_ino; + long d_ino; unsigned short d_reclen; unsigned short d_namlen; char d_name[FILENAME_MAX]; @@ -317,15 +312,12 @@ void *stat_mem_allocate (size_t, size_t, const char *); * justified when this could happen on every character from an input * stream. We provide our own as macros for absolute inlinability. */ -#define util_isupper(C) ((C) >= 'A' && (C) <= 'Z') -#define util_islower(C) ((C) >= 'a' && (C) <= 'z') -#define util_isdigit(C) ((C) >= '0' && (C) <= '9') -#define util_isprint(C) ((C) >= 32 && (C) <= 126) -#define util_isspace(C) ((C) == ' ' || (C) == '\f' || \ - (C) == '\n'|| (C) == '\r' || \ - (C) == '\t'|| (C) == '\v') - -#define util_isalpha(C) (util_islower(C) || util_isupper(C)) +#define util_isalpha(a) ((((unsigned)(a)|32)-'a') < 26) +#define util_isdigit(a) (((unsigned)(a)-'0') < 10) +#define util_islower(a) (((unsigned)(a)-'a') < 26) +#define util_isupper(a) (((unsigned)(a)-'A') < 26) +#define util_isprint(a) (((unsigned)(a)-0x20) < 0x5F) +#define util_isspace(a) (((a) >= 9 && (a) <= 13) || (a) == ' ') bool util_filexists (const char *); bool util_strupper (const char *);