summaryrefslogtreecommitdiff
path: root/docs/examples
AgeCommit message (Collapse)Author
21 hourscmake: optimize building examples in CIHEADorigin/masterorigin/HEADmasterfor-upstreamViktor Szakats
In CI we want to ensure that examples build cleanly, but we don't want to actually run them there. Meaning it's enough to just compile, but not link them in CI. Saving time up to 2-4x (MSVC), and disk space up to 1.2GB (or 8-70x). Add a new cmake target that compiles all examples without linking them into runnable binaries. Keep a full build for a single example to test if it links correctly. Also: - CI: switch over all `curl-examples` targets to `curl-examples-build` - GHA/linux-old: build examples in one of the cmake builds. Result highlights: Job | Bef. | Bef. | Aft. | Aft. | :------------------ | ---: | ----: | ---: |----: | cygwin | 15s | 9MB | 10s | 1MB | msys | 13s | 8MB | 7s | 1MB | dl-mingw 15 | 39s | 113M | 34s | 2MB | dl-mingw 9.5.0 | 49s | 115MB | 42s | 2MB | dl-mingw 7.3.0 | 19s | 113MB | 14s | 2MB | dl-mingw 6.4.0 | 9s | 12MB | 7s | 4MB | Linux cross | 19s | 28MB | 19s | 2MB | MSVC UWP | 65s | 374MB | 9s | 17MB | MSVC x64 | 22s | 846MB | 9s | 17MB | VS2010 | 48s | 105MB | 15s | 9MB | VS2022 clang-cl | 195s | 1.2GB | 51s | 20MB | iOS Xcode | 8s | | 5s | | macOS LibreSSL | 16s | | 11s | | Linux aws-lc | 3s | | 1s | | Follow-up to dda251ef1020da07dc4640a225e01051cb977535 #18232 Closes #18209
24 hourscmake: define `WIN32_LEAN_AND_MEAN` for examplesViktor Szakats
To build faster. Also syncing with autotools. Job | Before | After | :------------------ | -----: | ----: | dl-mingw 15 | 45s | 39s | dl-mingw 9.5.0 | 72s | 49s | dl-mingw 7.3.0 | 29s | 19s | dl-mingw 6.4.0 | 20s | 9s | Linux cross | 30s | 19s | MSVC UWP | 77s | 65s | MSVC x64 | 27s | 22s | VS2010 | 61s | 48s | VS2022 clang-cl | 226s | 195s | It also happens to fix what looks like a Windows SDK header bug seen with VS2019 on AppVeyor CI: ``` C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\winscard.h(1422,1): error C2220: the following warning is treated as an error (compiling source file C:\projects\curl\docs\examples\block_ip.c) C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\winscard.h(1422,1): warning C5031: #pragma warning(pop): likely mismatch, popping warning state pushed in different file (compiling source file C:\projects\curl\docs\examples\block_ip.c) C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\winioctl.h : message : #pragma warning(push) (compiling source file C:\projects\curl\docs\examples\block_ip.c) C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\windows.h(254,17): warning C5031: #pragma warning(pop): likely mismatch, popping warning state pushed in different file (compiling source file C:\projects\curl\docs\examples\block_ip.c) C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\winscard.h : message : #pragma warning(push) (compiling source file C:\projects\curl\docs\examples\block_ip.c) C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\winsock2.h(4221,1): warning C5031: #pragma warning(pop): likely mismatch, popping warning state pushed in different file (compiling source file C:\projects\curl\docs\examples\block_ip.c) C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\windows.h : message : #pragma warning(push) (compiling source file C:\projects\curl\docs\examples\block_ip.c) C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\winsock2.h : warning C5032: detected #pragma warning(push) with no corresponding #pragma warning(pop) (compiling source file C:\projects\curl\docs\examples\block_ip.c) ``` Ref: https://ci.appveyor.com/project/curlorg/curl/builds/52531106/job/66b6r098pll2le70#L312 Closes #18232
8 daysexamples: drop long cast for `CURLALTSVC_*`Viktor Szakats
Follow-up to d45b85d79198a0259123923a6aa186ded2aaca6c #18063
8 daysCURLOPT: bump remaining macros to `long`Viktor Szakats
This patch bumps the size of these macros from `int` to `long`, while keeping their actual values the same. It may cause incompatibilities in user code, requiring the bump of holder variables and/or adding casts: - CURLGSSAPI_DELEGATION_FLAG - CURLGSSAPI_DELEGATION_NONE - CURLGSSAPI_DELEGATION_POLICY_FLAG - CURLMIMEOPT_FORMESCAPE - CURLSSH_AUTH_AGENT - CURLSSH_AUTH_ANY - CURLSSH_AUTH_DEFAULT - CURLSSH_AUTH_GSSAPI - CURLSSH_AUTH_HOST - CURLSSH_AUTH_KEYBOARD - CURLSSH_AUTH_NONE - CURLSSH_AUTH_PASSWORD - CURLSSH_AUTH_PUBLICKEY Also: - keep existing cast within the documentation to make sure it applies to older curl versions as well. Closes #18134
13 dayscmake: omit linking duplicate/unnecessary libs to tests & examplesViktor Szakats
Before this patch we explicitly linked the full list of libcurl dependency libs to tests and examples via `CURL_LIBS`. This was redundant, because test and example code do not directly use these dependency libs and for indirect use they are implicitly passed via libcurl as needed. After this patch, tests and examples only link explicitly to system libs (e.g. socket). Also bringing it closer to how `./configure` does this. Borrow the variable name `CURL_NETWORK_AND_TIME_LIBS` from `./configure`. However, its content is not exactly the same. With cmake it also holds `pthread`, but doesn't hold AmiSSL. Closes #17696
13 daysCURLOPT: drop redundant `long` castsViktor Szakats
Also: - CURLOPT_HSTS_CTRL.md: sync macro definitions with `curl/curl.h`. Perhaps it'd be better to delete copies like this? - keep existing casts within the documentation to make sure it applies to older curl versions as well. - CURLOPT_IPRESOLVE.md: re-add a long cast to man page, for consistency with the above. Closes #17791
13 daysscripts: enable strict warnings in Perl where missing, fix falloutsViktor Szakats
- add 'use warnings' and 'use strict' where missing from Perl scripts. - fix 'Use of uninitialized value'. - fix missing declarations. - test1140.pl: fix 'Possible precedence issue with control flow operator'. - fix other misc issues. Most actual errors found during this PR were fixed and merged via separate PRs. Likely there are remaining warnings not found and fixed in this PR. Closes #17877
13 daystidy-up: move literal to the right side of comparisonsViktor Szakats
Closes #17876
2025-07-25tidy-up: more whitespace/indent, commentsViktor Szakats
Also a couple of minor formatting updates in the root `CMakeLists.txt`. One swap to `#ifdef`. Closes #17929
2025-07-21GHA/checksrc: expand spellcheck, fix issues foundViktor Szakats
- codespell: break logic out into its own runnable script. Allowing to run it on local machines. - codespell: install via `pip`, bump to latest version. - codespell: show version number in CI log. - codespell: drop no longer needed word exception: `msdos`. - codespell: include all curl source tree, except `packages` and `winbuild`. Drop an obsolete file exclusion. - add new spellchecker job using the `typos` tool. It includes the codespell dictionary and a couple more. Use linuxbrew to install it. This takes 10 seconds, while installing via `cargo` from source would take over a minute. - codespell: introduce an inline ignore filter compatible with `cspell` Make `typos` recognize it, too. Move single exceptions inline. Fix new typos found. Also rename variables and words to keep spellchecking exceptions at minumum. This involves touching some tests. Also switch base64 strings to `%b64[]` to avoid false positives. Ref: https://github.com/crate-ci/typos/blob/master/docs/reference.md Ref: https://github.com/codespell-project/codespell?tab=readme-ov-file#inline-ignore Ref: https://github.com/codespell-project/codespell/issues/1212#issuecomment-1721152455 Ref: https://cspell.org/docs/Configuration/document-settings Closes #17905
2025-07-08examples: beef up websocket.cStefan Eissing
Make `docs/examples/websocket.c more complete by showing how to handle CURLE_AGAIN return codes and incomplete sends. Reported-by: Markus Unterwaditzer Fixes #13288 Closes #17860
2025-07-07curl.h: make CURL_IPRESOLVE_* symbols defined as longsChristian Hesse
... as `curl_easy_setopt()` expects them to be. Also remove some casting workarounds. Closes #17790
2025-06-28cmake: fix generator expression in docs/examplesViktor Szakats
To pass the MSVC-specific macro to MSVC only. Closes #17767
2025-06-27checksrc: reduce exceptions, apply again to curlxViktor Szakats
- tests/libtest: move exception to `stub_gssapi.h`. - tests/libtest: move remaining exception to `testtrace.c`. - tests/server: drop obsolete exception. - docs/examples: move `BANNEDFUNC` exceptions to local files (3 lines). - docs/examples: move `ERRNOVAR` exception to `ephiperfifo.c`. - docs/examples: drop `typedef struct` (8 files). - lib/curlx: add `.checksrc` with banned funcs copied from lib. - checksrc: ban `strncpy`, `strtok_r`, `strtoul` by default. Drop local bans. Add exception for `strtoul` to `tests/server'. - lib, src: sync banned funcs. Also: - REUSE: drop `stunnel.pem`, it no longer exists. - docs/examples: formatting. - docs/examples: simplify some `sizeof()`s. Closes #17764
2025-06-19autotools: simplify configuration in tests, examplesViktor Szakats
- GHA/windows: make a mingw autotools build static only. - GHA/windows: fix a CI script issue with the build above. - src: fix to pass `LIBCURL_PC_LIBS_PRIVATE` instead of `LINKFLAGS`. This makes the libs propagate to tunits, making the local hack there unnecessary. `LINKFLAGS` had this single use in the repo, and it was empty in local tests. - tests: drop passing redundant `LIBCURL_PC_LDFLAGS_PRIVATE`. - tests: drop redundant target name from config variables. - examples, tests/client: drop `LIBDIR` temp variables with single uses. - examples, tests: formatting to sync `Makefile.am` scripts with each other. Closes #17661
2025-06-17cmake: drop passing redundant `CURL_STATICLIB` in examples and clientsViktor Szakats
It's set implicitly via libcurl. Closes #17655
2025-06-16build: sync tests unity builds between cmake and autotoolsViktor Szakats
Instead of relying on CMake's built-in unity feature, use `mk-unity.pl`, as already done with autotools. It simplified the build, shortens logs and makes debugging easier because of the fewer build variations. It also allows testing / fixing with cmake and those automatically apply to autotools builds too. cmake builds can be much-much faster, esp. when working the builds themselves. It also enables "unity" in old cmake versions. Basically every test target is a single generated .c source. Also: - drop a `lib` unity workaround for libtests with autotools after fixing the issue in libtests itself. It drops a few exceptions and makes libcurl build faster (in autotools unity). - fix another `lib` autotools unity issue and drop the workaround for it from `mk-unity.pl`. `srcdir` was missing from the header path. - simplify `mk-unity.pl` command-lines, drop exclusions. Follow-up to 2c27a67daa1b76859c18d63e4e1f528db05b5e13 #17590 Closes #17628
2025-06-14tests: always make bundles, adapt build and testsViktor Szakats
Make test bundles the default. Drop non-bundle build mode. Also do all the optimizations and tidy-ups this allows, simpler builds, less bundle exceptions, streamlined build mechanics. Also rework the init/deinit macro magic for unit tests. The new method allows using unique init/deinit function names, and calling them with arguments. This is in turn makes it possible to reduce the use of global variables. Note this drop existing build options `-DCURL_TEST_BUNDLES=` from cmake and `--enable-test-bundles` / `--disable-test-bundles` from autotools. Also: - rename test entry functions to have unique names: `test_<testname>` This removes the last exception that was handled in the generator. - fix `make dist` to not miss test sources with test bundles enabled. - sync and merge `tests/mk-bundle.pl` into `scripts/mk-unity.pl`. - mk-unity.pl: add `--embed` option and use it when `CURL_CLANG_TIDY=ON` to ensure that `clang-tidy` does not miss external test C sources. (because `clang-tidy` ignores code that's #included.) - tests/unit: drop no-op setup/stop functions. - tests: reduce symbol scopes, global macros, other fixes and tidy-ups. - tool1621: fix to run, also fix it to pass. - sockfilt: fix Windows compiler warning in certain unity include order, by explicitly including `warnless.h`. Follow-up to 6897aeb10561b55c6659866fc0518dd67422f267 #17468 Closes #17590
2025-06-05docs/examples: add ftp-delete.cDaniel Stenberg
To show how to delete a single file after a transfer Closes #17540
2025-05-30spelling: 'a' vs 'an'Daniel Stenberg
Closes #17487
2025-05-22windows: fix builds targeting WinXP, test it in CIViktor Szakats
- appveyor: make a job target Windows XP. - examples/block_ip: force this specific example to target Vista to make it compile when building curl for Windows XP. Fixing: ``` docs\examples\block_ip.c(157): warning C4013: 'inet_pton' undefined; assuming extern returning int docs\examples\block_ip.c(272): warning C4013: 'inet_ntop' undefined; assuming extern returning int ``` Ref: https://ci.appveyor.com/project/curlorg/curl/builds/52102142/job/2ajdluhc20r4gmmw#L530 Cherry-picked from #17413 Closes #17415
2025-05-19checksrc: avoid extra runs in CI, enable more check locally, fix falloutsViktor Szakats
To avoid redundant work in CI and to avoid a single checksrc issue make all autotools jobs fail. After this patch checksrc issues make fail the checksrc job, the `dist / verify-out-of-tree-autotools-debug`, `dist / maketgz-and-verify-in-tree` jobs and the fuzzer job (if run). Of these, the `dist` jobs replicate local builds, also testing the build logic. Also add a script to check the complete local repository, optionally with the build tree to verify generated C files. Also: - automatically run checksrc in subdirectories having a `checksrc` target. (examples, OS400, tests http/client, unit and tunit) - tests/libtest: make sure to run `checksrc` on generated `lib1521.c`. (requires in-tree autotools build.) - tests: run `checksrc` on targets also for non-`DEBUGBUILD` builds. It ensures to check `lib1521.c` in CI via job `dist / maketgz-and-verify-in-tree`. - src: drop redundant `$(builddir)` in autotools builds. - scripts: add `checksrc-all.sh` script to check all C sources and the build directory as an option. - use the above from CI, also make it verify all generated sources. - silence `checksrc` issues in generated C sources. - checksrc: add `-v` option to enable verbose mode. - checksrc: make verbose mode show checked filename and fix to only return error on failure. - make sure that generated C files pass `checksrc`. Assisted-by: Daniel Stenberg Closes #17376
2025-04-23lib/src/docs/test: improve curl_easy_setopt() callsDaniel Stenberg
Fix invokes where the argument was not the correct type. Closes #17160
2025-03-13core: stop redefining `E*` macros on Windows, map `EACCES`, related fixesViktor Szakats
Before this patch, standard `E*` errno codes were redefined on Windows, onto matching winsock2 `WSA*` error codes, which have different values. This broke uses where using the `E*` value in non-socket context, or other places expecting a POSIX `errno`, e.g. file I/O, threads, IDN or interfacing with dependencies. Fix it by introducing a curl-specific `SOCKE*` set of macros that map to `WSA*` on Windows and standard POSIX codes on other platforms. Then verify and update the code to use `SOCKE*` or `E*` macro depending on context. - Add `SOCKE*` macros that map to either winsock2 or POSIX error codes. And use them with `SOCKERRNO` or in contexts requiring platform-dependent socket error codes. This fixes `E*` uses which were supposed be POSIX values, not `WSA*` socket errors, on Windows: - lib/curl_multibyte.c - lib/curl_threads.c - lib/idn.c - lib/vtls/gtls.c - lib/vtls/rustls.c - src/tool_cb_wrt.c - src/tool_dirhie.c - Ban `E*` codes having a `SOCKE*` mapping, via checksrc. Authored-by: Daniel Stenberg - Add exceptions for `E*` codes used in file I/O, or other contexts requiring POSIX error codes. Also: - ftp: fix missing `SOCKEACCES` mapping for Windows. - add `SOCKENOMEM` for `Curl_getaddrinfo()` via `asyn-thread.c`. - tests/server/sockfilt: fix to set `SOCKERRNO` in local `select()` override on Windows. - lib/inet_ntop: fix to return `WSAEINVAL` on Windows, where `ENOSPC` is used on other platforms. To simulate Windows' built-in `inet_ntop()`, as tested on a Win10 machine. Note: - WINE returns `STATUS_INVALID_PARAMETER` = `0xC000000D`. - Microsoft documentation says it returns `WSA_INVALID_PARAMETER` (= `ERROR_INVALID_PARAMETER`) 87: https://learn.microsoft.com/windows/win32/api/ws2tcpip/nf-ws2tcpip-inet_ntop#return-value - lib/inet_ntop: drop redundant `CURL_SETERRNO(ENOSPC)`. `inet_ntop4()` already sets it before returning `NULL`. - replace stray `WSAEWOULDBLOCK` with `USE_WINSOCK` macro to detect winsock2. - move existing `SOCKE*` mappings from `tests/server` to `curl_setup_once.h`. - add missing `EINTR`, `EINVAL` constants for WinCE. Follow-up to abf80aae384319ef9b19ffbd0d69a1fbe7421f1f #16612 Follow-up to d69425ed7d0918aceddd96048b146a9df85638ec #16615 Bug: https://github.com/curl/curl/pull/16553#issuecomment-2704679377 Closes #16621
2025-03-01examples: prefer `return` over `exit()` (cont.)Viktor Szakats
Some of these calls were not in callbacks. These examples may leak handles. Also fix some whitespace. Follow-up to 08c7c937dc0dbd1f92f73360e5d8b2bb2ee6afa8 #16507 Closes #16524
2025-02-28tidy-up: prefer `return` over `exit()`, fix falloutsViktor Szakats
To avoid breaking the control flow and align to majority of code already using `return`. `exit()` has the side-effect of suppressing leak detection in cases. Fix fallouts detected after switching to `return`. - configure: - fix `getaddrinfo` run test to call `freeaddrinfo()` to pacify ASAN, and call `WSACleanup()` to deinit winsock2. - fix `getifaddrs` run test to call `freeifaddrs()` to pacify ASAN. - tests/server: - setup `atexit(win32_cleanup)` via `win32_init()`. - return 2 instead of 1 on winsock2 init failures. - sws: goto cleanup instead of `exit()` in `http_connect()`. Follow-up to 02dfe7193704817184b522888ffa926e6b73f648 #7235 - tests/client/http: - cleanup memory to pacify ASAN in `h2-upgrade-extreme`, `tls-session-reuse`. - examples: - block_ip: fix memory leak reported by CI. - http2-upload: avoid handle leaks. Untouched `exit()` calls, made from callbacks: - docs/examples: ephiperfifo.c, ghiper.c, hiperfifo.c - tests/libtest: lib582.c, lib655.c, lib670.c - tests/server: tftpd.c Closes #16507
2025-02-21build: add Windows CE / CeGCC support, with CI jobsViktor Szakats
Make it possible to build curl for Windows CE using the CeGCC toolchain. With both CMake and autotools, including tests and examples, also in CI. The build configuration is the default one with Schannel enabled. No 3rd-party dependencies have been tested. Also revive old code to make Schannel build with Windows CE, including certificate verification. Builds have been throughougly tested. But, I've made no functional tests for this PR. Some parts (esp. file operations, like truncate and seek) are stubbed out and likely broken as a result. Test servers build, but they do not work on Windows CE. This patch substitutes `fstat()` calls with `stat()`, which operate on filenames, not file handles. This may or may not work and/or may not be secure. About CeGCC: I used the latest available macOS binary build v0.59.1 r1397 from 2009, in native `mingw32ce` build mode. CeGCC is in effect MinGW + GCC 4.4.0 + old/classic-mingw Windows headers. It targets Windows CE v3.0 according to its `_WIN32_WCE` value. It means this PR restores portions of old/classic-mingw support. It makes the Windows CE codepath compatible with GCC 4.4.0. It also adds workaround for CMake, which cannot identify and configure this toolchain out of the box. Notes: - CMake doesn't recognize CeGCC/mingw32ce, necessitating tricks as seen with Amiga and MS-DOS. - CMake doesn't set `MINGW` for mingw32ce. Set it and `MINGW32CE` manually as a helper variable, in addition to `WINCE` which CMake sets based on `CMAKE_SYSTEM_NAME`. - CMake fails to create an implib for `libcurl.dll`, due to not recognizing the platform as a Windowsy one. This patch adds the necessary workaround to make it work. - headers shipping with CeGCC miss some things curl needs for Schannel support. Fixed by restoring and renovating code previously deleted old-mingw code. - it's sometime non-trivial to figure out if a fallout is WinCE, mingw32ce, old-mingw, or GCC version-specific. - WinCE is always Unicode. With exceptions: no `wmain`, `GetProcAddress()`. - `_fileno()` is said to convert from `FILE *` to `void *` which is a Win32 file `HANDLE`. (This patch doesn't use this, but with further effort it probably could be.) https://stackoverflow.com/questions/3989545/how-do-i-get-the-file-handle-from-the-fopen-file-structure - WinCE has no signals, current directory, stdio/CRT file handles, no `_get_osfhandle()`, no `errno`, no `errno.h`. Some of this stuff is standard C89, yet missing from this platform. Microsoft expects Windows CE apps to use Win32 file API and `FILE *` exclusively. - revived CeGCC here (not tested for this PR): https://building.enlyze.com/posts/a-new-windows-ce-x86-compiler-in-2024/ On `UNDER_CE` vs. `_WIN32_WCE`: (This patch settled on `UNDER_CE`) - A custom VS2008 WinCE toolchain does not set any of these. The compiler binaries don't contain these strings, and has no compiler option for targeting WinCE, hinting that a vanilla toolchain isn't setting any of them either. - `UNDER_CE` is automatically defined by the CeGCC compiler. https://cegcc.sourceforge.net/docs/details.html - `UNDER_CE` is similar to `_WIN32`, except it's not set automatically by all compilers. It's not supposed to have any value, like a version. (Though e.g. OpenSSL sets it to a version) - `_WIN32_WCE` is the CE counterpart of the non-CE `_WIN32_WINNT` macro. That does return the targeted Windows CE version. - `_WIN32_WCE` is not defined by compilers, and relies on a header setting it to a default, or the build to set it to the desired target version. This is also how `_WIN32_WINNT` works. - `_WIN32_WCE` default is set by `windef.h` in CeGCC. - `_WIN32_WCE` isn't set to a default by MSVC Windows CE headers (the ones I checked at least). - CMake sets `_WIN32_WCE=<ver>`, `UNDER_CE`, `WINCE` for MSVC WinCE. - `_WIN32_WCE` seems more popular in other projects, including CeGCC itself. `zlib` is a notable exception amongst curl dependencies, which uses `UNDER_CE`. - Since `_WIN32_WCE` needs "certain" headers to have it defined, it's undefined depending on headers included beforehand. - `curl/curl.h` re-uses `_WIN32_WCE`'s as a self-guard, relying on its not-(necessarily)-defined-by-default property: https://github.com/curl/curl/blob/25b445e4796bcbf9f842de686a8c384b30f6c2a2/include/curl/curl.h#L77 Toolchain downloads: - Windows: https://downloads.sourceforge.net/cegcc/cegcc/0.59.1/cegcc_mingw32ce_cygwin1.7_r1399.tar.bz2 - macOS Intel: https://downloads.sourceforge.net/cegcc/cegcc/0.59.1/cegcc_mingw32ce_snowleopard_r1397.tar.bz2 Closes #15975
2025-02-14tidy-up: delete, comment or scope C macros reported unusedViktor Szakats
To reduce the number `-Wunused-macro` compiler warnings: - delete unused macros. - comment out unused macro that are part of a set. - move macros into the scope they are used. This may be useful to enable by default, but there are tricky cases that I didn't manage to fix and paused the effort. E.g. internal features checks in `openssl.c`. There is more, once those are fixed. Closes #16279
2025-02-09docs: use valid example domain namesTerence Eden
Replace .site domains and domain.com with valid example domains. Fixes #16269 Closes #16270
2025-01-28gitignore: restore explicit lists and fix themViktor Szakats
Range matches are not supported with `+`: https://git-scm.com/docs/gitignore Also sync `.gitignore` file lists with source files and alphasort them. Follow-up to 5c31c2e6709979db4c949b7cd6a3cf88dec4e1aa #16093 Reported-by: Stefan Eissing Fixes #16112 Fixes #16115 Closes #16116
2025-01-27tidy-up: `.gitignore` lines mostlyViktor Szakats
- `.gitignore`: delete, dedupe and move rules upwards. Ref: 6389ba87b8e5cf74b70c54beab3498dfc773364e #13311 - `.gitignore`: fix generated test sources. Follow-up to 71cf0d1fca9e1f53524e1545ef0c08d174458d80 #14772 - `.gitignore`: replace exe listings with a wildcard. - lib: move `setup-*.h` from `EXTRA_DIST` to `CURL_HFILES`. - `makedebug.bat`: uppercase an argument to match docs. - GHA/non-native: delete stray env. Follow-up to 12a6de2f660dd692cce93cb65ce6e3ec126bb531 #16043 - sort source lists. Closes #16093
2025-01-22build: fix compiling with GCC 4.x versionsViktor Szakats
- silence false positive picky warnings. - avoid "possible noreturn" warnings for standalone tests and examples. - fix to compile without `#pragma GCC diagnostic push` support. - fix "#pragma GCC diagnostic not allowed inside functions". Prerequisite for #15975 that needs GCC 4.4 for the latest pre-built CeGCC/mingw32ce toolchain for Windows CE. Cherry-picked from #15975 Closes #16062
2025-01-14tidy-up: drop parenthesis around `return` expressionViktor Szakats
Closes #15990
2025-01-13examples: use return according to code styleDaniel Stenberg
2025-01-12msvc: tidy up `_CRT_*_NO_DEPRECATE` definitionsViktor Szakats
Dedupe and migrate MSVC-specific warning suppressions to `curl_setup.h`. Make cmake set `_CRT_SECURE_NO_DEPRECATE` for examples and standalone tests, and stop setting `_CRT_NONSTDC_NO_DEPRECATE` for them. Details: - drop version guards. On ancient MSVC version these macro are a no-op. - move to `curl_setup.h` from `config-win32*.h`. - sync macro values with CMake. - cmake: stop setting them globally in favour of `curl_setup.h`. - cmake: re-add these macros to `docs/examples` and `tests/http/clients`, which do not use `curl_setup.h`. - cmake: drop `_CRT_NONSTDC_NO_DEPRECATE` for examples and tests. They build fine without. - update comments. Closes #15960
2025-01-06docs/examples/checksrc: don't allow snprintf specificallyYedaya Katsman
This isn't needed anymore after https://github.com/curl/curl/pull/15835, since banned functions are just allowed in general in `docs/examples/.checksrc`, and emits a warning when running make checksrc: `invalid warning specified in .checksrc: "SNPRINTF"` Closes #15916
2025-01-02docs: use lowercase curl and libcurlDaniel Stenberg
Adjusted badwords to find them. Plus: make badwords run on all markdown files in the repo and update markdowns previously unchecked Closes #15898
2024-12-31examples/block-ip: drop redundant `memory.h` includeViktor Szakats
Not used elsewhere in the repo.
2024-12-30checksrc: introduce 'banfunc' to ban specific functionsDaniel Stenberg
Use 'banfunc' and 'allowfunc' in .checksrc to specify which functions to ban or allow to be used. This saves us from having to edit the script going forward when we want to ban or allow specific functions. This replaces a set of previous rules and all banned functions are now checked with the BANNEDFUNC rule. There is a set of default banned functions, shown by invoking ./checksrc. Also, -a and -b options are added to specify allowed or banned functions on the command line. Closes #15835
2024-12-27clang-tidy: add to CI, add cmake support, fix falloutsViktor Szakats
build: - autotools: fix to build generated sources for the `tidy` target. - autotools: allow passing custom clang-tidy options via `CURL_CLANG_TIDYFLAGS` env. - cmake: add `CURL_CLANG_TIDY` option to configure for `clang-tidy`. Also add: - `CLANG_TIDY` variable to customize the `clang-tidy` tool. - `CURL_CLANG_TIDYFLAGS` to pass custom options to `clang-tidy`. - apply `--enable-werror` and `-DCURL_WERROR=ON` to `clang-tidy`. CI/GHA: - add clang-tidy job for Linux, using autotools and clang-tidy v18. This one needs to disable `clang-analyzer-valist.Uninitialized` to avoid false positives: https://github.com/llvm/llvm-project/issues/40656 Duration: 5.5 minutes - add clang-tidy job for macOS, using cmake and clang-tidy v19. This one also covers tests and examples, and doesn't hit the false positives seen with llvm v18 and earlier. Duration: 4.5 minutes - Linux/macOS: skip installing test dependencies when not building or running tests. fix fallouts reported by `clang-tidy`: - lib: - cf-h2-proxy: unused assignment in non-debug builds. - cf-socket: silence warning. FIXME: https://github.com/curl/curl/pull/15825#issuecomment-2561867769 - ftp: NULL passed to `strncmp()`. - http2: NULL-ptr deref. - mprintf: silence warning. - src/tool_writeout: NULL passed to `fputs()`. - examples: - invalid file pointers. - missing `fclose()`. - tests: - http/clients/hx-download: memory leaks on error. - http/clients/hx-download: memory leak on repeat `-r` option. - server: double `fclose()`. https://www.man7.org/linux/man-pages/man3/fclose.3.html - server: invalid file pointer/handle. - server/getpart: unused assignments. - server/mqttd: leak on failed `realloc()`. - server/tftpd: NULL passed to `strcmp()`. Closes #15825
2024-12-24tidy-up: miscViktor Szakats
- lib1531: fix to use `curl_off_t`. - src/tool_doswin: merge `_WIN32` guards. - src/tool_doswin: limit `S_ISCHR()` to MS-DOS. - src: dedupe `CURL_O_BINARY` macro into `tool_setup.h`. - CMake/CurlTests.c: cleanup/formatting `HAVE_FILE_OFFSET_BITS` test. - examples/httpput-postfields: delete unused include. - spelling: MultiSSL. - whitespace. Ref: #15652 Closes #15799
2024-12-22examples/block-ip: show how to block IP addressesJay Satiro
- Show how CURLOPT_OPENSOCKETFUNCTION can be used to block IP addresses. This is a new example that demonstrates IP blocking. Ref: https://github.com/curl/curl/discussions/15710#discussioncomment-11534877 Closes https://github.com/curl/curl/pull/15748
2024-12-20examples: make them compile with compatibility functions disabled (Windows)Viktor Szakats
For MinGW this is `-DNO_OLDNAMES`, with MSVC it is `-D_CRT_DECLARE_NONSTDC_NAMES=0`. There have been some support for this before this patch. After this patch this is extended to all examples. (And also the standalone http/client programs, if here.) Cherry-picked from #15652 Closes #15789
2024-12-20examples/complicated: fix warnings, bump deprecated callback, tidy upViktor Szakats
Also: make them C89, add consts. Closes #15785
2024-12-20examples/synctime.c: remove references to dead URLs and functionalityDaniel Stenberg
This example can use the Date: header of any server so there is no point in linking to ancient URLs describeing a setup at NIST that no longer exists. Closes #15786
2024-12-16Makefile.mk: drop in favour of autotools and cmake (MS-DOS, AmigaOS3)Viktor Szakats
`Makefile.mk` supported MS-DOS and Amiga, but `./configure` also supported them in a better tested and more flexible way. This patch also adds CMake support for MS-DOS/DJGPP and Amiga OS 3. `Makefile.mk` was not maintained. Delete it in favour of first-tier build methods. Also include some non-MS-DOS/AmigaOS-specific tidy-up, see details at the end of this message. Details: - fix/silence all MS-DOS/DJGPP build warnings and issues. - add MS-DOS support to cmake. - default to `ENABLE_THREADED_RESOLVER=OFF` for MS-DOS. - add support for `WATT_ROOT`. - use static libcurl with MS-DOS. - fixup default CMake suffixes/prefixes for DJGPP. - disable hidden symbols for MS-DOS. Not supported on MS-DOS. - opt-in MS-DOS into `USE_UNIX_SOCKETS`. - improve MS-DOS support in autotools. - default to `--disable-threaded-resolver` for MS-DOS. - make sure to use `close_s()` (from Watt-32) with autotools and cmake. `Makefile.mk` used it before this patch. - GHA: add DJGPP cmake (~30s) and autotools (~60s) build jobs. Also build tests and examples with cmake. - improve AmigaOS support in autotools: - configure: detect `CloseSocket()` when it's a macro. - configure: fix `IoctlSocket` detection on AmigaOS. - curl-amissl.m4: pass AmiSSL libs to tests/servers. - add AmigaOS3 support to cmake: - cmake: fix `HAVE_IOCTLSOCKET_CAMEL` and `HAVE_IOCTLSOCKET_CAMEL_FIONBIO` detections. - set necessary system libs. - add AmiSSL support. - inet_ntop, inet_pton: fix using it for AmigaOS. cmake detects them, and they did not compile with AmigaOS. - cmake: better sync `gethostname` detection with autotools. Fixes detection for AmigaOS, where `gethostname` is a macro. - cmake: fix `sys/utime.h` detection on AmigaOS. - cmake: force-disable `getaddrinfo` for AmigaOS. - cmake: tweak threading and static/shared default for AmigaOS. - cmake: rely on manual variable `AMIGA` to enable the platform. - GHA: add AmigaOS cmake and autotools (~45s) jobs. Also build tests and examples with cmake. - INSTALL: update MS-DOS and AmigaOS build instructions. - amigaos: fix `-Wpointer-sign` and `zero or negative size array '_args'` in `Printf()`. - amigaos: fix `-Wpointer-sign` - amigaos: fix `-Wredundant-decls` `errno` and `h_errno`. - amigaos: brute-force silence `lseek()` size warnings. - amigaos: server/resolve: silence `-Wdiscarded-qualifiers`. - amigaos: server/resolve: fix `-Wpointer-sign`. - amigaos: fix `CURL_SA_FAMILY_T` type. - nonblock: prefer `HAVE_IOCTLSOCKET_CAMEL_FIONBIO` for AmigaOS. `ioctl` is also detected, but fails when used. Make the above override it for a successful build. Authored-by: Darren Banfi Fixes #15537 Closes #15603 - tftpd: prefer `HAVE_IOCTLSOCKET_CAMEL_FIONBIO` for AmigaOS. - tftpd: tidy-up conditional code. - curl: set stack size to 16384 for AmigaOS3/4 Overriding the default 4096. Suggested-by: Darren Banfi Ref: https://github.com/curl/curl/pull/15543#issuecomment-2498783123 Ref: https://wiki.amigaos.net/wiki/Controlling_Application_Stack - functypes.h: fix `SEND_QUAL_ARG2` for AmigaOS. - tftp: add missing cast in sendto() call for AmigaOS. - getinfo: fix warning with AmigaOS. - tool_operate: silence warning with AmigaOS - amigaos: fix building libtests due to missing `RLIMIT_NOFILE`. - curl_gethostname: silence warning for AmigaOS. - ftp: silence `-Wtype-limits` for AmigaOS. - libtest: fix timeval initialization for AmigaOS. - examples: fix `timeval` initialization for AmigaOS. - examples: silence warning for AmigaOS. - configure: fix IPv6 detection for cross-builds. - netrc: fix to build with AmigaOS cleanly. - buildinfo: detect and add `DOS` tag for MS-DOS builds. - buildinfo: add `AMIGA` to buildinfo.txt in auttools. - build: move `USE_WATT32` macro definition to cmake/configure. Non-MS-DOS/AmigeOS-specific tidy-ups: - configure: sync `sa_family_t` detection with cmake. - configure: sync `ADDRESS_FAMILY` detection signals with cmake. - doh: use `CURL_SA_FAMILY_T`. - lib: drop mingw-specific `CURL_SA_FAMILY_T` workaround. - cmake: extend instead of override check-specific configurations/requirements. This allows to honor global requirements added earlier. Necessary for AmigaOS for example. - cmake: omit warning on disabled IPv6 for MS-DOS and AmigaOS. No IPv6 support on these platforms. Also sync with autotools. - lib1960: use libcurl `inet_pton()` wrapper. - cmake: detect LibreSSL (to match autotools). - cmake: say the specific OpenSSL flavour detected. - hostip: add missing `HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID` guard. - lib: simplify classic mac feature guards. Follow-up to a8861b6ccdd7ca35b6115588a578e36d765c9e38 #9764 Closes #15543
2024-12-16cmake: namespace functions and macrosViktor Szakats
Prefix (or suffix) curl-defined macro and function names with `curl`. To avoid collisions with non-curl CMake and to make them recognizable as curl-specific calls. Closes #15498
2024-12-13checksrc: ban use of sscanf()Daniel Stenberg
Using sscanf() is not a (security) problem in itself, but we strongly discorage using it for parsing input since it is hard to use right, easy to mess up and often makes for sloppy error checking. Allow it in examples and tests Closes #15687
2024-11-28build: fix MSVC UWP buildsViktor Szakats
The MSVC UWP job in CI did not actually enable UWP. Fix this and the fallouts discovered after enabling it. - GHA/windows: make sure to enable UWP in MSVC vcpkg UWP job. Use the CMake options and C flags already used for mingw-w64, but use `WINAPI_FAMILY_PC_APP` instead of the deprecated `WINAPI_FAMILY_APP`. (The former is not supported by mingw-w64, so leave it there as-is.) Follow-up to cb22cfca69bded45bf7f9c72c8e6764990490f11 #14077 - GHA/windows: by default the MSVC UWP job became 2x-3x slower than others after actually enabling UWP. Most of it is caused by CMake/MSBuild automatically building full APPX containers for each `.exe` target. This includes 21 CMake feature detections. Each detection app is built into a 15MB APPX project, with code signing, logos, etc. Example: https://github.com/curl/curl/actions/runs/12056968170/job/33620610958 Disable this overhead for curl build targets via custom `CMAKE_VS_GLOBALS` options. I've found no way to apply them to feature detection targets, so those remain slow. - cmake: automatically enable Unicode for UWP builds. It's required. Also stop enabling it manually in the existing CI job. - tests: fix `getpid()` use for Windows UWP: ``` tests\server\util.c(281,21): warning C4013: 'getpid' undefined; assuming extern returning int ``` Ref: https://github.com/curl/curl/actions/runs/12061215311/job/33632904249#step:11:38 - src/tool_doswin: disable `GetLoadedModulePaths()` for UWP. mingw-w64 UWP was okay with this, but MS SDK headers are not. This makes `--dump-module-paths` return empty for UWP builds. ``` src\tool_doswin.c(620,3): error C2065: 'MODULEENTRY32': undeclared identifier src\tool_doswin.c(626,11): warning C4013: 'CreateToolhelp32Snapshot' undefined; assuming extern returning int src\tool_doswin.c(626,36): error C2065: 'TH32CS_SNAPMODULE': undeclared identifier src\tool_doswin.c(632,7): warning C4013: 'Module32First' undefined; assuming extern returning int ``` Ref: https://github.com/curl/curl/actions/runs/12055081933/job/33614629930#step:9:35 - examples: fix `websocket.c` to include `winsock2.h` before `windows.h` to make it build with MSVC UWP: ``` include\curl\curl.h(143,16): error C2061: syntax error: identifier 'curl_socket_t' include\curl\curl.h(143,16): error C2059: syntax error: ';' include\curl\curl.h(417,52): error C2146: syntax error: missing ')' before identifier 'curlfd' include\curl\curl.h(417,38): error C2081: 'curl_socket_t': name in formal parameter list illegal ``` Ref: https://github.com/curl/curl/actions/runs/12055317910/job/33615644427#step:14:126 - GHA/windows: silence linker warning with MSVC UWP builds: ``` LINK : warning LNK4075: ignoring '/INCREMENTAL' due to '/OPT:ICF' specification ``` Ref: https://github.com/curl/curl/actions/runs/12055696808/job/33616629610#step:11:38 - GHA/windows: set `/INCREMENTAL:NO` for all MSVC jobs to improve performance a little. - cmake: show `UWP` platform flag. Ref: #15652 Closes #15657
2024-10-30build: fix clang-cl builds, add CI jobViktor Szakats
- appveyor: add build-only job for clang-cl. - cmake: `-pedantic-errors` enables `-Werror,-Wlanguage-extension-token` automatically, which makes `__int64` detection fail. Explictly disable this compiler warning for clang-cl to make the feature detection work and to accept `__int64` in the source code. - cmake: disable `-Wlanguage-extension-token` warning for clang-cl to fix these when encountering `__int64`: ``` lib/formdata.c(797,29): error : extension used [-Werror,-Wlanguage-extension-token] lib/warnless.c(117,33): error : extension used [-Werror,-Wlanguage-extension-token] lib/warnless.c(60,28): message : expanded from macro 'CURL_MASK_SCOFFT' lib/warnless.c(59,38): message : expanded from macro 'CURL_MASK_UCOFFT' include\curl/system.h(352,40): message : expanded from macro 'CURL_TYPEOF_CURL_OFF_T' ``` - make `__GNUC__` warning suppressions apply to `__clang__` too. Necessary for clang-cl, which defines the latter, but not the former. (Regular clang defines both.) - examples: fix clang-cl compiler warning in `http2-upload.c`. ``` docs\examples\http2-upload.c(56,5): error : no previous prototype for function 'my_gettimeofday' [-Werror,-Wmissing-prototypes] docs\examples\http2-upload.c(56,1): message : declare 'static' if the function is not intended to be used outside of this translation unit ``` - unit2604: add missing `#pragma GCC diagnostic pop`. Follow-up to e53523fef07894991c69d907a7c7794c7ada4ff4 #14859 - unit1652: limit compiler warning suppression to GCC. They do not affect clang builds. Follow-up to 71cf0d1fca9e1f53524e1545ef0c08d174458d80 #14772 Closes #15449