Bläddra i källkod

deploy-ng: Use length-prefixed strings for writing modules to deploy-stub

This wastes less space than always using 256 characters for every module
name.
Mitchell Stokes 9 år sedan
förälder
incheckning
eec5c997c0
2 ändrade filer med 21 tillägg och 3 borttagningar
  1. 18 2
      direct/src/showutil/FreezeTool.py
  2. 3 1
      pandatool/src/deploy-stub/deploy-stub.c

+ 18 - 2
direct/src/showutil/FreezeTool.py

@@ -1579,10 +1579,26 @@ class Freezer:
             if getattr(module, "__path__", None):
                 # Indicate package by negative size
                 size = -size
-            return struct.pack('<256sIi', modulename.encode('ascii'), offset, size)
+            modname = modulename.encode('ascii')
+            modnamelen = len(modulename)
+            return struct.pack(
+                '<b{0}sIi'.format(modnamelen),
+                modnamelen,
+                modname,
+                offset,
+                size
+            )
 
         def make_forbidden_module_list_entry(modulename):
-            return struct.pack('<256sIi', modulename.encode('ascii'), 0, 0)
+            modname = modulename.encode('ascii')
+            modnamelen = len(modulename)
+            return struct.pack(
+                '<b{0}sIi'.format(modnamelen),
+                modnamelen,
+                modname,
+                0,
+                0
+            )
 
         # We must have a __main__ module to make an exe file.
         if not self.__writingModule('__main__'):

+ 3 - 1
pandatool/src/deploy-stub/deploy-stub.c

@@ -187,13 +187,15 @@ int main(int argc, char *argv[]) {
   fseek(runtime, listoff, SEEK_SET);
   for (modidx = 0; modidx < nummods; ++modidx) {
     struct _frozen *moddef = &_PyImport_FrozenModules[modidx];
+    unsigned char name_size;
     char *name = NULL, namebuf[256] = {0};
     size_t nsize;
     unsigned int codeptr;
     int codesize;
 
     // Name
-    fread(namebuf, 1, 256, runtime);
+    fread(&name_size, 1, 1, runtime);
+    fread(namebuf, 1, name_size, runtime);
     nsize = strlen(namebuf) + 1;
     name = malloc(nsize);
     memcpy(name, namebuf, nsize);