src/loadso/os2/SDL_sysloadso.c
author Ozkan Sezer <sezeroz@gmail.com>
Sat, 24 Mar 2018 22:25:33 +0300
branchSDL-1.2
changeset 11964 6c37a15030e7
parent 6137 4720145f848b
permissions -rw-r--r--
OS/2 fixes:

- update SDL_platform.h to handle __EMX__
- update SDL_config_os2.h
- fix a typo in SDL_dart.c (bitwise AND, not logical AND)
- fix NULL / NULLHANDLE confusion in SDL_sysloadso.c and SDL_os2fslib.c
     1 /*
     2     SDL - Simple DirectMedia Layer
     3     Copyright (C) 1997-2012 Sam Lantinga
     4 
     5     This library is free software; you can redistribute it and/or
     6     modify it under the terms of the GNU Lesser General Public
     7     License as published by the Free Software Foundation; either
     8     version 2.1 of the License, or (at your option) any later version.
     9 
    10     This library is distributed in the hope that it will be useful,
    11     but WITHOUT ANY WARRANTY; without even the implied warranty of
    12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    13     Lesser General Public License for more details.
    14 
    15     You should have received a copy of the GNU Lesser General Public
    16     License along with this library; if not, write to the Free Software
    17     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    18 
    19     Sam Lantinga
    20     slouken@libsdl.org
    21 */
    22 #include "SDL_config.h"
    23 
    24 #ifdef SDL_LOADSO_OS2
    25 
    26 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
    27 /* System dependent library loading routines                           */
    28 
    29 #include <stdio.h>
    30 #define INCL_DOSERRORS
    31 #define INCL_DOSMODULEMGR
    32 #include <os2.h>
    33 
    34 #include "SDL_loadso.h"
    35 
    36 void *SDL_LoadObject(const char *sofile)
    37 {
    38     HMODULE handle = NULLHANDLE;
    39     char buf[512];
    40     APIRET ulrc = DosLoadModule(buf, sizeof (buf), (char *) sofile, &handle);
    41 
    42     /* Generate an error message if all loads failed */
    43     if ((ulrc != NO_ERROR) || (handle == NULLHANDLE))
    44         SDL_SetError("Failed loading %s: %s", sofile, buf);
    45 
    46     return((void *) handle);
    47 }
    48 
    49 void *SDL_LoadFunction(void *handle, const char *name)
    50 {
    51     const char *loaderror = "Unknown error";
    52     PFN symbol = NULL;
    53     APIRET ulrc = DosQueryProcAddr((HMODULE)handle, 0, (char *)name, &symbol);
    54 
    55     if (ulrc == ERROR_INVALID_HANDLE)
    56         loaderror = "Invalid module handle";
    57     else if (ulrc == ERROR_INVALID_NAME)
    58         loaderror = "Symbol not found";
    59 
    60     if (symbol == NULL)
    61         SDL_SetError("Failed loading %s: %s", name, loaderror);
    62 
    63     return((void *) symbol);
    64 }
    65 
    66 void SDL_UnloadObject(void *handle)
    67 {
    68     if ( handle != NULL )
    69         DosFreeModule((HMODULE) handle);
    70 }
    71 
    72 #endif /* SDL_LOADSO_OS2 */