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
This commit is contained in:
Viktor Szakats 2025-06-19 14:05:25 +02:00
parent 35d0c047ce
commit 916f241f2f
No known key found for this signature in database
GPG Key ID: B5ABD165E2AEF201
18 changed files with 29 additions and 44 deletions

View File

@ -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 \

View File

@ -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 */

View File

@ -31,6 +31,9 @@
* be.
*/
#include "binmode.h"
/* "binmode.h" provides macro CURLX_SET_BINMODE() */
#include "nonblock.h"
/* "nonblock.h" provides curlx_nonblock() */

View File

@ -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 \

View File

@ -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. */

View File

@ -24,7 +24,6 @@
#include "tool_setup.h"
#include <curlx.h>
#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");

View File

@ -56,7 +56,6 @@
#include <curlx.h>
#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 */

View File

@ -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"
)

View File

@ -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

View File

@ -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();

View File

@ -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")

View File

@ -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

View File

@ -55,8 +55,6 @@
#include <curlx.h> /* from the private lib dir */
#include "getpart.h"
#include "tool_binmode.h"
/* include memdebug.h last */
#include <memdebug.h>
@ -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);

View File

@ -102,12 +102,8 @@
#endif
#include <curlx.h> /* 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 <memdebug.h>
@ -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);

View File

@ -74,8 +74,6 @@
#endif
#include <curlx.h> /* from the private lib dir */
#include "inet_pton.h"
#include "tool_binmode.h"
/* include memdebug.h last */
#include <memdebug.h>
@ -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);

View File

@ -51,7 +51,6 @@
#include <curlx.h> /* from the private lib dir */
#include "getpart.h"
#include "inet_pton.h"
/* include memdebug.h last */
#include <memdebug.h>

View File

@ -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
)

View File

@ -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)