curl/docs/examples
Viktor Szakats a72b479dec
build: fix MSVC UWP builds
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 cb22cfca69 #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-11-28 14:24:03 +01:00
..
.checksrc checksrc: ban gmtime/localtime 2020-07-28 23:51:17 +02:00
.gitignore examples: add missing binaries to .gitignore 2024-06-14 13:25:55 +02:00
10-at-a-time.c examples: delete unused includes 2024-05-28 00:27:04 +02:00
adddocsref.pl copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
address-scope.c examples: fix/silence -Wsign-conversion 2024-05-11 11:11:32 +02:00
altsvc.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
anyauthput.c tidy-up: OS names 2024-08-04 19:17:45 +02:00
cacertinmem.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
certinfo.c copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
chkspeed.c lib/src: white space edits to comply better with code style 2024-09-19 14:59:12 +02:00
CMakeLists.txt cmake: separate target for examples, optimize CI, fix fallouts 2024-09-20 23:53:33 +02:00
connect-to.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
cookie_interface.c cmake: separate target for examples, optimize CI, fix fallouts 2024-09-20 23:53:33 +02:00
crawler.c example/crawler: make it use a few more options 2023-06-19 09:06:41 +02:00
debug.c lib/src: white space edits to comply better with code style 2024-09-19 14:59:12 +02:00
default-scheme.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
ephiperfifo.c tidy-up: OS names 2024-08-04 19:17:45 +02:00
evhiperfifo.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
externalsocket.c examples: fix compiling with MSVC 2024-05-26 22:43:04 +02:00
fileupload.c copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
ftp-wildcard.c examples: fix/silence -Wsign-conversion 2024-05-11 11:11:32 +02:00
ftpget.c build: fix -Wconversion/-Wsign-conversion warnings 2023-12-20 15:38:45 +00:00
ftpgetinfo.c lib/src: white space edits to comply better with code style 2024-09-19 14:59:12 +02:00
ftpgetresp.c tidy-up: OS names 2024-08-04 19:17:45 +02:00
ftpsget.c build: fix -Wconversion/-Wsign-conversion warnings 2023-12-20 15:38:45 +00:00
ftpupload.c tidy-up: OS names 2024-08-04 19:17:45 +02:00
ftpuploadfrommem.c tidy-up: OS names 2024-08-04 19:17:45 +02:00
ftpuploadresume.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
getinfo.c copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
getinmemory.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
getredirect.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
getreferrer.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
ghiper.c lib/src: white space edits to comply better with code style 2024-09-19 14:59:12 +02:00
headerapi.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
hiperfifo.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
href_extractor.c copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
hsts-preload.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
htmltidy.c lib/src: white space edits to comply better with code style 2024-09-19 14:59:12 +02:00
htmltitle.cpp misc: fix spelling mistakes 2023-05-23 10:42:09 +02:00
http2-download.c lib/src: white space edits to comply better with code style 2024-09-19 14:59:12 +02:00
http2-pushinmemory.c examples: delete unused includes 2024-05-28 00:27:04 +02:00
http2-serverpush.c cmake: separate target for examples, optimize CI, fix fallouts 2024-09-20 23:53:33 +02:00
http2-upload.c build: fix clang-cl builds, add CI job 2024-10-30 23:15:32 +01:00
http3-present.c copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
http3.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
http-options.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
http-post.c tidy-up: OS names 2024-08-04 19:17:45 +02:00
httpcustomheader.c copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
httpput-postfields.c tidy-up: OS names 2024-08-04 19:17:45 +02:00
httpput.c tidy-up: OS names 2024-08-04 19:17:45 +02:00
https.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
imap-append.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
imap-authzid.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
imap-copy.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
imap-create.c copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
imap-delete.c copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
imap-examine.c copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
imap-fetch.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
imap-list.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
imap-lsub.c docs: remove use of the word 'very' 2023-09-07 22:52:07 +02:00
imap-multi.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
imap-noop.c copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
imap-search.c copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
imap-ssl.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
imap-store.c copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
imap-tls.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
interface.c docs/examples/interface.c: show CURLOPT_INTERFACE use 2023-10-30 12:45:34 +01:00
ipv6.c examples/ipv6.c: new example showing IPv6-only internet transfer 2024-01-10 09:33:03 +01:00
keepalive.c tcpkeepalive: add CURLOPT_TCP_KEEPCNT and --keepalive-cnt 2024-06-12 09:31:17 +02:00
localport.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
Makefile.am build: tidy up deprecation suppression, enable warnings for clang 2024-09-21 00:59:52 +02:00
Makefile.example tidy-up: adjust casing of project names 2024-07-12 13:56:16 +02:00
Makefile.inc examples/range.c: add 2024-01-10 09:33:08 +01:00
Makefile.mk Makefile.mk: drop Windows support 2023-12-16 13:12:22 +00:00
maxconnects.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
multi-app.c lib/src: white space edits to comply better with code style 2024-09-19 14:59:12 +02:00
multi-debugcallback.c lib/src: white space edits to comply better with code style 2024-09-19 14:59:12 +02:00
multi-double.c examples: delete unused includes 2024-05-28 00:27:04 +02:00
multi-event.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
multi-formadd.c build: tidy up deprecation suppression, enable warnings for clang 2024-09-21 00:59:52 +02:00
multi-legacy.c lib/src: white space edits to comply better with code style 2024-09-19 14:59:12 +02:00
multi-post.c examples: delete unused includes 2024-05-28 00:27:04 +02:00
multi-single.c examples: delete unused includes 2024-05-28 00:27:04 +02:00
multi-uv.c example/multi-uv: remove the use of globals 2024-07-27 23:09:44 +02:00
multithread.c lib/src: white space edits to comply better with code style 2024-09-19 14:59:12 +02:00
netrc.c examples/netrc.c: add 2024-01-10 09:33:06 +01:00
parseurl.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
persistent.c examples: delete unused includes 2024-05-28 00:27:04 +02:00
pop3-authzid.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
pop3-dele.c copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
pop3-list.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
pop3-multi.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
pop3-noop.c copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
pop3-retr.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
pop3-ssl.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
pop3-stat.c copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
pop3-tls.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
pop3-top.c copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
pop3-uidl.c copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
post-callback.c tidy-up: OS names 2024-08-04 19:17:45 +02:00
postinmemory.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
postit2-formadd.c build: tidy up deprecation suppression, enable warnings for clang 2024-09-21 00:59:52 +02:00
postit2.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
progressfunc.c copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
protofeats.c docs/examples/protofeats.c: Outputs all protocols and features 2023-04-18 08:10:27 +02:00
range.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
README.md GHA: silence proselint warnings and an error 2024-10-15 16:44:17 +02:00
resolve.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
rtsp-options.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
sendrecv.c cmake: separate target for examples, optimize CI, fix fallouts 2024-09-20 23:53:33 +02:00
sepheaders.c examples: delete unused includes 2024-05-28 00:27:04 +02:00
sessioninfo.c copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
sftpget.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
sftpuploadresume.c copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
shared-connection-cache.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
simple.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
simplepost.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
simplessl.c cmake: separate target for examples, optimize CI, fix fallouts 2024-09-20 23:53:33 +02:00
smooth-gtk-thread.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
smtp-authzid.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
smtp-expn.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
smtp-mail.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
smtp-mime.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
smtp-multi.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
smtp-ssl.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
smtp-tls.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
smtp-vrfy.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
sslbackend.c docs: use CURLSSLBACKEND_NONE 2023-09-21 14:15:03 +02:00
synctime.c lib/src: white space edits to comply better with code style 2024-09-19 14:59:12 +02:00
threaded-ssl.c lib/src: white space edits to comply better with code style 2024-09-19 14:59:12 +02:00
unixsocket.c tidy-up: OS names 2024-08-04 19:17:45 +02:00
url2file.c examples: delete unused includes 2024-05-28 00:27:04 +02:00
urlapi.c examples: make use of CURLOPT_(REDIR_|)PROTOCOLS_STR 2023-06-18 11:09:13 +02:00
usercertinmem.c tidy-up: adjust casing of project names 2024-07-12 13:56:16 +02:00
version-check.pl copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
websocket-cb.c examples: use present tense in comments 2024-02-27 16:19:43 +01:00
websocket.c build: fix MSVC UWP builds 2024-11-28 14:24:03 +01:00
xmlstream.c examples: delete unused includes 2024-05-28 00:27:04 +02:00

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.