curl/docs/examples
Viktor Szakats fabfa8e402
clang-tidy: add to CI, add cmake support, fix fallouts
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-27 13:42:32 +01:00
..
.checksrc
.gitignore
10-at-a-time.c
adddocsref.pl
address-scope.c
altsvc.c
anyauthput.c clang-tidy: add to CI, add cmake support, fix fallouts 2024-12-27 13:42:32 +01:00
block_ip.c
cacertinmem.c
certinfo.c
chkspeed.c
CMakeLists.txt
connect-to.c
cookie_interface.c
crawler.c
debug.c
default-scheme.c
ephiperfifo.c
evhiperfifo.c
externalsocket.c
fileupload.c clang-tidy: add to CI, add cmake support, fix fallouts 2024-12-27 13:42:32 +01:00
ftp-wildcard.c
ftpget.c
ftpgetinfo.c
ftpgetresp.c clang-tidy: add to CI, add cmake support, fix fallouts 2024-12-27 13:42:32 +01:00
ftpsget.c
ftpupload.c clang-tidy: add to CI, add cmake support, fix fallouts 2024-12-27 13:42:32 +01:00
ftpuploadfrommem.c
ftpuploadresume.c
getinfo.c
getinmemory.c
getredirect.c
getreferrer.c
ghiper.c
headerapi.c
hiperfifo.c
href_extractor.c
hsts-preload.c
htmltidy.c
htmltitle.cpp
http2-download.c
http2-pushinmemory.c
http2-serverpush.c
http2-upload.c
http3-present.c
http3.c
http-options.c
http-post.c
httpcustomheader.c
httpput-postfields.c
httpput.c clang-tidy: add to CI, add cmake support, fix fallouts 2024-12-27 13:42:32 +01:00
https.c
imap-append.c
imap-authzid.c
imap-copy.c
imap-create.c
imap-delete.c
imap-examine.c
imap-fetch.c
imap-list.c
imap-lsub.c
imap-multi.c
imap-noop.c
imap-search.c
imap-ssl.c
imap-store.c
imap-tls.c
interface.c
ipv6.c
keepalive.c
localport.c
Makefile.am
Makefile.example
Makefile.inc
maxconnects.c
multi-app.c
multi-debugcallback.c
multi-double.c
multi-event.c
multi-formadd.c
multi-legacy.c
multi-post.c
multi-single.c
multi-uv.c
multithread.c
netrc.c
parseurl.c
persistent.c
pop3-authzid.c
pop3-dele.c
pop3-list.c
pop3-multi.c
pop3-noop.c
pop3-retr.c
pop3-ssl.c
pop3-stat.c
pop3-tls.c
pop3-top.c
pop3-uidl.c
post-callback.c
postinmemory.c
postit2-formadd.c
postit2.c
progressfunc.c
protofeats.c
range.c
README.md
resolve.c
rtsp-options.c
sendrecv.c
sepheaders.c
sessioninfo.c
sftpget.c
sftpuploadresume.c
shared-connection-cache.c
simple.c
simplepost.c
simplessl.c clang-tidy: add to CI, add cmake support, fix fallouts 2024-12-27 13:42:32 +01:00
smooth-gtk-thread.c
smtp-authzid.c
smtp-expn.c
smtp-mail.c
smtp-mime.c
smtp-multi.c
smtp-ssl.c
smtp-tls.c
smtp-vrfy.c
sslbackend.c
synctime.c
threaded-ssl.c
unixsocket.c
url2file.c
urlapi.c
usercertinmem.c
version-check.pl
websocket-cb.c
websocket.c
xmlstream.c

libcurl examples

This directory is for libcurl programming examples. They are meant to show some simple steps on how you can build your own application to take full advantage of libcurl.

If you end up with other small but still useful example sources, please mail them for submission in future packages and on the website.

Building

The Makefile.example is an example Makefile that could be used to build these examples. Just edit the file according to your system and requirements first.

Most examples should build fine using a command line like this:

`curl-config --cc --cflags --libs` -o example-my example.c

Some compilers do not like having the arguments in this order but instead want you do reorganize them like:

`curl-config --cc` -o example-my example.c `curl-config --cflags --libs`

Please do not use the curl.se site as a test target for your libcurl applications/experiments. Even if some of the examples use that site as a URL at some places, it does not mean that the URLs work or that we expect you to actually torture our website with your tests. Thanks.

Examples

Each example source code file is designed to be and work stand-alone and rather self-explanatory. The examples may at times lack the level of error checks you need in a real world, but that is then only for the sake of readability: to make the code smaller and easier to follow.