mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 07:01:21 +00:00 
			
		
		
		
	
		
			
	
	
		
			48 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			48 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Support for dynamic loading of extension modules */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <atheos/image.h>
							 | 
						||
| 
								 | 
							
								#include <errno.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "Python.h"
							 | 
						||
| 
								 | 
							
								#include "importdl.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const struct filedescr _PyImport_DynLoadFiletab[] = {
							 | 
						||
| 
								 | 
							
									{".so", "rb", C_EXTENSION},
							 | 
						||
| 
								 | 
							
									{"module.so", "rb", C_EXTENSION},
							 | 
						||
| 
								 | 
							
									{0, 0}
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
							 | 
						||
| 
								 | 
							
												    const char *pathname, FILE *fp)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									void *p;
							 | 
						||
| 
								 | 
							
									int lib;
							 | 
						||
| 
								 | 
							
									char funcname[258];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if (Py_VerboseFlag)
							 | 
						||
| 
								 | 
							
										printf("load_library %s\n", pathname);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									lib = load_library(pathname, 0);
							 | 
						||
| 
								 | 
							
									if (lib < 0) {
							 | 
						||
| 
								 | 
							
										char buf[512];
							 | 
						||
| 
								 | 
							
										if (Py_VerboseFlag)
							 | 
						||
| 
								 | 
							
											perror(pathname);
							 | 
						||
| 
								 | 
							
										PyOS_snprintf(buf, sizeof(buf), "Failed to load %.200s: %.200s",
							 | 
						||
| 
								 | 
							
											      pathname, strerror(errno));
							 | 
						||
| 
								 | 
							
										PyErr_SetString(PyExc_ImportError, buf);
							 | 
						||
| 
								 | 
							
										return NULL;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									PyOS_snprintf(funcname, sizeof(funcname), "init%.200s", shortname);
							 | 
						||
| 
								 | 
							
									if (Py_VerboseFlag)
							 | 
						||
| 
								 | 
							
										printf("get_symbol_address %s\n", funcname);
							 | 
						||
| 
								 | 
							
									if (get_symbol_address(lib, funcname, -1, &p) < 0) {
							 | 
						||
| 
								 | 
							
										p = NULL;
							 | 
						||
| 
								 | 
							
										if (Py_VerboseFlag)
							 | 
						||
| 
								 | 
							
											perror(funcname);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									return (dl_funcptr) p;
							 | 
						||
| 
								 | 
							
								}
							 |