mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 07:01:21 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			58 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
 | 
						|
/* Support for dynamic loading of extension modules */
 | 
						|
 | 
						|
#include "dl.h"
 | 
						|
#include <errno.h>
 | 
						|
 | 
						|
#include "Python.h"
 | 
						|
#include "importdl.h"
 | 
						|
 | 
						|
#if defined(__hp9000s300)
 | 
						|
#define FUNCNAME_PATTERN "_PyInit_%.200s"
 | 
						|
#else
 | 
						|
#define FUNCNAME_PATTERN "PyInit_%.200s"
 | 
						|
#endif
 | 
						|
 | 
						|
const struct filedescr _PyImport_DynLoadFiletab[] = {
 | 
						|
	{SHLIB_EXT, "rb", C_EXTENSION},
 | 
						|
	{"module"SHLIB_EXT, "rb", C_EXTENSION},
 | 
						|
	{0, 0}
 | 
						|
};
 | 
						|
 | 
						|
dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
 | 
						|
				    const char *pathname, FILE *fp)
 | 
						|
{
 | 
						|
	dl_funcptr p;
 | 
						|
	shl_t lib;
 | 
						|
	int flags;
 | 
						|
	char funcname[258];
 | 
						|
 | 
						|
	flags = BIND_FIRST | BIND_DEFERRED;
 | 
						|
	if (Py_VerboseFlag) {
 | 
						|
		flags = BIND_FIRST | BIND_IMMEDIATE |
 | 
						|
			BIND_NONFATAL | BIND_VERBOSE;
 | 
						|
		printf("shl_load %s\n",pathname);
 | 
						|
	}
 | 
						|
	lib = shl_load(pathname, flags, 0);
 | 
						|
	/* XXX Chuck Blake once wrote that 0 should be BIND_NOSTART? */
 | 
						|
	if (lib == NULL) {
 | 
						|
		char buf[256];
 | 
						|
		if (Py_VerboseFlag)
 | 
						|
			perror(pathname);
 | 
						|
		PyOS_snprintf(buf, sizeof(buf), "Failed to load %.200s",
 | 
						|
			      pathname);
 | 
						|
		PyErr_SetString(PyExc_ImportError, buf);
 | 
						|
		return NULL;
 | 
						|
	}
 | 
						|
	PyOS_snprintf(funcname, sizeof(funcname), FUNCNAME_PATTERN, shortname);
 | 
						|
	if (Py_VerboseFlag)
 | 
						|
		printf("shl_findsym %s\n", funcname);
 | 
						|
	if (shl_findsym(&lib, funcname, TYPE_UNDEFINED, (void *) &p) == -1) {
 | 
						|
		shl_unload(lib);
 | 
						|
		p = NULL;
 | 
						|
	}
 | 
						|
	if (p == NULL && Py_VerboseFlag)
 | 
						|
		perror(funcname);
 | 
						|
 | 
						|
	return p;
 | 
						|
}
 |