Skip to content

Commit

Permalink
Added SDL_GetLoadedModule to do the equivalent of GetModuleHandle/dll…
Browse files Browse the repository at this point in the history
…oad(NOLOAD)

CR: Jorgen
  • Loading branch information
slouken committed Feb 13, 2014
1 parent cf119f7 commit 1fa4939
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 0 deletions.
10 changes: 10 additions & 0 deletions include/SDL_loadso.h
Expand Up @@ -57,6 +57,16 @@ extern "C" {
*/
extern DECLSPEC void *SDLCALL SDL_LoadObject(const char *sofile);

/**
* This function returns a handle to an already-loaded shared object and
* returns a pointer to the object handle. If the object file was not loaded
* the function returns NULL. This function adds a reference to the shared
* object, so the caller should call SDL_UnloadObject when they are finished
* with this reference to ensure that the object can be unloaded.
* The 'sofile' parameter is a system dependent name of the object file.
*/
extern DECLSPEC void *SDLCALL SDL_GetLoadedObject(const char *sofile);

/**
* Given an object handle, this function looks up the address of the
* named function in the shared object and returns it. This address
Expand Down
7 changes: 7 additions & 0 deletions src/loadso/dlopen/SDL_sysloadso.c
Expand Up @@ -41,6 +41,13 @@ SDL_LoadObject(const char *sofile)
return (handle);
}

void *
SDL_GetLoadedObject(const char *sofile)
{
void *handle = dlopen(sofile, RTLD_NOLOAD);
return (handle);
}

void *
SDL_LoadFunction(void *handle, const char *name)
{
Expand Down
16 changes: 16 additions & 0 deletions src/loadso/windows/SDL_sysloadso.c
Expand Up @@ -46,6 +46,22 @@ SDL_LoadObject(const char *sofile)
return handle;
}

void *
SDL_GetLoadedObject(const char *sofile)
{
LPTSTR tstr = WIN_UTF8ToString(sofile);
void *handle = (void *) GetModuleHandle(tstr);

/* if we got a handle, call LoadLibrary to get
* it again with the ref count incremented.
* We do this to match the dlopen version of this function */
handle = (void *)LoadLibrary( tstr );

SDL_free(tstr);

return handle;
}

void *
SDL_LoadFunction(void *handle, const char *name)
{
Expand Down

0 comments on commit 1fa4939

Please sign in to comment.