From 18401062d26f6bffbee4633f998784cdc5a1b52a Mon Sep 17 00:00:00 2001 From: "Jay Freeman (saurik)" Date: Thu, 15 Oct 2009 02:27:01 +0000 Subject: [PATCH] Fixed number output formatting (to avoid accidental rounding) and removed length parameter from CYPoolCString. --- Library.mm | 22 ++++++---------------- Output.cpp | 4 ++-- 2 files changed, 8 insertions(+), 18 deletions(-) diff --git a/Library.mm b/Library.mm index 252f9a4..a0ab2ad 100644 --- a/Library.mm +++ b/Library.mm @@ -1304,6 +1304,7 @@ const char *CYPoolCYONString(apr_pool_t *pool, JSContextRef context, JSValueRef } else return NULL; } +// XXX: use objc_getAssociatedObject and objc_setAssociatedObject on 10.6 struct CYInternal : CYData { @@ -1445,31 +1446,20 @@ JSObjectRef CYMakeFunctor(JSContextRef context, void (*function)(), const char * return JSObjectMake(context, Functor_, data); } -const char *CYPoolCString(apr_pool_t *pool, JSStringRef value, size_t *length = NULL) { +const char *CYPoolCString(apr_pool_t *pool, JSStringRef value) { if (pool == NULL) { const char *string([CYCastNSString(NULL, value) UTF8String]); - if (length != NULL) - *length = strlen(string); return string; } else { size_t size(JSStringGetMaximumUTF8CStringSize(value)); char *string(new(pool) char[size]); JSStringGetUTF8CString(value, string, size); - // XXX: this is ironic - if (length != NULL) - *length = strlen(string); return string; } } -const char *CYPoolCString(apr_pool_t *pool, JSContextRef context, JSValueRef value, size_t *length = NULL) { - if (!JSValueIsNull(context, value)) - return CYPoolCString(pool, CYJSString(context, value), length); - else { - if (length != NULL) - *length = 0; - return NULL; - } +const char *CYPoolCString(apr_pool_t *pool, JSContextRef context, JSValueRef value) { + return JSValueIsNull(context, value) ? NULL : CYPoolCString(pool, CYJSString(context, value)); } bool CYGetIndex(apr_pool_t *pool, JSStringRef value, ssize_t &index) { @@ -1683,8 +1673,8 @@ bool Index_(apr_pool_t *pool, Struct_privateData *internal, JSStringRef property if (type == NULL) return false; - size_t length; - const char *name(CYPoolCString(pool, property, &length)); + const char *name(CYPoolCString(pool, property)); + size_t length(strlen(name)); double number(CYCastDouble(name, length)); size_t count(type->data.signature.count); diff --git a/Output.cpp b/Output.cpp index 3396b48..b2cfee5 100644 --- a/Output.cpp +++ b/Output.cpp @@ -398,8 +398,8 @@ void CYNull::Output(std::ostream &out, CYFlags flags) const { void CYNumber::Output(std::ostream &out, CYFlags flags) const { if ((flags & CYNoLeader) != 0) out << ' '; - // XXX: this is not a useful formatting - out << Value(); + // XXX: decide on correct precision + out << std::setprecision(9) << Value(); if ((flags & CYNoTrailer) != 0) out << ' '; } -- 2.47.2