} New;
}; }
+class CFStringStruct {
+ private:
+ CFStringRef value_;
+
+ public:
+ CFStringStruct() :
+ value_(NULL)
+ {
+ }
+
+ ~CFStringStruct() {
+ }
+
+ operator CFStringRef() const {
+ return value_;
+ }
+
+ operator NSString *() const {
+ return (NSString *) value_;
+ }
+};
+
// String Helpers {{{
static const UChar *(*_ZNK7WebCore6String10charactersEv)(const WebCore::String *);
static const UChar *(*_ZN7WebCore6String29charactersWithNullTerminationEv)(const WebCore::String *);
+static CFStringStruct (*_ZNK3WTF6String14createCFStringEv)(const WebCore::String *);
static unsigned (*_ZNK7WebCore6String6lengthEv)(const WebCore::String *);
static bool StringGet(const WebCore::String &string, const UChar *&data, size_t &length) {
bool terminated;
- if (_ZNK7WebCore6String10charactersEv != NULL) {
+ if (false) {
+ } else if (_ZNK7WebCore6String10charactersEv != NULL) {
data = (*_ZNK7WebCore6String10charactersEv)(&string);
terminated = false;
} else if (_ZN7WebCore6String29charactersWithNullTerminationEv != NULL) {
data = (*_ZN7WebCore6String29charactersWithNullTerminationEv)(&string);
terminated = true;
+ } else if (_ZNK3WTF6String14createCFStringEv != NULL) {
+ CFStringStruct cf((*_ZNK3WTF6String14createCFStringEv)(&string));
+ data = (const UChar *) [cf cStringUsingEncoding:NSUTF16StringEncoding];
+ length = CFStringGetLength(cf);
+ [cf autorelease];
} else return false;
if (data == NULL)
if (_ZN7WebCore6String29charactersWithNullTerminationEv == NULL)
MSHookSymbol(_ZN7WebCore6String29charactersWithNullTerminationEv, "__ZN3WTF6String29charactersWithNullTerminationEv", JavaScriptCore);
+ msset(_ZNK3WTF6String14createCFStringEv, JavaScriptCore);
+
msset(_ZNK7WebCore6String6lengthEv, WebCore);
bool (*_ZNK7WebCore19MediaQueryEvaluator4evalEPKNS_13MediaQueryExpE)(WebCore::MediaQueryEvaluator *, WebCore::String &);