1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- /*
- * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved.
- *
- * Licensed under the Apache License 2.0 (the "License"). You may not use
- * this file except in compliance with the License. You can obtain a copy
- * in the file LICENSE in the source distribution or at
- * https://www.openssl.org/source/license.html
- */
- #include <stdlib.h> /* For NULL */
- #include <openssl/macros.h> /* For NON_EMPTY_TRANSLATION_UNIT */
- #include <openssl/e_os2.h>
- #include "simpledynamic.h"
- #if defined(DSO_DLFCN)
- int sd_load(const char *filename, SD *lib, int type)
- {
- int dl_flags = type;
- #ifdef _AIX
- if (filename[strlen(filename) - 1] == ')')
- dl_flags |= RTLD_MEMBER;
- #endif
- *lib = dlopen(filename, dl_flags);
- return *lib == NULL ? 0 : 1;
- }
- int sd_sym(SD lib, const char *symname, SD_SYM *sym)
- {
- *sym = dlsym(lib, symname);
- return *sym != NULL;
- }
- int sd_close(SD lib)
- {
- return dlclose(lib) != 0 ? 0 : 1;
- }
- const char *sd_error(void)
- {
- return dlerror();
- }
- #elif defined(DSO_WIN32)
- int sd_load(const char *filename, SD *lib, ossl_unused int type)
- {
- *lib = LoadLibraryA(filename);
- return *lib == NULL ? 0 : 1;
- }
- int sd_sym(SD lib, const char *symname, SD_SYM *sym)
- {
- *sym = (SD_SYM)GetProcAddress(lib, symname);
- return *sym != NULL;
- }
- int sd_close(SD lib)
- {
- return FreeLibrary(lib) == 0 ? 0 : 1;
- }
- const char *sd_error(void)
- {
- static char buffer[255];
- buffer[0] = '\0';
- FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0,
- buffer, sizeof(buffer), NULL);
- return buffer;
- }
- #else
- NON_EMPTY_TRANSLATION_UNIT
- #endif
|