Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Mesa 3-D graphics library
  3.  *
  4.  * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
  5.  *
  6.  * Permission is hereby granted, free of charge, to any person obtaining a
  7.  * copy of this software and associated documentation files (the "Software"),
  8.  * to deal in the Software without restriction, including without limitation
  9.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  10.  * and/or sell copies of the Software, and to permit persons to whom the
  11.  * Software is furnished to do so, subject to the following conditions:
  12.  *
  13.  * The above copyright notice and this permission notice shall be included
  14.  * in all copies or substantial portions of the Software.
  15.  *
  16.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  17.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  18.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  19.  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
  20.  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  21.  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  22.  * OTHER DEALINGS IN THE SOFTWARE.
  23.  */
  24.  
  25.  
  26. #ifndef DLOPEN_H
  27. #define DLOPEN_H
  28.  
  29. /**
  30.  * Wrapper functions for dlopen(), dlsym(), dlclose().
  31.  * Note that the #ifdef tests for various environments should be expanded.
  32.  */
  33.  
  34. #if defined(HAVE_DLOPEN)
  35. #include <dlfcn.h>
  36. #endif
  37. #if defined(_WIN32)
  38. #include <windows.h>
  39. #endif
  40.  
  41. typedef void (*GenericFunc)(void);
  42.  
  43. /**
  44.  * Wrapper for dlopen().
  45.  * Note that 'flags' isn't used at this time.
  46.  */
  47. static inline void *
  48. _mesa_dlopen(const char *libname, int flags)
  49. {
  50. #if defined(HAVE_DLOPEN)
  51.    flags = RTLD_LAZY | RTLD_GLOBAL; /* Overriding flags at this time */
  52.    return dlopen(libname, flags);
  53. #elif defined(_WIN32)
  54.    return LoadLibraryA(libname);
  55. #else
  56.    return NULL;
  57. #endif
  58. }
  59.  
  60. /**
  61.  * Wrapper for dlsym() that does a cast to a generic function type,
  62.  * rather than a void *.  This reduces the number of warnings that are
  63.  * generated.
  64.  */
  65. static inline GenericFunc
  66. _mesa_dlsym(void *handle, const char *fname)
  67. {
  68.    union {
  69.       void *v;
  70.       GenericFunc f;
  71.    } u;
  72. #if defined(HAVE_DLOPEN)
  73.    u.v = dlsym(handle, fname);
  74. #elif defined(_WIN32)
  75.    u.v = (void *) GetProcAddress(handle, fname);
  76. #else
  77.    u.v = NULL;
  78. #endif
  79.    return u.f;
  80. }
  81.  
  82. /**
  83.  * Wrapper for dlclose().
  84.  */
  85. static inline void
  86. _mesa_dlclose(void *handle)
  87. {
  88. #if defined(HAVE_DLOPEN)
  89.    dlclose(handle);
  90. #elif defined(_WIN32)
  91.    FreeLibrary(handle);
  92. #else
  93.    (void) handle;
  94. #endif
  95. }
  96.  
  97. #endif
  98.