]> git.saurik.com Git - cycript.git/blobdiff - libcycript.py
Correctly handle "high bytes" in "native" strings.
[cycript.git] / libcycript.py
index cd69d2812bede6c0380db736f68f64adbae6c503..e3859dad4ca4ae8a9544ca6804419e6fb434a27a 100755 (executable)
@@ -4,20 +4,59 @@ import os
 import sqlite3
 import sys
 
+system = sys.argv[1]
+dbfile = sys.argv[2]
+nodejs = sys.argv[3]
+merges = sys.argv[4:]
+
+system = int(system)
+nodejs += '/node/lib'
+
 keys = {}
 
-for db in sys.argv[2:]:
+while True:
+    line = sys.stdin.readline()
+    if line == "":
+        break
+    elif line == "\n":
+        continue
+    assert line[-1] == '\n'
+    line = line[0:-1]
+
+    pipe = line.index('|')
+    name = line[0:pipe]
+    line = line[pipe+1:]
+
+    quote = line.index('"')
+    flags = int(line[0:quote])
+    code = line[quote+1:-1]
+
+    key = (name, flags, code)
+    keys[key] = system
+
+for db in merges:
     with sqlite3.connect(db) as sql:
         c = sql.cursor()
         for name, system, flags, code in c.execute('select name, system, flags, code from cache'):
             key = (name, flags, code)
             keys[key] = keys.get(key, 0) | system
 
-db = sys.argv[1]
-with sqlite3.connect(db) as sql:
+if os.path.exists(dbfile):
+    os.unlink(dbfile)
+
+with sqlite3.connect(dbfile) as sql:
+    c = sql.cursor()
+
+    c.execute("create table cache (name text not null, system int not null, flags int not null, code text not null, primary key (name, system))")
+    c.execute("create table module (name text not null, flags int not null, code blob not null, primary key (name))")
+
+    for name in [js[0:-3] for js in os.listdir(nodejs) if js.endswith('.js')]:
+        with open(nodejs + '/' + name + '.js', 'r') as file:
+            code = file.read()
+        c.execute("insert into module (name, flags, code) values (?, ?, ?)", [name, 0, buffer(code)])
+
     many = []
     for key, system in keys.items():
         name, flags, code = key
         many.append((name, system, flags, code))
-    c = sql.cursor()
     c.executemany("insert into cache (name, system, flags, code) values (?, ?, ?, ?)", many)