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/string.h"
 | 
			
		||||
 | 
			
		||||
dds_retcode_t ddsrt_dlopen(const char *name, bool translate,
 | 
			
		||||
		ddsrt_dynlib_t *handle) {
 | 
			
		||||
	dds_retcode_t retcode = DDS_RETCODE_OK;
 | 
			
		||||
dds_return_t ddsrt_dlopen(const char *name, bool translate,
 | 
			
		||||
        ddsrt_dynlib_t *handle) {
 | 
			
		||||
    dds_return_t retcode = DDS_RETCODE_OK;
 | 
			
		||||
 | 
			
		||||
	assert( handle );
 | 
			
		||||
	*handle = NULL;
 | 
			
		||||
    assert( handle );
 | 
			
		||||
    *handle = NULL;
 | 
			
		||||
 | 
			
		||||
	if ((translate) && (strrchr(name, '/') == NULL )
 | 
			
		||||
			&& (strrchr(name, '\\') == NULL )) {
 | 
			
		||||
		/* Add suffix to the name and try to open. */
 | 
			
		||||
		static const char suffix[] = ".dll";
 | 
			
		||||
		size_t len = strlen(name) + sizeof(suffix);
 | 
			
		||||
		char* libName = ddsrt_malloc(len);
 | 
			
		||||
		sprintf_s(libName, len, "%s%s", name, suffix);
 | 
			
		||||
		*handle = LoadLibrary(libName);
 | 
			
		||||
		ddsrt_free(libName);
 | 
			
		||||
	}
 | 
			
		||||
    if ((translate) && (strrchr(name, '/') == NULL )
 | 
			
		||||
            && (strrchr(name, '\\') == NULL )) {
 | 
			
		||||
        /* Add suffix to the name and try to open. */
 | 
			
		||||
        static const char suffix[] = ".dll";
 | 
			
		||||
        size_t len = strlen(name) + sizeof(suffix);
 | 
			
		||||
        char* libName = ddsrt_malloc(len);
 | 
			
		||||
        sprintf_s(libName, len, "%s%s", name, suffix);
 | 
			
		||||
        *handle = (ddsrt_dynlib_t)LoadLibrary(libName);
 | 
			
		||||
        ddsrt_free(libName);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (*handle == NULL) {
 | 
			
		||||
		/* Name contains a path,
 | 
			
		||||
		 * (auto)translate is disabled or
 | 
			
		||||
		 * LoadLibrary on translated name failed. */
 | 
			
		||||
		*handle = LoadLibrary(name);
 | 
			
		||||
	}
 | 
			
		||||
    if (*handle == NULL) {
 | 
			
		||||
        /* Name contains a path,
 | 
			
		||||
        * (auto)translate is disabled or
 | 
			
		||||
        * LoadLibrary on translated name failed. */
 | 
			
		||||
        *handle = (ddsrt_dynlib_t)LoadLibrary(name);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	if (*handle != NULL) {
 | 
			
		||||
		retcode = DDS_RETCODE_OK;
 | 
			
		||||
	} else {
 | 
			
		||||
		retcode = DDS_RETCODE_ERROR;
 | 
			
		||||
	}
 | 
			
		||||
    if (*handle != NULL) {
 | 
			
		||||
        retcode = DDS_RETCODE_OK;
 | 
			
		||||
    } else {
 | 
			
		||||
        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 );
 | 
			
		||||
	return (FreeLibrary(handle) == 0) ? DDS_RETCODE_ERROR : DDS_RETCODE_OK;
 | 
			
		||||
    assert ( handle );
 | 
			
		||||
    return (FreeLibrary((HMODULE)handle) == 0) ? DDS_RETCODE_ERROR : DDS_RETCODE_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
dds_retcode_t ddsrt_dlsym(ddsrt_dynlib_t handle, const char *symbol,
 | 
			
		||||
		void **address) {
 | 
			
		||||
	dds_retcode_t retcode = DDS_RETCODE_OK;
 | 
			
		||||
dds_return_t ddsrt_dlsym(ddsrt_dynlib_t handle, const char *symbol,
 | 
			
		||||
        void **address) {
 | 
			
		||||
    dds_return_t retcode = DDS_RETCODE_OK;
 | 
			
		||||
 | 
			
		||||
	assert( handle );
 | 
			
		||||
	assert( address );
 | 
			
		||||
	assert( symbol );
 | 
			
		||||
    assert( handle );
 | 
			
		||||
    assert( address );
 | 
			
		||||
    assert( symbol );
 | 
			
		||||
 | 
			
		||||
	*address = GetProcAddress(handle, symbol);
 | 
			
		||||
	if ( *address == NULL ) {
 | 
			
		||||
		retcode = DDS_RETCODE_ERROR;
 | 
			
		||||
	}
 | 
			
		||||
    *address = GetProcAddress((HMODULE)handle, symbol);
 | 
			
		||||
    if ( *address == NULL ) {
 | 
			
		||||
        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
 | 
			
		||||
	 * related to a Library action attempt. */
 | 
			
		||||
	DWORD err;
 | 
			
		||||
	assert ( buf );
 | 
			
		||||
    /* Hopefully (and likely), the last error is
 | 
			
		||||
    * related to a Library action attempt. */
 | 
			
		||||
    DWORD err;
 | 
			
		||||
    assert ( buf );
 | 
			
		||||
 | 
			
		||||
	dds_retcode_t retcode = DDS_RETCODE_OK;
 | 
			
		||||
    dds_return_t retcode = DDS_RETCODE_OK;
 | 
			
		||||
 | 
			
		||||
	err = GetLastError();
 | 
			
		||||
	if ( err == 0 ) {
 | 
			
		||||
		retcode = DDS_RETCODE_NOT_FOUND;
 | 
			
		||||
	} else {
 | 
			
		||||
		retcode = ddsrt_strerror_r(err, buf, buflen);
 | 
			
		||||
	}
 | 
			
		||||
    err = GetLastError();
 | 
			
		||||
    if ( err == 0 ) {
 | 
			
		||||
        retcode = DDS_RETCODE_NOT_FOUND;
 | 
			
		||||
    } else {
 | 
			
		||||
        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
 | 
			
		||||
#
 | 
			
		||||
include(CUnit)
 | 
			
		||||
include(GenerateExportHeader)
 | 
			
		||||
include(GenerateDummyExportHeader)
 | 
			
		||||
 | 
			
		||||
list(APPEND sources
 | 
			
		||||
| 
						 | 
				
			
			@ -90,10 +91,7 @@ generate_dummy_export_header(
 | 
			
		|||
  BASE_NAME dds
 | 
			
		||||
  EXPORT_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/include/dds/export.h")
 | 
			
		||||
 | 
			
		||||
generate_dummy_export_header(
 | 
			
		||||
  ${test_lib_name}
 | 
			
		||||
  BASE_NAME lib_test
 | 
			
		||||
  EXPORT_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/lib_test_export.h")
 | 
			
		||||
generate_export_header(${test_lib_name} BASE_NAME LIB_TEST)
 | 
			
		||||
 | 
			
		||||
if(HAVE_MULTI_PROCESS)
 | 
			
		||||
  # 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_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