]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
build: tidy-up MSVC CRT warning suppression macros
authorViktor Szakats <commit@vsz.me>
Tue, 21 Oct 2025 09:51:02 +0000 (11:51 +0200)
committerViktor Szakats <commit@vsz.me>
Mon, 17 Nov 2025 23:49:26 +0000 (00:49 +0100)
- curl_setup.h: replace `_CRT_SECURE_NO_DEPRECATE` with
  `_CRT_SECURE_NO_WARNINGS`, which seems to be the preferred,
  more recent macro for this. Also syncing with libssh2.
  They are equivalent for curl sources with the supported compilers.
- cmake: stop setting `_CRT_SECURE_NO_DEPRECATE` globally for examples.
- examples: suppress CRT deprecation warnings on a per-file basis.
  To make it work when compiling examples out of curl's build systems.
  Use `_CRT_SECURE_NO_WARNINGS`.
- examples: document the functions requiring `_CRT_SECURE_NO_WARNINGS`.
- examples/block_ip: delete superfluous `_CRT_SECURE_NO_WARNINGS`.
- examples/block_ip: limit `_CRT_NONSTDC_NO_DEPRECATE` to MSVC.
- examples/log_failed_transfers: fix to set `_CRT_SECURE_NO_WARNINGS`
  before headers and limit to MSVC.
- curl_setup.h: document which SDKs support `_CRT_NONSTDC_NO_DEPRECATE`.

Closes #19175

27 files changed:
docs/examples/CMakeLists.txt
docs/examples/anyauthput.c
docs/examples/block_ip.c
docs/examples/chkspeed.c
docs/examples/cookie_interface.c
docs/examples/externalsocket.c
docs/examples/fileupload.c
docs/examples/ftp-wildcard.c
docs/examples/ftpget.c
docs/examples/ftpgetinfo.c
docs/examples/ftpgetresp.c
docs/examples/ftpsget.c
docs/examples/ftpupload.c
docs/examples/ftpuploadresume.c
docs/examples/hsts-preload.c
docs/examples/http2-download.c
docs/examples/http2-serverpush.c
docs/examples/http2-upload.c
docs/examples/httpput.c
docs/examples/log_failed_transfers.c
docs/examples/sepheaders.c
docs/examples/sftpget.c
docs/examples/sftpuploadresume.c
docs/examples/simplessl.c
docs/examples/synctime.c
docs/examples/url2file.c
lib/curl_setup.h

index c86e8439fda7c97da07033f3b4a4ed95b436e870..31f280898123f06dde735b800880e70dfcd69440 100644 (file)
@@ -83,8 +83,7 @@ foreach(_target IN LISTS COMPLICATED_MAY_BUILD check_PROGRAMS _all)  # keep 'COM
     add_dependencies(curl-examples ${_target_name})
   endif()
   target_link_libraries(${_target_name} ${LIB_SELECTED} ${CURL_NETWORK_AND_TIME_LIBS} ${_more_libs})
-  target_compile_definitions(${_target_name} PRIVATE "CURL_NO_OLDIES"
-    "$<$<BOOL:${WIN32}>:WIN32_LEAN_AND_MEAN>" "$<$<BOOL:${MSVC}>:_CRT_SECURE_NO_DEPRECATE>")
+  target_compile_definitions(${_target_name} PRIVATE "CURL_NO_OLDIES" "$<$<BOOL:${WIN32}>:WIN32_LEAN_AND_MEAN>")
   set_target_properties(${_target_name} PROPERTIES OUTPUT_NAME "${_target}" PROJECT_LABEL "Example ${_target}" UNITY_BUILD OFF)
 endforeach()
 
index 12d8de76c974717d3592412aaa4e9ac65fcce015..eb5959ca226347760bcf86f8ec5e039b184993cc 100644 (file)
  * one the server supports/wants.
  * </DESC>
  */
+#ifdef _MSC_VER
+#ifndef _CRT_SECURE_NO_WARNINGS
+#define _CRT_SECURE_NO_WARNINGS  /* for fopen() */
+#endif
+#endif
+
 #include <stdio.h>
 #include <fcntl.h>
 #include <sys/types.h>
index 290f92a61e78679b271da7824a836c2d6b2d76d1..ef7056dc4340ab96beca394288a99ebe93d3262e 100644 (file)
 int main(void) { printf("Platform not supported.\n"); return 1; }
 #else
 
-#ifdef _WIN32
-#ifndef _CRT_SECURE_NO_WARNINGS
-#define _CRT_SECURE_NO_WARNINGS
-#endif
+#ifdef _MSC_VER
 #ifndef _CRT_NONSTDC_NO_DEPRECATE
-#define _CRT_NONSTDC_NO_DEPRECATE
+#define _CRT_NONSTDC_NO_DEPRECATE  /* for strdup() */
+#endif
 #endif
+
+#ifdef _WIN32
 #if !defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0600
 #undef _WIN32_WINNT
 #define _WIN32_WINNT 0x0600  /* Requires Windows Vista */
index ea71e6ad70a9a5e27f5a5accff0350ef2289f669..962180a56031793d5700d4ab22965ef6509557d5 100644 (file)
  * dd if=/dev/urandom of=file_1M.bin bs=1M count=1
  *
  */
+#ifdef _MSC_VER
+#ifndef _CRT_SECURE_NO_WARNINGS
+#define _CRT_SECURE_NO_WARNINGS  /* for ctime() */
+#endif
+#endif
 
 #include <stdio.h>
 #include <stdlib.h>
index 4eee1a605d83ea0bc994df5f1a155f1c57e12a92..a031380f12075dc4cfbdd7c8076c74621132967c 100644 (file)
  * Import and export cookies with COOKIELIST.
  * </DESC>
  */
+#ifdef _MSC_VER
+#ifndef _CRT_SECURE_NO_WARNINGS
+#define _CRT_SECURE_NO_WARNINGS  /* for _snprintf() */
+#endif
+#endif
 
 #include <stdio.h>
 #include <string.h>
index 6cab781a46577e0383a75c2d667fa6cf34350416..11fedb07a20690004d55765a1969932bca9db457 100644 (file)
@@ -26,6 +26,9 @@
  * </DESC>
  */
 #ifdef _MSC_VER
+#ifndef _CRT_SECURE_NO_WARNINGS
+#define _CRT_SECURE_NO_WARNINGS  /* for strerror() */
+#endif
 #ifndef _WINSOCK_DEPRECATED_NO_WARNINGS
 #define _WINSOCK_DEPRECATED_NO_WARNINGS  /* for inet_addr() */
 #endif
index fa9de2aa4f64765d4171368e8c5f93f6af930279..da69e4a8ead1591a4dc2b42ab733a6fe5a5f8ac9 100644 (file)
  * Upload to a file:// URL
  * </DESC>
  */
+#ifdef _MSC_VER
+#ifndef _CRT_SECURE_NO_WARNINGS
+#define _CRT_SECURE_NO_WARNINGS  /* for fopen() */
+#endif
+#endif
+
 #include <stdio.h>
-#include <curl/curl.h>
-#include <sys/stat.h>
 #include <fcntl.h>
+#include <sys/stat.h>
+
+#include <curl/curl.h>
 
 #ifdef _WIN32
 #undef stat
index 79386f98343da0e1e15247d00332a14b7bd6a3dd..3bd2f690832bf6d3e48b12747b6238f951dccf1b 100644 (file)
  * FTP wildcard pattern matching
  * </DESC>
  */
-#include <curl/curl.h>
+#ifdef _MSC_VER
+#ifndef _CRT_SECURE_NO_WARNINGS
+#define _CRT_SECURE_NO_WARNINGS  /* for fopen() */
+#endif
+#endif
+
 #include <stdio.h>
 
+#include <curl/curl.h>
+
 struct callback_data {
   FILE *output;
 };
index 391324bf64cc1b7049a261625c46e9b89ffd7a44..f57974de1fb179107ff5b5f11149c2f4fd1fe3ae 100644 (file)
  * SPDX-License-Identifier: curl
  *
  ***************************************************************************/
-#include <stdio.h>
-
-#include <curl/curl.h>
-
 /* <DESC>
  * Get a single file from an FTP server.
  * </DESC>
  */
+#ifdef _MSC_VER
+#ifndef _CRT_SECURE_NO_WARNINGS
+#define _CRT_SECURE_NO_WARNINGS  /* for fopen() */
+#endif
+#endif
+
+#include <stdio.h>
+
+#include <curl/curl.h>
 
 struct FtpFile {
   const char *filename;
index 549d3003a8a3e085ce989b96b413ae26e2ecef18..105bc608552f632fce5ca8d5bf2b6a32f15a342d 100644 (file)
  * SPDX-License-Identifier: curl
  *
  ***************************************************************************/
-#include <stdio.h>
-#include <string.h>
-
-#include <curl/curl.h>
-
 /* <DESC>
  * Checks a single file's size and mtime from an FTP server.
  * </DESC>
  */
+#ifdef _MSC_VER
+#ifndef _CRT_SECURE_NO_WARNINGS
+#define _CRT_SECURE_NO_WARNINGS  /* for fopen() */
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+#include <curl/curl.h>
 
 static size_t throw_away(void *ptr, size_t size, size_t nmemb, void *data)
 {
index 6dce4ab7496ae547017903be80c11d8059dfd66b..eec727bf943baef3e0a95d0a42a8048e475968a8 100644 (file)
  * SPDX-License-Identifier: curl
  *
  ***************************************************************************/
-#include <stdio.h>
-
-#include <curl/curl.h>
-
 /* <DESC>
  * Similar to ftpget.c but also stores the received response-lines
  * in a separate file using our own callback!
  * </DESC>
  */
+#ifdef _MSC_VER
+#ifndef _CRT_SECURE_NO_WARNINGS
+#define _CRT_SECURE_NO_WARNINGS  /* for fopen() */
+#endif
+#endif
+
+#include <stdio.h>
+
+#include <curl/curl.h>
+
 static size_t write_response(void *ptr, size_t size, size_t nmemb, void *data)
 {
   FILE *writehere = (FILE *)data;
index f39046885e4f9883284815cf0b7f47b1b9989e23..22c94b8e936331a6b64b558ca3b673deaa27b4f0 100644 (file)
  * SPDX-License-Identifier: curl
  *
  ***************************************************************************/
-
-#include <stdio.h>
-
-#include <curl/curl.h>
-
 /* <DESC>
  * Get a single file from an FTPS server.
  * </DESC>
  */
+#ifdef _MSC_VER
+#ifndef _CRT_SECURE_NO_WARNINGS
+#define _CRT_SECURE_NO_WARNINGS  /* for fopen() */
+#endif
+#endif
+
+#include <stdio.h>
+
+#include <curl/curl.h>
 
 struct FtpFile {
   const char *filename;
index b334ad3273173e4e9d720848ec5e9fe7a953766b..0a241db21c939d98ccc22354d2ab5061145c46ee 100644 (file)
  * SPDX-License-Identifier: curl
  *
  ***************************************************************************/
+/* <DESC>
+ * Performs an FTP upload and renames the file just after a successful
+ * transfer.
+ * </DESC>
+ */
+#ifdef _MSC_VER
+#ifndef _CRT_SECURE_NO_WARNINGS
+#define _CRT_SECURE_NO_WARNINGS  /* for fopen(), strerror() */
+#endif
+#endif
+
 #include <stdio.h>
 #include <string.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/types.h>
 
 #include <curl/curl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <errno.h>
+
 #ifdef _WIN32
 #include <io.h>
 #undef stat
 #include <unistd.h>
 #endif
 
-/* <DESC>
- * Performs an FTP upload and renames the file just after a successful
- * transfer.
- * </DESC>
- */
-
 #define LOCAL_FILE      "/tmp/uploadthis.txt"
 #define UPLOAD_FILE_AS  "while-uploading.txt"
 #define REMOTE_URL      "ftp://example.com/"  UPLOAD_FILE_AS
index b86c23ab8672c67c3aade25e5011a40f8058b76d..a9af3f12cd56d541b6e44ad159fb2abcbf9ca2c0 100644 (file)
  * Upload to FTP, resuming failed transfers. Active mode.
  * </DESC>
  */
+#ifdef _MSC_VER
+#ifndef _CRT_SECURE_NO_WARNINGS
+#define _CRT_SECURE_NO_WARNINGS  /* for fopen(), sscanf() */
+#endif
+#endif
 
 #include <stdlib.h>
 #include <stdio.h>
+
 #include <curl/curl.h>
 
 /* parse headers for Content-Length */
index a775ec9778a77095d15e26b073941079d14deae0..ad71c62cad969e0530c55bd2f9ae8dd843aeed96 100644 (file)
  * Preload domains to HSTS
  * </DESC>
  */
+#ifdef _MSC_VER
+#ifndef _CRT_SECURE_NO_WARNINGS
+#define _CRT_SECURE_NO_WARNINGS  /* for strcpy() */
+#endif
+#endif
+
 #include <stdio.h>
 #include <string.h>
+
 #include <curl/curl.h>
 
 struct entry {
index e58742e59c9697ccec0c02143d3e2f36d906eeef..2caeaba512ee5cb2f0466611149b7e1ff2aee832 100644 (file)
  * Multiplexed HTTP/2 downloads over a single connection
  * </DESC>
  */
+#ifdef _MSC_VER
+#ifndef _CRT_SECURE_NO_WARNINGS
+#define _CRT_SECURE_NO_WARNINGS  /* for _snprintf(), fopen(), strerror() */
+#endif
+#endif
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <errno.h>
 
-#if defined(_MSC_VER) && (_MSC_VER < 1900)
-#define snprintf _snprintf
-#endif
-
 /* curl stuff */
 #include <curl/curl.h>
 
 #define CURLPIPE_MULTIPLEX 0L
 #endif
 
+#if defined(_MSC_VER) && (_MSC_VER < 1900)
+#define snprintf _snprintf
+#endif
+
 struct transfer {
   FILE *out;
   CURL *curl;
index 8c43075b937d767ee0d932e681ebf7e1846cd645..2664158a1f04dddfd6af9a7cace947bb2d134cfa 100644 (file)
  * HTTP/2 server push
  * </DESC>
  */
+#ifdef _MSC_VER
+#ifndef _CRT_SECURE_NO_WARNINGS
+#define _CRT_SECURE_NO_WARNINGS  /* for _snprintf(), fopen() */
+#endif
+#endif
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 /* curl stuff */
 #include <curl/curl.h>
 
-#if defined(_MSC_VER) && (_MSC_VER < 1900)
-#define snprintf _snprintf
-#endif
-
 #ifndef CURLPIPE_MULTIPLEX
 #error "too old libcurl, cannot do HTTP/2 server push!"
 #endif
 
+#if defined(_MSC_VER) && (_MSC_VER < 1900)
+#define snprintf _snprintf
+#endif
+
 static FILE *out_download;
 
 static void dump(const char *text, unsigned char *ptr, size_t size, char nohex)
index 0365d93bc5ecedb8f0a8edf90ca2f75ce5e43cdd..e546ded162cfdc73af977e3b966842044af67f2b 100644 (file)
  * Multiplexed HTTP/2 uploads over a single connection
  * </DESC>
  */
+#ifdef _MSC_VER
+#ifndef _CRT_SECURE_NO_WARNINGS
+#define _CRT_SECURE_NO_WARNINGS  /* for '_snprintf(), fopen(), localtime(),
+                                    strerror() */
+#endif
+#endif
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
 #endif
 
+/* curl stuff */
+#include <curl/curl.h>
+
+#ifndef CURLPIPE_MULTIPLEX
+/* This little trick makes sure that we do not enable pipelining for libcurls
+   old enough to not have this symbol. It is _not_ defined to zero in a recent
+   libcurl header. */
+#define CURLPIPE_MULTIPLEX 0L
+#endif
+
 #ifdef _WIN32
 #undef stat
 #define stat _stat
 #define snprintf _snprintf
 #endif
 
-/* curl stuff */
-#include <curl/curl.h>
-
-#ifndef CURLPIPE_MULTIPLEX
-/* This little trick makes sure that we do not enable pipelining for libcurls
-   old enough to not have this symbol. It is _not_ defined to zero in a recent
-   libcurl header. */
-#define CURLPIPE_MULTIPLEX 0L
-#endif
-
 #ifdef _MSC_VER
 #define gettimeofday(a, b) my_gettimeofday((a), (b))
 static int my_gettimeofday(struct timeval *tp, void *tzp)
index a7fac75b4a2ffd01a3905cc99b75d4de8504c853..38fb641f52cb9924f7cb5ef43df4eb50de58d1bf 100644 (file)
  * HTTP PUT with easy interface and read callback
  * </DESC>
  */
+#ifdef _MSC_VER
+#ifndef _CRT_SECURE_NO_WARNINGS
+#define _CRT_SECURE_NO_WARNINGS  /* for fopen() */
+#endif
+#endif
+
 #include <stdio.h>
 #include <fcntl.h>
 #include <sys/stat.h>
index 23208d232caf7521b318ccb9d84c8e132c29404a..a0d209ffc3956cd3c7abff2cd9d1222baa9a0567 100644 (file)
  * The transfer's log is written to disk only if the transfer fails.
  *
  */
+#ifdef _MSC_VER
+#ifndef _CRT_SECURE_NO_WARNINGS
+#define _CRT_SECURE_NO_WARNINGS  /* for fopen(), strerror(), vsnprintf() */
+#endif
+#endif
 
 #include <errno.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <limits.h>
 #include <string.h>
+
 #include <curl/curl.h>
 
 #ifdef _WIN32
-#ifndef _CRT_SECURE_NO_WARNINGS
-#define _CRT_SECURE_NO_WARNINGS
-#endif
 #include <windows.h>
 #define strcasecmp _stricmp
 #define strncasecmp _strnicmp
index 85938dc223e4c57b9be065bfa9b1da3ac4edefb6..613bc26a3c7c7ec36c5a880fce1f2510092e772a 100644 (file)
  * Simple HTTP GET that stores the headers in a separate file
  * </DESC>
  */
+#ifdef _MSC_VER
+#ifndef _CRT_SECURE_NO_WARNINGS
+#define _CRT_SECURE_NO_WARNINGS  /* for fopen() */
+#endif
+#endif
+
 #include <stdio.h>
 #include <stdlib.h>
 
index 5eaf3416e8de984cf35815946a72303cfbd160b6..287d5b253efb617275a3eaf37d33dcc6fef24e25 100644 (file)
  * Gets a file using an SFTP URL.
  * </DESC>
  */
+#ifdef _MSC_VER
+#ifndef _CRT_SECURE_NO_WARNINGS
+#define _CRT_SECURE_NO_WARNINGS  /* for fopen() */
+#endif
+#endif
 
 #include <stdio.h>
 
index 72ae41382c844db321e2eca3d498594701cb7deb..84bb42554939633b560fd2fe08daa77c79adf701 100644 (file)
  * Upload to SFTP, resuming a previously aborted transfer.
  * </DESC>
  */
+#ifdef _MSC_VER
+#ifndef _CRT_SECURE_NO_WARNINGS
+#define _CRT_SECURE_NO_WARNINGS  /* for fopen() */
+#endif
+#endif
 
 #include <stdlib.h>
 #include <stdio.h>
+
 #include <curl/curl.h>
 
 /* read data to upload */
index cf5477f94576ca44c190e69e89ea7838cbd18f90..a41a9ac29e6a065a102fc67be809e8d3ccb979f3 100644 (file)
  * Shows HTTPS usage with client certs and optional ssl engine use.
  * </DESC>
  */
+#ifdef _MSC_VER
+#ifndef _CRT_SECURE_NO_WARNINGS
+#define _CRT_SECURE_NO_WARNINGS  /* for fopen() */
+#endif
+#endif
+
 #include <stdio.h>
 
 #include <curl/curl.h>
index 43fe5d312eca71163f9d562f8530bc04e7f5ba63..a9a746c30a20506ff9812e35b8f870350240a06e 100644 (file)
  * This software synchronises your computer clock only when you issue
  * it with --synctime. By default, it only display the webserver's clock.
  */
+#ifdef _MSC_VER
+#ifndef _CRT_SECURE_NO_WARNINGS
+#define _CRT_SECURE_NO_WARNINGS  /* for _snprintf(), fopen(), gmtime(),
+                                    localtime(), sscanf() */
+#endif
+#endif
 
 #include <stdio.h>
 
index a0523f62db60cd28df73a8bc399c29ca901612fe..b4cbe1c7eb22c5f92cb891a9c6b9a17ea560fbdc 100644 (file)
  * Download a given URL into a local file named page.out.
  * </DESC>
  */
+#ifdef _MSC_VER
+#ifndef _CRT_SECURE_NO_WARNINGS
+#define _CRT_SECURE_NO_WARNINGS  /* for fopen() */
+#endif
+#endif
+
 #include <stdio.h>
 #include <stdlib.h>
 
index bf7030f693e10777a5c9dd3f64c10c8540f01fbc..15688aab2cd4edbce27de031c279cead055eb71d 100644 (file)
 /* Disable Visual Studio warnings: 4127 "conditional expression is constant" */
 #pragma warning(disable:4127)
 /* Avoid VS2005 and upper complaining about portable C functions. */
-#ifndef _CRT_NONSTDC_NO_DEPRECATE
-#define _CRT_NONSTDC_NO_DEPRECATE  /* for strdup(), write(), etc. */
-#endif
-#ifndef _CRT_SECURE_NO_DEPRECATE
-#define _CRT_SECURE_NO_DEPRECATE  /* for fopen(), getenv(), etc. */
+#ifndef _CRT_NONSTDC_NO_DEPRECATE  /* mingw-w64 v2+. MS SDK ~10+/~VS2017+. */
+#define _CRT_NONSTDC_NO_DEPRECATE  /* for close(), fileno(), strdup(),
+                                      unlink(), etc. */
+#endif
+#ifndef _CRT_SECURE_NO_WARNINGS
+#define _CRT_SECURE_NO_WARNINGS  /* for __sys_errlist, __sys_nerr, _wfopen(),
+                                    _wopen(), freopen(), getenv(), gmtime(),
+                                    sprintf(), strcpy(), wcscpy(), wcsncpy()
+                                    in tests: localtime(), open(), sscanf() */
 #endif
 #endif /* _MSC_VER */