X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FLibraries%2Fld-acess.so_src%2Floadlib.c;h=88297d5f17ad7ccd9279ace490fbd2ccb736d418;hb=2ebf89999759fc9d1ece6f98dfd439170995bb28;hp=e5090ddd99273b2a5e9abec52d079da3ee270aeb;hpb=43f12a083f112a410859597c5f45e78b1de2e7c8;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/ld-acess.so_src/loadlib.c b/Usermode/Libraries/ld-acess.so_src/loadlib.c index e5090ddd..88297d5f 100644 --- a/Usermode/Libraries/ld-acess.so_src/loadlib.c +++ b/Usermode/Libraries/ld-acess.so_src/loadlib.c @@ -13,16 +13,15 @@ #endif // === PROTOTYPES === -Uint IsFileLoaded(char *file); - int GetSymbolFromBase(Uint base, char *name, Uint *ret); +void *IsFileLoaded(char *file); + int GetSymbolFromBase(void *base, const char *name, void **ret); -// === CONSTANTS === -const struct { - Uint Value; +// === IMPORTS === +extern const struct { + void *Value; char *Name; -} caLocalExports[] = { - {(Uint)gLoadedLibraries, "gLoadedLibraries"} -}; +} caLocalExports[]; +extern const int ciNumLocalExports; // === GLOABLS === tLoadedLib gLoadedLibraries[MAX_LOADED_LIBRARIES]; @@ -55,12 +54,12 @@ char *FindLibrary(char *DestBuf, char *SoName, char *ExtraSearchDir) /** */ -Uint LoadLibrary(char *SoName, char *SearchDir, char **envp) +void *LoadLibrary(char *SoName, char *SearchDir, char **envp) { char sTmpName[1024]; char *filename; - Uint iArg; - void (*fEntry)(int, int, char *[], char**); + void *base; + void (*fEntry)(void *, int, char *[], char**); DEBUGS("LoadLibrary: (filename='%s', envp=0x%x)\n", filename, envp); @@ -72,34 +71,34 @@ Uint LoadLibrary(char *SoName, char *SearchDir, char **envp) } DEBUGS(" LoadLibrary: filename='%s'\n", filename); - if( (iArg = IsFileLoaded(filename)) ) - return iArg; + if( (base = IsFileLoaded(filename)) ) + return base; // Load Library - iArg = SysLoadBin(filename, (Uint*)&fEntry); - if(iArg == 0) { + base = SysLoadBin(filename, (void**)&fEntry); + if(!base) { DEBUGS("LoadLibrary: RETURN 0\n"); return 0; } - DEBUGS(" LoadLibrary: iArg=0x%x, iEntry=0x%x\n", iArg, fEntry); + DEBUGS(" LoadLibrary: iArg=%p, iEntry=0x%x\n", base, fEntry); // Load Symbols - fEntry = (void*)DoRelocate( iArg, envp, filename ); + fEntry = DoRelocate( base, envp, filename ); // Call Entrypoint DEBUGS(" LoadLibrary: '%s' Entry 0x%x\n", SoName, fEntry); - fEntry(iArg, 0, NULL, envp); + fEntry(base, 0, NULL, envp); DEBUGS("LoadLibrary: RETURN 1\n"); - return iArg; + return base; } /** * \fn Uint IsFileLoaded(char *file) * \brief Determine if a file is already loaded */ -Uint IsFileLoaded(char *file) +void *IsFileLoaded(char *file) { int i; DEBUGS("IsFileLoaded: (file='%s')", file); @@ -120,7 +119,7 @@ Uint IsFileLoaded(char *file) * \fn void AddLoaded(char *File, Uint base) * \brief Add a file to the loaded list */ -void AddLoaded(char *File, Uint base) +void AddLoaded(char *File, void *base) { int i, length; char *name = gsNextAvailString; @@ -156,7 +155,7 @@ void AddLoaded(char *File, Uint base) /** * \fn void Unload(Uint Base) */ -void Unload(Uint Base) +void Unload(void *Base) { int i, j; int id; @@ -193,28 +192,31 @@ void Unload(Uint Base) } /** - \fn Uint GetSymbol(char *name) + \fn Uint GetSymbol(const char *name) \brief Gets a symbol value from a loaded library */ -Uint GetSymbol(char *name) +void *GetSymbol(const char *name) { int i; - Uint ret; - for(i=0;i