From beaf2ace87dee90c1afcaf624335a54a5019f745 Mon Sep 17 00:00:00 2001 From: shyouhei Date: Thu, 4 Jan 2018 07:51:17 +0000 Subject: ULL suffix is a C99ism Don't assume long long == 8 bytes. If you can assume C99, there are macros named UINT64_C and such for appropriate integer literal suffixes. If you can't, no way but do a bitwise or. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61594 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- string.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'string.c') diff --git a/string.c b/string.c index 1b371a0a33..b7ae7069f6 100644 --- a/string.c +++ b/string.c @@ -440,10 +440,21 @@ static inline const char * search_nonascii(const char *p, const char *e) { const uintptr_t *s, *t; -#if SIZEOF_VOIDP == 8 -# define NONASCII_MASK 0x8080808080808080ULL -#elif SIZEOF_VOIDP == 4 -# define NONASCII_MASK 0x80808080UL + +#if defined(__STDC_VERSION) && (__STDC_VERSION__ >= 199901L) +# if SIZEOF_UINTPTR_T == 8 +# define NONASCII_MASK UINT64_C(0x8080808080808080) +# elif SIZEOF_UINTPTR_T == 4 +# define NONASCII_MASK UINT32_C(0x80808080) +# endif +#else +# if SIZEOF_UINTPTR_T == 8 +# define NONASCII_MASK ((uintptr_t)0x80808080UL << 32 | (uintptr_t)0x80808080UL) +# elif SIZEOF_UINTPTR_T == 4 +# define NONASCII_MASK 0x80808080UL /* or...? */ +# else +# error "don't know what to do." +# endif #endif if (UNALIGNED_WORD_ACCESS || e - p >= SIZEOF_VOIDP) { -- cgit v1.2.3