]> git.saurik.com Git - cycript.git/commitdiff
Implemented dpkg dependency generation for Leopard and fixed null symbol dereferences.
authorJay Freeman (saurik) <saurik@saurik.com>
Sun, 1 Nov 2009 01:30:13 +0000 (01:30 +0000)
committerJay Freeman (saurik) <saurik@saurik.com>
Sun, 1 Nov 2009 01:30:13 +0000 (01:30 +0000)
Library.cpp
makefile

index a981b2bcb8281322f68e62c41d591641a13cb9d3..a6e9e4ee48b048d6fafdc85e82c84d8222c15bb9 100644 (file)
@@ -1118,17 +1118,21 @@ static JSValueRef Runtime_getProperty(JSContextRef context, JSObjectRef object,
 
         case 0:
             return JSEvaluateScript(CYGetJSContext(), CYJSString(value), NULL, NULL, 0, NULL);
-        case 1:
-            return CYMakeFunctor(context, reinterpret_cast<void (*)()>(CYCastSymbol(name.data)), value);
 
-        case 2: {
-            // XXX: this is horrendously inefficient
-            sig::Signature signature;
-            sig::Parse(pool, &signature, value, &Structor_);
-            ffi_cif cif;
-            sig::sig_ffi_cif(pool, &sig::ObjectiveC, &signature, &cif);
-            return CYFromFFI(context, signature.elements[0].type, cif.rtype, CYCastSymbol(name.data));
-        }
+        case 1:
+            if (void (*symbol)() = reinterpret_cast<void (*)()>(CYCastSymbol(name.data)))
+                return CYMakeFunctor(context, symbol, value);
+            else return NULL;
+
+        case 2:
+            if (void *symbol = CYCastSymbol(name.data)) {
+                // XXX: this is horrendously inefficient
+                sig::Signature signature;
+                sig::Parse(pool, &signature, value, &Structor_);
+                ffi_cif cif;
+                sig::sig_ffi_cif(pool, &sig::ObjectiveC, &signature, &cif);
+                return CYFromFFI(context, signature.elements[0].type, cif.rtype, symbol);
+            } else return NULL;
 
         // XXX: implement case 3
         case 4:
index 2b8d45c72081f2a9b793d77df8df203991667060..69ec15e05940fcd9e2091f059f4b0cbe9e4f3a14 100644 (file)
--- a/makefile
+++ b/makefile
@@ -66,13 +66,18 @@ all: $(deb)
 
 extra:
 
-ifeq ($(depends)$(dll),.so)
+ifeq ($(depends)$(dll),dylib)
+control: control.in cycript libcycript.dylib
+       sed -e 's/&/'"$$(dpkg-query -S $$(otool -lah cycript *.dylib | grep dylib | grep -v ':$$' | sed -e 's/^ *name //;s/ (offset [0-9]*)$$//' | sort -u) 2>/dev/null | sed -e 's/:.*//; /^cycript$$/ d; s/$$/,/' | sort -u | tr '\n' ' ')"'/;s/, $$//;s/#/$(svn)/;s/%/$(arch)/' $< >$@
+else
+ifeq ($(depends)$(dll),so)
 control: control.in cycript libcycript.so
        sed -e 's/&/'"$$(dpkg-query -S $$(ldd cycript libcycript.so | sed -e '/:$$/ d; s/^[ \t]*\([^ ]* => \)\?\([^ ]*\) .*/\2/' | sort -u) 2>/dev/null | sed -e 's/:.*//; /^cycript$$/ d; s/$$/,/' | sort -u | tr '\n' ' ')"'/;s/, $$//;s/#/$(svn)/;s/%/$(arch)/' $< >$@
 else
 control: control.in
        sed -e 's/&/$(foreach depend,$(depends),$(depend),)/;s/,$$//;s/#/$(svn)/;s/%/$(arch)/' $< >$@
 endif
+endif
 
 $(deb): $(all) control
        rm -rf package