Collection of tools useful for audio production
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
2.0KB

  1. /*
  2. * Carla common library code
  3. * Copyright (C) 2011-2012 Filipe Coelho <falktx@gmail.com>
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation; either version 2 of the License, or
  8. * any later version.
  9. *
  10. * This program 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
  13. * GNU General Public License for more details.
  14. *
  15. * For a full copy of the GNU General Public License see the COPYING file
  16. */
  17. #ifndef CARLA_LIB_INCLUDES_H
  18. #define CARLA_LIB_INCLUDES_H
  19. #include "carla_includes.h"
  20. #ifdef Q_OS_WIN
  21. #include <cstdio>
  22. #endif
  23. static inline
  24. void* lib_open(const char* const filename)
  25. {
  26. #ifdef Q_OS_WIN
  27. return LoadLibraryA(filename);
  28. #else
  29. return dlopen(filename, RTLD_NOW|RTLD_LOCAL);
  30. #endif
  31. }
  32. static inline
  33. bool lib_close(void* const lib)
  34. {
  35. #ifdef Q_OS_WIN
  36. return FreeLibrary((HMODULE)lib);
  37. #else
  38. return (dlclose(lib) == 0);
  39. #endif
  40. }
  41. static inline
  42. void* lib_symbol(void* const lib, const char* const symbol)
  43. {
  44. #ifdef Q_OS_WIN
  45. return (void*)GetProcAddress((HMODULE)lib, symbol);
  46. #else
  47. return dlsym(lib, symbol);
  48. #endif
  49. }
  50. static inline
  51. const char* lib_error(const char* const filename)
  52. {
  53. #ifdef Q_OS_WIN
  54. static char libError[2048];
  55. memset(libError, 0, sizeof(char)*2048);
  56. LPVOID winErrorString;
  57. DWORD winErrorCode = GetLastError();
  58. FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, nullptr, winErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&winErrorString, 0, nullptr);
  59. snprintf(libError, 2048, "%s: error code %i: %s", filename, winErrorCode, (const char*)winErrorString);
  60. LocalFree(winErrorString);
  61. return libError;
  62. #else
  63. return dlerror();
  64. Q_UNUSED(filename);
  65. #endif
  66. }
  67. #endif // CARLA_LIB_INCLUDES_H