]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Added hooks to support importing pyc code from a resource on the mac.
authorJack Jansen <jack.jansen@cwi.nl>
Wed, 15 Feb 1995 22:57:06 +0000 (22:57 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Wed, 15 Feb 1995 22:57:06 +0000 (22:57 +0000)
Python/import.c
Python/importdl.h

index 35c0d9d44d5a26a4e9080a831a3f3934c2597cba..05d2c557bd199106811bd1d3e122b46194b4daa7 100644 (file)
@@ -39,6 +39,9 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include "eval.h"
 #include "osdefs.h"
 #include "importdl.h"
+#ifdef macintosh
+#include "macglue.h"
+#endif
 
 extern int verbose; /* Defined in pythonrun.c */
 
@@ -135,10 +138,10 @@ add_module(name)
 /* Execute a code object in a module and return the module object
    WITH INCREMENTED REFERENCE COUNT */
 
-static object *
+object *
 exec_code_module(name, co)
        char *name;
-       codeobject *co;
+       object *co;
 {
        object *m, *d, *v;
 
@@ -269,13 +272,12 @@ load_compiled_module(name, cpathname, fp)
        if (verbose)
                fprintf(stderr, "import %s # precompiled from %s\n",
                        name, cpathname);
-       m = exec_code_module(name, co);
+       m = exec_code_module(name, (object *)co);
        DECREF(co);
 
        return m;
 }
 
-
 /* Parse a source file and return the corresponding code object */
 
 static codeobject *
@@ -379,7 +381,7 @@ load_source_module(name, pathname, fp)
                                name, pathname);
                write_compiled_module(co, cpathname, mtime);
        }
-       m = exec_code_module(name, co);
+       m = exec_code_module(name, (object *)co);
        DECREF(co);
 
        return m;
@@ -422,6 +424,13 @@ find_module(name, path, buf, buflen, p_fp)
                strcpy(buf, getstringvalue(v));
                if (strlen(buf) != len)
                        continue; /* v contains '\0' */
+#ifdef macintosh
+               if ( PyMac_FindResourceModule(name, buf) ) {
+                       static struct filedescr resfiledescr = { "", "", PY_RESOURCE};
+                       
+                       return &resfiledescr;
+               }
+#endif
                if (len > 0 && buf[len-1] != SEP)
                        buf[len++] = SEP;
                strcpy(buf+len, name);
@@ -479,13 +488,20 @@ load_module(name)
                m = load_dynamic_module(name, buf);
                break;
 
+#ifdef macintosh
+       case PY_RESOURCE:
+               m = PyMac_LoadResourceModule(name, buf);
+               break;
+#endif
+
        default:
                err_setstr(SystemError,
                           "find_module returned unexpected result");
                m = NULL;
 
        }
-       fclose(fp);
+       if ( fp )
+               fclose(fp);
 
        return m;
 }
@@ -555,7 +571,7 @@ init_frozen(name)
                err_setstr(SystemError, "frozen object is not a code object");
                return -1;
        }
-       m = exec_code_module(name, (codeobject *)co);
+       m = exec_code_module(name, co);
        DECREF(co);
        if (m == NULL)
                return -1;
@@ -874,6 +890,23 @@ imp_load_source(self, args)
        return m;
 }
 
+#ifdef macintosh
+static object *
+imp_load_resource(self, args)
+       object *self;
+       object *args;
+{
+       char *name;
+       char *pathname;
+       object *m;
+
+       if (!newgetargs(args, "ss", &name, &pathname))
+               return NULL;
+       m = PyMac_LoadResourceModule(name, pathname);
+       return m;
+}
+#endif /* macintosh */
+
 static object *
 imp_new_module(self, args)
        object *self;
@@ -897,6 +930,9 @@ static struct methodlist imp_methods[] = {
        {"load_dynamic",        imp_load_dynamic,       1},
        {"load_source",         imp_load_source,        1},
        {"new_module",          imp_new_module,         1},
+#ifdef macintosh
+       {"load_resource",       imp_load_resource,      1},
+#endif
        {NULL,                  NULL}           /* sentinel */
 };
 
index e56794a110565ebf74bcbf69118c867e29c2c330..ea98ed5bfff2a0cf141a129cfc2709784b23f32b 100644 (file)
@@ -23,8 +23,11 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 ******************************************************************/
 
 /* Definitions for dynamic loading of extension modules */
-
+#ifdef macintosh
+enum filetype {SEARCH_ERROR, PY_SOURCE, PY_COMPILED, C_EXTENSION, PY_RESOURCE};
+#else
 enum filetype {SEARCH_ERROR, PY_SOURCE, PY_COMPILED, C_EXTENSION};
+#endif
 
 extern struct filedescr {
        char *suffix;