From 51a72a9d652bf1b478bffc842feb68dee5d8744e Mon Sep 17 00:00:00 2001 From: "Jay Freeman (saurik)" Date: Wed, 28 Oct 2009 05:06:36 +0000 Subject: [PATCH] Fixed sign conversion in stringify and dealt with endian-ness of iconv. --- Library.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) 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; } -- 2.47.2