aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPali Rohár <pali.rohar@gmail.com>2024-03-29 15:52:29 +0100
committerSilvio <silvio.traversaro@iit.it>2025-04-28 14:49:51 +0200
commit3e9bfa7d9dd0e8f4a846d45261df1dcb838b60d8 (patch)
tree32503c88d9f306988e70b69a4c1bdc33aef82425
parentf87cc876be9b450d3491a174b8c673d918ec5daf (diff)
downloaddlfcn-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.c17
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;
210static void save_err_str( const char *str, DWORD dwMessageId ) 209static 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 {