diff options
| author | Pali Rohár <pali.rohar@gmail.com> | 2024-03-29 15:52:29 +0100 |
|---|---|---|
| committer | Silvio <silvio.traversaro@iit.it> | 2025-04-28 14:49:51 +0200 |
| commit | 3e9bfa7d9dd0e8f4a846d45261df1dcb838b60d8 (patch) | |
| tree | 32503c88d9f306988e70b69a4c1bdc33aef82425 | |
| parent | f87cc876be9b450d3491a174b8c673d918ec5daf (diff) | |
| download | dlfcn-win32-3e9bfa7d9dd0e8f4a846d45261df1dcb838b60d8.tar.gz dlfcn-win32-3e9bfa7d9dd0e8f4a846d45261df1dcb838b60d8.tar.bz2 dlfcn-win32-3e9bfa7d9dd0e8f4a846d45261df1dcb838b60d8.zip | |
Replace CRT's strlen() and memcpy() by open coded variants
After this change there is no usage of of CRT library function. This allows
to build CRT-neutral variant of libdl.dll library, which can be used in any
application.
| -rw-r--r-- | src/dlfcn.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/src/dlfcn.c b/src/dlfcn.c index be66cac..1830b20 100644 --- a/src/dlfcn.c +++ b/src/dlfcn.c | |||
| @@ -30,7 +30,6 @@ | |||
| 30 | #include <crtdbg.h> | 30 | #include <crtdbg.h> |
| 31 | #endif | 31 | #endif |
| 32 | #include <windows.h> | 32 | #include <windows.h> |
| 33 | #include <string.h> /* strlen() and memcpy() */ | ||
| 34 | 33 | ||
| 35 | /* Older versions do not have this type */ | 34 | /* Older versions do not have this type */ |
| 36 | #if _WIN32_WINNT < 0x0500 | 35 | #if _WIN32_WINNT < 0x0500 |
| @@ -210,19 +209,15 @@ static BOOL error_occurred; | |||
| 210 | static void save_err_str( const char *str, DWORD dwMessageId ) | 209 | static void save_err_str( const char *str, DWORD dwMessageId ) |
| 211 | { | 210 | { |
| 212 | DWORD ret; | 211 | DWORD ret; |
| 213 | size_t pos, len; | 212 | size_t pos, i; |
| 214 | |||
| 215 | len = strlen( str ); | ||
| 216 | if( len > sizeof( error_buffer ) - 5 ) | ||
| 217 | len = sizeof( error_buffer ) - 5; | ||
| 218 | 213 | ||
| 219 | /* Format error message to: | 214 | /* Format error message to: |
| 220 | * "<argument to function that failed>": <Windows localized error message> | 215 | * "<argument to function that failed>": <Windows localized error message> |
| 221 | */ | 216 | */ |
| 222 | pos = 0; | 217 | pos = 0; |
| 223 | error_buffer[pos++] = '"'; | 218 | error_buffer[pos++] = '"'; |
| 224 | memcpy( error_buffer + pos, str, len ); | 219 | for( i = 0; i < sizeof( error_buffer ) - 5 && str[i] != '\0'; i++ ) |
| 225 | pos += len; | 220 | error_buffer[pos++] = str[i]; |
| 226 | error_buffer[pos++] = '"'; | 221 | error_buffer[pos++] = '"'; |
| 227 | error_buffer[pos++] = ':'; | 222 | error_buffer[pos++] = ':'; |
| 228 | error_buffer[pos++] = ' '; | 223 | error_buffer[pos++] = ' '; |
| @@ -413,7 +408,11 @@ void *dlopen( const char *file, int mode ) | |||
| 413 | char lpFileName[MAX_PATH]; | 408 | char lpFileName[MAX_PATH]; |
| 414 | size_t i, len; | 409 | size_t i, len; |
| 415 | 410 | ||
| 416 | len = strlen( file ); | 411 | for( len = 0; ; len++ ) |
| 412 | { | ||
| 413 | if( file[len] == '\0' ) | ||
| 414 | break; | ||
| 415 | } | ||
| 417 | 416 | ||
| 418 | if( len >= sizeof( lpFileName ) ) | 417 | if( len >= sizeof( lpFileName ) ) |
| 419 | { | 418 | { |
