From: Jay Freeman (saurik) Date: Wed, 28 Oct 2009 05:06:36 +0000 (+0000) Subject: Fixed sign conversion in stringify and dealt with endian-ness of iconv. X-Git-Tag: v0.9.432~235 X-Git-Url: https://git.saurik.com/cycript.git/commitdiff_plain/51a72a9d652bf1b478bffc842feb68dee5d8744e?hp=144dabffd70d51815d76b5a5537268f767c01697 Fixed sign conversion in stringify and dealt with endian-ness of iconv. --- diff --git a/Library.cpp b/Library.cpp index aee85fa..cbeeb2a 100644 --- a/Library.cpp +++ b/Library.cpp @@ -151,10 +151,10 @@ static CYUTF8String CYPoolUTF8String(apr_pool_t *pool, JSContextRef context, JSS CYUTF16String utf16(CYCastUTF16String(value)); const char *in(reinterpret_cast(utf16.data)); -#ifdef __APPLE__ - iconv_t conversion(_syscall(iconv_open("UTF-8", "UCS-2-INTERNAL"))); -#else +#ifdef __GLIBC__ iconv_t conversion(_syscall(iconv_open("UTF-8", "UCS-2"))); +#else + iconv_t conversion(_syscall(iconv_open("UTF-8", "UCS-2-INTERNAL"))); #endif size_t size(JSStringGetMaximumUTF8CStringSize(value)); @@ -250,8 +250,9 @@ void CYStringify(std::ostringstream &str, const char *data, size_t size) { break; default: + // this test is designed to be "awewsome", generating neither warnings nor incorrect results if (*value < 0x20 || *value >= 0x7f) - str << "\\x" << std::setbase(16) << std::setw(2) << std::setfill('0') << unsigned(*value); + str << "\\x" << std::setbase(16) << std::setw(2) << std::setfill('0') << unsigned(uint8_t(*value)); else simple: str << *value; }