Ticket #4422: dlerr.win.2.patch

File dlerr.win.2.patch, 1.3 KB (added by Nigel, 16 years ago)

Use snprintf, include stdio.h

  • libs/libmyth/compat.h

     
    1717#include <ws2tcpip.h>
    1818#define setsockopt(a, b, c, d, e) setsockopt(a, b, c, (const char*)(d), e)
    1919#undef close
     20#include <stdio.h>  // for snprintf(), used by inline dlerror()
    2021#else
    2122#include <sys/time.h>     // Mac OS X needs this before sys/resource
    2223#include <sys/resource.h> // for setpriority
     
    189190#define dlopen(x, y) LoadLibraryA((x))
    190191#define dlclose(x) !FreeLibrary((HMODULE)(x))
    191192#define dlsym(x, y) GetProcAddress((HMODULE)(x), (y))
    192 #define dlerror GetLastError
     193//
     194//#define dlerror()  ""
     195inline const char *dlerror(void)
     196{
     197  #define DLERR_MAX 512
     198    static char errStr[DLERR_MAX];
     199    DWORD       errCode = GetLastError();
     200
     201    if (!FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM |
     202                        FORMAT_MESSAGE_IGNORE_INSERTS |
     203                        FORMAT_MESSAGE_MAX_WIDTH_MASK,
     204                        NULL, errCode,
     205                        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
     206                        errStr, DLERR_MAX - 1, NULL))
     207        snprintf(errStr, DLERR_MAX - 1,
     208                 "dlopen()/dlsym() caused error %d", errCode);
     209
     210    return errStr;
     211}
    193212#endif // USING_MINGW
    194213
    195214#ifdef USING_MINGW