mirror of
https://github.com/curl/curl.git
synced 2025-04-24 16:40:32 +08:00
curl_multibyte: fixup low-level calls, include in unity builds
Also adjust `()` around low-level calls preventing macro overrides via e.g. `memdebug.h`: - add for `malloc` and `free`. - drop for `_open`. (We do not override `_open` in curl.) Tidy-up: also sync libcurlu custom macro order in cmake with autotools. Follow-up to f42a279ee32d3db3ab529da8dfb833edb5a088ca #11928 Closes #16742
This commit is contained in:
parent
131a2fd5aa
commit
04c78c897b
@ -51,7 +51,7 @@ if(CURL_BUILD_TESTING)
|
||||
EXCLUDE_FROM_ALL
|
||||
${HHEADERS} ${CSOURCES}
|
||||
)
|
||||
target_compile_definitions(curlu PUBLIC "UNITTESTS" "CURL_STATICLIB")
|
||||
target_compile_definitions(curlu PUBLIC "CURL_STATICLIB" "UNITTESTS")
|
||||
target_link_libraries(curlu PRIVATE ${CURL_LIBS})
|
||||
# There is plenty of parallelism when building the testdeps target.
|
||||
# Override the curlu batch size with the maximum to optimize performance.
|
||||
@ -59,9 +59,9 @@ if(CURL_BUILD_TESTING)
|
||||
endif()
|
||||
|
||||
if(ENABLE_CURLDEBUG)
|
||||
# We must compile these sources separately to avoid memdebug.h redefinitions
|
||||
# applying to them.
|
||||
set_source_files_properties("memdebug.c" "curl_multibyte.c" PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON)
|
||||
# We must compile this source separately to avoid memdebug.h redefinitions
|
||||
# applying to it.
|
||||
set_source_files_properties("memdebug.c" PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON)
|
||||
endif()
|
||||
|
||||
## Library definition
|
||||
|
@ -87,9 +87,9 @@ if USE_UNITY
|
||||
# in static mode.
|
||||
curl_EXCLUDE = curl_threads.c timediff.c warnless.c
|
||||
if CURLDEBUG
|
||||
# We must compile these sources separately to avoid memdebug.h redefinitions
|
||||
# applying to them.
|
||||
curl_EXCLUDE += memdebug.c curl_multibyte.c
|
||||
# We must compile this source separately to avoid memdebug.h redefinitions
|
||||
# applying to it.
|
||||
curl_EXCLUDE += memdebug.c
|
||||
endif
|
||||
# For Cygwin always compile dllmain.c as a separate unit since it
|
||||
# includes windows.h, which should not be included in other units.
|
||||
|
@ -23,11 +23,11 @@
|
||||
***************************************************************************/
|
||||
|
||||
/*
|
||||
* This file is 'mem-include-scan' clean, which means memdebug.h and
|
||||
* curl_memory.h are purposely not included in this file. See test 1132.
|
||||
*
|
||||
* The functions in this file are curlx functions which are not tracked by the
|
||||
* curl memory tracker memdebug.
|
||||
* This file is 'mem-include-scan' clean, which means its memory allocations
|
||||
* are not tracked by the curl memory tracker memdebug, so they must not use
|
||||
* `CURLDEBUG` macro replacements in memdebug.h for free, malloc, etc. To avoid
|
||||
* these macro replacements, wrap the names in parentheses to call the original
|
||||
* versions: `ptr = (malloc)(123)`, `(free)(ptr)`, etc.
|
||||
*/
|
||||
|
||||
#include "curl_setup.h"
|
||||
@ -48,11 +48,11 @@ wchar_t *curlx_convert_UTF8_to_wchar(const char *str_utf8)
|
||||
int str_w_len = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS,
|
||||
str_utf8, -1, NULL, 0);
|
||||
if(str_w_len > 0) {
|
||||
str_w = malloc(str_w_len * sizeof(wchar_t));
|
||||
str_w = (malloc)(str_w_len * sizeof(wchar_t));
|
||||
if(str_w) {
|
||||
if(MultiByteToWideChar(CP_UTF8, 0, str_utf8, -1, str_w,
|
||||
str_w_len) == 0) {
|
||||
free(str_w);
|
||||
(free)(str_w);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
@ -70,11 +70,11 @@ char *curlx_convert_wchar_to_UTF8(const wchar_t *str_w)
|
||||
int bytes = WideCharToMultiByte(CP_UTF8, 0, str_w, -1,
|
||||
NULL, 0, NULL, NULL);
|
||||
if(bytes > 0) {
|
||||
str_utf8 = malloc(bytes);
|
||||
str_utf8 = (malloc)(bytes);
|
||||
if(str_utf8) {
|
||||
if(WideCharToMultiByte(CP_UTF8, 0, str_w, -1, str_utf8, bytes,
|
||||
NULL, NULL) == 0) {
|
||||
free(str_utf8);
|
||||
(free)(str_utf8);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
@ -136,7 +136,7 @@ static bool fix_excessive_path(const TCHAR *in, TCHAR **out)
|
||||
if(needed == (size_t)-1 || needed >= max_path_len)
|
||||
goto cleanup;
|
||||
++needed; /* for NUL */
|
||||
ibuf = malloc(needed * sizeof(wchar_t));
|
||||
ibuf = (malloc)(needed * sizeof(wchar_t));
|
||||
if(!ibuf)
|
||||
goto cleanup;
|
||||
count = mbstowcs(ibuf, in, needed);
|
||||
@ -156,7 +156,7 @@ static bool fix_excessive_path(const TCHAR *in, TCHAR **out)
|
||||
/* skip paths that are not excessive and do not need modification */
|
||||
if(needed <= MAX_PATH)
|
||||
goto cleanup;
|
||||
fbuf = malloc(needed * sizeof(wchar_t));
|
||||
fbuf = (malloc)(needed * sizeof(wchar_t));
|
||||
if(!fbuf)
|
||||
goto cleanup;
|
||||
count = (size_t)GetFullPathNameW(in_w, (DWORD)needed, fbuf, NULL);
|
||||
@ -189,7 +189,7 @@ static bool fix_excessive_path(const TCHAR *in, TCHAR **out)
|
||||
if(needed > max_path_len)
|
||||
goto cleanup;
|
||||
|
||||
temp = malloc(needed * sizeof(wchar_t));
|
||||
temp = (malloc)(needed * sizeof(wchar_t));
|
||||
if(!temp)
|
||||
goto cleanup;
|
||||
|
||||
@ -202,7 +202,7 @@ static bool fix_excessive_path(const TCHAR *in, TCHAR **out)
|
||||
if(needed > max_path_len)
|
||||
goto cleanup;
|
||||
|
||||
temp = malloc(needed * sizeof(wchar_t));
|
||||
temp = (malloc)(needed * sizeof(wchar_t));
|
||||
if(!temp)
|
||||
goto cleanup;
|
||||
|
||||
@ -210,7 +210,7 @@ static bool fix_excessive_path(const TCHAR *in, TCHAR **out)
|
||||
wcscpy(temp + 4, fbuf);
|
||||
}
|
||||
|
||||
free(fbuf);
|
||||
(free)(fbuf);
|
||||
fbuf = temp;
|
||||
}
|
||||
|
||||
@ -220,7 +220,7 @@ static bool fix_excessive_path(const TCHAR *in, TCHAR **out)
|
||||
if(needed == (size_t)-1 || needed >= max_path_len)
|
||||
goto cleanup;
|
||||
++needed; /* for NUL */
|
||||
obuf = malloc(needed);
|
||||
obuf = (malloc)(needed);
|
||||
if(!obuf)
|
||||
goto cleanup;
|
||||
count = wcstombs(obuf, fbuf, needed);
|
||||
@ -234,10 +234,10 @@ static bool fix_excessive_path(const TCHAR *in, TCHAR **out)
|
||||
#endif
|
||||
|
||||
cleanup:
|
||||
free(fbuf);
|
||||
(free)(fbuf);
|
||||
#ifndef _UNICODE
|
||||
free(ibuf);
|
||||
free(obuf);
|
||||
(free)(ibuf);
|
||||
(free)(obuf);
|
||||
#endif
|
||||
return *out ? true : false;
|
||||
}
|
||||
@ -276,10 +276,10 @@ int curlx_win32_open(const char *filename, int oflag, ...)
|
||||
target = fixed;
|
||||
else
|
||||
target = filename;
|
||||
result = (_open)(target, oflag, pmode);
|
||||
result = _open(target, oflag, pmode);
|
||||
#endif
|
||||
|
||||
free(fixed);
|
||||
(free)(fixed);
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -312,7 +312,7 @@ FILE *curlx_win32_fopen(const char *filename, const char *mode)
|
||||
result = (fopen)(target, mode);
|
||||
#endif
|
||||
|
||||
free(fixed);
|
||||
(free)(fixed);
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -351,7 +351,7 @@ int curlx_win32_stat(const char *path, struct_stat *buffer)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
free(fixed);
|
||||
(free)(fixed);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -77,12 +77,6 @@ if(BUILD_STATIC_CURL)
|
||||
set(CURLX_CFILES ${CURLTOOL_LIBCURL_CFILES})
|
||||
endif()
|
||||
|
||||
if(ENABLE_CURLDEBUG)
|
||||
# We must compile this source separately to avoid memdebug.h redefinitions
|
||||
# applying to them.
|
||||
set_source_files_properties("../lib/curl_multibyte.c" PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON)
|
||||
endif()
|
||||
|
||||
add_executable(
|
||||
${EXE_NAME}
|
||||
${CURL_CFILES} ${_curl_cfiles_gen} ${CURLX_CFILES} ${CURL_HFILES} ${_curl_hfiles_gen}
|
||||
@ -100,7 +94,7 @@ add_library(
|
||||
EXCLUDE_FROM_ALL
|
||||
${CURL_CFILES} ${CURLTOOL_LIBCURL_CFILES} ${CURL_HFILES}
|
||||
)
|
||||
target_compile_definitions(curltool PUBLIC "UNITTESTS" "CURL_STATICLIB")
|
||||
target_compile_definitions(curltool PUBLIC "CURL_STATICLIB" "UNITTESTS")
|
||||
target_link_libraries(curltool PRIVATE ${CURL_LIBS})
|
||||
|
||||
if(CURL_HAS_LTO)
|
||||
|
@ -70,22 +70,16 @@ curl_hfiles_gen =
|
||||
CLEANFILES =
|
||||
|
||||
if USE_UNITY
|
||||
curl_EXCLUDE =
|
||||
if CURLDEBUG
|
||||
# We must compile this source separately to avoid memdebug.h redefinitions
|
||||
# applying to them.
|
||||
curl_EXCLUDE += ../lib/curl_multibyte.c
|
||||
endif
|
||||
if USE_CPPFLAG_CURL_STATICLIB
|
||||
curl_CURLX = $(CURLTOOL_LIBCURL_CFILES)
|
||||
else
|
||||
curl_CURLX = $(CURLX_CFILES)
|
||||
endif
|
||||
curltool_unity.c: $(top_srcdir)/scripts/mk-unity.pl $(CURL_CFILES) $(curl_cfiles_gen) $(curl_CURLX)
|
||||
@PERL@ $(top_srcdir)/scripts/mk-unity.pl $(srcdir) $(CURL_CFILES) $(curl_cfiles_gen) $(curl_CURLX) --exclude $(curl_EXCLUDE) > curltool_unity.c
|
||||
@PERL@ $(top_srcdir)/scripts/mk-unity.pl $(srcdir) $(CURL_CFILES) $(curl_cfiles_gen) $(curl_CURLX) > curltool_unity.c
|
||||
|
||||
nodist_curl_SOURCES = curltool_unity.c
|
||||
curl_SOURCES = $(curl_EXCLUDE)
|
||||
curl_SOURCES =
|
||||
CLEANFILES += curltool_unity.c
|
||||
else
|
||||
# CURL_FILES comes from Makefile.inc
|
||||
@ -114,10 +108,10 @@ libcurltool_la_CFLAGS =
|
||||
libcurltool_la_LDFLAGS = -static $(LINKFLAGS)
|
||||
if USE_UNITY
|
||||
libcurltool_unity.c: $(top_srcdir)/scripts/mk-unity.pl $(CURL_CFILES) $(CURLTOOL_LIBCURL_CFILES)
|
||||
@PERL@ $(top_srcdir)/scripts/mk-unity.pl $(srcdir) $(CURL_CFILES) $(CURLTOOL_LIBCURL_CFILES) --exclude $(curl_EXCLUDE) > libcurltool_unity.c
|
||||
@PERL@ $(top_srcdir)/scripts/mk-unity.pl $(srcdir) $(CURL_CFILES) $(CURLTOOL_LIBCURL_CFILES) > libcurltool_unity.c
|
||||
|
||||
nodist_libcurltool_la_SOURCES = libcurltool_unity.c
|
||||
libcurltool_la_SOURCES = $(curl_EXCLUDE)
|
||||
libcurltool_la_SOURCES =
|
||||
CLEANFILES += libcurltool_unity.c
|
||||
else
|
||||
libcurltool_la_SOURCES = $(CURL_FILES)
|
||||
|
@ -27,10 +27,6 @@
|
||||
curl_transform_makefile_inc("Makefile.inc" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake")
|
||||
include("${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake")
|
||||
|
||||
if(ENABLE_CURLDEBUG)
|
||||
set_source_files_properties("../../lib/curl_multibyte.c" PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON)
|
||||
endif()
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT "lib1521.c"
|
||||
COMMAND ${PERL_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/mk-lib1521.pl" < "${PROJECT_SOURCE_DIR}/include/curl/curl.h" "lib1521.c"
|
||||
|
@ -27,7 +27,7 @@ curl_transform_makefile_inc("Makefile.inc" "${CMAKE_CURRENT_BINARY_DIR}/Makefile
|
||||
include("${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake")
|
||||
|
||||
if(ENABLE_SERVER_DEBUG AND ENABLE_CURLDEBUG)
|
||||
set_source_files_properties("../../lib/memdebug.c" "../../lib/curl_multibyte.c" PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON)
|
||||
set_source_files_properties("../../lib/memdebug.c" PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON)
|
||||
endif()
|
||||
|
||||
if(CURL_TEST_BUNDLES)
|
||||
|
@ -25,8 +25,6 @@
|
||||
SERVERPROGS = resolve rtspd sockfilt sws tftpd socksd disabled mqttd
|
||||
|
||||
MEMDEBUG = \
|
||||
../../lib/curl_multibyte.c \
|
||||
../../lib/curl_multibyte.h \
|
||||
../../lib/memdebug.c \
|
||||
../../lib/memdebug.h
|
||||
|
||||
@ -42,6 +40,7 @@ CURLX_SRCS = \
|
||||
../../lib/strcase.c \
|
||||
../../lib/strdup.c \
|
||||
../../lib/curl_get_line.c \
|
||||
../../lib/curl_multibyte.c \
|
||||
../../lib/version_win32.c
|
||||
|
||||
CURLX_HDRS = \
|
||||
@ -56,6 +55,7 @@ CURLX_HDRS = \
|
||||
../../lib/strcase.h \
|
||||
../../lib/strdup.h \
|
||||
../../lib/curl_get_line.h \
|
||||
../../lib/curl_multibyte.h \
|
||||
../../lib/version_win32.h
|
||||
|
||||
UTIL = \
|
||||
|
Loading…
x
Reference in New Issue
Block a user