diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-04-25 14:03:28 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-04-25 14:03:28 +0200 |
| commit | 549c42ac1913c06547abcc99c8ebb6dc745fe4e4 (patch) | |
| tree | bb469a406f9e457ad231acf5a747f715e8985726 /src/librarian/library.c | |
| parent | 6bfeb156551ce98d4feafb6fe764bbe4fd1cab03 (diff) | |
| download | box64-549c42ac1913c06547abcc99c8ebb6dc745fe4e4.tar.gz box64-549c42ac1913c06547abcc99c8ebb6dc745fe4e4.zip | |
Improved/fixed (agaaaaain) Load/Unload of library (might help #740 &nd #742)
Diffstat (limited to 'src/librarian/library.c')
| -rwxr-xr-x | src/librarian/library.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/src/librarian/library.c b/src/librarian/library.c index 9652fe7e..4c7995a7 100755 --- a/src/librarian/library.c +++ b/src/librarian/library.c @@ -1047,6 +1047,24 @@ void add1_neededlib(needed_libs_t* needed) needed->names = (char**)realloc(needed->names, needed->cap*sizeof(char*)); needed->size++; } +void add1lib_neededlib(needed_libs_t* needed, library_t* lib, const char* name) +{ + if(!needed || !lib) + return; + // check if lib is already present + for (int i=0; i<needed->size; ++i) + if(needed->libs[i]==lib) + return; + // add it + if(needed->size+1<=needed->cap) + return; + needed->cap = needed->size+1; + needed->libs = (library_t**)realloc(needed->libs, needed->cap*sizeof(library_t*)); + needed->names = (char**)realloc(needed->names, needed->cap*sizeof(char*)); + needed->libs[needed->size] = lib; + needed->names[needed->size] = name; + needed->size++; +} needed_libs_t* copy_neededlib(needed_libs_t* needed) { if(!needed) @@ -1098,8 +1116,10 @@ int DecRefCount(library_t** lib, x64emu_t* emu) { if(!lib || !*lib) return 1; - if((*lib)->type==LIB_UNNKNOW) - return 1; + if((*lib)->type==LIB_UNNKNOW) { + Free1Library(lib, emu); + return 0; + } int ret = 1; needed_libs_t* needed = NULL; int freed = 0; |