From: Viktor Szakats Date: Thu, 19 Jun 2025 12:05:25 +0000 (+0200) Subject: lib: make `CURLX_SET_BINMODE()` and use it X-Git-Tag: curl-8_15_0~230 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=916f241f2f9d73b97388a47fcec57f320ea77e3d;p=thirdparty%2Fcurl.git lib: make `CURLX_SET_BINMODE()` and use it Use it from libtests' `first.c` and thus also from units, and tunits. Also: - cmake: drop stray `curltool` lib dependency for units. - units: stop depending on `src` headers. - tests/server: drop depending on `src` headers. (the remaining one listed in the comments, `tool_xattr.h`, was not actually used from servers.) - tests/server: drop duplicate curlx headers. (Except `warnless.h`, which is tricky on Windows.) Closes #17672 --- diff --git a/lib/Makefile.inc b/lib/Makefile.inc index 8e33a23f6c..257e104de9 100644 --- a/lib/Makefile.inc +++ b/lib/Makefile.inc @@ -39,6 +39,7 @@ LIB_CURLX_CFILES = \ curlx/winapi.c LIB_CURLX_HFILES = \ + curlx/binmode.h \ curlx/base64.h \ curlx/curlx.h \ curlx/dynbuf.h \ diff --git a/src/tool_binmode.h b/lib/curlx/binmode.h similarity index 85% rename from src/tool_binmode.h rename to lib/curlx/binmode.h index 4da6fb73e1..3f356edd59 100644 --- a/src/tool_binmode.h +++ b/lib/curlx/binmode.h @@ -23,17 +23,17 @@ * SPDX-License-Identifier: curl * ***************************************************************************/ -#include "tool_setup.h" +#include "../curl_setup.h" #if (defined(HAVE_SETMODE) || defined(HAVE__SETMODE)) && defined(O_BINARY) /* Requires io.h and/or fcntl.h when available */ #ifdef HAVE__SETMODE -# define CURL_SET_BINMODE(stream) (void)_setmode(fileno(stream), O_BINARY) +# define CURLX_SET_BINMODE(stream) (void)_setmode(fileno(stream), O_BINARY) #else -# define CURL_SET_BINMODE(stream) (void)setmode(fileno(stream), O_BINARY) +# define CURLX_SET_BINMODE(stream) (void)setmode(fileno(stream), O_BINARY) #endif #else -# define CURL_SET_BINMODE(stream) (void)stream; tool_nop_stmt +# define CURLX_SET_BINMODE(stream) (void)stream; Curl_nop_stmt #endif #endif /* HEADER_CURL_TOOL_BINMODE_H */ diff --git a/lib/curlx/curlx.h b/lib/curlx/curlx.h index 5b97ec5b83..9f7bd3a975 100644 --- a/lib/curlx/curlx.h +++ b/lib/curlx/curlx.h @@ -31,6 +31,9 @@ * be. */ +#include "binmode.h" +/* "binmode.h" provides macro CURLX_SET_BINMODE() */ + #include "nonblock.h" /* "nonblock.h" provides curlx_nonblock() */ diff --git a/src/Makefile.inc b/src/Makefile.inc index a4c3ca453a..9b183260dd 100644 --- a/src/Makefile.inc +++ b/src/Makefile.inc @@ -45,6 +45,7 @@ CURLX_CFILES = \ ../lib/curlx/warnless.c CURLX_HFILES = \ + ../lib/curlx/binmode.h \ ../lib/curlx/multibyte.h \ ../lib/curl_setup.h \ ../lib/curlx/dynbuf.h \ @@ -105,7 +106,6 @@ CURL_HFILES = \ config2setopts.h \ slist_wc.h \ terminal.h \ - tool_binmode.h \ tool_bname.h \ tool_cb_dbg.h \ tool_cb_hdr.h \ diff --git a/src/tool_formparse.c b/src/tool_formparse.c index 2273b69dd3..748bcb29a2 100644 --- a/src/tool_formparse.c +++ b/src/tool_formparse.c @@ -27,7 +27,6 @@ #include "tool_cfgable.h" #include "tool_msgs.h" -#include "tool_binmode.h" #include "tool_getparam.h" #include "tool_paramhlp.h" #include "tool_formparse.h" @@ -133,7 +132,7 @@ static struct tool_mime *tool_mime_new_filedata(struct tool_mime *parent, curl_off_t origin; struct_stat sbuf; - CURL_SET_BINMODE(stdin); + CURLX_SET_BINMODE(stdin); origin = ftell(stdin); /* If stdin is a regular file, do not buffer data but read it when needed. */ diff --git a/src/tool_getparam.c b/src/tool_getparam.c index a72a010ce4..cc1cd3f3b1 100644 --- a/src/tool_getparam.c +++ b/src/tool_getparam.c @@ -24,7 +24,6 @@ #include "tool_setup.h" #include -#include "tool_binmode.h" #include "tool_cfgable.h" #include "tool_cb_prg.h" #include "tool_filetime.h" @@ -625,7 +624,7 @@ static ParameterError data_urlencode(struct GlobalConfig *global, /* a '@' letter, it means that a filename or - (stdin) follows */ if(!strcmp("-", p)) { file = stdin; - CURL_SET_BINMODE(stdin); + CURLX_SET_BINMODE(stdin); } else { file = fopen(p, "rb"); @@ -901,7 +900,7 @@ static ParameterError set_data(cmdline_t cmd, if(!strcmp("-", nextarg)) { file = stdin; if(cmd == C_DATA_BINARY) /* forced data-binary */ - CURL_SET_BINMODE(stdin); + CURLX_SET_BINMODE(stdin); } else { file = fopen(nextarg, "rb"); diff --git a/src/tool_operate.c b/src/tool_operate.c index a52439caf8..5f52838ce8 100644 --- a/src/tool_operate.c +++ b/src/tool_operate.c @@ -56,7 +56,6 @@ #include -#include "tool_binmode.h" #include "tool_cfgable.h" #include "tool_cb_dbg.h" #include "tool_cb_hdr.h" @@ -869,7 +868,7 @@ static CURLcode etag_store(struct GlobalConfig *global, } else { /* always use binary mode for protocol header output */ - CURL_SET_BINMODE(etag_save->stream); + CURLX_SET_BINMODE(etag_save->stream); } return CURLE_OK; } @@ -883,7 +882,7 @@ static CURLcode setup_headerfile(struct GlobalConfig *global, if(!strcmp(config->headerfile, "%")) { heads->stream = stderr; /* use binary mode for protocol header output */ - CURL_SET_BINMODE(heads->stream); + CURLX_SET_BINMODE(heads->stream); } else if(strcmp(config->headerfile, "-")) { FILE *newfile; @@ -923,7 +922,7 @@ static CURLcode setup_headerfile(struct GlobalConfig *global, } else { /* always use binary mode for protocol header output */ - CURL_SET_BINMODE(heads->stream); + CURLX_SET_BINMODE(heads->stream); } return CURLE_OK; } @@ -1065,7 +1064,7 @@ static void check_stdin_upload(struct GlobalConfig *global, DEBUGASSERT(per->infdopen == FALSE); DEBUGASSERT(per->infd == STDIN_FILENO); - CURL_SET_BINMODE(stdin); + CURLX_SET_BINMODE(stdin); if(!strcmp(per->uploadfile, ".")) { if(curlx_nonblock((curl_socket_t)per->infd, TRUE) < 0) warnf(global, @@ -1345,7 +1344,7 @@ static CURLcode single_transfer(struct GlobalConfig *global, !config->use_ascii) { /* We get the output to stdout and we have not got the ASCII/text flag, then set stdout to be binary */ - CURL_SET_BINMODE(stdout); + CURLX_SET_BINMODE(stdout); } /* explicitly passed to stdout means okaying binary gunk */ diff --git a/tests/libtest/CMakeLists.txt b/tests/libtest/CMakeLists.txt index 1d485d17d8..f8dedc5c43 100644 --- a/tests/libtest/CMakeLists.txt +++ b/tests/libtest/CMakeLists.txt @@ -54,7 +54,6 @@ target_include_directories(${BUNDLE} PRIVATE "${PROJECT_BINARY_DIR}/lib" # for "curl_config.h" "${PROJECT_SOURCE_DIR}/lib" # for "curl_setup.h" "${PROJECT_SOURCE_DIR}/lib/curlx" # for curlx - "${PROJECT_SOURCE_DIR}/src" # for "tool_binmode.h" "${CMAKE_CURRENT_SOURCE_DIR}" # for the generated bundle source to find included test sources "${PROJECT_SOURCE_DIR}/tests/unit" # for "curlcheck.h" ) diff --git a/tests/libtest/Makefile.am b/tests/libtest/Makefile.am index 0db7a0e349..46e3ccce79 100644 --- a/tests/libtest/Makefile.am +++ b/tests/libtest/Makefile.am @@ -37,7 +37,6 @@ AM_CPPFLAGS = -I$(top_srcdir)/include \ -I$(top_builddir)/lib \ -I$(top_srcdir)/lib \ -I$(top_srcdir)/lib/curlx \ - -I$(top_srcdir)/src \ -I$(srcdir) \ -I$(top_srcdir)/tests/unit diff --git a/tests/libtest/first.c b/tests/libtest/first.c index 2a828a1b3f..b6bf2b1b9b 100644 --- a/tests/libtest/first.c +++ b/tests/libtest/first.c @@ -27,7 +27,7 @@ #include "memdebug.h" #include "curlx/timediff.h" -#include "tool_binmode.h" +#include "curlx/binmode.h" int select_wrapper(int nfds, fd_set *rd, fd_set *wr, fd_set *exc, struct timeval *tv) @@ -107,7 +107,7 @@ int main(int argc, char **argv) char *env; size_t tmp; - CURL_SET_BINMODE(stdout); + CURLX_SET_BINMODE(stdout); memory_tracking_init(); diff --git a/tests/server/CMakeLists.txt b/tests/server/CMakeLists.txt index 4ad9cc55fe..0cdf890e5c 100644 --- a/tests/server/CMakeLists.txt +++ b/tests/server/CMakeLists.txt @@ -42,7 +42,6 @@ target_include_directories(${BUNDLE} PRIVATE "${PROJECT_BINARY_DIR}/lib" # for "curl_config.h" "${PROJECT_SOURCE_DIR}/lib" # for "curl_setup.h" "${PROJECT_SOURCE_DIR}/lib/curlx" # for curlx - "${PROJECT_SOURCE_DIR}/src" # for "tool_binmode.h", "tool_xattr.h" "${CMAKE_CURRENT_SOURCE_DIR}" # for the generated bundle source to find included test sources ) set_property(TARGET ${BUNDLE} APPEND PROPERTY COMPILE_DEFINITIONS "WITHOUT_LIBCURL") diff --git a/tests/server/Makefile.am b/tests/server/Makefile.am index 36b4008437..41b1c86d79 100644 --- a/tests/server/Makefile.am +++ b/tests/server/Makefile.am @@ -31,14 +31,12 @@ AUTOMAKE_OPTIONS = foreign nostdinc # $(top_srcdir)/include is for libcurl's external include files # $(top_builddir)/lib is for libcurl's generated lib/curl_config.h file # $(top_srcdir)/lib for libcurl's lib/curl_setup.h and other "borrowed" files -# $(top_srcdir)/src for "tool_binmode.h", "tool_xattr.h" # $(srcdir) for the generated bundle source to find included test sources AM_CPPFLAGS = -I$(top_srcdir)/include \ -I$(top_builddir)/lib \ -I$(top_srcdir)/lib \ -I$(top_srcdir)/lib/curlx \ - -I$(top_srcdir)/src \ -I$(srcdir) # Get BUNDLE, BUNDLE_SRC, FIRSTFILES, UTILS, CURLX_SRCS, TESTFILES variables diff --git a/tests/server/mqttd.c b/tests/server/mqttd.c index db5007f109..57ebf22a50 100644 --- a/tests/server/mqttd.c +++ b/tests/server/mqttd.c @@ -55,8 +55,6 @@ #include /* from the private lib dir */ #include "getpart.h" -#include "tool_binmode.h" - /* include memdebug.h last */ #include @@ -985,9 +983,9 @@ static int test_mqttd(int argc, char *argv[]) return 2; #endif - CURL_SET_BINMODE(stdin); - CURL_SET_BINMODE(stdout); - CURL_SET_BINMODE(stderr); + CURLX_SET_BINMODE(stdin); + CURLX_SET_BINMODE(stdout); + CURLX_SET_BINMODE(stderr); install_signal_handlers(FALSE); diff --git a/tests/server/sockfilt.c b/tests/server/sockfilt.c index b4e62a50bb..9728abfadf 100644 --- a/tests/server/sockfilt.c +++ b/tests/server/sockfilt.c @@ -102,12 +102,8 @@ #endif #include /* from the private lib dir */ -#include "inet_pton.h" -#include "timediff.h" #include "warnless.h" /* for read() */ -#include "tool_binmode.h" - /* include memdebug.h last */ #include @@ -1495,9 +1491,9 @@ static int test_sockfilt(int argc, char *argv[]) return 2; #endif - CURL_SET_BINMODE(stdin); - CURL_SET_BINMODE(stdout); - CURL_SET_BINMODE(stderr); + CURLX_SET_BINMODE(stdin); + CURLX_SET_BINMODE(stdout); + CURLX_SET_BINMODE(stderr); install_signal_handlers(false); diff --git a/tests/server/socksd.c b/tests/server/socksd.c index af8083bbdb..b6d7794c8a 100644 --- a/tests/server/socksd.c +++ b/tests/server/socksd.c @@ -74,8 +74,6 @@ #endif #include /* from the private lib dir */ -#include "inet_pton.h" -#include "tool_binmode.h" /* include memdebug.h last */ #include @@ -1043,9 +1041,9 @@ static int test_socksd(int argc, char *argv[]) return 2; #endif - CURL_SET_BINMODE(stdin); - CURL_SET_BINMODE(stdout); - CURL_SET_BINMODE(stderr); + CURLX_SET_BINMODE(stdin); + CURLX_SET_BINMODE(stdout); + CURLX_SET_BINMODE(stderr); install_signal_handlers(false); diff --git a/tests/server/sws.c b/tests/server/sws.c index 553030e61d..4e78649bc8 100644 --- a/tests/server/sws.c +++ b/tests/server/sws.c @@ -51,7 +51,6 @@ #include /* from the private lib dir */ #include "getpart.h" -#include "inet_pton.h" /* include memdebug.h last */ #include diff --git a/tests/unit/CMakeLists.txt b/tests/unit/CMakeLists.txt index 5d776e8544..947b7f4212 100644 --- a/tests/unit/CMakeLists.txt +++ b/tests/unit/CMakeLists.txt @@ -35,12 +35,11 @@ add_custom_command(OUTPUT "${BUNDLE_SRC}" add_executable(${BUNDLE} EXCLUDE_FROM_ALL ${UTILS} "${BUNDLE_SRC}") add_dependencies(testdeps ${BUNDLE}) -target_link_libraries(${BUNDLE} curltool curlu) +target_link_libraries(${BUNDLE} curlu) target_include_directories(${BUNDLE} PRIVATE "${PROJECT_BINARY_DIR}/lib" # for "curl_config.h" "${PROJECT_SOURCE_DIR}/lib" # for "curl_setup.h" "${PROJECT_SOURCE_DIR}/lib/curlx" # for curlx - "${PROJECT_SOURCE_DIR}/src" # for "tool_binmode.h" "${PROJECT_SOURCE_DIR}/tests/libtest" # for "first.h" "${CMAKE_CURRENT_SOURCE_DIR}" # for the generated bundle source to find included test sources ) diff --git a/tests/unit/Makefile.am b/tests/unit/Makefile.am index e3cf2cc4a0..162977ee03 100644 --- a/tests/unit/Makefile.am +++ b/tests/unit/Makefile.am @@ -37,7 +37,6 @@ AM_CPPFLAGS = -I$(top_srcdir)/include \ -I$(top_builddir)/lib \ -I$(top_srcdir)/lib \ -I$(top_srcdir)/lib/curlx \ - -I$(top_srcdir)/src \ -I$(top_srcdir)/tests/libtest \ -I$(srcdir)