Fixed dynlib Windows issues after merge.
Signed-off-by: Martin Bremmer <martin.bremmer@adlinktech.com>
This commit is contained in:
parent
3fc777e631
commit
09eba90c90
3 changed files with 56 additions and 69 deletions
|
@ -17,79 +17,79 @@
|
||||||
#include "dds/ddsrt/types.h"
|
#include "dds/ddsrt/types.h"
|
||||||
#include "dds/ddsrt/string.h"
|
#include "dds/ddsrt/string.h"
|
||||||
|
|
||||||
dds_retcode_t ddsrt_dlopen(const char *name, bool translate,
|
dds_return_t ddsrt_dlopen(const char *name, bool translate,
|
||||||
ddsrt_dynlib_t *handle) {
|
ddsrt_dynlib_t *handle) {
|
||||||
dds_retcode_t retcode = DDS_RETCODE_OK;
|
dds_return_t retcode = DDS_RETCODE_OK;
|
||||||
|
|
||||||
assert( handle );
|
assert( handle );
|
||||||
*handle = NULL;
|
*handle = NULL;
|
||||||
|
|
||||||
if ((translate) && (strrchr(name, '/') == NULL )
|
if ((translate) && (strrchr(name, '/') == NULL )
|
||||||
&& (strrchr(name, '\\') == NULL )) {
|
&& (strrchr(name, '\\') == NULL )) {
|
||||||
/* Add suffix to the name and try to open. */
|
/* Add suffix to the name and try to open. */
|
||||||
static const char suffix[] = ".dll";
|
static const char suffix[] = ".dll";
|
||||||
size_t len = strlen(name) + sizeof(suffix);
|
size_t len = strlen(name) + sizeof(suffix);
|
||||||
char* libName = ddsrt_malloc(len);
|
char* libName = ddsrt_malloc(len);
|
||||||
sprintf_s(libName, len, "%s%s", name, suffix);
|
sprintf_s(libName, len, "%s%s", name, suffix);
|
||||||
*handle = LoadLibrary(libName);
|
*handle = (ddsrt_dynlib_t)LoadLibrary(libName);
|
||||||
ddsrt_free(libName);
|
ddsrt_free(libName);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*handle == NULL) {
|
if (*handle == NULL) {
|
||||||
/* Name contains a path,
|
/* Name contains a path,
|
||||||
* (auto)translate is disabled or
|
* (auto)translate is disabled or
|
||||||
* LoadLibrary on translated name failed. */
|
* LoadLibrary on translated name failed. */
|
||||||
*handle = LoadLibrary(name);
|
*handle = (ddsrt_dynlib_t)LoadLibrary(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*handle != NULL) {
|
if (*handle != NULL) {
|
||||||
retcode = DDS_RETCODE_OK;
|
retcode = DDS_RETCODE_OK;
|
||||||
} else {
|
} else {
|
||||||
retcode = DDS_RETCODE_ERROR;
|
retcode = DDS_RETCODE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
return retcode;
|
return retcode;
|
||||||
}
|
}
|
||||||
|
|
||||||
dds_retcode_t ddsrt_dlclose(ddsrt_dynlib_t handle) {
|
dds_return_t ddsrt_dlclose(ddsrt_dynlib_t handle) {
|
||||||
|
|
||||||
assert ( handle );
|
assert ( handle );
|
||||||
return (FreeLibrary(handle) == 0) ? DDS_RETCODE_ERROR : DDS_RETCODE_OK;
|
return (FreeLibrary((HMODULE)handle) == 0) ? DDS_RETCODE_ERROR : DDS_RETCODE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
dds_retcode_t ddsrt_dlsym(ddsrt_dynlib_t handle, const char *symbol,
|
dds_return_t ddsrt_dlsym(ddsrt_dynlib_t handle, const char *symbol,
|
||||||
void **address) {
|
void **address) {
|
||||||
dds_retcode_t retcode = DDS_RETCODE_OK;
|
dds_return_t retcode = DDS_RETCODE_OK;
|
||||||
|
|
||||||
assert( handle );
|
assert( handle );
|
||||||
assert( address );
|
assert( address );
|
||||||
assert( symbol );
|
assert( symbol );
|
||||||
|
|
||||||
*address = GetProcAddress(handle, symbol);
|
*address = GetProcAddress((HMODULE)handle, symbol);
|
||||||
if ( *address == NULL ) {
|
if ( *address == NULL ) {
|
||||||
retcode = DDS_RETCODE_ERROR;
|
retcode = DDS_RETCODE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
return retcode;
|
return retcode;
|
||||||
}
|
}
|
||||||
|
|
||||||
dds_retcode_t ddsrt_dlerror(char *buf, size_t buflen) {
|
dds_return_t ddsrt_dlerror(char *buf, size_t buflen) {
|
||||||
|
|
||||||
/* Hopefully (and likely), the last error is
|
/* Hopefully (and likely), the last error is
|
||||||
* related to a Library action attempt. */
|
* related to a Library action attempt. */
|
||||||
DWORD err;
|
DWORD err;
|
||||||
assert ( buf );
|
assert ( buf );
|
||||||
|
|
||||||
dds_retcode_t retcode = DDS_RETCODE_OK;
|
dds_return_t retcode = DDS_RETCODE_OK;
|
||||||
|
|
||||||
err = GetLastError();
|
err = GetLastError();
|
||||||
if ( err == 0 ) {
|
if ( err == 0 ) {
|
||||||
retcode = DDS_RETCODE_NOT_FOUND;
|
retcode = DDS_RETCODE_NOT_FOUND;
|
||||||
} else {
|
} else {
|
||||||
retcode = ddsrt_strerror_r(err, buf, buflen);
|
retcode = ddsrt_strerror_r(err, buf, buflen);
|
||||||
}
|
}
|
||||||
|
|
||||||
return retcode;
|
return retcode;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
||||||
#
|
#
|
||||||
include(CUnit)
|
include(CUnit)
|
||||||
|
include(GenerateExportHeader)
|
||||||
include(GenerateDummyExportHeader)
|
include(GenerateDummyExportHeader)
|
||||||
|
|
||||||
list(APPEND sources
|
list(APPEND sources
|
||||||
|
@ -90,10 +91,7 @@ generate_dummy_export_header(
|
||||||
BASE_NAME dds
|
BASE_NAME dds
|
||||||
EXPORT_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/include/dds/export.h")
|
EXPORT_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/include/dds/export.h")
|
||||||
|
|
||||||
generate_dummy_export_header(
|
generate_export_header(${test_lib_name} BASE_NAME LIB_TEST)
|
||||||
${test_lib_name}
|
|
||||||
BASE_NAME lib_test
|
|
||||||
EXPORT_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/lib_test_export.h")
|
|
||||||
|
|
||||||
if(HAVE_MULTI_PROCESS)
|
if(HAVE_MULTI_PROCESS)
|
||||||
# A separate application is required to test process management.
|
# A separate application is required to test process management.
|
||||||
|
|
|
@ -185,14 +185,3 @@ CU_Test(ddsrt_library, dlclose_error)
|
||||||
CU_ASSERT_EQUAL(r, DDS_RETCODE_ERROR);
|
CU_ASSERT_EQUAL(r, DDS_RETCODE_ERROR);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CU_Test(ddsrt_library, dlerror_notfound)
|
|
||||||
{
|
|
||||||
char buffer[256];
|
|
||||||
dds_return_t r;
|
|
||||||
ddsrt_dlerror(buffer, sizeof(buffer));
|
|
||||||
r = ddsrt_dlerror(buffer, sizeof(buffer));
|
|
||||||
CU_ASSERT_EQUAL(r, DDS_RETCODE_NOT_FOUND);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue