Compare commits
20 Commits
bagder/spe
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b4834a7d6d | ||
|
|
5693342ec2 | ||
|
|
c693cc02b0 | ||
|
|
e7751571eb | ||
|
|
7211576442 | ||
|
|
794dfe7fc4 | ||
|
|
049352dd80 | ||
|
|
08c7c937dc | ||
|
|
2e585f5640 | ||
|
|
399cb7130a | ||
|
|
5a021aba41 | ||
|
|
6913c9b6ab | ||
|
|
953cd694dc | ||
|
|
af6172c8f2 | ||
|
|
8ded8e5f3f | ||
|
|
7007f59caa | ||
|
|
a8ad9a5758 | ||
|
|
cba83bfb10 | ||
|
|
59f4727480 | ||
|
|
08a29e7f18 |
128
.github/scripts/cleancmd.pl
vendored
128
.github/scripts/cleancmd.pl
vendored
@ -3,55 +3,117 @@
|
|||||||
#
|
#
|
||||||
# SPDX-License-Identifier: curl
|
# SPDX-License-Identifier: curl
|
||||||
#
|
#
|
||||||
# Input: a cmdline docs markdown, it gets modified *in place*
|
# Input: cmdline docs markdown files, they get modified *in place*
|
||||||
|
#
|
||||||
|
# Strip off the leading meta-data/header part, remove all known curl symbols
|
||||||
|
# and long command line options. Also clean up whatever else the spell checker
|
||||||
|
# might have a problem with that we still deem is fine.
|
||||||
#
|
#
|
||||||
# The main purpose is to strip off the leading meta-data part, but also to
|
|
||||||
# clean up whatever else the spell checker might have a problem with that we
|
|
||||||
# still deem is fine.
|
|
||||||
|
|
||||||
my $header = 1;
|
open(S, "<./docs/libcurl/symbols-in-versions")
|
||||||
while(1) {
|
|| die "can't find symbols-in-versions";
|
||||||
# set this if the markdown has no meta-data header to skip
|
while(<S>) {
|
||||||
if($ARGV[0] eq "--no-header") {
|
if(/^([^ ]*) /) {
|
||||||
shift @ARGV;
|
push @asyms, $1;
|
||||||
$header = 0;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
last;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
close(S);
|
||||||
|
|
||||||
my $f = $ARGV[0];
|
# init the opts table with "special" options not easy to figure out
|
||||||
|
my @aopts = (
|
||||||
|
'--ftp-ssl-reqd', # old alias
|
||||||
|
);
|
||||||
|
|
||||||
open(F, "<$f") or die;
|
open(O, "<./docs/options-in-versions")
|
||||||
|
|| die "can't find options-in-versions";
|
||||||
my $ignore = $header;
|
while(<O>) {
|
||||||
my $sepcount = 0;
|
chomp;
|
||||||
my @out;
|
if(/^([^ ]+)/) {
|
||||||
while(<F>) {
|
my $o = $1;
|
||||||
if(/^---/ && $header) {
|
push @aopts, $o;
|
||||||
if(++$sepcount == 2) {
|
if($o =~ /^--no-(.*)/) {
|
||||||
$ignore = 0;
|
# for the --no options, also make one without it
|
||||||
|
push @aopts, "--$1";
|
||||||
}
|
}
|
||||||
|
elsif($o =~ /^--disable-(.*)/) {
|
||||||
|
# for the --disable options, also make the special ones
|
||||||
|
push @aopts, "--$1";
|
||||||
|
push @aopts, "--no-$1";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close(O);
|
||||||
|
|
||||||
|
open(C, "<./.github/scripts/spellcheck.curl")
|
||||||
|
|| die "can't find spellcheck.curl";
|
||||||
|
while(<C>) {
|
||||||
|
if(/^\#/) {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
chomp;
|
||||||
|
if(/^([^ ]+)/) {
|
||||||
|
push @asyms, $1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close(C);
|
||||||
|
|
||||||
|
# longest symbols first
|
||||||
|
my @syms = sort { length($b) <=> length($a) } @asyms;
|
||||||
|
|
||||||
|
# longest cmdline options first
|
||||||
|
my @opts = sort { length($b) <=> length($a) } @aopts;
|
||||||
|
|
||||||
|
sub process {
|
||||||
|
my ($f) = @_;
|
||||||
|
|
||||||
|
my $ignore = 0;
|
||||||
|
my $sepcount = 0;
|
||||||
|
my $out;
|
||||||
|
my $line = 0;
|
||||||
|
open(F, "<$f") or die;
|
||||||
|
|
||||||
|
while(<F>) {
|
||||||
|
$line++;
|
||||||
|
if(/^---/ && ($line == 1)) {
|
||||||
|
$ignore = 1;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
elsif(/^---/ && $ignore) {
|
||||||
|
$ignore = 0;
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
next if($ignore);
|
next if($ignore);
|
||||||
|
|
||||||
# strip out backticked words
|
my $l = $_;
|
||||||
$_ =~ s/`[^`]+`//g;
|
|
||||||
|
|
||||||
# strip out all long command line options
|
# strip out backticked words
|
||||||
$_ =~ s/--[a-z0-9-]+//g;
|
$l =~ s/`[^`]+`//g;
|
||||||
|
|
||||||
|
# **bold**
|
||||||
|
$l =~ s/\*\*(\S.*?)\*\*//g;
|
||||||
|
# *italics*
|
||||||
|
$l =~ s/\*(\S.*?)\*//g;
|
||||||
|
|
||||||
# strip out https URLs, we don't want them spellchecked
|
# strip out https URLs, we don't want them spellchecked
|
||||||
$_ =~ s!https://[a-z0-9\#_/.-]+!!gi;
|
$l =~ s!https://[a-z0-9\#_/.-]+!!gi;
|
||||||
|
|
||||||
push @out, $_;
|
$out .= $l;
|
||||||
}
|
}
|
||||||
close(F);
|
close(F);
|
||||||
|
|
||||||
if(!$ignore) {
|
# cut out all known curl cmdline options
|
||||||
|
map { $out =~ s/$_//g; } (@opts);
|
||||||
|
|
||||||
|
# cut out all known curl symbols
|
||||||
|
map { $out =~ s/\b$_\b//g; } (@syms);
|
||||||
|
|
||||||
|
if(!$ignore) {
|
||||||
open(O, ">$f") or die;
|
open(O, ">$f") or die;
|
||||||
print O @out;
|
print O $out;
|
||||||
close(O);
|
close(O);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for my $f (@ARGV) {
|
||||||
|
process($f);
|
||||||
}
|
}
|
||||||
|
|||||||
86
.github/scripts/cleanspell.pl
vendored
86
.github/scripts/cleanspell.pl
vendored
@ -1,86 +0,0 @@
|
|||||||
#!/usr/bin/env perl
|
|
||||||
# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: curl
|
|
||||||
#
|
|
||||||
# Given: a libcurl curldown man page
|
|
||||||
# Outputs: the same file, minus the SYNOPSIS and the EXAMPLE sections
|
|
||||||
#
|
|
||||||
|
|
||||||
my $f = $ARGV[0];
|
|
||||||
|
|
||||||
open(F, "<$f") or die;
|
|
||||||
|
|
||||||
my @out;
|
|
||||||
my $ignore = 0;
|
|
||||||
while(<F>) {
|
|
||||||
if($_ =~ /^# (SYNOPSIS|EXAMPLE)/) {
|
|
||||||
$ignore = 1;
|
|
||||||
}
|
|
||||||
elsif($ignore && ($_ =~ /^# [A-Z]/)) {
|
|
||||||
$ignore = 0;
|
|
||||||
}
|
|
||||||
elsif(!$ignore) {
|
|
||||||
# **bold**
|
|
||||||
$_ =~ s/\*\*(\S.*?)\*\*//g;
|
|
||||||
# *italics*
|
|
||||||
$_ =~ s/\*(\S.*?)\*//g;
|
|
||||||
|
|
||||||
$_ =~ s/CURL(M|SH|U|H)code//g;
|
|
||||||
$_ =~ s/CURL_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLALTSVC_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLAUTH_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLE_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLFORM_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLFTP_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLFTPAUTH_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLFTPMETHOD_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLFTPSSL_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLGSSAPI_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLHEADER_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLINFO_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLM_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLMIMEOPT_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLMOPT_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLOPT_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLPIPE_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLPROTO_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLPROXY_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLPX_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLSHE_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLSHOPT_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLSSLOPT_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLSSH_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLSSLBACKEND_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLU_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLUPART_[A-Z0-9_]*//g;
|
|
||||||
#$_ =~ s/\bCURLU\b//g; # stand-alone CURLU
|
|
||||||
$_ =~ s/CURLUE_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLHE_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLWS_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLKH[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLUPART_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLUSESSL_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLPAUSE_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLHSTS_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/curl_global_([a-z_]*)//g;
|
|
||||||
$_ =~ s/curl_(strequal|strnequal|formadd|waitfd|formget|getdate|formfree)//g;
|
|
||||||
$_ =~ s/curl_easy_([a-z]*)//g;
|
|
||||||
$_ =~ s/curl_multi_([a-z_]*)//g;
|
|
||||||
$_ =~ s/curl_mime_(subparts|addpart|filedata|data_cb)//g;
|
|
||||||
$_ =~ s/curl_ws_(send|recv|meta)//g;
|
|
||||||
$_ =~ s/curl_url_(dup)//g;
|
|
||||||
$_ =~ s/curl_pushheader_by(name|num)//g;
|
|
||||||
$_ =~ s/libcurl-(env|ws)//g;
|
|
||||||
$_ =~ s/libcurl\\-(env|ws)//g;
|
|
||||||
$_ =~ s/(^|\W)((tftp|https|http|ftp):\/\/[a-z0-9\-._~%:\/?\#\[\]\@!\$&'()*+,;=\\]+)//gi;
|
|
||||||
push @out, $_;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
close(F);
|
|
||||||
|
|
||||||
open(O, ">$f") or die;
|
|
||||||
for my $l (@out) {
|
|
||||||
print O $l;
|
|
||||||
}
|
|
||||||
close(O);
|
|
||||||
151
.github/scripts/spellcheck.curl
vendored
Normal file
151
.github/scripts/spellcheck.curl
vendored
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: curl
|
||||||
|
#
|
||||||
|
# common variable types + structs
|
||||||
|
# callback typedefs
|
||||||
|
# public functions names
|
||||||
|
# some man page names
|
||||||
|
curl_fileinfo
|
||||||
|
curl_forms
|
||||||
|
curl_hstsentry
|
||||||
|
curl_httppost
|
||||||
|
curl_index
|
||||||
|
curl_khkey
|
||||||
|
curl_pushheaders
|
||||||
|
curl_waitfd
|
||||||
|
CURLcode
|
||||||
|
CURLformoption
|
||||||
|
CURLHcode
|
||||||
|
CURLMcode
|
||||||
|
CURLMsg
|
||||||
|
CURLSHcode
|
||||||
|
CURLUcode
|
||||||
|
curl_calloc_callback
|
||||||
|
curl_chunk_bgn_callback
|
||||||
|
curl_chunk_end_callback
|
||||||
|
curl_conv_callback
|
||||||
|
curl_debug_callback
|
||||||
|
curl_fnmatch_callback
|
||||||
|
curl_formget_callback
|
||||||
|
curl_free_callback
|
||||||
|
curl_hstsread_callback
|
||||||
|
curl_hstswrite_callback
|
||||||
|
curl_ioctl_callback
|
||||||
|
curl_malloc_callback
|
||||||
|
curl_multi_timer_callback
|
||||||
|
curl_opensocket_callback
|
||||||
|
curl_prereq_callback
|
||||||
|
curl_progress_callback
|
||||||
|
curl_push_callback
|
||||||
|
curl_read_callback
|
||||||
|
curl_realloc_callback
|
||||||
|
curl_resolver_start_callback
|
||||||
|
curl_seek_callback
|
||||||
|
curl_socket_callback
|
||||||
|
curl_sockopt_callback
|
||||||
|
curl_ssl_ctx_callback
|
||||||
|
curl_strdup_callback
|
||||||
|
curl_trailer_callback
|
||||||
|
curl_write_callback
|
||||||
|
curl_xferinfo_callback
|
||||||
|
curl_strequal
|
||||||
|
curl_strnequal
|
||||||
|
curl_mime_init
|
||||||
|
curl_mime_free
|
||||||
|
curl_mime_addpart
|
||||||
|
curl_mime_name
|
||||||
|
curl_mime_filename
|
||||||
|
curl_mime_type
|
||||||
|
curl_mime_encoder
|
||||||
|
curl_mime_data
|
||||||
|
curl_mime_filedata
|
||||||
|
curl_mime_data_cb
|
||||||
|
curl_mime_subparts
|
||||||
|
curl_mime_headers
|
||||||
|
curl_formadd
|
||||||
|
curl_formget
|
||||||
|
curl_formfree
|
||||||
|
curl_getdate
|
||||||
|
curl_getenv
|
||||||
|
curl_version
|
||||||
|
curl_easy_escape
|
||||||
|
curl_escape
|
||||||
|
curl_easy_unescape
|
||||||
|
curl_unescape
|
||||||
|
curl_free
|
||||||
|
curl_global_init
|
||||||
|
curl_global_init_mem
|
||||||
|
curl_global_cleanup
|
||||||
|
curl_global_trace
|
||||||
|
curl_global_sslset
|
||||||
|
curl_slist_append
|
||||||
|
curl_slist_free_all
|
||||||
|
curl_getdate
|
||||||
|
curl_share_init
|
||||||
|
curl_share_setopt
|
||||||
|
curl_share_cleanup
|
||||||
|
curl_version_info
|
||||||
|
curl_easy_strerror
|
||||||
|
curl_share_strerror
|
||||||
|
curl_easy_pause
|
||||||
|
curl_easy_ssls_import
|
||||||
|
curl_easy_ssls_export
|
||||||
|
curl_easy_init
|
||||||
|
curl_easy_setopt
|
||||||
|
curl_easy_perform
|
||||||
|
curl_easy_cleanup
|
||||||
|
curl_easy_getinfo
|
||||||
|
curl_easy_duphandle
|
||||||
|
curl_easy_reset
|
||||||
|
curl_easy_recv
|
||||||
|
curl_easy_send
|
||||||
|
curl_easy_upkeep
|
||||||
|
curl_easy_header
|
||||||
|
curl_easy_nextheader
|
||||||
|
curl_mprintf
|
||||||
|
curl_mfprintf
|
||||||
|
curl_msprintf
|
||||||
|
curl_msnprintf
|
||||||
|
curl_mvprintf
|
||||||
|
curl_mvfprintf
|
||||||
|
curl_mvsprintf
|
||||||
|
curl_mvsnprintf
|
||||||
|
curl_maprintf
|
||||||
|
curl_mvaprintf
|
||||||
|
curl_multi_init
|
||||||
|
curl_multi_add_handle
|
||||||
|
curl_multi_remove_handle
|
||||||
|
curl_multi_fdset
|
||||||
|
curl_multi_waitfds
|
||||||
|
curl_multi_wait
|
||||||
|
curl_multi_poll
|
||||||
|
curl_multi_wakeup
|
||||||
|
curl_multi_perform
|
||||||
|
curl_multi_cleanup
|
||||||
|
curl_multi_info_read
|
||||||
|
curl_multi_strerror
|
||||||
|
curl_multi_socket
|
||||||
|
curl_multi_socket_action
|
||||||
|
curl_multi_socket_all
|
||||||
|
curl_multi_timeout
|
||||||
|
curl_multi_setopt
|
||||||
|
curl_multi_assign
|
||||||
|
curl_multi_get_handles
|
||||||
|
curl_pushheader_bynum
|
||||||
|
curl_pushheader_byname
|
||||||
|
curl_multi_waitfds
|
||||||
|
curl_easy_option_by_name
|
||||||
|
curl_easy_option_by_id
|
||||||
|
curl_easy_option_next
|
||||||
|
curl_url
|
||||||
|
curl_url_cleanup
|
||||||
|
curl_url_dup
|
||||||
|
curl_url_get
|
||||||
|
curl_url_set
|
||||||
|
curl_url_strerror
|
||||||
|
curl_ws_recv
|
||||||
|
curl_ws_send
|
||||||
|
curl_ws_meta
|
||||||
|
libcurl-env
|
||||||
|
libcurl-ws
|
||||||
16
.github/workflows/checkdocs.yml
vendored
16
.github/workflows/checkdocs.yml
vendored
@ -107,20 +107,8 @@ jobs:
|
|||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
name: checkout
|
name: checkout
|
||||||
|
|
||||||
- name: trim all man page *.md files
|
- name: trim all *.md files in docs/
|
||||||
run: find docs -name "*.md" ! -name "_*" -print0 | xargs -0 -n1 .github/scripts/cleancmd.pl
|
run: .github/scripts/cleancmd.pl $(find docs -name "*.md")
|
||||||
|
|
||||||
- name: trim libcurl man page *.md files
|
|
||||||
run: find docs/libcurl \( -name "curl_*.md" -o -name "libcurl*.md" \) -print0 | xargs -0 -n1 .github/scripts/cleanspell.pl
|
|
||||||
|
|
||||||
- name: trim libcurl option man page *.md files
|
|
||||||
run: find docs/libcurl/opts -name "CURL*.md" -print0 | xargs -0 -n1 .github/scripts/cleanspell.pl
|
|
||||||
|
|
||||||
- name: trim cmdline docs markdown _*.md files
|
|
||||||
run: find docs/cmdline-opts -name "_*.md" -print0 | xargs -0 -n1 .github/scripts/cleancmd.pl --no-header
|
|
||||||
|
|
||||||
- name: trim docs/ markdown _*.md files
|
|
||||||
run: git ls-files docs/*.md docs/internals/*.md | xargs -n1 .github/scripts/cleancmd.pl --no-header
|
|
||||||
|
|
||||||
- name: setup the custom wordlist
|
- name: setup the custom wordlist
|
||||||
run: grep -v '^#' .github/scripts/spellcheck.words > wordlist.txt
|
run: grep -v '^#' .github/scripts/spellcheck.words > wordlist.txt
|
||||||
|
|||||||
21
.github/workflows/distcheck.yml
vendored
21
.github/workflows/distcheck.yml
vendored
@ -19,6 +19,9 @@ concurrency:
|
|||||||
|
|
||||||
permissions: {}
|
permissions: {}
|
||||||
|
|
||||||
|
env:
|
||||||
|
MAKEFLAGS: -j 5
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
maketgz-and-verify-in-tree:
|
maketgz-and-verify-in-tree:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@ -55,9 +58,9 @@ jobs:
|
|||||||
tar xvf curl-99.98.97.tar.gz
|
tar xvf curl-99.98.97.tar.gz
|
||||||
pushd curl-99.98.97
|
pushd curl-99.98.97
|
||||||
./configure --prefix=$HOME/temp --without-ssl --without-libpsl
|
./configure --prefix=$HOME/temp --without-ssl --without-libpsl
|
||||||
make -j5
|
make
|
||||||
make -j5 test-ci
|
make test-ci
|
||||||
make -j5 install
|
make install
|
||||||
popd
|
popd
|
||||||
# basic check of the installed files
|
# basic check of the installed files
|
||||||
bash scripts/installcheck.sh $HOME/temp
|
bash scripts/installcheck.sh $HOME/temp
|
||||||
@ -80,8 +83,8 @@ jobs:
|
|||||||
mkdir build
|
mkdir build
|
||||||
pushd build
|
pushd build
|
||||||
../curl-99.98.97/configure --without-ssl --without-libpsl
|
../curl-99.98.97/configure --without-ssl --without-libpsl
|
||||||
make -j5
|
make
|
||||||
make -j5 test-ci
|
make test-ci
|
||||||
popd
|
popd
|
||||||
rm -rf build
|
rm -rf build
|
||||||
rm -rf curl-99.98.97
|
rm -rf curl-99.98.97
|
||||||
@ -103,9 +106,9 @@ jobs:
|
|||||||
mkdir build
|
mkdir build
|
||||||
pushd build
|
pushd build
|
||||||
../configure --without-ssl --enable-debug "--prefix=${PWD}/pkg" --without-libpsl
|
../configure --without-ssl --enable-debug "--prefix=${PWD}/pkg" --without-libpsl
|
||||||
make -j5
|
make
|
||||||
make -j5 test-ci
|
make test-ci
|
||||||
make -j5 install
|
make install
|
||||||
|
|
||||||
verify-out-of-tree-cmake:
|
verify-out-of-tree-cmake:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@ -122,7 +125,7 @@ jobs:
|
|||||||
tar xvf curl-99.98.97.tar.gz
|
tar xvf curl-99.98.97.tar.gz
|
||||||
pushd curl-99.98.97
|
pushd curl-99.98.97
|
||||||
cmake -B build -DCURL_WERROR=ON -DCURL_USE_LIBPSL=OFF
|
cmake -B build -DCURL_WERROR=ON -DCURL_USE_LIBPSL=OFF
|
||||||
make -C build -j5
|
make -C build
|
||||||
|
|
||||||
missing-files:
|
missing-files:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|||||||
5
.github/workflows/http3-linux.yml
vendored
5
.github/workflows/http3-linux.yml
vendored
@ -454,9 +454,7 @@ jobs:
|
|||||||
grep -F '#define' bld/lib/curl_config.h | sort || true
|
grep -F '#define' bld/lib/curl_config.h | sort || true
|
||||||
|
|
||||||
- name: 'test configs'
|
- name: 'test configs'
|
||||||
run: |
|
run: grep -H -v '^#' bld/tests/config bld/tests/http/config.ini || true
|
||||||
cat bld/tests/config || true
|
|
||||||
cat bld/tests/http/config.ini || true
|
|
||||||
|
|
||||||
- name: 'build'
|
- name: 'build'
|
||||||
run: |
|
run: |
|
||||||
@ -500,7 +498,6 @@ jobs:
|
|||||||
|
|
||||||
- name: 'run pytest event based'
|
- name: 'run pytest event based'
|
||||||
env:
|
env:
|
||||||
TFLAGS: '${{ matrix.build.tflags }}'
|
|
||||||
CURL_TEST_EVENT: 1
|
CURL_TEST_EVENT: 1
|
||||||
CURL_CI: github
|
CURL_CI: github
|
||||||
PYTEST_ADDOPTS: '--color=yes'
|
PYTEST_ADDOPTS: '--color=yes'
|
||||||
|
|||||||
13
.github/workflows/linux.yml
vendored
13
.github/workflows/linux.yml
vendored
@ -304,7 +304,8 @@ jobs:
|
|||||||
libtool autoconf automake pkgconf ninja-build \
|
libtool autoconf automake pkgconf ninja-build \
|
||||||
${{ matrix.build.install_steps != 'skipall' && matrix.build.install_steps != 'skiprun' && 'stunnel4' || '' }} \
|
${{ matrix.build.install_steps != 'skipall' && matrix.build.install_steps != 'skiprun' && 'stunnel4' || '' }} \
|
||||||
libpsl-dev libbrotli-dev libzstd-dev \
|
libpsl-dev libbrotli-dev libzstd-dev \
|
||||||
${{ matrix.build.install_packages }}
|
${{ matrix.build.install_packages }} \
|
||||||
|
${{ contains(matrix.build.install_steps, 'pytest') && 'apache2 apache2-dev libnghttp2-dev vsftpd' || '' }}
|
||||||
python3 -m venv $HOME/venv
|
python3 -m venv $HOME/venv
|
||||||
|
|
||||||
- name: 'install prereqs'
|
- name: 'install prereqs'
|
||||||
@ -319,11 +320,6 @@ jobs:
|
|||||||
${{ matrix.build.install_packages }}
|
${{ matrix.build.install_packages }}
|
||||||
python3 -m venv $HOME/venv
|
python3 -m venv $HOME/venv
|
||||||
|
|
||||||
- name: 'install prereqs for pytest'
|
|
||||||
if: contains(matrix.build.install_steps, 'pytest')
|
|
||||||
run: |
|
|
||||||
sudo apt-get -o Dpkg::Use-Pty=0 install apache2 apache2-dev libnghttp2-dev vsftpd
|
|
||||||
|
|
||||||
- name: 'install dependencies'
|
- name: 'install dependencies'
|
||||||
if: startsWith(matrix.build.container, 'alpine')
|
if: startsWith(matrix.build.container, 'alpine')
|
||||||
run: |
|
run: |
|
||||||
@ -616,9 +612,7 @@ jobs:
|
|||||||
grep -F '#define' bld/lib/curl_config.h | sort || true
|
grep -F '#define' bld/lib/curl_config.h | sort || true
|
||||||
|
|
||||||
- name: 'test configs'
|
- name: 'test configs'
|
||||||
run: |
|
run: grep -H -v '^#' bld/tests/config bld/tests/http/config.ini || true
|
||||||
cat bld/tests/config || true
|
|
||||||
cat bld/tests/http/config.ini || true
|
|
||||||
|
|
||||||
- name: 'build'
|
- name: 'build'
|
||||||
run: |
|
run: |
|
||||||
@ -694,7 +688,6 @@ jobs:
|
|||||||
- name: 'run pytest'
|
- name: 'run pytest'
|
||||||
if: contains(matrix.build.install_steps, 'pytest')
|
if: contains(matrix.build.install_steps, 'pytest')
|
||||||
env:
|
env:
|
||||||
TFLAGS: '${{ matrix.build.tflags }}'
|
|
||||||
CURL_CI: github
|
CURL_CI: github
|
||||||
PYTEST_ADDOPTS: '--color=yes'
|
PYTEST_ADDOPTS: '--color=yes'
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
18
.github/workflows/macos.yml
vendored
18
.github/workflows/macos.yml
vendored
@ -47,8 +47,8 @@ permissions: {}
|
|||||||
# newer than the 10.8 required by `CFURLCreateDataAndPropertiesFromResource`.
|
# newer than the 10.8 required by `CFURLCreateDataAndPropertiesFromResource`.
|
||||||
|
|
||||||
env:
|
env:
|
||||||
LDFLAGS: -w # suppress 'object file was built for newer macOS version than being linked' warnings
|
|
||||||
MAKEFLAGS: -j 4
|
MAKEFLAGS: -j 4
|
||||||
|
LDFLAGS: -w # suppress 'object file was built for newer macOS version than being linked' warnings
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
macos:
|
macos:
|
||||||
@ -123,9 +123,10 @@ jobs:
|
|||||||
compiler: clang
|
compiler: clang
|
||||||
configure: --enable-debug --with-openssl=$(brew --prefix openssl)
|
configure: --enable-debug --with-openssl=$(brew --prefix openssl)
|
||||||
tflags: --test-event
|
tflags: --test-event
|
||||||
- name: 'OpenSSL libssh2 !ldap 10.15'
|
- name: 'quictls libssh2 !ldap 10.15'
|
||||||
compiler: clang
|
compiler: clang
|
||||||
configure: --enable-debug --disable-ldap --with-openssl=$(brew --prefix openssl)
|
install: quictls
|
||||||
|
configure: --enable-debug --disable-ldap --with-openssl=$(brew --prefix quictls) LDFLAGS="${LDFLAGS} -L$(brew --prefix quictls)/lib"
|
||||||
macos-version-min: '10.15'
|
macos-version-min: '10.15'
|
||||||
# cmake
|
# cmake
|
||||||
- name: 'OpenSSL gsasl rtmp AppleIDN'
|
- name: 'OpenSSL gsasl rtmp AppleIDN'
|
||||||
@ -136,9 +137,9 @@ jobs:
|
|||||||
generate: -DOPENSSL_ROOT_DIR=$(brew --prefix openssl) -DUSE_APPLE_IDN=ON -DCURL_CLANG_TIDY=ON -DCLANG_TIDY=$(brew --prefix llvm)/bin/clang-tidy
|
generate: -DOPENSSL_ROOT_DIR=$(brew --prefix openssl) -DUSE_APPLE_IDN=ON -DCURL_CLANG_TIDY=ON -DCLANG_TIDY=$(brew --prefix llvm)/bin/clang-tidy
|
||||||
clang-tidy: true
|
clang-tidy: true
|
||||||
chkprefill: _chkprefill
|
chkprefill: _chkprefill
|
||||||
- name: 'OpenSSL +static libssh +examples'
|
- name: 'quictls +static libssh +examples'
|
||||||
install: libssh
|
install: quictls libssh
|
||||||
generate: -DOPENSSL_ROOT_DIR=$(brew --prefix openssl) -DBUILD_STATIC_LIBS=ON -DCURL_USE_LIBSSH2=OFF -DCURL_USE_LIBSSH=ON
|
generate: -DOPENSSL_ROOT_DIR=$(brew --prefix quictls) -DBUILD_STATIC_LIBS=ON -DCURL_USE_LIBSSH2=OFF -DCURL_USE_LIBSSH=ON
|
||||||
- name: 'SecureTransport debug'
|
- name: 'SecureTransport debug'
|
||||||
generate: -DCURL_USE_SECTRANSP=ON -DENABLE_DEBUG=ON
|
generate: -DCURL_USE_SECTRANSP=ON -DENABLE_DEBUG=ON
|
||||||
macos-version-min: '10.8'
|
macos-version-min: '10.8'
|
||||||
@ -184,11 +185,12 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
echo ${{ matrix.build.generate && 'ninja' || 'automake libtool' }} \
|
echo ${{ matrix.build.generate && 'ninja' || 'automake libtool' }} \
|
||||||
pkgconf libpsl libssh2 \
|
pkgconf libpsl libssh2 \
|
||||||
${{ !matrix.build.clang-tidy && 'nghttp2 stunnel' || '' }} \
|
${{ !matrix.build.clang-tidy && 'libnghttp2 stunnel' || '' }} \
|
||||||
${{ matrix.build.install }} | xargs -Ix -n1 echo brew '"x"' > /tmp/Brewfile
|
${{ matrix.build.install }} | xargs -Ix -n1 echo brew '"x"' > /tmp/Brewfile
|
||||||
while [[ $? == 0 ]]; do for i in 1 2 3; do brew update && brew bundle install --no-lock --file /tmp/Brewfile && break 2 || { echo Error: wait to try again; sleep 10; } done; false Too many retries; done
|
while [[ $? == 0 ]]; do for i in 1 2 3; do brew update && brew bundle install --no-lock --file /tmp/Brewfile && break 2 || { echo Error: wait to try again; sleep 10; } done; false Too many retries; done
|
||||||
|
|
||||||
- name: 'brew unlink openssl'
|
- name: 'brew unlink openssl'
|
||||||
|
if: ${{ contains(matrix.build.install, 'libressl') || contains(matrix.build.install, 'quictls') }}
|
||||||
run: |
|
run: |
|
||||||
if test -d $(brew --prefix)/include/openssl; then
|
if test -d $(brew --prefix)/include/openssl; then
|
||||||
brew unlink openssl
|
brew unlink openssl
|
||||||
@ -343,7 +345,7 @@ jobs:
|
|||||||
if: ${{ contains(matrix.build.name, '+examples') }}
|
if: ${{ contains(matrix.build.name, '+examples') }}
|
||||||
run: |
|
run: |
|
||||||
if [ -n '${{ matrix.build.generate }}' ]; then
|
if [ -n '${{ matrix.build.generate }}' ]; then
|
||||||
cmake --build bld --target curl-examples --verbose
|
cmake --build bld --verbose --target curl-examples
|
||||||
else
|
else
|
||||||
make -C bld examples V=1
|
make -C bld examples V=1
|
||||||
fi
|
fi
|
||||||
|
|||||||
82
.github/workflows/non-native.yml
vendored
82
.github/workflows/non-native.yml
vendored
@ -59,21 +59,21 @@ jobs:
|
|||||||
time cmake -B bld -G Ninja \
|
time cmake -B bld -G Ninja \
|
||||||
-DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON \
|
-DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON \
|
||||||
-DCURL_WERROR=ON \
|
-DCURL_WERROR=ON \
|
||||||
-DENABLE_DEBUG=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG= \
|
-DENABLE_DEBUG=ON -DCMAKE_BUILD_TYPE=Debug \
|
||||||
-DCURL_USE_OPENSSL=ON \
|
-DCURL_USE_OPENSSL=ON \
|
||||||
-DCURL_USE_GSSAPI=ON \
|
-DCURL_USE_GSSAPI=ON \
|
||||||
|| { cat bld/CMakeFiles/CMake*.yaml; false; }
|
|| { cat bld/CMakeFiles/CMake*.yaml; false; }
|
||||||
echo '::group::curl_config.h (raw)'; cat bld/lib/curl_config.h || true; echo '::endgroup::'
|
echo '::group::curl_config.h (raw)'; cat bld/lib/curl_config.h || true; echo '::endgroup::'
|
||||||
echo '::group::curl_config.h'; grep -F '#define' bld/lib/curl_config.h | sort || true; echo '::endgroup::'
|
echo '::group::curl_config.h'; grep -F '#define' bld/lib/curl_config.h | sort || true; echo '::endgroup::'
|
||||||
time cmake --build bld --config Debug
|
time cmake --build bld
|
||||||
bld/src/curl --disable --version
|
bld/src/curl --disable --version
|
||||||
if [ '${{ matrix.arch }}' = 'x86_64' ]; then # Slow on emulated CPU
|
if [ '${{ matrix.arch }}' = 'x86_64' ]; then # Slow on emulated CPU
|
||||||
time cmake --build bld --config Debug --target testdeps
|
time cmake --build bld --target testdeps
|
||||||
export TFLAGS='-j4'
|
export TFLAGS='-j4'
|
||||||
time cmake --build bld --config Debug --target test-ci
|
time cmake --build bld --target test-ci
|
||||||
fi
|
fi
|
||||||
echo '::group::build examples'
|
echo '::group::build examples'
|
||||||
time cmake --build bld --config Debug --target curl-examples
|
time cmake --build bld --target curl-examples
|
||||||
echo '::endgroup::'
|
echo '::endgroup::'
|
||||||
|
|
||||||
openbsd:
|
openbsd:
|
||||||
@ -100,20 +100,20 @@ jobs:
|
|||||||
time cmake -B bld -G Ninja \
|
time cmake -B bld -G Ninja \
|
||||||
-DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON \
|
-DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON \
|
||||||
-DCURL_WERROR=ON \
|
-DCURL_WERROR=ON \
|
||||||
-DENABLE_DEBUG=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG= \
|
-DENABLE_DEBUG=ON -DCMAKE_BUILD_TYPE=Debug \
|
||||||
-DCURL_USE_OPENSSL=ON \
|
-DCURL_USE_OPENSSL=ON \
|
||||||
|| { cat bld/CMakeFiles/CMake*.yaml; false; }
|
|| { cat bld/CMakeFiles/CMake*.yaml; false; }
|
||||||
echo '::group::curl_config.h (raw)'; cat bld/lib/curl_config.h || true; echo '::endgroup::'
|
echo '::group::curl_config.h (raw)'; cat bld/lib/curl_config.h || true; echo '::endgroup::'
|
||||||
echo '::group::curl_config.h'; grep -F '#define' bld/lib/curl_config.h | sort || true; echo '::endgroup::'
|
echo '::group::curl_config.h'; grep -F '#define' bld/lib/curl_config.h | sort || true; echo '::endgroup::'
|
||||||
time cmake --build bld --config Debug
|
time cmake --build bld
|
||||||
bld/src/curl --disable --version
|
bld/src/curl --disable --version
|
||||||
if [ '${{ matrix.arch }}' = 'x86_64' ]; then # Slow on emulated CPU
|
if [ '${{ matrix.arch }}' = 'x86_64' ]; then # Slow on emulated CPU
|
||||||
time cmake --build bld --config Debug --target testdeps
|
time cmake --build bld --target testdeps
|
||||||
export TFLAGS='-j8 ~3017 ~TFTP ~FTP' # FIXME: TFTP requests executed twice? Related: `curl: (69) TFTP: Access Violation`?
|
export TFLAGS='-j8 ~3017 ~TFTP ~FTP' # FIXME: TFTP requests executed twice? Related: `curl: (69) TFTP: Access Violation`?
|
||||||
time cmake --build bld --config Debug --target test-ci
|
time cmake --build bld --target test-ci
|
||||||
fi
|
fi
|
||||||
echo '::group::build examples'
|
echo '::group::build examples'
|
||||||
time cmake --build bld --config Debug --target curl-examples
|
time cmake --build bld --target curl-examples
|
||||||
echo '::endgroup::'
|
echo '::endgroup::'
|
||||||
|
|
||||||
freebsd:
|
freebsd:
|
||||||
@ -140,6 +140,7 @@ jobs:
|
|||||||
version: '14.1'
|
version: '14.1'
|
||||||
architecture: ${{ matrix.arch }}
|
architecture: ${{ matrix.arch }}
|
||||||
run: |
|
run: |
|
||||||
|
export MAKEFLAGS=-j3
|
||||||
# https://ports.freebsd.org/
|
# https://ports.freebsd.org/
|
||||||
time sudo pkg install -y autoconf automake libtool \
|
time sudo pkg install -y autoconf automake libtool \
|
||||||
pkgconf brotli openldap26-client libidn2 libnghttp2 stunnel py311-impacket
|
pkgconf brotli openldap26-client libidn2 libnghttp2 stunnel py311-impacket
|
||||||
@ -154,18 +155,18 @@ jobs:
|
|||||||
|| { tail -n 1000 config.log; false; }
|
|| { tail -n 1000 config.log; false; }
|
||||||
echo '::group::curl_config.h (raw)'; cat lib/curl_config.h || true; echo '::endgroup::'
|
echo '::group::curl_config.h (raw)'; cat lib/curl_config.h || true; echo '::endgroup::'
|
||||||
echo '::group::curl_config.h'; grep -F '#define' lib/curl_config.h | sort || true; echo '::endgroup::'
|
echo '::group::curl_config.h'; grep -F '#define' lib/curl_config.h | sort || true; echo '::endgroup::'
|
||||||
time make -j3 install
|
time make install
|
||||||
src/curl --disable --version
|
src/curl --disable --version
|
||||||
desc='${{ matrix.desc }}'
|
desc='${{ matrix.desc }}'
|
||||||
if [ '${{ matrix.arch }}' = 'x86_64' ]; then # Slow on emulated CPU
|
if [ '${{ matrix.arch }}' = 'x86_64' ]; then # Slow on emulated CPU
|
||||||
time make -j3 -C tests
|
time make -C tests
|
||||||
if [ "${desc#*!runtests*}" = "${desc}" ]; then
|
if [ "${desc#*!runtests*}" = "${desc}" ]; then
|
||||||
time make test-ci V=1 TFLAGS='-j4'
|
time make test-ci V=1 TFLAGS='-j4'
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
if [ "${desc#*!examples*}" = "${desc}" ]; then
|
if [ "${desc#*!examples*}" = "${desc}" ]; then
|
||||||
echo '::group::build examples'
|
echo '::group::build examples'
|
||||||
time make -j3 examples
|
time make examples
|
||||||
echo '::endgroup::'
|
echo '::endgroup::'
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -184,25 +185,25 @@ jobs:
|
|||||||
-DCMAKE_C_COMPILER='${{ matrix.compiler }}' \
|
-DCMAKE_C_COMPILER='${{ matrix.compiler }}' \
|
||||||
-DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON \
|
-DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON \
|
||||||
-DCURL_WERROR=ON \
|
-DCURL_WERROR=ON \
|
||||||
-DENABLE_DEBUG=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG= \
|
-DENABLE_DEBUG=ON -DCMAKE_BUILD_TYPE=Debug \
|
||||||
-DCURL_USE_OPENSSL=ON \
|
-DCURL_USE_OPENSSL=ON \
|
||||||
-DCURL_USE_GSSAPI=ON \
|
-DCURL_USE_GSSAPI=ON \
|
||||||
${{ matrix.options }} \
|
${{ matrix.options }} \
|
||||||
|| { cat bld/CMakeFiles/CMake*.yaml; false; }
|
|| { cat bld/CMakeFiles/CMake*.yaml; false; }
|
||||||
echo '::group::curl_config.h (raw)'; cat bld/lib/curl_config.h || true; echo '::endgroup::'
|
echo '::group::curl_config.h (raw)'; cat bld/lib/curl_config.h || true; echo '::endgroup::'
|
||||||
echo '::group::curl_config.h'; grep -F '#define' bld/lib/curl_config.h | sort || true; echo '::endgroup::'
|
echo '::group::curl_config.h'; grep -F '#define' bld/lib/curl_config.h | sort || true; echo '::endgroup::'
|
||||||
time cmake --build bld --config Debug
|
time cmake --build bld
|
||||||
bld/src/curl --disable --version
|
bld/src/curl --disable --version
|
||||||
desc='${{ matrix.desc }}'
|
desc='${{ matrix.desc }}'
|
||||||
if [ '${{ matrix.arch }}' = 'x86_64' ]; then # Slow on emulated CPU
|
if [ '${{ matrix.arch }}' = 'x86_64' ]; then # Slow on emulated CPU
|
||||||
time cmake --build bld --config Debug --target testdeps
|
time cmake --build bld --target testdeps
|
||||||
if [ "${desc#*!runtests*}" = "${desc}" ]; then
|
if [ "${desc#*!runtests*}" = "${desc}" ]; then
|
||||||
time cmake --build bld --config Debug --target test-ci
|
time cmake --build bld --target test-ci
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
if [ "${desc#*!examples*}" = "${desc}" ]; then
|
if [ "${desc#*!examples*}" = "${desc}" ]; then
|
||||||
echo '::group::build examples'
|
echo '::group::build examples'
|
||||||
time cmake --build bld --config Debug --target curl-examples
|
time cmake --build bld --target curl-examples
|
||||||
echo '::endgroup::'
|
echo '::endgroup::'
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -223,6 +224,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
set -e
|
set -e
|
||||||
ln -s /usr/bin/gcpp /usr/bin/cpp # Some tests expect `cpp`, which is named `gcpp` in this env.
|
ln -s /usr/bin/gcpp /usr/bin/cpp # Some tests expect `cpp`, which is named `gcpp` in this env.
|
||||||
|
export MAKEFLAGS=-j3
|
||||||
time autoreconf -fi
|
time autoreconf -fi
|
||||||
mkdir bld && cd bld && time ../configure --enable-unity --enable-test-bundles --enable-debug --enable-warnings --enable-werror \
|
mkdir bld && cd bld && time ../configure --enable-unity --enable-test-bundles --enable-debug --enable-warnings --enable-werror \
|
||||||
--prefix="${HOME}"/install \
|
--prefix="${HOME}"/install \
|
||||||
@ -231,12 +233,12 @@ jobs:
|
|||||||
|| { tail -n 1000 config.log; false; }
|
|| { tail -n 1000 config.log; false; }
|
||||||
echo '::group::curl_config.h (raw)'; cat lib/curl_config.h || true; echo '::endgroup::'
|
echo '::group::curl_config.h (raw)'; cat lib/curl_config.h || true; echo '::endgroup::'
|
||||||
echo '::group::curl_config.h'; grep -F '#define' lib/curl_config.h | sort || true; echo '::endgroup::'
|
echo '::group::curl_config.h'; grep -F '#define' lib/curl_config.h | sort || true; echo '::endgroup::'
|
||||||
time gmake -j3 install
|
time gmake install
|
||||||
src/curl --disable --version
|
src/curl --disable --version
|
||||||
time gmake -j3 -C tests
|
time gmake -C tests
|
||||||
time gmake test-ci V=1
|
time gmake test-ci V=1
|
||||||
echo '::group::build examples'
|
echo '::group::build examples'
|
||||||
time gmake -j3 examples
|
time gmake examples
|
||||||
echo '::endgroup::'
|
echo '::endgroup::'
|
||||||
|
|
||||||
ios:
|
ios:
|
||||||
@ -244,9 +246,9 @@ jobs:
|
|||||||
runs-on: 'macos-latest'
|
runs-on: 'macos-latest'
|
||||||
timeout-minutes: 10
|
timeout-minutes: 10
|
||||||
env:
|
env:
|
||||||
|
MAKEFLAGS: -j 4
|
||||||
DEVELOPER_DIR: "/Applications/Xcode${{ matrix.build.xcode && format('_{0}', matrix.build.xcode) || '' }}.app/Contents/Developer"
|
DEVELOPER_DIR: "/Applications/Xcode${{ matrix.build.xcode && format('_{0}', matrix.build.xcode) || '' }}.app/Contents/Developer"
|
||||||
CC: ${{ matrix.build.compiler || 'clang' }}
|
CC: ${{ matrix.build.compiler || 'clang' }}
|
||||||
MAKEFLAGS: -j 4
|
|
||||||
# renovate: datasource=github-tags depName=libressl-portable/portable versioning=semver registryUrl=https://github.com
|
# renovate: datasource=github-tags depName=libressl-portable/portable versioning=semver registryUrl=https://github.com
|
||||||
libressl-version: 4.0.0
|
libressl-version: 4.0.0
|
||||||
strategy:
|
strategy:
|
||||||
@ -261,6 +263,7 @@ jobs:
|
|||||||
install_steps: libressl
|
install_steps: libressl
|
||||||
# FIXME: Could not make OPENSSL_ROOT_DIR work. CMake seems to prepend sysroot to it.
|
# FIXME: Could not make OPENSSL_ROOT_DIR work. CMake seems to prepend sysroot to it.
|
||||||
generate: >-
|
generate: >-
|
||||||
|
-DCMAKE_BUILD_TYPE=Release -DCMAKE_UNITY_BUILD_BATCH_SIZE=50
|
||||||
-DOPENSSL_INCLUDE_DIR="$HOME/libressl/include"
|
-DOPENSSL_INCLUDE_DIR="$HOME/libressl/include"
|
||||||
-DOPENSSL_SSL_LIBRARY="$HOME/libressl/lib/libssl.a"
|
-DOPENSSL_SSL_LIBRARY="$HOME/libressl/lib/libssl.a"
|
||||||
-DOPENSSL_CRYPTO_LIBRARY="$HOME/libressl/lib/libcrypto.a"
|
-DOPENSSL_CRYPTO_LIBRARY="$HOME/libressl/lib/libcrypto.a"
|
||||||
@ -269,6 +272,7 @@ jobs:
|
|||||||
- name: 'libressl'
|
- name: 'libressl'
|
||||||
install_steps: libressl
|
install_steps: libressl
|
||||||
generator: Xcode
|
generator: Xcode
|
||||||
|
options: --config Debug
|
||||||
generate: >-
|
generate: >-
|
||||||
-DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED=OFF
|
-DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED=OFF
|
||||||
-DMACOSX_BUNDLE_GUI_IDENTIFIER=se.curl
|
-DMACOSX_BUNDLE_GUI_IDENTIFIER=se.curl
|
||||||
@ -361,7 +365,7 @@ jobs:
|
|||||||
- name: 'build'
|
- name: 'build'
|
||||||
run: |
|
run: |
|
||||||
if [ -n '${{ matrix.build.generate }}' ]; then
|
if [ -n '${{ matrix.build.generate }}' ]; then
|
||||||
cmake --build bld --verbose
|
cmake --build bld ${{ matrix.build.options }} --parallel 4 --verbose
|
||||||
else
|
else
|
||||||
make -C bld V=1
|
make -C bld V=1
|
||||||
fi
|
fi
|
||||||
@ -372,7 +376,7 @@ jobs:
|
|||||||
- name: 'build tests'
|
- name: 'build tests'
|
||||||
run: |
|
run: |
|
||||||
if [ -n '${{ matrix.build.generate }}' ]; then
|
if [ -n '${{ matrix.build.generate }}' ]; then
|
||||||
cmake --build bld --target testdeps --verbose
|
cmake --build bld ${{ matrix.build.options }} --parallel 4 --target testdeps --verbose
|
||||||
else
|
else
|
||||||
make -C bld V=1 -C tests
|
make -C bld V=1 -C tests
|
||||||
fi
|
fi
|
||||||
@ -380,7 +384,7 @@ jobs:
|
|||||||
- name: 'build examples'
|
- name: 'build examples'
|
||||||
run: |
|
run: |
|
||||||
if [ -n '${{ matrix.build.generate }}' ]; then
|
if [ -n '${{ matrix.build.generate }}' ]; then
|
||||||
cmake --build bld --target curl-examples --verbose
|
cmake --build bld ${{ matrix.build.options }} --parallel 4 --target curl-examples --verbose
|
||||||
else
|
else
|
||||||
make -C bld examples V=1
|
make -C bld examples V=1
|
||||||
fi
|
fi
|
||||||
@ -390,9 +394,9 @@ jobs:
|
|||||||
runs-on: 'ubuntu-latest'
|
runs-on: 'ubuntu-latest'
|
||||||
timeout-minutes: 25
|
timeout-minutes: 25
|
||||||
env:
|
env:
|
||||||
|
MAKEFLAGS: -j 5
|
||||||
VCPKG_BINARY_SOURCES: 'clear;x-gha,readwrite'
|
VCPKG_BINARY_SOURCES: 'clear;x-gha,readwrite'
|
||||||
VCPKG_DISABLE_METRICS: '1'
|
VCPKG_DISABLE_METRICS: '1'
|
||||||
MAKEFLAGS: -j 5
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
@ -490,7 +494,7 @@ jobs:
|
|||||||
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
||||||
cmake --build bld --verbose
|
cmake --build bld --verbose
|
||||||
else
|
else
|
||||||
make -j5 -C bld V=1
|
make -C bld V=1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 'curl info'
|
- name: 'curl info'
|
||||||
@ -501,7 +505,7 @@ jobs:
|
|||||||
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
||||||
cmake --build bld --target testdeps
|
cmake --build bld --target testdeps
|
||||||
else
|
else
|
||||||
make -j5 -C bld -C tests
|
make -C bld -C tests
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 'build examples'
|
- name: 'build examples'
|
||||||
@ -509,7 +513,7 @@ jobs:
|
|||||||
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
||||||
cmake --build bld --target curl-examples
|
cmake --build bld --target curl-examples
|
||||||
else
|
else
|
||||||
make -j5 -C bld examples
|
make -C bld examples
|
||||||
fi
|
fi
|
||||||
|
|
||||||
amiga:
|
amiga:
|
||||||
@ -517,6 +521,7 @@ jobs:
|
|||||||
runs-on: 'ubuntu-latest'
|
runs-on: 'ubuntu-latest'
|
||||||
timeout-minutes: 5
|
timeout-minutes: 5
|
||||||
env:
|
env:
|
||||||
|
MAKEFLAGS: -j 5
|
||||||
amissl-version: 5.18
|
amissl-version: 5.18
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
@ -584,9 +589,9 @@ jobs:
|
|||||||
- name: 'build'
|
- name: 'build'
|
||||||
run: |
|
run: |
|
||||||
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
||||||
cmake --build bld --parallel 5
|
cmake --build bld
|
||||||
else
|
else
|
||||||
make -j5 -C bld
|
make -C bld
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 'curl info'
|
- name: 'curl info'
|
||||||
@ -596,18 +601,18 @@ jobs:
|
|||||||
if: ${{ matrix.build == 'cmake' }} # skip for autotools to save time
|
if: ${{ matrix.build == 'cmake' }} # skip for autotools to save time
|
||||||
run: |
|
run: |
|
||||||
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
||||||
cmake --build bld --parallel 5 --target testdeps
|
cmake --build bld --target testdeps
|
||||||
else
|
else
|
||||||
make -j5 -C bld -C tests
|
make -C bld -C tests
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 'build examples'
|
- name: 'build examples'
|
||||||
if: ${{ matrix.build == 'cmake' }} # skip for autotools to save time
|
if: ${{ matrix.build == 'cmake' }} # skip for autotools to save time
|
||||||
run: |
|
run: |
|
||||||
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
||||||
cmake --build bld --parallel 5 --target curl-examples
|
cmake --build bld --target curl-examples
|
||||||
else
|
else
|
||||||
make -j5 -C bld examples
|
make -C bld examples
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msdos:
|
msdos:
|
||||||
@ -615,6 +620,7 @@ jobs:
|
|||||||
runs-on: 'ubuntu-latest'
|
runs-on: 'ubuntu-latest'
|
||||||
timeout-minutes: 5
|
timeout-minutes: 5
|
||||||
env:
|
env:
|
||||||
|
MAKEFLAGS: -j 5
|
||||||
toolchain-version: '3.4'
|
toolchain-version: '3.4'
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
@ -694,7 +700,7 @@ jobs:
|
|||||||
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
||||||
cmake --build bld
|
cmake --build bld
|
||||||
else
|
else
|
||||||
make -j5 -C bld
|
make -C bld
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 'curl info'
|
- name: 'curl info'
|
||||||
@ -706,7 +712,7 @@ jobs:
|
|||||||
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
||||||
cmake --build bld --target testdeps
|
cmake --build bld --target testdeps
|
||||||
else
|
else
|
||||||
make -j5 -C bld -C tests
|
make -C bld -C tests
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 'build examples'
|
- name: 'build examples'
|
||||||
@ -715,5 +721,5 @@ jobs:
|
|||||||
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
||||||
cmake --build bld --target curl-examples
|
cmake --build bld --target curl-examples
|
||||||
else
|
else
|
||||||
make -j5 -C bld examples
|
make -C bld examples
|
||||||
fi
|
fi
|
||||||
|
|||||||
67
.github/workflows/windows.yml
vendored
67
.github/workflows/windows.yml
vendored
@ -44,6 +44,7 @@ jobs:
|
|||||||
run:
|
run:
|
||||||
shell: C:\cygwin\bin\bash.exe '{0}'
|
shell: C:\cygwin\bin\bash.exe '{0}'
|
||||||
env:
|
env:
|
||||||
|
MAKEFLAGS: -j 5
|
||||||
SHELLOPTS: 'igncr'
|
SHELLOPTS: 'igncr'
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
@ -111,9 +112,9 @@ jobs:
|
|||||||
timeout-minutes: 10
|
timeout-minutes: 10
|
||||||
run: |
|
run: |
|
||||||
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
||||||
cmake --build bld --config '${{ matrix.type }}'
|
cmake --build bld
|
||||||
else
|
else
|
||||||
make -C bld -j5 V=1 install
|
make -C bld V=1 install
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 'curl version'
|
- name: 'curl version'
|
||||||
@ -130,9 +131,9 @@ jobs:
|
|||||||
timeout-minutes: 15
|
timeout-minutes: 15
|
||||||
run: |
|
run: |
|
||||||
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
||||||
cmake --build bld --config '${{ matrix.type }}' --target testdeps
|
cmake --build bld --target testdeps
|
||||||
else
|
else
|
||||||
make -C bld -j5 V=1 -C tests
|
make -C bld V=1 -C tests
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 'run tests'
|
- name: 'run tests'
|
||||||
@ -145,9 +146,9 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
||||||
PATH="$PWD/bld/lib:$PATH"
|
PATH="$PWD/bld/lib:$PATH"
|
||||||
cmake --build bld --config '${{ matrix.type }}' --target test-ci
|
cmake --build bld --target test-ci
|
||||||
else
|
else
|
||||||
make -C bld -j5 V=1 test-ci
|
make -C bld V=1 test-ci
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 'build examples'
|
- name: 'build examples'
|
||||||
@ -155,9 +156,9 @@ jobs:
|
|||||||
timeout-minutes: 5
|
timeout-minutes: 5
|
||||||
run: |
|
run: |
|
||||||
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
||||||
cmake --build bld --config '${{ matrix.type }}' --target curl-examples
|
cmake --build bld --target curl-examples
|
||||||
else
|
else
|
||||||
make -C bld -j5 V=1 examples
|
make -C bld V=1 examples
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msys2: # both msys and mingw-w64
|
msys2: # both msys and mingw-w64
|
||||||
@ -167,6 +168,8 @@ jobs:
|
|||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
shell: msys2 {0}
|
shell: msys2 {0}
|
||||||
|
env:
|
||||||
|
MAKEFLAGS: -j 5
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
@ -250,8 +253,6 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
[ '${{ matrix.sys }}' = 'msys' ] && options+=' -D_CURL_PREFILL=ON'
|
[ '${{ matrix.sys }}' = 'msys' ] && options+=' -D_CURL_PREFILL=ON'
|
||||||
[ '${{ matrix.test }}' = 'uwp' ] && options+=' -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0'
|
[ '${{ matrix.test }}' = 'uwp' ] && options+=' -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0'
|
||||||
[ '${{ matrix.type }}' = 'Debug' ] && options+=' -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG='
|
|
||||||
[ '${{ matrix.type }}' = 'Release' ] && options+=' -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE='
|
|
||||||
[ "${_chkprefill}" = '_chkprefill' ] && options+=' -D_CURL_PREFILL=OFF'
|
[ "${_chkprefill}" = '_chkprefill' ] && options+=' -D_CURL_PREFILL=OFF'
|
||||||
cmake -B "bld${_chkprefill}" -G Ninja ${options} \
|
cmake -B "bld${_chkprefill}" -G Ninja ${options} \
|
||||||
-DCMAKE_C_FLAGS="${{ matrix.cflags }} ${CFLAGS_CMAKE} ${CPPFLAGS}" \
|
-DCMAKE_C_FLAGS="${{ matrix.cflags }} ${CFLAGS_CMAKE} ${CPPFLAGS}" \
|
||||||
@ -286,9 +287,9 @@ jobs:
|
|||||||
timeout-minutes: 10
|
timeout-minutes: 10
|
||||||
run: |
|
run: |
|
||||||
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
||||||
cmake --build bld --config '${{ matrix.type }}'
|
cmake --build bld
|
||||||
else
|
else
|
||||||
make -C bld -j5 V=1 install
|
make -C bld V=1 install
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 'curl version'
|
- name: 'curl version'
|
||||||
@ -311,9 +312,9 @@ jobs:
|
|||||||
timeout-minutes: 10
|
timeout-minutes: 10
|
||||||
run: |
|
run: |
|
||||||
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
||||||
cmake --build bld --config '${{ matrix.type }}' --target testdeps
|
cmake --build bld --target testdeps
|
||||||
else
|
else
|
||||||
make -C bld -j5 V=1 -C tests
|
make -C bld V=1 -C tests
|
||||||
fi
|
fi
|
||||||
if [ '${{ matrix.build }}' != 'cmake' ]; then
|
if [ '${{ matrix.build }}' != 'cmake' ]; then
|
||||||
# avoid libtool's .exe wrappers
|
# avoid libtool's .exe wrappers
|
||||||
@ -347,10 +348,10 @@ jobs:
|
|||||||
PATH="$PATH:/c/Program Files (x86)/stunnel/bin"
|
PATH="$PATH:/c/Program Files (x86)/stunnel/bin"
|
||||||
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
||||||
PATH="$PWD/bld/lib:$PATH"
|
PATH="$PWD/bld/lib:$PATH"
|
||||||
cmake --build bld --config '${{ matrix.type }}' --target test-ci
|
cmake --build bld --target test-ci
|
||||||
else
|
else
|
||||||
PATH="$PWD/bld/lib/.libs:$PATH"
|
PATH="$PWD/bld/lib/.libs:$PATH"
|
||||||
make -C bld -j5 V=1 test-ci
|
make -C bld V=1 test-ci
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 'build examples'
|
- name: 'build examples'
|
||||||
@ -358,9 +359,9 @@ jobs:
|
|||||||
timeout-minutes: 5
|
timeout-minutes: 5
|
||||||
run: |
|
run: |
|
||||||
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
||||||
cmake --build bld --config '${{ matrix.type }}' --target curl-examples
|
cmake --build bld --target curl-examples
|
||||||
else
|
else
|
||||||
make -C bld -j5 V=1 examples
|
make -C bld V=1 examples
|
||||||
fi
|
fi
|
||||||
|
|
||||||
mingw-w64-standalone-downloads:
|
mingw-w64-standalone-downloads:
|
||||||
@ -370,6 +371,8 @@ jobs:
|
|||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
shell: C:\msys64\usr\bin\bash.exe {0}
|
shell: C:\msys64\usr\bin\bash.exe {0}
|
||||||
|
env:
|
||||||
|
MAKEFLAGS: -j 5
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
@ -428,8 +431,6 @@ jobs:
|
|||||||
PATH="$(cygpath "${USERPROFILE}")/my-cache/${{ matrix.dir }}/bin:/c/msys64/usr/bin:$PATH"
|
PATH="$(cygpath "${USERPROFILE}")/my-cache/${{ matrix.dir }}/bin:/c/msys64/usr/bin:$PATH"
|
||||||
for _chkprefill in '' ${{ matrix.chkprefill }}; do
|
for _chkprefill in '' ${{ matrix.chkprefill }}; do
|
||||||
options=''
|
options=''
|
||||||
[ '${{ matrix.type }}' = 'Debug' ] && options+=' -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG='
|
|
||||||
[ '${{ matrix.type }}' = 'Release' ] && options+=' -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE='
|
|
||||||
[ "${_chkprefill}" = '_chkprefill' ] && options+=' -D_CURL_PREFILL=OFF'
|
[ "${_chkprefill}" = '_chkprefill' ] && options+=' -D_CURL_PREFILL=OFF'
|
||||||
cmake -B "bld${_chkprefill}" -G 'MSYS Makefiles' ${options} \
|
cmake -B "bld${_chkprefill}" -G 'MSYS Makefiles' ${options} \
|
||||||
-DCMAKE_C_COMPILER=gcc \
|
-DCMAKE_C_COMPILER=gcc \
|
||||||
@ -457,7 +458,7 @@ jobs:
|
|||||||
timeout-minutes: 5
|
timeout-minutes: 5
|
||||||
run: |
|
run: |
|
||||||
PATH="$(cygpath "${USERPROFILE}")/my-cache/${{ matrix.dir }}/bin:/c/msys64/usr/bin:$PATH"
|
PATH="$(cygpath "${USERPROFILE}")/my-cache/${{ matrix.dir }}/bin:/c/msys64/usr/bin:$PATH"
|
||||||
cmake --build bld --config '${{ matrix.type }}' --parallel 5
|
cmake --build bld
|
||||||
|
|
||||||
- name: 'curl version'
|
- name: 'curl version'
|
||||||
timeout-minutes: 1
|
timeout-minutes: 1
|
||||||
@ -471,7 +472,7 @@ jobs:
|
|||||||
timeout-minutes: 10
|
timeout-minutes: 10
|
||||||
run: |
|
run: |
|
||||||
PATH="$(cygpath "${USERPROFILE}")/my-cache/${{ matrix.dir }}/bin:/c/msys64/usr/bin:$PATH"
|
PATH="$(cygpath "${USERPROFILE}")/my-cache/${{ matrix.dir }}/bin:/c/msys64/usr/bin:$PATH"
|
||||||
cmake --build bld --config '${{ matrix.type }}' --parallel 5 --target testdeps
|
cmake --build bld --target testdeps
|
||||||
|
|
||||||
- name: 'install test prereqs'
|
- name: 'install test prereqs'
|
||||||
if: ${{ matrix.tflags != 'skipall' && matrix.tflags != 'skiprun' }}
|
if: ${{ matrix.tflags != 'skipall' && matrix.tflags != 'skiprun' }}
|
||||||
@ -500,27 +501,29 @@ jobs:
|
|||||||
TFLAGS+=" -ac $(cygpath "${SYSTEMROOT}/System32/curl.exe")"
|
TFLAGS+=" -ac $(cygpath "${SYSTEMROOT}/System32/curl.exe")"
|
||||||
fi
|
fi
|
||||||
PATH="$PWD/bld/lib:$PATH:/c/Program Files (x86)/stunnel/bin"
|
PATH="$PWD/bld/lib:$PATH:/c/Program Files (x86)/stunnel/bin"
|
||||||
cmake --build bld --config '${{ matrix.type }}' --target test-ci
|
cmake --build bld --target test-ci
|
||||||
|
|
||||||
- name: 'build examples'
|
- name: 'build examples'
|
||||||
timeout-minutes: 5
|
timeout-minutes: 5
|
||||||
run: |
|
run: |
|
||||||
PATH="$(cygpath "${USERPROFILE}")/my-cache/${{ matrix.dir }}/bin:/c/msys64/usr/bin:$PATH"
|
PATH="$(cygpath "${USERPROFILE}")/my-cache/${{ matrix.dir }}/bin:/c/msys64/usr/bin:$PATH"
|
||||||
cmake --build bld --config '${{ matrix.type }}' --parallel 5 --target curl-examples
|
cmake --build bld --target curl-examples
|
||||||
|
|
||||||
linux-cross-mingw-w64:
|
linux-cross-mingw-w64:
|
||||||
name: "linux-mingw, ${{ matrix.build == 'cmake' && 'CM' || 'AM' }} ${{ matrix.compiler }}"
|
name: "linux-mingw, ${{ matrix.build == 'cmake' && 'CM' || 'AM' }} ${{ matrix.compiler }}"
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
timeout-minutes: 15
|
timeout-minutes: 15
|
||||||
|
env:
|
||||||
|
MAKEFLAGS: -j 5
|
||||||
|
TRIPLET: 'x86_64-w64-mingw32'
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
build: [autotools, cmake]
|
build: [autotools, cmake]
|
||||||
compiler: [gcc]
|
compiler: [gcc]
|
||||||
env:
|
|
||||||
TRIPLET: 'x86_64-w64-mingw32'
|
|
||||||
steps:
|
steps:
|
||||||
- name: 'install packages'
|
- name: 'install packages'
|
||||||
|
timeout-minutes: 5
|
||||||
run: sudo apt-get -o Dpkg::Use-Pty=0 install mingw-w64 ${{ matrix.build == 'cmake' && 'ninja-build' || '' }}
|
run: sudo apt-get -o Dpkg::Use-Pty=0 install mingw-w64 ${{ matrix.build == 'cmake' && 'ninja-build' || '' }}
|
||||||
|
|
||||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||||
@ -564,7 +567,7 @@ jobs:
|
|||||||
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
||||||
cmake --build bld
|
cmake --build bld
|
||||||
else
|
else
|
||||||
make -C bld -j5
|
make -C bld
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 'curl info'
|
- name: 'curl info'
|
||||||
@ -576,7 +579,7 @@ jobs:
|
|||||||
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
||||||
cmake --build bld --target testdeps
|
cmake --build bld --target testdeps
|
||||||
else
|
else
|
||||||
make -C bld -j5 -C tests
|
make -C bld -C tests
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 'build examples'
|
- name: 'build examples'
|
||||||
@ -584,7 +587,7 @@ jobs:
|
|||||||
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
||||||
cmake --build bld --target curl-examples
|
cmake --build bld --target curl-examples
|
||||||
else
|
else
|
||||||
make -C bld -j5 examples
|
make -C bld examples
|
||||||
fi
|
fi
|
||||||
|
|
||||||
wince:
|
wince:
|
||||||
@ -592,8 +595,8 @@ jobs:
|
|||||||
runs-on: 'macos-latest'
|
runs-on: 'macos-latest'
|
||||||
timeout-minutes: 10
|
timeout-minutes: 10
|
||||||
env:
|
env:
|
||||||
toolchain-version: '0.59.1'
|
|
||||||
MAKEFLAGS: -j 4
|
MAKEFLAGS: -j 4
|
||||||
|
toolchain-version: '0.59.1'
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
build: [autotools, cmake]
|
build: [autotools, cmake]
|
||||||
@ -601,6 +604,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: 'install packages'
|
- name: 'install packages'
|
||||||
if: ${{ matrix.build == 'autotools' }}
|
if: ${{ matrix.build == 'autotools' }}
|
||||||
|
timeout-minutes: 5
|
||||||
run: |
|
run: |
|
||||||
echo automake libtool | xargs -Ix -n1 echo brew '"x"' > /tmp/Brewfile
|
echo automake libtool | xargs -Ix -n1 echo brew '"x"' > /tmp/Brewfile
|
||||||
while [[ $? == 0 ]]; do for i in 1 2 3; do brew update && brew bundle install --no-lock --file /tmp/Brewfile && break 2 || { echo Error: wait to try again; sleep 10; } done; false Too many retries; done
|
while [[ $? == 0 ]]; do for i in 1 2 3; do brew update && brew bundle install --no-lock --file /tmp/Brewfile && break 2 || { echo Error: wait to try again; sleep 10; } done; false Too many retries; done
|
||||||
@ -614,6 +618,7 @@ jobs:
|
|||||||
|
|
||||||
- name: 'install compiler (mingw32ce)'
|
- name: 'install compiler (mingw32ce)'
|
||||||
if: ${{ steps.cache-compiler.outputs.cache-hit != 'true' }}
|
if: ${{ steps.cache-compiler.outputs.cache-hit != 'true' }}
|
||||||
|
timeout-minutes: 5
|
||||||
run: |
|
run: |
|
||||||
cd "${HOME}" || exit 1
|
cd "${HOME}" || exit 1
|
||||||
curl --disable --fail --silent --show-error --connect-timeout 15 --max-time 120 --retry 3 --retry-connrefused --proto-redir =https \
|
curl --disable --fail --silent --show-error --connect-timeout 15 --max-time 120 --retry 3 --retry-connrefused --proto-redir =https \
|
||||||
@ -902,7 +907,7 @@ jobs:
|
|||||||
if: ${{ matrix.tflags != 'skipall' && matrix.tflags != 'skiprun' }}
|
if: ${{ matrix.tflags != 'skipall' && matrix.tflags != 'skiprun' }}
|
||||||
timeout-minutes: 10
|
timeout-minutes: 10
|
||||||
run: |
|
run: |
|
||||||
export CURL_DIRSUFFIX='${{ matrix.type }}/'
|
export CURL_DIRSUFFIX='${{ matrix.type }}'
|
||||||
export TFLAGS='-j8 ~WebSockets ~SCP ~612 ${{ matrix.tflags }}'
|
export TFLAGS='-j8 ~WebSockets ~SCP ~612 ${{ matrix.tflags }}'
|
||||||
if [[ '${{ matrix.install }}' = *'libssh2[core,zlib]'* ]]; then
|
if [[ '${{ matrix.install }}' = *'libssh2[core,zlib]'* ]]; then
|
||||||
TFLAGS+=' ~SFTP'
|
TFLAGS+=' ~SFTP'
|
||||||
|
|||||||
@ -352,13 +352,12 @@ endif()
|
|||||||
if(WIN32)
|
if(WIN32)
|
||||||
option(CURL_STATIC_CRT "Build libcurl with static CRT with MSVC (/MT)" OFF)
|
option(CURL_STATIC_CRT "Build libcurl with static CRT with MSVC (/MT)" OFF)
|
||||||
if(CURL_STATIC_CRT AND MSVC)
|
if(CURL_STATIC_CRT AND MSVC)
|
||||||
if(BUILD_STATIC_CURL)
|
if(BUILD_STATIC_CURL OR NOT BUILD_CURL_EXE)
|
||||||
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
|
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
|
||||||
string(APPEND CMAKE_C_FLAGS_RELEASE " -MT")
|
string(APPEND CMAKE_C_FLAGS_RELEASE " -MT")
|
||||||
string(APPEND CMAKE_C_FLAGS_DEBUG " -MTd")
|
string(APPEND CMAKE_C_FLAGS_DEBUG " -MTd")
|
||||||
else()
|
else()
|
||||||
message(WARNING "Static CRT requires curl executable built with static libcurl "
|
message(WARNING "Static CRT requires static or no curl executable.")
|
||||||
"(BUILD_STATIC_LIBS=ON and BUILD_STATIC_CURL=ON).")
|
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
@ -1954,22 +1953,6 @@ endif()
|
|||||||
|
|
||||||
# Some other minor tests
|
# Some other minor tests
|
||||||
|
|
||||||
if(CMAKE_COMPILER_IS_GNUCC AND APPLE)
|
|
||||||
include(CheckCCompilerFlag)
|
|
||||||
check_c_compiler_flag("-Wno-long-double" HAVE_C_FLAG_Wno_long_double)
|
|
||||||
if(HAVE_C_FLAG_Wno_long_double)
|
|
||||||
# The Mac version of GCC warns about use of long double. Disable it.
|
|
||||||
get_source_file_property(_mprintf_compile_flags "mprintf.c" COMPILE_FLAGS)
|
|
||||||
if(_mprintf_compile_flags)
|
|
||||||
string(APPEND _mprintf_compile_flags " -Wno-long-double")
|
|
||||||
else()
|
|
||||||
set(_mprintf_compile_flags "-Wno-long-double")
|
|
||||||
endif()
|
|
||||||
set_source_files_properties("mprintf.c" PROPERTIES
|
|
||||||
COMPILE_FLAGS ${_mprintf_compile_flags})
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(_cmake_try_compile_target_type_save)
|
if(_cmake_try_compile_target_type_save)
|
||||||
set(CMAKE_TRY_COMPILE_TARGET_TYPE ${_cmake_try_compile_target_type_save})
|
set(CMAKE_TRY_COMPILE_TARGET_TYPE ${_cmake_try_compile_target_type_save})
|
||||||
unset(_cmake_try_compile_target_type_save)
|
unset(_cmake_try_compile_target_type_save)
|
||||||
|
|||||||
33
appveyor.sh
33
appveyor.sh
@ -36,6 +36,8 @@ esac
|
|||||||
if [ "${APPVEYOR_BUILD_WORKER_IMAGE}" = 'Visual Studio 2022' ]; then
|
if [ "${APPVEYOR_BUILD_WORKER_IMAGE}" = 'Visual Studio 2022' ]; then
|
||||||
openssl_root_win="C:/OpenSSL-v34${openssl_suffix}"
|
openssl_root_win="C:/OpenSSL-v34${openssl_suffix}"
|
||||||
elif [ "${APPVEYOR_BUILD_WORKER_IMAGE}" = 'Visual Studio 2019' ]; then
|
elif [ "${APPVEYOR_BUILD_WORKER_IMAGE}" = 'Visual Studio 2019' ]; then
|
||||||
|
openssl_root_win="C:/OpenSSL-v11${openssl_suffix}"
|
||||||
|
elif [ "${APPVEYOR_BUILD_WORKER_IMAGE}" = 'Visual Studio 2013' ]; then
|
||||||
openssl_root_win="C:/OpenSSL${openssl_suffix}"
|
openssl_root_win="C:/OpenSSL${openssl_suffix}"
|
||||||
else
|
else
|
||||||
openssl_root_win="C:/OpenSSL-v111${openssl_suffix}"
|
openssl_root_win="C:/OpenSSL-v111${openssl_suffix}"
|
||||||
@ -52,10 +54,20 @@ if [ "${BUILD_SYSTEM}" = 'CMake' ]; then
|
|||||||
[ -n "${TOOLSET:-}" ] && options+=" -T ${TOOLSET}"
|
[ -n "${TOOLSET:-}" ] && options+=" -T ${TOOLSET}"
|
||||||
[ "${OPENSSL}" = 'ON' ] && options+=" -DOPENSSL_ROOT_DIR=${openssl_root_win}"
|
[ "${OPENSSL}" = 'ON' ] && options+=" -DOPENSSL_ROOT_DIR=${openssl_root_win}"
|
||||||
[ -n "${CURLDEBUG:-}" ] && options+=" -DENABLE_CURLDEBUG=${CURLDEBUG}"
|
[ -n "${CURLDEBUG:-}" ] && options+=" -DENABLE_CURLDEBUG=${CURLDEBUG}"
|
||||||
|
if [ "${APPVEYOR_BUILD_WORKER_IMAGE}" = 'Visual Studio 2013' ]; then
|
||||||
|
mkdir "_bld${_chkprefill}"
|
||||||
|
cd "_bld${_chkprefill}"
|
||||||
|
options+=' ..'
|
||||||
|
root='..'
|
||||||
|
else
|
||||||
|
options+=" -B _bld${_chkprefill}"
|
||||||
|
options+=' -DCMAKE_VS_GLOBALS=TrackFileAccess=false'
|
||||||
|
options+=" -DCMAKE_UNITY_BUILD=${UNITY}"
|
||||||
|
root='.'
|
||||||
|
fi
|
||||||
# shellcheck disable=SC2086
|
# shellcheck disable=SC2086
|
||||||
cmake -B "_bld${_chkprefill}" -G "${PRJ_GEN}" ${TARGET} \
|
time cmake -G "${PRJ_GEN}" ${TARGET} \
|
||||||
-DCMAKE_VS_GLOBALS=TrackFileAccess=false \
|
-DCURL_TEST_BUNDLES=ON \
|
||||||
-DCMAKE_UNITY_BUILD="${UNITY}" -DCURL_TEST_BUNDLES=ON \
|
|
||||||
-DCURL_WERROR=ON \
|
-DCURL_WERROR=ON \
|
||||||
-DBUILD_SHARED_LIBS="${SHARED}" \
|
-DBUILD_SHARED_LIBS="${SHARED}" \
|
||||||
-DCURL_STATIC_CRT=ON \
|
-DCURL_STATIC_CRT=ON \
|
||||||
@ -66,7 +78,8 @@ if [ "${BUILD_SYSTEM}" = 'CMake' ]; then
|
|||||||
-DCURL_USE_OPENSSL="${OPENSSL}" \
|
-DCURL_USE_OPENSSL="${OPENSSL}" \
|
||||||
-DCURL_USE_LIBPSL=OFF \
|
-DCURL_USE_LIBPSL=OFF \
|
||||||
${options} \
|
${options} \
|
||||||
|| { cat _bld/CMakeFiles/CMake* 2>/dev/null; false; }
|
|| { cat ${root}/_bld/CMakeFiles/CMake* 2>/dev/null; false; }
|
||||||
|
[ "${APPVEYOR_BUILD_WORKER_IMAGE}" = 'Visual Studio 2013' ] && cd ..
|
||||||
done
|
done
|
||||||
if [ -d _bld_chkprefill ] && ! diff -u _bld/lib/curl_config.h _bld_chkprefill/lib/curl_config.h; then
|
if [ -d _bld_chkprefill ] && ! diff -u _bld/lib/curl_config.h _bld_chkprefill/lib/curl_config.h; then
|
||||||
cat _bld_chkprefill/CMakeFiles/CMake* 2>/dev/null || true
|
cat _bld_chkprefill/CMakeFiles/CMake* 2>/dev/null || true
|
||||||
@ -74,7 +87,7 @@ if [ "${BUILD_SYSTEM}" = 'CMake' ]; then
|
|||||||
fi
|
fi
|
||||||
echo 'curl_config.h'; grep -F '#define' _bld/lib/curl_config.h | sort || true
|
echo 'curl_config.h'; grep -F '#define' _bld/lib/curl_config.h | sort || true
|
||||||
# shellcheck disable=SC2086
|
# shellcheck disable=SC2086
|
||||||
if ! cmake --build _bld --config "${PRJ_CFG}" --parallel 2 -- ${BUILD_OPT:-}; then
|
if ! time cmake --build _bld --config "${PRJ_CFG}" --parallel 2 -- ${BUILD_OPT:-}; then
|
||||||
if [ "${PRJ_GEN}" = 'Visual Studio 9 2008' ]; then
|
if [ "${PRJ_GEN}" = 'Visual Studio 9 2008' ]; then
|
||||||
find . -name BuildLog.htm -exec dos2unix '{}' +
|
find . -name BuildLog.htm -exec dos2unix '{}' +
|
||||||
find . -name BuildLog.htm -exec cat '{}' +
|
find . -name BuildLog.htm -exec cat '{}' +
|
||||||
@ -127,14 +140,14 @@ fi
|
|||||||
|
|
||||||
if [ "${TFLAGS}" != 'skipall' ] && \
|
if [ "${TFLAGS}" != 'skipall' ] && \
|
||||||
[ "${BUILD_SYSTEM}" = 'CMake' ]; then
|
[ "${BUILD_SYSTEM}" = 'CMake' ]; then
|
||||||
cmake --build _bld --config "${PRJ_CFG}" --parallel 2 --target testdeps
|
time cmake --build _bld --config "${PRJ_CFG}" --parallel 2 --target testdeps
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# run tests
|
# run tests
|
||||||
|
|
||||||
if [ "${TFLAGS}" != 'skipall' ] && \
|
if [ "${TFLAGS}" != 'skipall' ] && \
|
||||||
[ "${TFLAGS}" != 'skiprun' ]; then
|
[ "${TFLAGS}" != 'skiprun' ]; then
|
||||||
export CURL_DIRSUFFIX="${PRJ_CFG}/"
|
export CURL_DIRSUFFIX="${PRJ_CFG}"
|
||||||
if [ -x "$(cygpath "${SYSTEMROOT}/System32/curl.exe")" ]; then
|
if [ -x "$(cygpath "${SYSTEMROOT}/System32/curl.exe")" ]; then
|
||||||
TFLAGS+=" -ac $(cygpath "${SYSTEMROOT}/System32/curl.exe")"
|
TFLAGS+=" -ac $(cygpath "${SYSTEMROOT}/System32/curl.exe")"
|
||||||
elif [ -x "$(cygpath 'C:/msys64/usr/bin/curl.exe')" ]; then
|
elif [ -x "$(cygpath 'C:/msys64/usr/bin/curl.exe')" ]; then
|
||||||
@ -142,12 +155,12 @@ if [ "${TFLAGS}" != 'skipall' ] && \
|
|||||||
fi
|
fi
|
||||||
TFLAGS+=' -j0'
|
TFLAGS+=' -j0'
|
||||||
if [ "${BUILD_SYSTEM}" = 'CMake' ]; then
|
if [ "${BUILD_SYSTEM}" = 'CMake' ]; then
|
||||||
cmake --build _bld --config "${PRJ_CFG}" --target test-ci
|
time cmake --build _bld --config "${PRJ_CFG}" --target test-ci
|
||||||
else
|
else
|
||||||
(
|
(
|
||||||
TFLAGS="-a -p !flaky -r -rm ${TFLAGS}"
|
TFLAGS="-a -p !flaky -r -rm ${TFLAGS}"
|
||||||
cd _bld/tests
|
cd _bld/tests
|
||||||
./runtests.pl
|
time ./runtests.pl
|
||||||
)
|
)
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@ -156,5 +169,5 @@ fi
|
|||||||
|
|
||||||
if [ "${EXAMPLES}" = 'ON' ] && \
|
if [ "${EXAMPLES}" = 'ON' ] && \
|
||||||
[ "${BUILD_SYSTEM}" = 'CMake' ]; then
|
[ "${BUILD_SYSTEM}" = 'CMake' ]; then
|
||||||
cmake --build _bld --config "${PRJ_CFG}" --parallel 2 --target curl-examples
|
time cmake --build _bld --config "${PRJ_CFG}" --parallel 2 --target curl-examples
|
||||||
fi
|
fi
|
||||||
|
|||||||
@ -61,15 +61,15 @@ environment:
|
|||||||
SCHANNEL: 'ON'
|
SCHANNEL: 'ON'
|
||||||
DEBUG: 'OFF'
|
DEBUG: 'OFF'
|
||||||
CURLDEBUG: 'ON'
|
CURLDEBUG: 'ON'
|
||||||
- job_name: 'CMake, VS2008, Debug, x86, OpenSSL 1.1.1 + Schannel, Shared, Build-tests & examples'
|
- job_name: 'CMake, VS2008, Debug, x86, OpenSSL 1.0.2 + Schannel, Shared, Build-tests & examples'
|
||||||
APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2015'
|
APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2013'
|
||||||
PRJ_GEN: 'Visual Studio 9 2008'
|
PRJ_GEN: 'Visual Studio 9 2008'
|
||||||
TARGET: '-A Win32'
|
TARGET: '-A Win32'
|
||||||
PRJ_CFG: Debug
|
PRJ_CFG: Debug
|
||||||
OPENSSL: 'ON'
|
OPENSSL: 'ON'
|
||||||
SCHANNEL: 'ON'
|
SCHANNEL: 'ON'
|
||||||
SHARED: 'ON'
|
SHARED: 'ON'
|
||||||
EXAMPLES: 'OFF'
|
EXAMPLES: 'ON'
|
||||||
- job_name: 'CMake, VS2010, Debug, x64, Schannel, Shared, Build-tests & examples'
|
- job_name: 'CMake, VS2010, Debug, x64, Schannel, Shared, Build-tests & examples'
|
||||||
APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2015'
|
APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2015'
|
||||||
PRJ_GEN: 'Visual Studio 10 2010'
|
PRJ_GEN: 'Visual Studio 10 2010'
|
||||||
@ -109,7 +109,7 @@ environment:
|
|||||||
OPENSSL: 'ON'
|
OPENSSL: 'ON'
|
||||||
SHARED: 'ON'
|
SHARED: 'ON'
|
||||||
TFLAGS: 'skipall'
|
TFLAGS: 'skipall'
|
||||||
- job_name: 'CMake, VS2019, Debug, x64, OpenSSL 1.0.2 + Schannel, Shared, Build-tests'
|
- job_name: 'CMake, VS2019, Debug, x64, OpenSSL 1.1.0 + Schannel, Shared, Build-tests'
|
||||||
APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2019'
|
APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2019'
|
||||||
PRJ_GEN: 'Visual Studio 16 2019'
|
PRJ_GEN: 'Visual Studio 16 2019'
|
||||||
TARGET: '-A x64'
|
TARGET: '-A x64'
|
||||||
|
|||||||
@ -238,7 +238,7 @@ target_link_libraries(my_target PRIVATE CURL::libcurl)
|
|||||||
- `CURL_LIBCURL_VERSIONED_SYMBOLS`: Enable libcurl versioned symbols. Default: `OFF`
|
- `CURL_LIBCURL_VERSIONED_SYMBOLS`: Enable libcurl versioned symbols. Default: `OFF`
|
||||||
- `CURL_LIBCURL_VERSIONED_SYMBOLS_PREFIX`: Override default versioned symbol prefix. Default: `<TLS-BACKEND>_` or `MULTISSL_`
|
- `CURL_LIBCURL_VERSIONED_SYMBOLS_PREFIX`: Override default versioned symbol prefix. Default: `<TLS-BACKEND>_` or `MULTISSL_`
|
||||||
- `CURL_LTO`: Enable compiler Link Time Optimizations. Default: `OFF`
|
- `CURL_LTO`: Enable compiler Link Time Optimizations. Default: `OFF`
|
||||||
- `CURL_STATIC_CRT`: Build libcurl with static CRT with MSVC (`/MT`) (requires static curl executable). Default: `OFF`
|
- `CURL_STATIC_CRT`: Build libcurl with static CRT with MSVC (`/MT`) (requires static or no curl executable). Default: `OFF`
|
||||||
- `CURL_TARGET_WINDOWS_VERSION`: Minimum target Windows version as hex string.
|
- `CURL_TARGET_WINDOWS_VERSION`: Minimum target Windows version as hex string.
|
||||||
- `CURL_TEST_BUNDLES`: Bundle `libtest` and `unittest` tests into single binaries. Default: `OFF`
|
- `CURL_TEST_BUNDLES`: Bundle `libtest` and `unittest` tests into single binaries. Default: `OFF`
|
||||||
- `CURL_WERROR`: Turn compiler warnings into errors. Default: `OFF`
|
- `CURL_WERROR`: Turn compiler warnings into errors. Default: `OFF`
|
||||||
|
|||||||
@ -247,11 +247,11 @@ local system or network, the bar is raised. If a local user wrongfully has
|
|||||||
elevated rights on your system enough to attack curl, they can probably
|
elevated rights on your system enough to attack curl, they can probably
|
||||||
already do much worse harm and the problem is not really in curl.
|
already do much worse harm and the problem is not really in curl.
|
||||||
|
|
||||||
## Experiments
|
## Debug & Experiments
|
||||||
|
|
||||||
Vulnerabilities in features which are off by default (in the build) and
|
Vulnerabilities in features which are off by default (in the build) and
|
||||||
documented as experimental, are not eligible for a reward and we do not
|
documented as experimental, or exist only in debug mode, are not eligible for a
|
||||||
consider them security problems.
|
reward and we do not consider them security problems.
|
||||||
|
|
||||||
## URL inconsistencies
|
## URL inconsistencies
|
||||||
|
|
||||||
|
|||||||
@ -59,4 +59,4 @@ used.
|
|||||||
|
|
||||||
Doing FTP over an HTTP proxy without --proxytunnel makes curl do HTTP with an
|
Doing FTP over an HTTP proxy without --proxytunnel makes curl do HTTP with an
|
||||||
FTP URL over the proxy. For such transfers, common FTP specific options do not
|
FTP URL over the proxy. For such transfers, common FTP specific options do not
|
||||||
work, including --ftp-ssl-reqd and --ftp-ssl-control.
|
work, including --ssl-reqd and --ftp-ssl-control.
|
||||||
|
|||||||
@ -24,53 +24,53 @@ displays information about the curl and libcurl installation.
|
|||||||
|
|
||||||
# OPTIONS
|
# OPTIONS
|
||||||
|
|
||||||
## --ca
|
## `--ca`
|
||||||
|
|
||||||
Displays the built-in path to the CA cert bundle this libcurl uses.
|
Displays the built-in path to the CA cert bundle this libcurl uses.
|
||||||
|
|
||||||
## --cc
|
## `--cc`
|
||||||
|
|
||||||
Displays the compiler used to build libcurl.
|
Displays the compiler used to build libcurl.
|
||||||
|
|
||||||
## --cflags
|
## `--cflags`
|
||||||
|
|
||||||
Set of compiler options (CFLAGS) to use when compiling files that use
|
Set of compiler options (CFLAGS) to use when compiling files that use
|
||||||
libcurl. Currently that is only the include path to the curl include files.
|
libcurl. Currently that is only the include path to the curl include files.
|
||||||
|
|
||||||
## --checkfor [version]
|
## `--checkfor [version]`
|
||||||
|
|
||||||
Specify the oldest possible libcurl version string you want, and this script
|
Specify the oldest possible libcurl version string you want, and this script
|
||||||
returns 0 if the current installation is new enough or it returns 1 and
|
returns 0 if the current installation is new enough or it returns 1 and
|
||||||
outputs a text saying that the current version is not new enough. (Added in
|
outputs a text saying that the current version is not new enough. (Added in
|
||||||
7.15.4)
|
7.15.4)
|
||||||
|
|
||||||
## --configure
|
## `--configure`
|
||||||
|
|
||||||
Displays the arguments given to configure when building curl.
|
Displays the arguments given to configure when building curl.
|
||||||
|
|
||||||
## --feature
|
## `--feature`
|
||||||
|
|
||||||
Lists what particular main features the installed libcurl was built with. At
|
Lists what particular main features the installed libcurl was built with. At
|
||||||
the time of writing, this list may include SSL, KRB4 or IPv6. Do not assume
|
the time of writing, this list may include SSL, KRB4 or IPv6. Do not assume
|
||||||
any particular order. The keywords are separated by newlines. There may be
|
any particular order. The keywords are separated by newlines. There may be
|
||||||
none, one, or several keywords in the list.
|
none, one, or several keywords in the list.
|
||||||
|
|
||||||
## --help
|
## `--help`
|
||||||
|
|
||||||
Displays the available options.
|
Displays the available options.
|
||||||
|
|
||||||
## --libs
|
## `--libs`
|
||||||
|
|
||||||
Shows the complete set of libs and other linker options you need in order to
|
Shows the complete set of libs and other linker options you need in order to
|
||||||
link your application with libcurl.
|
link your application with libcurl.
|
||||||
|
|
||||||
## --prefix
|
## `--prefix`
|
||||||
|
|
||||||
This is the prefix used when libcurl was installed. libcurl is then installed
|
This is the prefix used when libcurl was installed. libcurl is then installed
|
||||||
in $prefix/lib and its header files are installed in $prefix/include and so
|
in $prefix/lib and its header files are installed in $prefix/include and so
|
||||||
on. The prefix is set with "configure --prefix".
|
on. The prefix is set with `configure --prefix`.
|
||||||
|
|
||||||
## --protocols
|
## `--protocols`
|
||||||
|
|
||||||
Lists what particular protocols the installed libcurl was built to support. At
|
Lists what particular protocols the installed libcurl was built to support. At
|
||||||
the time of writing, this list may include HTTP, HTTPS, FTP, FTPS, FILE,
|
the time of writing, this list may include HTTP, HTTPS, FTP, FTPS, FILE,
|
||||||
@ -78,22 +78,22 @@ TELNET, LDAP, DICT and many more. Do not assume any particular order. The
|
|||||||
protocols are listed using uppercase and are separated by newlines. There may
|
protocols are listed using uppercase and are separated by newlines. There may
|
||||||
be none, one, or several protocols in the list. (Added in 7.13.0)
|
be none, one, or several protocols in the list. (Added in 7.13.0)
|
||||||
|
|
||||||
## --ssl-backends
|
## `--ssl-backends`
|
||||||
|
|
||||||
Lists the SSL backends that were enabled when libcurl was built. It might be
|
Lists the SSL backends that were enabled when libcurl was built. It might be
|
||||||
no, one or several names. If more than one name, they appear comma-separated.
|
no, one or several names. If more than one name, they appear comma-separated.
|
||||||
(Added in 7.58.0)
|
(Added in 7.58.0)
|
||||||
|
|
||||||
## --static-libs
|
## `--static-libs`
|
||||||
|
|
||||||
Shows the complete set of libs and other linker options you need in order to
|
Shows the complete set of libs and other linker options you need in order to
|
||||||
link your application with libcurl statically. (Added in 7.17.1)
|
link your application with libcurl statically. (Added in 7.17.1)
|
||||||
|
|
||||||
## --version
|
## `--version`
|
||||||
|
|
||||||
Outputs version information about the installed libcurl.
|
Outputs version information about the installed libcurl.
|
||||||
|
|
||||||
## --vernum
|
## `--vernum`
|
||||||
|
|
||||||
Outputs version information about the installed libcurl, in numerical mode.
|
Outputs version information about the installed libcurl, in numerical mode.
|
||||||
This shows the version number, in hexadecimal, using 8 bits for each part:
|
This shows the version number, in hexadecimal, using 8 bits for each part:
|
||||||
@ -104,22 +104,21 @@ omitted. (This option was broken in the 7.15.0 release.)
|
|||||||
# EXAMPLES
|
# EXAMPLES
|
||||||
|
|
||||||
What linker options do I need when I link with libcurl?
|
What linker options do I need when I link with libcurl?
|
||||||
~~~
|
|
||||||
$ curl-config --libs
|
$ curl-config --libs
|
||||||
~~~
|
|
||||||
What compiler options do I need when I compile using libcurl functions?
|
What compiler options do I need when I compile using libcurl functions?
|
||||||
~~~
|
|
||||||
$ curl-config --cflags
|
$ curl-config --cflags
|
||||||
~~~
|
|
||||||
How do I know if libcurl was built with SSL support?
|
How do I know if libcurl was built with SSL support?
|
||||||
~~~
|
|
||||||
$ curl-config --feature | grep SSL
|
$ curl-config --feature | grep SSL
|
||||||
~~~
|
|
||||||
What's the installed libcurl version?
|
What's the installed libcurl version?
|
||||||
~~~
|
|
||||||
$ curl-config --version
|
$ curl-config --version
|
||||||
~~~
|
|
||||||
How do I build a single file with a one-line command?
|
How do I build a single file with a one-line command?
|
||||||
~~~
|
|
||||||
$ `curl-config --cc --cflags` -o example source.c `curl-config --libs`
|
$ `curl-config --cc --cflags` -o example source.c `curl-config --libs`
|
||||||
~~~
|
|
||||||
|
|||||||
@ -298,14 +298,19 @@ int main(void)
|
|||||||
|
|
||||||
filter = (struct connection_filter *)calloc(1, sizeof(*filter));
|
filter = (struct connection_filter *)calloc(1, sizeof(*filter));
|
||||||
if(!filter)
|
if(!filter)
|
||||||
exit(1);
|
return 1;
|
||||||
|
|
||||||
if(curl_global_init(CURL_GLOBAL_DEFAULT))
|
if(curl_global_init(CURL_GLOBAL_DEFAULT)) {
|
||||||
exit(1);
|
free(filter);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
curl = curl_easy_init();
|
curl = curl_easy_init();
|
||||||
if(!curl)
|
if(!curl) {
|
||||||
exit(1);
|
curl_global_cleanup();
|
||||||
|
free(filter);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* Set the target URL */
|
/* Set the target URL */
|
||||||
curl_easy_setopt(curl, CURLOPT_URL, "http://localhost");
|
curl_easy_setopt(curl, CURLOPT_URL, "http://localhost");
|
||||||
|
|||||||
@ -79,12 +79,12 @@ int main(int argc, char *argv[])
|
|||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"\rUsage: %s [-m=1|2|5|10|20|50|100] [-t] [-x] [url]\n",
|
"\rUsage: %s [-m=1|2|5|10|20|50|100] [-t] [-x] [url]\n",
|
||||||
appname);
|
appname);
|
||||||
exit(1);
|
return 1;
|
||||||
case 'v':
|
case 'v':
|
||||||
case 'V':
|
case 'V':
|
||||||
fprintf(stderr, "\r%s %s - %s\n",
|
fprintf(stderr, "\r%s %s - %s\n",
|
||||||
appname, CHKSPEED_VERSION, curl_version());
|
appname, CHKSPEED_VERSION, curl_version());
|
||||||
exit(1);
|
return 1;
|
||||||
case 'a':
|
case 'a':
|
||||||
case 'A':
|
case 'A':
|
||||||
prtall = 1;
|
prtall = 1;
|
||||||
|
|||||||
@ -34,8 +34,7 @@
|
|||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
#include <curl/mprintf.h>
|
#include <curl/mprintf.h>
|
||||||
|
|
||||||
static void
|
static int print_cookies(CURL *curl)
|
||||||
print_cookies(CURL *curl)
|
|
||||||
{
|
{
|
||||||
CURLcode res;
|
CURLcode res;
|
||||||
struct curl_slist *cookies;
|
struct curl_slist *cookies;
|
||||||
@ -47,7 +46,7 @@ print_cookies(CURL *curl)
|
|||||||
if(res != CURLE_OK) {
|
if(res != CURLE_OK) {
|
||||||
fprintf(stderr, "Curl curl_easy_getinfo failed: %s\n",
|
fprintf(stderr, "Curl curl_easy_getinfo failed: %s\n",
|
||||||
curl_easy_strerror(res));
|
curl_easy_strerror(res));
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
nc = cookies;
|
nc = cookies;
|
||||||
i = 1;
|
i = 1;
|
||||||
@ -60,6 +59,8 @@ print_cookies(CURL *curl)
|
|||||||
printf("(none)\n");
|
printf("(none)\n");
|
||||||
}
|
}
|
||||||
curl_slist_free_all(cookies);
|
curl_slist_free_all(cookies);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|||||||
@ -418,22 +418,22 @@ static int init_fifo(GlobalInfo *g)
|
|||||||
struct epoll_event epev;
|
struct epoll_event epev;
|
||||||
|
|
||||||
fprintf(MSG_OUT, "Creating named pipe \"%s\"\n", fifo);
|
fprintf(MSG_OUT, "Creating named pipe \"%s\"\n", fifo);
|
||||||
if(lstat (fifo, &st) == 0) {
|
if(lstat(fifo, &st) == 0) {
|
||||||
if((st.st_mode & S_IFMT) == S_IFREG) {
|
if((st.st_mode & S_IFMT) == S_IFREG) {
|
||||||
errno = EEXIST;
|
errno = EEXIST;
|
||||||
perror("lstat");
|
perror("lstat");
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
unlink(fifo);
|
unlink(fifo);
|
||||||
if(mkfifo (fifo, 0600) == -1) {
|
if(mkfifo(fifo, 0600) == -1) {
|
||||||
perror("mkfifo");
|
perror("mkfifo");
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
sockfd = open(fifo, O_RDWR | O_NONBLOCK, 0);
|
sockfd = open(fifo, O_RDWR | O_NONBLOCK, 0);
|
||||||
if(sockfd == -1) {
|
if(sockfd == -1) {
|
||||||
perror("open");
|
perror("open");
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
g->fifofd = sockfd;
|
g->fifofd = sockfd;
|
||||||
@ -478,13 +478,13 @@ int main(int argc, char **argv)
|
|||||||
g.epfd = epoll_create1(EPOLL_CLOEXEC);
|
g.epfd = epoll_create1(EPOLL_CLOEXEC);
|
||||||
if(g.epfd == -1) {
|
if(g.epfd == -1) {
|
||||||
perror("epoll_create1 failed");
|
perror("epoll_create1 failed");
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
g.tfd = timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK | TFD_CLOEXEC);
|
g.tfd = timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK | TFD_CLOEXEC);
|
||||||
if(g.tfd == -1) {
|
if(g.tfd == -1) {
|
||||||
perror("timerfd_create failed");
|
perror("timerfd_create failed");
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(&its, 0, sizeof(struct itimerspec));
|
memset(&its, 0, sizeof(struct itimerspec));
|
||||||
@ -496,7 +496,8 @@ int main(int argc, char **argv)
|
|||||||
ev.data.fd = g.tfd;
|
ev.data.fd = g.tfd;
|
||||||
epoll_ctl(g.epfd, EPOLL_CTL_ADD, g.tfd, &ev);
|
epoll_ctl(g.epfd, EPOLL_CTL_ADD, g.tfd, &ev);
|
||||||
|
|
||||||
init_fifo(&g);
|
if(init_fifo(&g))
|
||||||
|
return 1;
|
||||||
g.multi = curl_multi_init();
|
g.multi = curl_multi_init();
|
||||||
|
|
||||||
/* setup the generic multi interface options we want */
|
/* setup the generic multi interface options we want */
|
||||||
@ -521,7 +522,7 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
perror("epoll_wait");
|
perror("epoll_wait");
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -402,22 +402,22 @@ static int init_fifo(GlobalInfo *g)
|
|||||||
curl_socket_t sockfd;
|
curl_socket_t sockfd;
|
||||||
|
|
||||||
fprintf(MSG_OUT, "Creating named pipe \"%s\"\n", fifo);
|
fprintf(MSG_OUT, "Creating named pipe \"%s\"\n", fifo);
|
||||||
if(lstat (fifo, &st) == 0) {
|
if(lstat(fifo, &st) == 0) {
|
||||||
if((st.st_mode & S_IFMT) == S_IFREG) {
|
if((st.st_mode & S_IFMT) == S_IFREG) {
|
||||||
errno = EEXIST;
|
errno = EEXIST;
|
||||||
perror("lstat");
|
perror("lstat");
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
unlink(fifo);
|
unlink(fifo);
|
||||||
if(mkfifo (fifo, 0600) == -1) {
|
if(mkfifo(fifo, 0600) == -1) {
|
||||||
perror("mkfifo");
|
perror("mkfifo");
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
sockfd = open(fifo, O_RDWR | O_NONBLOCK, 0);
|
sockfd = open(fifo, O_RDWR | O_NONBLOCK, 0);
|
||||||
if(sockfd == -1) {
|
if(sockfd == -1) {
|
||||||
perror("open");
|
perror("open");
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
g->input = fdopen(sockfd, "r");
|
g->input = fdopen(sockfd, "r");
|
||||||
|
|
||||||
@ -436,7 +436,8 @@ int main(int argc, char **argv)
|
|||||||
memset(&g, 0, sizeof(GlobalInfo));
|
memset(&g, 0, sizeof(GlobalInfo));
|
||||||
g.loop = ev_default_loop(0);
|
g.loop = ev_default_loop(0);
|
||||||
|
|
||||||
init_fifo(&g);
|
if(init_fifo(&g))
|
||||||
|
return 1;
|
||||||
g.multi = curl_multi_init();
|
g.multi = curl_multi_init();
|
||||||
|
|
||||||
ev_timer_init(&g.timer_event, timer_cb, 0., 0.);
|
ev_timer_init(&g.timer_event, timer_cb, 0., 0.);
|
||||||
|
|||||||
@ -392,21 +392,21 @@ int init_fifo(void)
|
|||||||
if((st.st_mode & S_IFMT) == S_IFREG) {
|
if((st.st_mode & S_IFMT) == S_IFREG) {
|
||||||
errno = EEXIST;
|
errno = EEXIST;
|
||||||
perror("lstat");
|
perror("lstat");
|
||||||
exit(1);
|
return CURL_SOCKET_BAD;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unlink(fifo);
|
unlink(fifo);
|
||||||
if(mkfifo (fifo, 0600) == -1) {
|
if(mkfifo(fifo, 0600) == -1) {
|
||||||
perror("mkfifo");
|
perror("mkfifo");
|
||||||
exit(1);
|
return CURL_SOCKET_BAD;
|
||||||
}
|
}
|
||||||
|
|
||||||
socket = open(fifo, O_RDWR | O_NONBLOCK, 0);
|
socket = open(fifo, O_RDWR | O_NONBLOCK, 0);
|
||||||
|
|
||||||
if(socket == -1) {
|
if(socket == CURL_SOCKET_BAD) {
|
||||||
perror("open");
|
perror("open");
|
||||||
exit(1);
|
return socket;
|
||||||
}
|
}
|
||||||
MSG_OUT("Now, pipe some URL's into > %s\n", fifo);
|
MSG_OUT("Now, pipe some URL's into > %s\n", fifo);
|
||||||
|
|
||||||
@ -421,6 +421,8 @@ int main(void)
|
|||||||
GIOChannel* ch;
|
GIOChannel* ch;
|
||||||
|
|
||||||
fd = init_fifo();
|
fd = init_fifo();
|
||||||
|
if(fd == CURL_SOCKET_BAD)
|
||||||
|
return 1;
|
||||||
ch = g_io_channel_unix_new(fd);
|
ch = g_io_channel_unix_new(fd);
|
||||||
g_io_add_watch(ch, G_IO_IN, fifo_cb, g);
|
g_io_add_watch(ch, G_IO_IN, fifo_cb, g);
|
||||||
gmain = g_main_loop_new(NULL, FALSE);
|
gmain = g_main_loop_new(NULL, FALSE);
|
||||||
|
|||||||
@ -399,22 +399,22 @@ static int init_fifo(GlobalInfo *g)
|
|||||||
curl_socket_t sockfd;
|
curl_socket_t sockfd;
|
||||||
|
|
||||||
fprintf(MSG_OUT, "Creating named pipe \"%s\"\n", fifo);
|
fprintf(MSG_OUT, "Creating named pipe \"%s\"\n", fifo);
|
||||||
if(lstat (fifo, &st) == 0) {
|
if(lstat(fifo, &st) == 0) {
|
||||||
if((st.st_mode & S_IFMT) == S_IFREG) {
|
if((st.st_mode & S_IFMT) == S_IFREG) {
|
||||||
errno = EEXIST;
|
errno = EEXIST;
|
||||||
perror("lstat");
|
perror("lstat");
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
unlink(fifo);
|
unlink(fifo);
|
||||||
if(mkfifo (fifo, 0600) == -1) {
|
if(mkfifo (fifo, 0600) == -1) {
|
||||||
perror("mkfifo");
|
perror("mkfifo");
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
sockfd = open(fifo, O_RDWR | O_NONBLOCK, 0);
|
sockfd = open(fifo, O_RDWR | O_NONBLOCK, 0);
|
||||||
if(sockfd == -1) {
|
if(sockfd == -1) {
|
||||||
perror("open");
|
perror("open");
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
g->input = fdopen(sockfd, "r");
|
g->input = fdopen(sockfd, "r");
|
||||||
|
|
||||||
@ -440,7 +440,8 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
memset(&g, 0, sizeof(GlobalInfo));
|
memset(&g, 0, sizeof(GlobalInfo));
|
||||||
g.evbase = event_base_new();
|
g.evbase = event_base_new();
|
||||||
init_fifo(&g);
|
if(init_fifo(&g))
|
||||||
|
return 1;
|
||||||
g.multi = curl_multi_init();
|
g.multi = curl_multi_init();
|
||||||
evtimer_assign(&g.timer_event, g.evbase, timer_cb, &g);
|
evtimer_assign(&g.timer_event, g.evbase, timer_cb, &g);
|
||||||
|
|
||||||
|
|||||||
@ -94,7 +94,7 @@ static bool init(CURL *&conn, const char *url)
|
|||||||
|
|
||||||
if(conn == NULL) {
|
if(conn == NULL) {
|
||||||
fprintf(stderr, "Failed to create CURL connection\n");
|
fprintf(stderr, "Failed to create CURL connection\n");
|
||||||
exit(EXIT_FAILURE);
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
code = curl_easy_setopt(conn, CURLOPT_ERRORBUFFER, errorBuffer);
|
code = curl_easy_setopt(conn, CURLOPT_ERRORBUFFER, errorBuffer);
|
||||||
@ -270,7 +270,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
if(argc != 2) {
|
if(argc != 2) {
|
||||||
fprintf(stderr, "Usage: %s <url>\n", argv[0]);
|
fprintf(stderr, "Usage: %s <url>\n", argv[0]);
|
||||||
exit(EXIT_FAILURE);
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
curl_global_init(CURL_GLOBAL_DEFAULT);
|
curl_global_init(CURL_GLOBAL_DEFAULT);
|
||||||
@ -279,7 +279,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
if(!init(conn, argv[1])) {
|
if(!init(conn, argv[1])) {
|
||||||
fprintf(stderr, "Connection initialization failed\n");
|
fprintf(stderr, "Connection initialization failed\n");
|
||||||
exit(EXIT_FAILURE);
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Retrieve content for the URL
|
// Retrieve content for the URL
|
||||||
@ -289,7 +289,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
if(code != CURLE_OK) {
|
if(code != CURLE_OK) {
|
||||||
fprintf(stderr, "Failed to get '%s' [%s]\n", argv[1], errorBuffer);
|
fprintf(stderr, "Failed to get '%s' [%s]\n", argv[1], errorBuffer);
|
||||||
exit(EXIT_FAILURE);
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parse the (assumed) HTML code
|
// Parse the (assumed) HTML code
|
||||||
|
|||||||
@ -142,7 +142,7 @@ int my_trace(CURL *handle, curl_infotype type,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setup(struct transfer *t, int num)
|
static int setup(struct transfer *t, int num)
|
||||||
{
|
{
|
||||||
char filename[128];
|
char filename[128];
|
||||||
CURL *hnd;
|
CURL *hnd;
|
||||||
@ -155,7 +155,7 @@ static void setup(struct transfer *t, int num)
|
|||||||
if(!t->out) {
|
if(!t->out) {
|
||||||
fprintf(stderr, "error: could not open file %s for writing: %s\n",
|
fprintf(stderr, "error: could not open file %s for writing: %s\n",
|
||||||
filename, strerror(errno));
|
filename, strerror(errno));
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* write to this file */
|
/* write to this file */
|
||||||
@ -179,6 +179,7 @@ static void setup(struct transfer *t, int num)
|
|||||||
/* wait for pipe connection to confirm */
|
/* wait for pipe connection to confirm */
|
||||||
curl_easy_setopt(hnd, CURLOPT_PIPEWAIT, 1L);
|
curl_easy_setopt(hnd, CURLOPT_PIPEWAIT, 1L);
|
||||||
#endif
|
#endif
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -204,7 +205,8 @@ int main(int argc, char **argv)
|
|||||||
multi_handle = curl_multi_init();
|
multi_handle = curl_multi_init();
|
||||||
|
|
||||||
for(i = 0; i < num_transfers; i++) {
|
for(i = 0; i < num_transfers; i++) {
|
||||||
setup(&trans[i], i);
|
if(setup(&trans[i], i))
|
||||||
|
return 1;
|
||||||
|
|
||||||
/* add the individual transfer */
|
/* add the individual transfer */
|
||||||
curl_multi_add_handle(multi_handle, trans[i].easy);
|
curl_multi_add_handle(multi_handle, trans[i].easy);
|
||||||
|
|||||||
@ -200,7 +200,7 @@ static size_t read_callback(char *ptr, size_t size, size_t nmemb, void *userp)
|
|||||||
return retcode;
|
return retcode;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setup(struct input *i, int num, const char *upload)
|
static int setup(struct input *i, int num, const char *upload)
|
||||||
{
|
{
|
||||||
FILE *out;
|
FILE *out;
|
||||||
char url[256];
|
char url[256];
|
||||||
@ -209,14 +209,15 @@ static void setup(struct input *i, int num, const char *upload)
|
|||||||
curl_off_t uploadsize;
|
curl_off_t uploadsize;
|
||||||
CURL *hnd;
|
CURL *hnd;
|
||||||
|
|
||||||
hnd = i->hnd = curl_easy_init();
|
hnd = i->hnd = NULL;
|
||||||
|
|
||||||
i->num = num;
|
i->num = num;
|
||||||
curl_msnprintf(filename, 128, "dl-%d", num);
|
curl_msnprintf(filename, 128, "dl-%d", num);
|
||||||
out = fopen(filename, "wb");
|
out = fopen(filename, "wb");
|
||||||
if(!out) {
|
if(!out) {
|
||||||
fprintf(stderr, "error: could not open file %s for writing: %s\n", upload,
|
fprintf(stderr, "error: could not open file %s for writing: %s\n", upload,
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
curl_msnprintf(url, 256, "https://localhost:8443/upload-%d", num);
|
curl_msnprintf(url, 256, "https://localhost:8443/upload-%d", num);
|
||||||
@ -225,7 +226,8 @@ static void setup(struct input *i, int num, const char *upload)
|
|||||||
if(stat(upload, &file_info)) {
|
if(stat(upload, &file_info)) {
|
||||||
fprintf(stderr, "error: could not stat file %s: %s\n", upload,
|
fprintf(stderr, "error: could not stat file %s: %s\n", upload,
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
exit(1);
|
fclose(out);
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
uploadsize = file_info.st_size;
|
uploadsize = file_info.st_size;
|
||||||
@ -234,9 +236,12 @@ static void setup(struct input *i, int num, const char *upload)
|
|||||||
if(!i->in) {
|
if(!i->in) {
|
||||||
fprintf(stderr, "error: could not open file %s for reading: %s\n", upload,
|
fprintf(stderr, "error: could not open file %s for reading: %s\n", upload,
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
exit(1);
|
fclose(out);
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hnd = i->hnd = curl_easy_init();
|
||||||
|
|
||||||
/* write to this file */
|
/* write to this file */
|
||||||
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, out);
|
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, out);
|
||||||
|
|
||||||
@ -269,6 +274,7 @@ static void setup(struct input *i, int num, const char *upload)
|
|||||||
/* wait for pipe connection to confirm */
|
/* wait for pipe connection to confirm */
|
||||||
curl_easy_setopt(hnd, CURLOPT_PIPEWAIT, 1L);
|
curl_easy_setopt(hnd, CURLOPT_PIPEWAIT, 1L);
|
||||||
#endif
|
#endif
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -301,7 +307,8 @@ int main(int argc, char **argv)
|
|||||||
multi_handle = curl_multi_init();
|
multi_handle = curl_multi_init();
|
||||||
|
|
||||||
for(i = 0; i < num_transfers; i++) {
|
for(i = 0; i < num_transfers; i++) {
|
||||||
setup(&trans[i], i, filename);
|
if(setup(&trans[i], i, filename))
|
||||||
|
return 1;
|
||||||
|
|
||||||
/* add the individual transfer */
|
/* add the individual transfer */
|
||||||
curl_multi_add_handle(multi_handle, trans[i].hnd);
|
curl_multi_add_handle(multi_handle, trans[i].hnd);
|
||||||
|
|||||||
@ -28,11 +28,10 @@ const struct curl_easyoption *curl_easy_option_by_id(CURLoption id);
|
|||||||
# DESCRIPTION
|
# DESCRIPTION
|
||||||
|
|
||||||
Given a *CURLoption* **id**, this function returns a pointer to the
|
Given a *CURLoption* **id**, this function returns a pointer to the
|
||||||
*curl_easyoption* struct, holding information about the
|
*curl_easyoption* struct, holding information about the curl_easy_setopt(3)
|
||||||
curl_easy_setopt(3) option using that id. The option id is the CURLOPT_
|
option using that id. The option id is the `CURLOPT_` prefixed ones provided
|
||||||
prefix ones provided in the standard curl/curl.h header file. This function
|
in the standard curl/curl.h header file. This function returns the non-alias
|
||||||
returns the non-alias version of the cases where there is an alias function as
|
version of the cases where there is an alias function as well.
|
||||||
well.
|
|
||||||
|
|
||||||
If libcurl has no option with the given id, this function returns NULL.
|
If libcurl has no option with the given id, this function returns NULL.
|
||||||
|
|
||||||
|
|||||||
@ -27,11 +27,10 @@ const struct curl_easyoption *curl_easy_option_by_name(const char *name);
|
|||||||
|
|
||||||
# DESCRIPTION
|
# DESCRIPTION
|
||||||
|
|
||||||
Given a **name**, this function returns a pointer to the
|
Given a **name**, this function returns a pointer to the *curl_easyoption*
|
||||||
*curl_easyoption* struct, holding information about the
|
struct, holding information about the curl_easy_setopt(3) option using that
|
||||||
curl_easy_setopt(3) option using that name. The name should be specified
|
name. The name should be specified without the `CURLOPT_` prefix and the name
|
||||||
without the "CURLOPT_" prefix and the name comparison is made case
|
comparison is made case insensitive.
|
||||||
insensitive.
|
|
||||||
|
|
||||||
If libcurl has no option with the given name, this function returns NULL.
|
If libcurl has no option with the given name, this function returns NULL.
|
||||||
|
|
||||||
|
|||||||
@ -316,4 +316,4 @@ filenames are now escaped before transmission.
|
|||||||
# RETURN VALUE
|
# RETURN VALUE
|
||||||
|
|
||||||
0 means everything was OK, non-zero means an error occurred corresponding to a
|
0 means everything was OK, non-zero means an error occurred corresponding to a
|
||||||
CURL_FORMADD_* constant defined in *\<curl/curl.h\>*.
|
`CURL_FORMADD_*` constant defined in *\<curl/curl.h\>*.
|
||||||
|
|||||||
@ -38,9 +38,9 @@ first argument to the curl_formget_callback function.
|
|||||||
size_t len);"
|
size_t len);"
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
The curl_formget_callback is invoked for each part of the HTTP POST chain. The
|
The *curl_formget_callback* is invoked for each part of the HTTP POST chain.
|
||||||
character buffer passed to the callback must not be freed. The callback should
|
The character buffer passed to the callback must not be freed. The callback
|
||||||
return the buffer length passed to it on success.
|
should return the buffer length passed to it on success.
|
||||||
|
|
||||||
If the **CURLFORM_STREAM** option is used in the formpost, it prevents
|
If the **CURLFORM_STREAM** option is used in the formpost, it prevents
|
||||||
curl_formget(3) from working until you have performed the actual HTTP request.
|
curl_formget(3) from working until you have performed the actual HTTP request.
|
||||||
|
|||||||
@ -376,9 +376,8 @@ supports HTTP zstd content encoding using zstd library (Added in 7.72.0)
|
|||||||
|
|
||||||
*features* mask bit: CURL_VERSION_CONV
|
*features* mask bit: CURL_VERSION_CONV
|
||||||
|
|
||||||
libcurl was built with support for character conversions, as provided by the
|
libcurl was built with support for character conversions provided by
|
||||||
CURLOPT_CONV_* callbacks. Always 0 since 7.82.0. (Added in 7.15.4,
|
callbacks. Always 0 since 7.82.0. (Added in 7.15.4, deprecated.)
|
||||||
deprecated.)
|
|
||||||
|
|
||||||
## no name
|
## no name
|
||||||
|
|
||||||
|
|||||||
@ -23,16 +23,16 @@ These variables are intended for internal use only, subject to change and have
|
|||||||
many effects on the behavior of libcurl. Refer to the source code to determine
|
many effects on the behavior of libcurl. Refer to the source code to determine
|
||||||
how exactly they are being used.
|
how exactly they are being used.
|
||||||
|
|
||||||
## CURL_ALTSVC_HTTP
|
## `CURL_ALTSVC_HTTP`
|
||||||
|
|
||||||
Bypass the AltSvc HTTPS protocol restriction if this variable exists.
|
Bypass the AltSvc HTTPS protocol restriction if this variable exists.
|
||||||
|
|
||||||
## CURL_DBG_SOCK_RBLOCK
|
## `CURL_DBG_SOCK_RBLOCK`
|
||||||
|
|
||||||
The percentage of recv() calls that should be answered with a EAGAIN at random.
|
The percentage of recv() calls that should be answered with a EAGAIN at random.
|
||||||
For TCP/UNIX sockets.
|
For TCP/UNIX sockets.
|
||||||
|
|
||||||
## CURL_DBG_SOCK_RMAX
|
## `CURL_DBG_SOCK_RMAX`
|
||||||
|
|
||||||
The maximum data that shall be received from the network in one recv() call.
|
The maximum data that shall be received from the network in one recv() call.
|
||||||
For TCP/UNIX sockets. This is applied to every recv.
|
For TCP/UNIX sockets. This is applied to every recv.
|
||||||
@ -40,12 +40,12 @@ For TCP/UNIX sockets. This is applied to every recv.
|
|||||||
Example: **CURL_DBG_SOCK_RMAX=400** means recv buffer size is limited to a
|
Example: **CURL_DBG_SOCK_RMAX=400** means recv buffer size is limited to a
|
||||||
maximum of 400 bytes.
|
maximum of 400 bytes.
|
||||||
|
|
||||||
## CURL_DBG_SOCK_WBLOCK
|
## `CURL_DBG_SOCK_WBLOCK`
|
||||||
|
|
||||||
The percentage of send() calls that should be answered with a EAGAIN at random.
|
The percentage of send() calls that should be answered with a EAGAIN at random.
|
||||||
For TCP/UNIX sockets.
|
For TCP/UNIX sockets.
|
||||||
|
|
||||||
## CURL_DBG_SOCK_WPARTIAL
|
## `CURL_DBG_SOCK_WPARTIAL`
|
||||||
|
|
||||||
The percentage of data that shall be written to the network. For TCP/UNIX
|
The percentage of data that shall be written to the network. For TCP/UNIX
|
||||||
sockets. This is applied to every send.
|
sockets. This is applied to every send.
|
||||||
@ -53,12 +53,12 @@ sockets. This is applied to every send.
|
|||||||
Example: **CURL_DBG_SOCK_WPARTIAL=80** means a send with 1000 bytes would
|
Example: **CURL_DBG_SOCK_WPARTIAL=80** means a send with 1000 bytes would
|
||||||
only send 800.
|
only send 800.
|
||||||
|
|
||||||
## CURL_DBG_QUIC_WBLOCK
|
## `CURL_DBG_QUIC_WBLOCK`
|
||||||
|
|
||||||
The percentage of send() calls that should be answered with EAGAIN at random.
|
The percentage of send() calls that should be answered with EAGAIN at random.
|
||||||
QUIC only.
|
QUIC only.
|
||||||
|
|
||||||
## CURL_DEBUG
|
## `CURL_DEBUG`
|
||||||
|
|
||||||
Trace logging behavior as an alternative to calling curl_global_trace(3).
|
Trace logging behavior as an alternative to calling curl_global_trace(3).
|
||||||
|
|
||||||
@ -73,39 +73,39 @@ Example: **CURL_DEBUG=tcp,-http/2 curl -vv url** means trace protocol details,
|
|||||||
triggered by `-vv`, add tracing of TCP in addition and remove tracing of
|
triggered by `-vv`, add tracing of TCP in addition and remove tracing of
|
||||||
HTTP/2.
|
HTTP/2.
|
||||||
|
|
||||||
## CURL_DEBUG_SIZE
|
## `CURL_DEBUG_SIZE`
|
||||||
|
|
||||||
Fake the size returned by CURLINFO_HEADER_SIZE and CURLINFO_REQUEST_SIZE.
|
Fake the size returned by CURLINFO_HEADER_SIZE and CURLINFO_REQUEST_SIZE.
|
||||||
|
|
||||||
## CURL_GETHOSTNAME
|
## `CURL_GETHOSTNAME`
|
||||||
|
|
||||||
Fake the local machine's unqualified hostname for NTLM and SMTP.
|
Fake the local machine's unqualified hostname for NTLM and SMTP.
|
||||||
|
|
||||||
## CURL_HSTS_HTTP
|
## `CURL_HSTS_HTTP`
|
||||||
|
|
||||||
Bypass the HSTS HTTPS protocol restriction if this variable exists.
|
Bypass the HSTS HTTPS protocol restriction if this variable exists.
|
||||||
|
|
||||||
## CURL_FORCETIME
|
## `CURL_FORCETIME`
|
||||||
|
|
||||||
A time of 0 is used for AWS signatures and NTLM if this variable exists.
|
A time of 0 is used for AWS signatures and NTLM if this variable exists.
|
||||||
|
|
||||||
## CURL_ENTROPY
|
## `CURL_ENTROPY`
|
||||||
|
|
||||||
A fixed faked value to use instead of a proper random number so that functions
|
A fixed faked value to use instead of a proper random number so that functions
|
||||||
in libcurl that are otherwise getting random outputs can be tested for what
|
in libcurl that are otherwise getting random outputs can be tested for what
|
||||||
they generate.
|
they generate.
|
||||||
|
|
||||||
## CURL_SMALLREQSEND
|
## `CURL_SMALLREQSEND`
|
||||||
|
|
||||||
An alternative size of HTTP data to be sent at a time only if smaller than the
|
An alternative size of HTTP data to be sent at a time only if smaller than the
|
||||||
current.
|
current.
|
||||||
|
|
||||||
## CURL_SMALLSENDS
|
## `CURL_SMALLSENDS`
|
||||||
|
|
||||||
An alternative size of socket data to be sent at a time only if smaller than
|
An alternative size of socket data to be sent at a time only if smaller than
|
||||||
the current.
|
the current.
|
||||||
|
|
||||||
## CURL_TIME
|
## `CURL_TIME`
|
||||||
|
|
||||||
Fake Unix timestamp to use for AltSvc, HSTS and CURLINFO variables that are
|
Fake Unix timestamp to use for AltSvc, HSTS and CURLINFO variables that are
|
||||||
time related.
|
time related.
|
||||||
@ -114,34 +114,34 @@ This variable can also be used to fake the data returned by some CURLINFO
|
|||||||
variables that are not time-related (such as CURLINFO_LOCAL_PORT), and in that
|
variables that are not time-related (such as CURLINFO_LOCAL_PORT), and in that
|
||||||
case the value is not a timestamp.
|
case the value is not a timestamp.
|
||||||
|
|
||||||
## CURL_TRACE
|
## `CURL_TRACE`
|
||||||
|
|
||||||
LDAP tracing is enabled if this variable exists and its value is 1 or greater.
|
LDAP tracing is enabled if this variable exists and its value is 1 or greater.
|
||||||
|
|
||||||
OpenLDAP tracing is separate. Refer to CURL_OPENLDAP_TRACE.
|
OpenLDAP tracing is separate. Refer to CURL_OPENLDAP_TRACE.
|
||||||
|
|
||||||
## CURL_OPENLDAP_TRACE
|
## `CURL_OPENLDAP_TRACE`
|
||||||
|
|
||||||
OpenLDAP tracing is enabled if this variable exists and its value is 1 or
|
OpenLDAP tracing is enabled if this variable exists and its value is 1 or
|
||||||
greater. There is a number of debug levels, refer to *openldap.c* comments.
|
greater. There is a number of debug levels, refer to *openldap.c* comments.
|
||||||
|
|
||||||
## CURL_WS_CHUNK_SIZE
|
## `CURL_WS_CHUNK_SIZE`
|
||||||
|
|
||||||
Used to influence the buffer chunk size used for WebSocket encoding and
|
Used to influence the buffer chunk size used for WebSocket encoding and
|
||||||
decoding.
|
decoding.
|
||||||
|
|
||||||
## CURL_WS_CHUNK_EAGAIN
|
## `CURL_WS_CHUNK_EAGAIN`
|
||||||
|
|
||||||
Used to simulate blocking sends after this chunk size for WebSocket
|
Used to simulate blocking sends after this chunk size for WebSocket
|
||||||
connections.
|
connections.
|
||||||
|
|
||||||
## CURL_FORBID_REUSE
|
## `CURL_FORBID_REUSE`
|
||||||
|
|
||||||
Used to set the CURLOPT_FORBID_REUSE flag on each transfer initiated
|
Used to set the CURLOPT_FORBID_REUSE flag on each transfer initiated
|
||||||
by the curl command line tool. The value of the environment variable
|
by the curl command line tool. The value of the environment variable
|
||||||
does not matter.
|
does not matter.
|
||||||
|
|
||||||
## CURL_GRACEFUL_SHUTDOWN
|
## `CURL_GRACEFUL_SHUTDOWN`
|
||||||
|
|
||||||
Make a blocking, graceful shutdown of all remaining connections when
|
Make a blocking, graceful shutdown of all remaining connections when
|
||||||
a multi handle is destroyed. This implicitly triggers for easy handles
|
a multi handle is destroyed. This implicitly triggers for easy handles
|
||||||
|
|||||||
@ -32,7 +32,7 @@ CURLINFO_SCHEME(3) instead, because this option cannot return all
|
|||||||
possible protocols.
|
possible protocols.
|
||||||
|
|
||||||
Pass a pointer to a long to receive the version used in the last http
|
Pass a pointer to a long to receive the version used in the last http
|
||||||
connection. The returned value is set to one of the CURLPROTO_* values:
|
connection. The returned value is set to one of these values:
|
||||||
|
|
||||||
~~~c
|
~~~c
|
||||||
CURLPROTO_DICT, CURLPROTO_FILE, CURLPROTO_FTP, CURLPROTO_FTPS,
|
CURLPROTO_DICT, CURLPROTO_FILE, CURLPROTO_FTP, CURLPROTO_FTPS,
|
||||||
|
|||||||
@ -58,12 +58,11 @@ struct curl_tlssessioninfo {
|
|||||||
};
|
};
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
The *backend* struct member is one of the defines in the CURLSSLBACKEND_*
|
The *backend* struct member is one of these defines: CURLSSLBACKEND_NONE (when
|
||||||
series: CURLSSLBACKEND_NONE (when built without TLS support),
|
built without TLS support), CURLSSLBACKEND_WOLFSSL,
|
||||||
CURLSSLBACKEND_WOLFSSL, CURLSSLBACKEND_SECURETRANSPORT, CURLSSLBACKEND_GNUTLS,
|
CURLSSLBACKEND_SECURETRANSPORT, CURLSSLBACKEND_GNUTLS, CURLSSLBACKEND_MBEDTLS,
|
||||||
CURLSSLBACKEND_MBEDTLS, CURLSSLBACKEND_NSS, CURLSSLBACKEND_OPENSSL or
|
CURLSSLBACKEND_NSS, CURLSSLBACKEND_OPENSSL or CURLSSLBACKEND_SCHANNEL. (Note
|
||||||
CURLSSLBACKEND_SCHANNEL. (Note that the OpenSSL
|
that the OpenSSL forks are all reported as just OpenSSL here.)
|
||||||
forks are all reported as just OpenSSL here.)
|
|
||||||
|
|
||||||
The *internals* struct member points to a TLS library specific pointer for
|
The *internals* struct member points to a TLS library specific pointer for
|
||||||
the active ("in use") SSL connection, with the following underlying types:
|
the active ("in use") SSL connection, with the following underlying types:
|
||||||
|
|||||||
@ -28,8 +28,8 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MIME_OPTIONS, long options);
|
|||||||
|
|
||||||
# DESCRIPTION
|
# DESCRIPTION
|
||||||
|
|
||||||
Pass a long that holds a bitmask of CURLMIMEOPT_* defines. Each bit is a
|
Pass a long that holds a bitmask of options. Each bit is a boolean flag used
|
||||||
Boolean flag used while encoding a MIME tree or multipart form data.
|
while encoding a MIME tree or multipart form data.
|
||||||
|
|
||||||
Available bits are:
|
Available bits are:
|
||||||
|
|
||||||
|
|||||||
@ -31,7 +31,7 @@ This option is deprecated. We strongly recommend using
|
|||||||
CURLOPT_PROTOCOLS_STR(3) instead because this option cannot control all
|
CURLOPT_PROTOCOLS_STR(3) instead because this option cannot control all
|
||||||
available protocols.
|
available protocols.
|
||||||
|
|
||||||
Pass a long that holds a bitmask of CURLPROTO_* defines. If used, this bitmask
|
Pass a long that holds a bitmask of protocol bits. If used, this bitmask
|
||||||
limits what protocols libcurl may use in the transfer. This allows you to have
|
limits what protocols libcurl may use in the transfer. This allows you to have
|
||||||
a libcurl built to support a wide range of protocols but still limit specific
|
a libcurl built to support a wide range of protocols but still limit specific
|
||||||
transfers to only be allowed to use a subset of them. By default libcurl
|
transfers to only be allowed to use a subset of them. By default libcurl
|
||||||
|
|||||||
@ -32,10 +32,10 @@ This option is deprecated. We strongly recommend using
|
|||||||
CURLOPT_REDIR_PROTOCOLS_STR(3) instead because this option cannot
|
CURLOPT_REDIR_PROTOCOLS_STR(3) instead because this option cannot
|
||||||
control all available protocols.
|
control all available protocols.
|
||||||
|
|
||||||
Pass a long that holds a bitmask of CURLPROTO_* defines. If used, this bitmask
|
Pass a long that holds a bitmask of protocol bits. If used, this bitmask
|
||||||
limits what protocols libcurl may use in a transfer that it follows to in a
|
limits what protocols libcurl may use in a transfer that it follows to in a
|
||||||
redirect when CURLOPT_FOLLOWLOCATION(3) is enabled. This allows you to
|
redirect when CURLOPT_FOLLOWLOCATION(3) is enabled. This allows you to limit
|
||||||
limit specific transfers to only be allowed to use a subset of protocols in
|
specific transfers to only be allowed to use a subset of protocols in
|
||||||
redirections.
|
redirections.
|
||||||
|
|
||||||
Protocols denied by CURLOPT_PROTOCOLS(3) are not overridden by this
|
Protocols denied by CURLOPT_PROTOCOLS(3) are not overridden by this
|
||||||
|
|||||||
@ -71,7 +71,7 @@ int main(void)
|
|||||||
~~~
|
~~~
|
||||||
|
|
||||||
If you are on Linux and somehow have a need for paths larger than 107 bytes,
|
If you are on Linux and somehow have a need for paths larger than 107 bytes,
|
||||||
you can use the proc filesystem to bypass the limitation:
|
you can use the *proc* filesystem to bypass the limitation:
|
||||||
|
|
||||||
~~~c
|
~~~c
|
||||||
int dirfd = open(long_directory_path_to_socket, O_DIRECTORY | O_RDONLY);
|
int dirfd = open(long_directory_path_to_socket, O_DIRECTORY | O_RDONLY);
|
||||||
|
|||||||
@ -81,9 +81,8 @@ int main(void)
|
|||||||
|
|
||||||
# HISTORY
|
# HISTORY
|
||||||
|
|
||||||
This option was known as CURLOPT_FTP_SSL up to 7.16.4, and the constants were
|
This option was known as CURLOPT_FTP_SSL up to 7.16.4. Supported by LDAP since
|
||||||
known as CURLFTPSSL_* Handled by LDAP since 7.81.0. Fully supported by the
|
7.81.0. Fully supported by the OpenLDAP backend only.
|
||||||
OpenLDAP backend only.
|
|
||||||
|
|
||||||
# %AVAILABILITY%
|
# %AVAILABILITY%
|
||||||
|
|
||||||
|
|||||||
@ -51,7 +51,7 @@ stdout
|
|||||||
A common technique is to use the write callback to store the incoming data
|
A common technique is to use the write callback to store the incoming data
|
||||||
into a dynamically growing allocated buffer, and then this
|
into a dynamically growing allocated buffer, and then this
|
||||||
CURLOPT_WRITEDATA(3) is used to point to a struct or the buffer to store data
|
CURLOPT_WRITEDATA(3) is used to point to a struct or the buffer to store data
|
||||||
in. Like in the getinmemory example:
|
in. Like in the *getinmemory* example:
|
||||||
https://curl.se/libcurl/c/getinmemory.html
|
https://curl.se/libcurl/c/getinmemory.html
|
||||||
|
|
||||||
# HISTORY
|
# HISTORY
|
||||||
|
|||||||
@ -592,7 +592,7 @@ static void query_completed_cb(void *arg, /* (struct connectdata *) */
|
|||||||
res->num_pending--;
|
res->num_pending--;
|
||||||
|
|
||||||
if(CURL_ASYNC_SUCCESS == status) {
|
if(CURL_ASYNC_SUCCESS == status) {
|
||||||
struct Curl_addrinfo *ai = Curl_he2ai(hostent, data->state.async.port);
|
struct Curl_addrinfo *ai = Curl_he2ai(hostent, data->conn->remote_port);
|
||||||
if(ai) {
|
if(ai) {
|
||||||
compound_results(res, ai);
|
compound_results(res, ai);
|
||||||
}
|
}
|
||||||
@ -774,8 +774,6 @@ struct Curl_addrinfo *Curl_resolver_getaddrinfo(struct Curl_easy *data,
|
|||||||
if(!res->hostname)
|
if(!res->hostname)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
data->state.async.hostname = res->hostname;
|
|
||||||
data->state.async.port = port;
|
|
||||||
data->state.async.done = FALSE; /* not done */
|
data->state.async.done = FALSE; /* not done */
|
||||||
data->state.async.dns = NULL; /* clear */
|
data->state.async.dns = NULL; /* clear */
|
||||||
|
|
||||||
@ -811,6 +809,7 @@ struct Curl_addrinfo *Curl_resolver_getaddrinfo(struct Curl_easy *data,
|
|||||||
service, &hints, addrinfo_cb, data);
|
service, &hints, addrinfo_cb, data);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
(void)port;
|
||||||
|
|
||||||
#ifdef HAVE_CARES_IPV6
|
#ifdef HAVE_CARES_IPV6
|
||||||
if((data->conn->ip_version != CURL_IPRESOLVE_V4) && Curl_ipv6works(data)) {
|
if((data->conn->ip_version != CURL_IPRESOLVE_V4) && Curl_ipv6works(data)) {
|
||||||
|
|||||||
@ -400,7 +400,7 @@ static void destroy_async_data(struct Curl_easy *data)
|
|||||||
|
|
||||||
td->init = FALSE;
|
td->init = FALSE;
|
||||||
}
|
}
|
||||||
Curl_safefree(async->hostname);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_HTTPSRR_ARES
|
#ifdef USE_HTTPSRR_ARES
|
||||||
@ -414,7 +414,7 @@ static CURLcode resolve_httpsrr(struct Curl_easy *data,
|
|||||||
memset(&async->thdata.hinfo, 0, sizeof(struct Curl_https_rrinfo));
|
memset(&async->thdata.hinfo, 0, sizeof(struct Curl_https_rrinfo));
|
||||||
async->thdata.hinfo.port = -1;
|
async->thdata.hinfo.port = -1;
|
||||||
ares_query_dnsrec(async->thdata.channel,
|
ares_query_dnsrec(async->thdata.channel,
|
||||||
async->hostname, ARES_CLASS_IN,
|
data->conn->host.name, ARES_CLASS_IN,
|
||||||
ARES_REC_TYPE_HTTPS,
|
ARES_REC_TYPE_HTTPS,
|
||||||
Curl_dnsrec_done_cb, data, NULL);
|
Curl_dnsrec_done_cb, data, NULL);
|
||||||
|
|
||||||
@ -436,7 +436,6 @@ static bool init_resolve_thread(struct Curl_easy *data,
|
|||||||
int err = ENOMEM;
|
int err = ENOMEM;
|
||||||
struct Curl_async *async = &data->state.async;
|
struct Curl_async *async = &data->state.async;
|
||||||
|
|
||||||
async->port = port;
|
|
||||||
async->done = FALSE;
|
async->done = FALSE;
|
||||||
async->dns = NULL;
|
async->dns = NULL;
|
||||||
td->thread_hnd = curl_thread_t_null;
|
td->thread_hnd = curl_thread_t_null;
|
||||||
@ -447,11 +446,6 @@ static bool init_resolve_thread(struct Curl_easy *data,
|
|||||||
goto errno_exit;
|
goto errno_exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
free(async->hostname);
|
|
||||||
async->hostname = strdup(hostname);
|
|
||||||
if(!async->hostname)
|
|
||||||
goto err_exit;
|
|
||||||
|
|
||||||
/* The thread will set this TRUE when complete. */
|
/* The thread will set this TRUE when complete. */
|
||||||
td->tsd.done = FALSE;
|
td->tsd.done = FALSE;
|
||||||
|
|
||||||
|
|||||||
@ -1181,7 +1181,7 @@ CURLcode Curl_doh_is_resolved(struct Curl_easy *data,
|
|||||||
|
|
||||||
if(dohp->probe[DOH_SLOT_IPV4].easy_mid < 0 &&
|
if(dohp->probe[DOH_SLOT_IPV4].easy_mid < 0 &&
|
||||||
dohp->probe[DOH_SLOT_IPV6].easy_mid < 0) {
|
dohp->probe[DOH_SLOT_IPV6].easy_mid < 0) {
|
||||||
failf(data, "Could not DoH-resolve: %s", data->state.async.hostname);
|
failf(data, "Could not DoH-resolve: %s", dohp->host);
|
||||||
return CONN_IS_PROXIED(data->conn) ? CURLE_COULDNT_RESOLVE_PROXY :
|
return CONN_IS_PROXIED(data->conn) ? CURLE_COULDNT_RESOLVE_PROXY :
|
||||||
CURLE_COULDNT_RESOLVE_HOST;
|
CURLE_COULDNT_RESOLVE_HOST;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -76,8 +76,8 @@ CURLcode Curl_addrinfo_callback(struct Curl_easy *data,
|
|||||||
Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);
|
Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);
|
||||||
|
|
||||||
dns = Curl_cache_addr(data, ai,
|
dns = Curl_cache_addr(data, ai,
|
||||||
data->state.async.hostname, 0,
|
data->conn->host.dispname, 0,
|
||||||
data->state.async.port, FALSE);
|
data->conn->localport, FALSE);
|
||||||
if(data->share)
|
if(data->share)
|
||||||
Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
|
Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
|
||||||
|
|
||||||
|
|||||||
@ -1480,7 +1480,7 @@ CURLcode Curl_resolver_error(struct Curl_easy *data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
failf(data, "Could not resolve %s: %s", host_or_proxy,
|
failf(data, "Could not resolve %s: %s", host_or_proxy,
|
||||||
data->state.async.hostname);
|
data->conn->host.dispname);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -565,14 +565,12 @@ struct hostname {
|
|||||||
#if defined(CURLRES_ASYNCH) || !defined(CURL_DISABLE_DOH)
|
#if defined(CURLRES_ASYNCH) || !defined(CURL_DISABLE_DOH)
|
||||||
#define USE_CURL_ASYNC
|
#define USE_CURL_ASYNC
|
||||||
struct Curl_async {
|
struct Curl_async {
|
||||||
char *hostname;
|
|
||||||
struct Curl_dns_entry *dns;
|
struct Curl_dns_entry *dns;
|
||||||
#ifdef CURLRES_ASYNCH
|
#ifdef CURLRES_ASYNCH
|
||||||
struct thread_data thdata;
|
struct thread_data thdata;
|
||||||
#endif
|
#endif
|
||||||
void *resolver; /* resolver state, if it is used in the URL state -
|
void *resolver; /* resolver state, if it is used in the URL state -
|
||||||
ares_channel e.g. */
|
ares_channel e.g. */
|
||||||
int port;
|
|
||||||
BIT(done); /* set TRUE when the lookup is complete */
|
BIT(done); /* set TRUE when the lookup is complete */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -959,7 +959,7 @@ static CURLcode gtls_client_init(struct Curl_cfilter *cf,
|
|||||||
return CURLE_SSL_CONNECT_ERROR;
|
return CURLE_SSL_CONNECT_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(ssl_config->key_passwd) {
|
else {
|
||||||
const unsigned int supported_key_encryption_algorithms =
|
const unsigned int supported_key_encryption_algorithms =
|
||||||
GNUTLS_PKCS_USE_PKCS12_3DES | GNUTLS_PKCS_USE_PKCS12_ARCFOUR |
|
GNUTLS_PKCS_USE_PKCS12_3DES | GNUTLS_PKCS_USE_PKCS12_ARCFOUR |
|
||||||
GNUTLS_PKCS_USE_PKCS12_RC2_40 | GNUTLS_PKCS_USE_PBES2_3DES |
|
GNUTLS_PKCS_USE_PKCS12_RC2_40 | GNUTLS_PKCS_USE_PBES2_3DES |
|
||||||
@ -974,22 +974,12 @@ static CURLcode gtls_client_init(struct Curl_cfilter *cf,
|
|||||||
supported_key_encryption_algorithms);
|
supported_key_encryption_algorithms);
|
||||||
if(rc != GNUTLS_E_SUCCESS) {
|
if(rc != GNUTLS_E_SUCCESS) {
|
||||||
failf(data,
|
failf(data,
|
||||||
"error reading X.509 potentially-encrypted key file: %s",
|
"error reading X.509 %skey file: %s",
|
||||||
|
ssl_config->key_passwd ? "potentially-encrypted " : "",
|
||||||
gnutls_strerror(rc));
|
gnutls_strerror(rc));
|
||||||
return CURLE_SSL_CONNECT_ERROR;
|
return CURLE_SSL_CONNECT_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
if(gnutls_certificate_set_x509_key_file(
|
|
||||||
gtls->shared_creds->creds,
|
|
||||||
config->clientcert,
|
|
||||||
ssl_config->key ? ssl_config->key : config->clientcert,
|
|
||||||
gnutls_do_file_type(ssl_config->cert_type) ) !=
|
|
||||||
GNUTLS_E_SUCCESS) {
|
|
||||||
failf(data, "error reading X.509 key or certificate file");
|
|
||||||
return CURLE_SSL_CONNECT_ERROR;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_GNUTLS_SRP
|
#ifdef USE_GNUTLS_SRP
|
||||||
|
|||||||
@ -482,7 +482,7 @@ AC_DEFUN([CURL_COMPILER_WORKS_IFELSE], [
|
|||||||
#endif
|
#endif
|
||||||
]],[[
|
]],[[
|
||||||
int i = 0;
|
int i = 0;
|
||||||
exit(i);
|
return i;
|
||||||
]])
|
]])
|
||||||
],[
|
],[
|
||||||
tmp_compiler_works="yes"
|
tmp_compiler_works="yes"
|
||||||
|
|||||||
@ -1270,11 +1270,12 @@ AC_DEFUN([CURL_CHECK_FUNC_GETADDRINFO], [
|
|||||||
struct addrinfo hints;
|
struct addrinfo hints;
|
||||||
struct addrinfo *ai = 0;
|
struct addrinfo *ai = 0;
|
||||||
int error;
|
int error;
|
||||||
|
int exitcode;
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
WSADATA wsa;
|
WSADATA wsa;
|
||||||
if(WSAStartup(MAKEWORD(2, 2), &wsa))
|
if(WSAStartup(MAKEWORD(2, 2), &wsa))
|
||||||
exit(2);
|
return 2;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
memset(&hints, 0, sizeof(hints));
|
memset(&hints, 0, sizeof(hints));
|
||||||
@ -1283,9 +1284,15 @@ AC_DEFUN([CURL_CHECK_FUNC_GETADDRINFO], [
|
|||||||
hints.ai_socktype = SOCK_STREAM;
|
hints.ai_socktype = SOCK_STREAM;
|
||||||
error = getaddrinfo("127.0.0.1", 0, &hints, &ai);
|
error = getaddrinfo("127.0.0.1", 0, &hints, &ai);
|
||||||
if(error || !ai)
|
if(error || !ai)
|
||||||
exit(1); /* fail */
|
exitcode = 1; /* fail */
|
||||||
else
|
else {
|
||||||
exit(0);
|
freeaddrinfo(ai);
|
||||||
|
exitcode = 0;
|
||||||
|
}
|
||||||
|
#ifdef _WIN32
|
||||||
|
WSACleanup();
|
||||||
|
#endif
|
||||||
|
return exitcode;
|
||||||
]])
|
]])
|
||||||
],[
|
],[
|
||||||
AC_MSG_RESULT([yes])
|
AC_MSG_RESULT([yes])
|
||||||
@ -1883,9 +1890,11 @@ AC_DEFUN([CURL_CHECK_FUNC_GETIFADDRS], [
|
|||||||
|
|
||||||
error = getifaddrs(&ifa);
|
error = getifaddrs(&ifa);
|
||||||
if(error || !ifa)
|
if(error || !ifa)
|
||||||
exit(1); /* fail */
|
return 1; /* fail */
|
||||||
else
|
else {
|
||||||
exit(0);
|
freeifaddrs(ifa);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
]])
|
]])
|
||||||
],[
|
],[
|
||||||
AC_MSG_RESULT([yes])
|
AC_MSG_RESULT([yes])
|
||||||
@ -2003,9 +2012,9 @@ AC_DEFUN([CURL_CHECK_FUNC_GMTIME_R], [
|
|||||||
gmt = gmtime_r(&local, &result);
|
gmt = gmtime_r(&local, &result);
|
||||||
(void)result;
|
(void)result;
|
||||||
if(gmt)
|
if(gmt)
|
||||||
exit(0);
|
return 0;
|
||||||
else
|
else
|
||||||
exit(1);
|
return 1;
|
||||||
]])
|
]])
|
||||||
],[
|
],[
|
||||||
AC_MSG_RESULT([yes])
|
AC_MSG_RESULT([yes])
|
||||||
@ -2134,13 +2143,13 @@ AC_DEFUN([CURL_CHECK_FUNC_INET_NTOP], [
|
|||||||
/* - */
|
/* - */
|
||||||
ipv4ptr = inet_ntop(AF_INET, ipv4a, ipv4res, sizeof(ipv4res));
|
ipv4ptr = inet_ntop(AF_INET, ipv4a, ipv4res, sizeof(ipv4res));
|
||||||
if(!ipv4ptr)
|
if(!ipv4ptr)
|
||||||
exit(1); /* fail */
|
return 1; /* fail */
|
||||||
if(ipv4ptr != ipv4res)
|
if(ipv4ptr != ipv4res)
|
||||||
exit(1); /* fail */
|
return 1; /* fail */
|
||||||
if(!ipv4ptr[0])
|
if(!ipv4ptr[0])
|
||||||
exit(1); /* fail */
|
return 1; /* fail */
|
||||||
if(memcmp(ipv4res, "192.168.100.1", 13) != 0)
|
if(memcmp(ipv4res, "192.168.100.1", 13) != 0)
|
||||||
exit(1); /* fail */
|
return 1; /* fail */
|
||||||
/* - */
|
/* - */
|
||||||
ipv6res[0] = '\0';
|
ipv6res[0] = '\0';
|
||||||
memset(ipv6a, 0, sizeof(ipv6a));
|
memset(ipv6a, 0, sizeof(ipv6a));
|
||||||
@ -2158,15 +2167,15 @@ AC_DEFUN([CURL_CHECK_FUNC_INET_NTOP], [
|
|||||||
/* - */
|
/* - */
|
||||||
ipv6ptr = inet_ntop(AF_INET6, ipv6a, ipv6res, sizeof(ipv6res));
|
ipv6ptr = inet_ntop(AF_INET6, ipv6a, ipv6res, sizeof(ipv6res));
|
||||||
if(!ipv6ptr)
|
if(!ipv6ptr)
|
||||||
exit(1); /* fail */
|
return 1; /* fail */
|
||||||
if(ipv6ptr != ipv6res)
|
if(ipv6ptr != ipv6res)
|
||||||
exit(1); /* fail */
|
return 1; /* fail */
|
||||||
if(!ipv6ptr[0])
|
if(!ipv6ptr[0])
|
||||||
exit(1); /* fail */
|
return 1; /* fail */
|
||||||
if(memcmp(ipv6res, "fe80::214:4fff:fe0b:76c8", 24) != 0)
|
if(memcmp(ipv6res, "fe80::214:4fff:fe0b:76c8", 24) != 0)
|
||||||
exit(1); /* fail */
|
return 1; /* fail */
|
||||||
/* - */
|
/* - */
|
||||||
exit(0);
|
return 0;
|
||||||
]])
|
]])
|
||||||
],[
|
],[
|
||||||
AC_MSG_RESULT([yes])
|
AC_MSG_RESULT([yes])
|
||||||
@ -2286,18 +2295,18 @@ AC_DEFUN([CURL_CHECK_FUNC_INET_PTON], [
|
|||||||
/* - */
|
/* - */
|
||||||
memset(ipv4a, 1, sizeof(ipv4a));
|
memset(ipv4a, 1, sizeof(ipv4a));
|
||||||
if(1 != inet_pton(AF_INET, ipv4src, ipv4a))
|
if(1 != inet_pton(AF_INET, ipv4src, ipv4a))
|
||||||
exit(1); /* fail */
|
return 1; /* fail */
|
||||||
/* - */
|
/* - */
|
||||||
if( (ipv4a[0] != 0xc0) ||
|
if( (ipv4a[0] != 0xc0) ||
|
||||||
(ipv4a[1] != 0xa8) ||
|
(ipv4a[1] != 0xa8) ||
|
||||||
(ipv4a[2] != 0x64) ||
|
(ipv4a[2] != 0x64) ||
|
||||||
(ipv4a[3] != 0x01) ||
|
(ipv4a[3] != 0x01) ||
|
||||||
(ipv4a[4] != 0x01) )
|
(ipv4a[4] != 0x01) )
|
||||||
exit(1); /* fail */
|
return 1; /* fail */
|
||||||
/* - */
|
/* - */
|
||||||
memset(ipv6a, 1, sizeof(ipv6a));
|
memset(ipv6a, 1, sizeof(ipv6a));
|
||||||
if(1 != inet_pton(AF_INET6, ipv6src, ipv6a))
|
if(1 != inet_pton(AF_INET6, ipv6src, ipv6a))
|
||||||
exit(1); /* fail */
|
return 1; /* fail */
|
||||||
/* - */
|
/* - */
|
||||||
if( (ipv6a[0] != 0xfe) ||
|
if( (ipv6a[0] != 0xfe) ||
|
||||||
(ipv6a[1] != 0x80) ||
|
(ipv6a[1] != 0x80) ||
|
||||||
@ -2310,7 +2319,7 @@ AC_DEFUN([CURL_CHECK_FUNC_INET_PTON], [
|
|||||||
(ipv6a[14] != 0x76) ||
|
(ipv6a[14] != 0x76) ||
|
||||||
(ipv6a[15] != 0xc8) ||
|
(ipv6a[15] != 0xc8) ||
|
||||||
(ipv6a[16] != 0x01) )
|
(ipv6a[16] != 0x01) )
|
||||||
exit(1); /* fail */
|
return 1; /* fail */
|
||||||
/* - */
|
/* - */
|
||||||
if( (ipv6a[2] != 0x0) ||
|
if( (ipv6a[2] != 0x0) ||
|
||||||
(ipv6a[3] != 0x0) ||
|
(ipv6a[3] != 0x0) ||
|
||||||
@ -2318,9 +2327,9 @@ AC_DEFUN([CURL_CHECK_FUNC_INET_PTON], [
|
|||||||
(ipv6a[5] != 0x0) ||
|
(ipv6a[5] != 0x0) ||
|
||||||
(ipv6a[6] != 0x0) ||
|
(ipv6a[6] != 0x0) ||
|
||||||
(ipv6a[7] != 0x0) )
|
(ipv6a[7] != 0x0) )
|
||||||
exit(1); /* fail */
|
return 1; /* fail */
|
||||||
/* - */
|
/* - */
|
||||||
exit(0);
|
return 0;
|
||||||
]])
|
]])
|
||||||
],[
|
],[
|
||||||
AC_MSG_RESULT([yes])
|
AC_MSG_RESULT([yes])
|
||||||
@ -3809,11 +3818,11 @@ AC_DEFUN([CURL_CHECK_FUNC_STRERROR_R], [
|
|||||||
buffer[0] = '\0';
|
buffer[0] = '\0';
|
||||||
string = strerror_r(EACCES, buffer, sizeof(buffer));
|
string = strerror_r(EACCES, buffer, sizeof(buffer));
|
||||||
if(!string)
|
if(!string)
|
||||||
exit(1); /* fail */
|
return 1; /* fail */
|
||||||
if(!string[0])
|
if(!string[0])
|
||||||
exit(1); /* fail */
|
return 1; /* fail */
|
||||||
else
|
else
|
||||||
exit(0);
|
return 0;
|
||||||
]])
|
]])
|
||||||
],[
|
],[
|
||||||
AC_MSG_RESULT([yes])
|
AC_MSG_RESULT([yes])
|
||||||
@ -3872,11 +3881,11 @@ AC_DEFUN([CURL_CHECK_FUNC_STRERROR_R], [
|
|||||||
buffer[0] = '\0';
|
buffer[0] = '\0';
|
||||||
error = strerror_r(EACCES, buffer, sizeof(buffer));
|
error = strerror_r(EACCES, buffer, sizeof(buffer));
|
||||||
if(error)
|
if(error)
|
||||||
exit(1); /* fail */
|
return 1; /* fail */
|
||||||
if(buffer[0] == '\0')
|
if(buffer[0] == '\0')
|
||||||
exit(1); /* fail */
|
return 1; /* fail */
|
||||||
else
|
else
|
||||||
exit(0);
|
return 0;
|
||||||
]])
|
]])
|
||||||
],[
|
],[
|
||||||
AC_MSG_RESULT([yes])
|
AC_MSG_RESULT([yes])
|
||||||
|
|||||||
@ -48,7 +48,7 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
if(argc < 1) {
|
if(argc < 1) {
|
||||||
puts("report_openssl_version filename");
|
puts("report_openssl_version filename");
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
libptr = dlopen(argv[1], 0);
|
libptr = dlopen(argv[1], 0);
|
||||||
@ -65,7 +65,7 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
if(!ssl_version) {
|
if(!ssl_version) {
|
||||||
puts("Unable to lookup version of OpenSSL");
|
puts("Unable to lookup version of OpenSSL");
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
version = ssl_version(SSLEAY_VERSION);
|
version = ssl_version(SSLEAY_VERSION);
|
||||||
@ -91,9 +91,9 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
status = LIB$SET_SYMBOL(&symbol_dsc, &value_dsc, &table_type);
|
status = LIB$SET_SYMBOL(&symbol_dsc, &value_dsc, &table_type);
|
||||||
if(!$VMS_STATUS_SUCCESS(status)) {
|
if(!$VMS_STATUS_SUCCESS(status)) {
|
||||||
exit(status);
|
return status;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
exit(0);
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -36,7 +36,7 @@ http
|
|||||||
Download two URLs provided on stdin
|
Download two URLs provided on stdin
|
||||||
</name>
|
</name>
|
||||||
<command>
|
<command>
|
||||||
--url @-
|
--output-dir %LOGDIR --url @-
|
||||||
</command>
|
</command>
|
||||||
<stdin>
|
<stdin>
|
||||||
http://%HOSTIP:%HTTPPORT/a
|
http://%HOSTIP:%HTTPPORT/a
|
||||||
|
|||||||
@ -73,7 +73,10 @@ BEGIN {
|
|||||||
$dev_null
|
$dev_null
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
use pathhelp qw(exe_ext);
|
use pathhelp qw(
|
||||||
|
exe_ext
|
||||||
|
dirsepadd
|
||||||
|
);
|
||||||
use Cwd qw(getcwd);
|
use Cwd qw(getcwd);
|
||||||
use testutil qw(
|
use testutil qw(
|
||||||
shell_quote
|
shell_quote
|
||||||
@ -104,11 +107,11 @@ our $perlcmd=shell_quote($^X);
|
|||||||
our $perl="$perlcmd -I. " . shell_quote("-I$srcdir"); # invoke perl like this
|
our $perl="$perlcmd -I. " . shell_quote("-I$srcdir"); # invoke perl like this
|
||||||
our $LOGDIR="log"; # root of the log directory; this will be different for
|
our $LOGDIR="log"; # root of the log directory; this will be different for
|
||||||
# each runner in multiprocess mode
|
# each runner in multiprocess mode
|
||||||
our $LIBDIR="./libtest/" . ($ENV{'CURL_DIRSUFFIX'} || '');
|
our $LIBDIR=dirsepadd("./libtest/" . ($ENV{'CURL_DIRSUFFIX'} || ''));
|
||||||
our $UNITDIR="./unit/" . ($ENV{'CURL_DIRSUFFIX'} || '');
|
our $UNITDIR=dirsepadd("./unit/" . ($ENV{'CURL_DIRSUFFIX'} || ''));
|
||||||
our $SRVDIR="./server/" . ($ENV{'CURL_DIRSUFFIX'} || '');
|
our $SRVDIR=dirsepadd("./server/" . ($ENV{'CURL_DIRSUFFIX'} || ''));
|
||||||
our $TESTDIR="$srcdir/data";
|
our $TESTDIR="$srcdir/data";
|
||||||
our $CURL="../src/" . ($ENV{'CURL_DIRSUFFIX'} || '') . "curl".exe_ext('TOOL'); # what curl binary to run on the tests
|
our $CURL=dirsepadd("../src/" . ($ENV{'CURL_DIRSUFFIX'} || '')) . "curl".exe_ext('TOOL'); # what curl binary to run on the tests
|
||||||
our $VCURL=$CURL; # what curl binary to use to verify the servers with
|
our $VCURL=$CURL; # what curl binary to use to verify the servers with
|
||||||
# VCURL is handy to set to the system one when the one you
|
# VCURL is handy to set to the system one when the one you
|
||||||
# just built hangs or crashes and thus prevent verification
|
# just built hangs or crashes and thus prevent verification
|
||||||
|
|||||||
@ -34,7 +34,7 @@ if(NOT VSFTPD)
|
|||||||
endif()
|
endif()
|
||||||
mark_as_advanced(VSFTPD)
|
mark_as_advanced(VSFTPD)
|
||||||
|
|
||||||
find_program(HTTPD "apache2") # /usr/sbin/apache2
|
find_program(HTTPD NAMES "/usr/sbin/apache2" "httpd" "apache2")
|
||||||
if(NOT HTTPD)
|
if(NOT HTTPD)
|
||||||
set(HTTPD "")
|
set(HTTPD "")
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@ -140,12 +140,6 @@ static int debug_cb(CURL *handle, curl_infotype type,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define ERR() \
|
|
||||||
do { \
|
|
||||||
fprintf(stderr, "something unexpected went wrong - bailing out!\n"); \
|
|
||||||
exit(2); \
|
|
||||||
} while(0)
|
|
||||||
|
|
||||||
static void usage(const char *msg)
|
static void usage(const char *msg)
|
||||||
{
|
{
|
||||||
if(msg)
|
if(msg)
|
||||||
@ -196,6 +190,13 @@ static size_t cb(char *data, size_t size, size_t nmemb, void *clientp)
|
|||||||
handle->idx, (long)realsize);
|
handle->idx, (long)realsize);
|
||||||
return realsize;
|
return realsize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define ERR() \
|
||||||
|
do { \
|
||||||
|
fprintf(stderr, "something unexpected went wrong - bailing out!\n"); \
|
||||||
|
return 2; \
|
||||||
|
} while(0)
|
||||||
|
|
||||||
#endif /* !_MSC_VER */
|
#endif /* !_MSC_VER */
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
@ -254,19 +255,19 @@ int main(int argc, char *argv[])
|
|||||||
cu = curl_url();
|
cu = curl_url();
|
||||||
if(!cu) {
|
if(!cu) {
|
||||||
fprintf(stderr, "out of memory\n");
|
fprintf(stderr, "out of memory\n");
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
if(curl_url_set(cu, CURLUPART_URL, url, 0)) {
|
if(curl_url_set(cu, CURLUPART_URL, url, 0)) {
|
||||||
fprintf(stderr, "not a URL: '%s'\n", url);
|
fprintf(stderr, "not a URL: '%s'\n", url);
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
if(curl_url_get(cu, CURLUPART_HOST, &host, 0)) {
|
if(curl_url_get(cu, CURLUPART_HOST, &host, 0)) {
|
||||||
fprintf(stderr, "could not get host of '%s'\n", url);
|
fprintf(stderr, "could not get host of '%s'\n", url);
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
if(curl_url_get(cu, CURLUPART_PORT, &port, 0)) {
|
if(curl_url_get(cu, CURLUPART_PORT, &port, 0)) {
|
||||||
fprintf(stderr, "could not get port of '%s'\n", url);
|
fprintf(stderr, "could not get port of '%s'\n", url);
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
memset(&resolve, 0, sizeof(resolve));
|
memset(&resolve, 0, sizeof(resolve));
|
||||||
curl_msnprintf(resolve_buf, sizeof(resolve_buf)-1, "%s:%s:127.0.0.1",
|
curl_msnprintf(resolve_buf, sizeof(resolve_buf)-1, "%s:%s:127.0.0.1",
|
||||||
|
|||||||
@ -138,24 +138,25 @@ static size_t write_cb(char *ptr, size_t size, size_t nmemb, void *opaque)
|
|||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
const char *url;
|
const char *url;
|
||||||
CURLM *multi;
|
CURLM *multi = NULL;
|
||||||
CURL *easy;
|
CURL *easy;
|
||||||
CURLMcode mc;
|
CURLMcode mc;
|
||||||
int running_handles = 0, start_count, numfds;
|
int running_handles = 0, start_count, numfds;
|
||||||
CURLMsg *msg;
|
CURLMsg *msg;
|
||||||
int msgs_in_queue;
|
int msgs_in_queue;
|
||||||
char range[128];
|
char range[128];
|
||||||
|
int exitcode = 1;
|
||||||
|
|
||||||
if(argc != 2) {
|
if(argc != 2) {
|
||||||
fprintf(stderr, "%s URL\n", argv[0]);
|
fprintf(stderr, "%s URL\n", argv[0]);
|
||||||
exit(2);
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
url = argv[1];
|
url = argv[1];
|
||||||
multi = curl_multi_init();
|
multi = curl_multi_init();
|
||||||
if(!multi) {
|
if(!multi) {
|
||||||
fprintf(stderr, "curl_multi_init failed\n");
|
fprintf(stderr, "curl_multi_init failed\n");
|
||||||
exit(1);
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
start_count = 200;
|
start_count = 200;
|
||||||
@ -164,7 +165,7 @@ int main(int argc, char *argv[])
|
|||||||
easy = curl_easy_init();
|
easy = curl_easy_init();
|
||||||
if(!easy) {
|
if(!easy) {
|
||||||
fprintf(stderr, "curl_easy_init failed\n");
|
fprintf(stderr, "curl_easy_init failed\n");
|
||||||
exit(1);
|
goto cleanup;
|
||||||
}
|
}
|
||||||
curl_easy_setopt(easy, CURLOPT_VERBOSE, 1L);
|
curl_easy_setopt(easy, CURLOPT_VERBOSE, 1L);
|
||||||
curl_easy_setopt(easy, CURLOPT_DEBUGFUNCTION, debug_cb);
|
curl_easy_setopt(easy, CURLOPT_DEBUGFUNCTION, debug_cb);
|
||||||
@ -187,7 +188,8 @@ int main(int argc, char *argv[])
|
|||||||
if(mc != CURLM_OK) {
|
if(mc != CURLM_OK) {
|
||||||
fprintf(stderr, "curl_multi_add_handle: %s\n",
|
fprintf(stderr, "curl_multi_add_handle: %s\n",
|
||||||
curl_multi_strerror(mc));
|
curl_multi_strerror(mc));
|
||||||
exit(1);
|
curl_easy_cleanup(easy);
|
||||||
|
goto cleanup;
|
||||||
}
|
}
|
||||||
--start_count;
|
--start_count;
|
||||||
}
|
}
|
||||||
@ -196,7 +198,7 @@ int main(int argc, char *argv[])
|
|||||||
if(mc != CURLM_OK) {
|
if(mc != CURLM_OK) {
|
||||||
fprintf(stderr, "curl_multi_perform: %s\n",
|
fprintf(stderr, "curl_multi_perform: %s\n",
|
||||||
curl_multi_strerror(mc));
|
curl_multi_strerror(mc));
|
||||||
exit(1);
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(running_handles) {
|
if(running_handles) {
|
||||||
@ -204,7 +206,7 @@ int main(int argc, char *argv[])
|
|||||||
if(mc != CURLM_OK) {
|
if(mc != CURLM_OK) {
|
||||||
fprintf(stderr, "curl_multi_poll: %s\n",
|
fprintf(stderr, "curl_multi_poll: %s\n",
|
||||||
curl_multi_strerror(mc));
|
curl_multi_strerror(mc));
|
||||||
exit(1);
|
goto cleanup;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -224,12 +226,12 @@ int main(int argc, char *argv[])
|
|||||||
else if(msg->data.result) {
|
else if(msg->data.result) {
|
||||||
fprintf(stderr, "transfer #%" CURL_FORMAT_CURL_OFF_T
|
fprintf(stderr, "transfer #%" CURL_FORMAT_CURL_OFF_T
|
||||||
": failed with %d\n", xfer_id, msg->data.result);
|
": failed with %d\n", xfer_id, msg->data.result);
|
||||||
exit(1);
|
goto cleanup;
|
||||||
}
|
}
|
||||||
else if(status != 206) {
|
else if(status != 206) {
|
||||||
fprintf(stderr, "transfer #%" CURL_FORMAT_CURL_OFF_T
|
fprintf(stderr, "transfer #%" CURL_FORMAT_CURL_OFF_T
|
||||||
": wrong http status %ld (expected 206)\n", xfer_id, status);
|
": wrong http status %ld (expected 206)\n", xfer_id, status);
|
||||||
exit(1);
|
goto cleanup;
|
||||||
}
|
}
|
||||||
curl_multi_remove_handle(multi, msg->easy_handle);
|
curl_multi_remove_handle(multi, msg->easy_handle);
|
||||||
curl_easy_cleanup(msg->easy_handle);
|
curl_easy_cleanup(msg->easy_handle);
|
||||||
@ -244,5 +246,22 @@ int main(int argc, char *argv[])
|
|||||||
} while(running_handles > 0 || start_count);
|
} while(running_handles > 0 || start_count);
|
||||||
|
|
||||||
fprintf(stderr, "exiting\n");
|
fprintf(stderr, "exiting\n");
|
||||||
exit(EXIT_SUCCESS);
|
exitcode = EXIT_SUCCESS;
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
|
||||||
|
if(multi) {
|
||||||
|
CURL **list = curl_multi_get_handles(multi);
|
||||||
|
if(list) {
|
||||||
|
int i;
|
||||||
|
for(i = 0; list[i]; i++) {
|
||||||
|
curl_multi_remove_handle(multi, list[i]);
|
||||||
|
curl_easy_cleanup(list[i]);
|
||||||
|
}
|
||||||
|
curl_free(list);
|
||||||
|
}
|
||||||
|
curl_multi_cleanup(multi);
|
||||||
|
}
|
||||||
|
|
||||||
|
return exitcode;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -136,7 +136,7 @@ static size_t write_cb(char *ptr, size_t size, size_t nmemb, void *opaque)
|
|||||||
return size * nmemb;
|
return size * nmemb;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void add_transfer(CURLM *multi, CURLSH *share,
|
static int add_transfer(CURLM *multi, CURLSH *share,
|
||||||
struct curl_slist *resolve,
|
struct curl_slist *resolve,
|
||||||
const char *url, int http_version)
|
const char *url, int http_version)
|
||||||
{
|
{
|
||||||
@ -146,7 +146,7 @@ static void add_transfer(CURLM *multi, CURLSH *share,
|
|||||||
easy = curl_easy_init();
|
easy = curl_easy_init();
|
||||||
if(!easy) {
|
if(!easy) {
|
||||||
fprintf(stderr, "curl_easy_init failed\n");
|
fprintf(stderr, "curl_easy_init failed\n");
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
curl_easy_setopt(easy, CURLOPT_VERBOSE, 1L);
|
curl_easy_setopt(easy, CURLOPT_VERBOSE, 1L);
|
||||||
curl_easy_setopt(easy, CURLOPT_DEBUGFUNCTION, debug_cb);
|
curl_easy_setopt(easy, CURLOPT_DEBUGFUNCTION, debug_cb);
|
||||||
@ -168,29 +168,32 @@ static void add_transfer(CURLM *multi, CURLSH *share,
|
|||||||
if(mc != CURLM_OK) {
|
if(mc != CURLM_OK) {
|
||||||
fprintf(stderr, "curl_multi_add_handle: %s\n",
|
fprintf(stderr, "curl_multi_add_handle: %s\n",
|
||||||
curl_multi_strerror(mc));
|
curl_multi_strerror(mc));
|
||||||
exit(1);
|
curl_easy_cleanup(easy);
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
const char *url;
|
const char *url;
|
||||||
CURLM *multi;
|
CURLM *multi = NULL;
|
||||||
CURLMcode mc;
|
CURLMcode mc;
|
||||||
int running_handles = 0, numfds;
|
int running_handles = 0, numfds;
|
||||||
CURLMsg *msg;
|
CURLMsg *msg;
|
||||||
CURLSH *share;
|
CURLSH *share = NULL;
|
||||||
CURLU *cu;
|
CURLU *cu;
|
||||||
struct curl_slist resolve;
|
struct curl_slist *resolve = NULL;
|
||||||
char resolve_buf[1024];
|
char resolve_buf[1024];
|
||||||
int msgs_in_queue;
|
int msgs_in_queue;
|
||||||
int add_more, waits, ongoing = 0;
|
int add_more, waits, ongoing = 0;
|
||||||
char *host, *port;
|
char *host = NULL, *port = NULL;
|
||||||
int http_version = CURL_HTTP_VERSION_1_1;
|
int http_version = CURL_HTTP_VERSION_1_1;
|
||||||
|
int exitcode = 1;
|
||||||
|
|
||||||
if(argc != 3) {
|
if(argc != 3) {
|
||||||
fprintf(stderr, "%s proto URL\n", argv[0]);
|
fprintf(stderr, "%s proto URL\n", argv[0]);
|
||||||
exit(2);
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!strcmp("h2", argv[1]))
|
if(!strcmp("h2", argv[1]))
|
||||||
@ -202,41 +205,41 @@ int main(int argc, char *argv[])
|
|||||||
cu = curl_url();
|
cu = curl_url();
|
||||||
if(!cu) {
|
if(!cu) {
|
||||||
fprintf(stderr, "out of memory\n");
|
fprintf(stderr, "out of memory\n");
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
if(curl_url_set(cu, CURLUPART_URL, url, 0)) {
|
if(curl_url_set(cu, CURLUPART_URL, url, 0)) {
|
||||||
fprintf(stderr, "not a URL: '%s'\n", url);
|
fprintf(stderr, "not a URL: '%s'\n", url);
|
||||||
exit(1);
|
goto cleanup;
|
||||||
}
|
}
|
||||||
if(curl_url_get(cu, CURLUPART_HOST, &host, 0)) {
|
if(curl_url_get(cu, CURLUPART_HOST, &host, 0)) {
|
||||||
fprintf(stderr, "could not get host of '%s'\n", url);
|
fprintf(stderr, "could not get host of '%s'\n", url);
|
||||||
exit(1);
|
goto cleanup;
|
||||||
}
|
}
|
||||||
if(curl_url_get(cu, CURLUPART_PORT, &port, 0)) {
|
if(curl_url_get(cu, CURLUPART_PORT, &port, 0)) {
|
||||||
fprintf(stderr, "could not get port of '%s'\n", url);
|
fprintf(stderr, "could not get port of '%s'\n", url);
|
||||||
exit(1);
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(&resolve, 0, sizeof(resolve));
|
|
||||||
curl_msnprintf(resolve_buf, sizeof(resolve_buf)-1, "%s:%s:127.0.0.1",
|
curl_msnprintf(resolve_buf, sizeof(resolve_buf)-1, "%s:%s:127.0.0.1",
|
||||||
host, port);
|
host, port);
|
||||||
curl_slist_append(&resolve, resolve_buf);
|
resolve = curl_slist_append(resolve, resolve_buf);
|
||||||
|
|
||||||
multi = curl_multi_init();
|
multi = curl_multi_init();
|
||||||
if(!multi) {
|
if(!multi) {
|
||||||
fprintf(stderr, "curl_multi_init failed\n");
|
fprintf(stderr, "curl_multi_init failed\n");
|
||||||
exit(1);
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
share = curl_share_init();
|
share = curl_share_init();
|
||||||
if(!share) {
|
if(!share) {
|
||||||
fprintf(stderr, "curl_share_init failed\n");
|
fprintf(stderr, "curl_share_init failed\n");
|
||||||
exit(1);
|
goto cleanup;
|
||||||
}
|
}
|
||||||
curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_SSL_SESSION);
|
curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_SSL_SESSION);
|
||||||
|
|
||||||
|
|
||||||
add_transfer(multi, share, &resolve, url, http_version);
|
if(add_transfer(multi, share, resolve, url, http_version))
|
||||||
|
goto cleanup;
|
||||||
++ongoing;
|
++ongoing;
|
||||||
add_more = 6;
|
add_more = 6;
|
||||||
waits = 3;
|
waits = 3;
|
||||||
@ -245,7 +248,7 @@ int main(int argc, char *argv[])
|
|||||||
if(mc != CURLM_OK) {
|
if(mc != CURLM_OK) {
|
||||||
fprintf(stderr, "curl_multi_perform: %s\n",
|
fprintf(stderr, "curl_multi_perform: %s\n",
|
||||||
curl_multi_strerror(mc));
|
curl_multi_strerror(mc));
|
||||||
exit(1);
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(running_handles) {
|
if(running_handles) {
|
||||||
@ -253,7 +256,7 @@ int main(int argc, char *argv[])
|
|||||||
if(mc != CURLM_OK) {
|
if(mc != CURLM_OK) {
|
||||||
fprintf(stderr, "curl_multi_poll: %s\n",
|
fprintf(stderr, "curl_multi_poll: %s\n",
|
||||||
curl_multi_strerror(mc));
|
curl_multi_strerror(mc));
|
||||||
exit(1);
|
goto cleanup;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -262,7 +265,8 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
while(add_more) {
|
while(add_more) {
|
||||||
add_transfer(multi, share, &resolve, url, http_version);
|
if(add_transfer(multi, share, resolve, url, http_version))
|
||||||
|
goto cleanup;
|
||||||
++ongoing;
|
++ongoing;
|
||||||
--add_more;
|
--add_more;
|
||||||
}
|
}
|
||||||
@ -284,12 +288,12 @@ int main(int argc, char *argv[])
|
|||||||
else if(msg->data.result) {
|
else if(msg->data.result) {
|
||||||
fprintf(stderr, "transfer #%" CURL_FORMAT_CURL_OFF_T
|
fprintf(stderr, "transfer #%" CURL_FORMAT_CURL_OFF_T
|
||||||
": failed with %d\n", xfer_id, msg->data.result);
|
": failed with %d\n", xfer_id, msg->data.result);
|
||||||
exit(1);
|
goto cleanup;
|
||||||
}
|
}
|
||||||
else if(status != 200) {
|
else if(status != 200) {
|
||||||
fprintf(stderr, "transfer #%" CURL_FORMAT_CURL_OFF_T
|
fprintf(stderr, "transfer #%" CURL_FORMAT_CURL_OFF_T
|
||||||
": wrong http status %ld (expected 200)\n", xfer_id, status);
|
": wrong http status %ld (expected 200)\n", xfer_id, status);
|
||||||
exit(1);
|
goto cleanup;
|
||||||
}
|
}
|
||||||
curl_multi_remove_handle(multi, msg->easy_handle);
|
curl_multi_remove_handle(multi, msg->easy_handle);
|
||||||
curl_easy_cleanup(msg->easy_handle);
|
curl_easy_cleanup(msg->easy_handle);
|
||||||
@ -305,5 +309,27 @@ int main(int argc, char *argv[])
|
|||||||
} while(ongoing || add_more);
|
} while(ongoing || add_more);
|
||||||
|
|
||||||
fprintf(stderr, "exiting\n");
|
fprintf(stderr, "exiting\n");
|
||||||
exit(EXIT_SUCCESS);
|
exitcode = EXIT_SUCCESS;
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
|
||||||
|
if(multi) {
|
||||||
|
CURL **list = curl_multi_get_handles(multi);
|
||||||
|
if(list) {
|
||||||
|
int i;
|
||||||
|
for(i = 0; list[i]; i++) {
|
||||||
|
curl_multi_remove_handle(multi, list[i]);
|
||||||
|
curl_easy_cleanup(list[i]);
|
||||||
|
}
|
||||||
|
curl_free(list);
|
||||||
|
}
|
||||||
|
curl_multi_cleanup(multi);
|
||||||
|
}
|
||||||
|
curl_share_cleanup(share);
|
||||||
|
curl_slist_free_all(resolve);
|
||||||
|
curl_free(host);
|
||||||
|
curl_free(port);
|
||||||
|
curl_url_cleanup(cu);
|
||||||
|
|
||||||
|
return exitcode;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -180,12 +180,6 @@ static int progress_callback(void *clientp,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define ERR() \
|
|
||||||
do { \
|
|
||||||
fprintf(stderr, "something unexpected went wrong - bailing out!\n"); \
|
|
||||||
exit(2); \
|
|
||||||
} while(0)
|
|
||||||
|
|
||||||
static void usage(const char *msg)
|
static void usage(const char *msg)
|
||||||
{
|
{
|
||||||
if(msg)
|
if(msg)
|
||||||
@ -196,6 +190,13 @@ static void usage(const char *msg)
|
|||||||
" -V http_version (http/1.1, h2, h3) http version to use\n"
|
" -V http_version (http/1.1, h2, h3) http version to use\n"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define ERR() \
|
||||||
|
do { \
|
||||||
|
fprintf(stderr, "something unexpected went wrong - bailing out!\n"); \
|
||||||
|
return 2; \
|
||||||
|
} while(0)
|
||||||
|
|
||||||
#endif /* !_MSC_VER */
|
#endif /* !_MSC_VER */
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
@ -245,19 +246,19 @@ int main(int argc, char *argv[])
|
|||||||
cu = curl_url();
|
cu = curl_url();
|
||||||
if(!cu) {
|
if(!cu) {
|
||||||
fprintf(stderr, "out of memory\n");
|
fprintf(stderr, "out of memory\n");
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
if(curl_url_set(cu, CURLUPART_URL, url, 0)) {
|
if(curl_url_set(cu, CURLUPART_URL, url, 0)) {
|
||||||
fprintf(stderr, "not a URL: '%s'\n", url);
|
fprintf(stderr, "not a URL: '%s'\n", url);
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
if(curl_url_get(cu, CURLUPART_HOST, &host, 0)) {
|
if(curl_url_get(cu, CURLUPART_HOST, &host, 0)) {
|
||||||
fprintf(stderr, "could not get host of '%s'\n", url);
|
fprintf(stderr, "could not get host of '%s'\n", url);
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
if(curl_url_get(cu, CURLUPART_PORT, &port, 0)) {
|
if(curl_url_get(cu, CURLUPART_PORT, &port, 0)) {
|
||||||
fprintf(stderr, "could not get port of '%s'\n", url);
|
fprintf(stderr, "could not get port of '%s'\n", url);
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
memset(&resolve, 0, sizeof(resolve));
|
memset(&resolve, 0, sizeof(resolve));
|
||||||
curl_msnprintf(resolve_buf, sizeof(resolve_buf)-1, "%s:%s:127.0.0.1",
|
curl_msnprintf(resolve_buf, sizeof(resolve_buf)-1, "%s:%s:127.0.0.1",
|
||||||
@ -267,7 +268,7 @@ int main(int argc, char *argv[])
|
|||||||
curl = curl_easy_init();
|
curl = curl_easy_init();
|
||||||
if(!curl) {
|
if(!curl) {
|
||||||
fprintf(stderr, "out of memory\n");
|
fprintf(stderr, "out of memory\n");
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
/* We want to use our own read function. */
|
/* We want to use our own read function. */
|
||||||
curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
|
curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
|
||||||
|
|||||||
@ -21,7 +21,7 @@
|
|||||||
* SPDX-License-Identifier: curl
|
* SPDX-License-Identifier: curl
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
/* used for test case 533, 534 and 535 */
|
/* used for test case 533, 534, 535 and 546 */
|
||||||
|
|
||||||
#include "test.h"
|
#include "test.h"
|
||||||
|
|
||||||
|
|||||||
@ -59,6 +59,7 @@ BEGIN {
|
|||||||
our @EXPORT_OK = qw(
|
our @EXPORT_OK = qw(
|
||||||
os_is_win
|
os_is_win
|
||||||
exe_ext
|
exe_ext
|
||||||
|
dirsepadd
|
||||||
sys_native_abs_path
|
sys_native_abs_path
|
||||||
sys_native_current_path
|
sys_native_current_path
|
||||||
build_sys_abs_path
|
build_sys_abs_path
|
||||||
@ -182,4 +183,13 @@ sub exe_ext {
|
|||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#***************************************************************************
|
||||||
|
# Add ending slash if missing
|
||||||
|
#
|
||||||
|
sub dirsepadd {
|
||||||
|
my ($dir) = @_;
|
||||||
|
$dir =~ s/\/$//;
|
||||||
|
return $dir . '/';
|
||||||
|
}
|
||||||
|
|
||||||
1; # End of module
|
1; # End of module
|
||||||
|
|||||||
@ -1018,8 +1018,8 @@ int main(int argc, char *argv[])
|
|||||||
logdir, SERVERLOGS_LOCKDIR, ipv_inuse);
|
logdir, SERVERLOGS_LOCKDIR, ipv_inuse);
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
win32_init();
|
if(win32_init())
|
||||||
atexit(win32_cleanup);
|
return 2;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
CURL_SET_BINMODE(stdin);
|
CURL_SET_BINMODE(stdin);
|
||||||
|
|||||||
@ -99,8 +99,8 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
win32_init();
|
if(win32_init())
|
||||||
atexit(win32_cleanup);
|
return 2;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CURLRES_IPV6)
|
#if defined(CURLRES_IPV6)
|
||||||
|
|||||||
@ -1145,8 +1145,8 @@ int main(int argc, char *argv[])
|
|||||||
logdir, SERVERLOGS_LOCKDIR, ipv_inuse);
|
logdir, SERVERLOGS_LOCKDIR, ipv_inuse);
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
win32_init();
|
if(win32_init())
|
||||||
atexit(win32_cleanup);
|
return 2;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
install_signal_handlers(false);
|
install_signal_handlers(false);
|
||||||
|
|||||||
@ -1507,8 +1507,8 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
win32_init();
|
if(win32_init())
|
||||||
atexit(win32_cleanup);
|
return 2;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
CURL_SET_BINMODE(stdin);
|
CURL_SET_BINMODE(stdin);
|
||||||
|
|||||||
@ -1086,8 +1086,8 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
win32_init();
|
if(win32_init())
|
||||||
atexit(win32_cleanup);
|
return 2;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
CURL_SET_BINMODE(stdin);
|
CURL_SET_BINMODE(stdin);
|
||||||
|
|||||||
@ -1611,7 +1611,7 @@ static void http_connect(curl_socket_t *infdp,
|
|||||||
if(!req2) {
|
if(!req2) {
|
||||||
req2 = malloc(sizeof(*req2));
|
req2 = malloc(sizeof(*req2));
|
||||||
if(!req2)
|
if(!req2)
|
||||||
exit(1);
|
goto http_connect_cleanup; /* fail */
|
||||||
}
|
}
|
||||||
memset(req2, 0, sizeof(*req2));
|
memset(req2, 0, sizeof(*req2));
|
||||||
logmsg("====> Client connect DATA");
|
logmsg("====> Client connect DATA");
|
||||||
@ -2207,8 +2207,8 @@ int main(int argc, char *argv[])
|
|||||||
is_proxy ? "-proxy" : "", socket_type);
|
is_proxy ? "-proxy" : "", socket_type);
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
win32_init();
|
if(win32_init())
|
||||||
atexit(win32_cleanup);
|
return 2;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
install_signal_handlers(false);
|
install_signal_handlers(false);
|
||||||
|
|||||||
@ -644,8 +644,8 @@ int main(int argc, char **argv)
|
|||||||
logdir, SERVERLOGS_LOCKDIR, ipv_inuse);
|
logdir, SERVERLOGS_LOCKDIR, ipv_inuse);
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
win32_init();
|
if(win32_init())
|
||||||
atexit(win32_cleanup);
|
return 2;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
install_signal_handlers(true);
|
install_signal_handlers(true);
|
||||||
|
|||||||
@ -153,7 +153,17 @@ void win32_perror(const char *msg)
|
|||||||
fprintf(stderr, "%s\n", buf);
|
fprintf(stderr, "%s\n", buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
void win32_init(void)
|
static void win32_cleanup(void)
|
||||||
|
{
|
||||||
|
#ifdef USE_WINSOCK
|
||||||
|
WSACleanup();
|
||||||
|
#endif /* USE_WINSOCK */
|
||||||
|
|
||||||
|
/* flush buffers of all streams regardless of their mode */
|
||||||
|
_flushall();
|
||||||
|
}
|
||||||
|
|
||||||
|
int win32_init(void)
|
||||||
{
|
{
|
||||||
#ifdef USE_WINSOCK
|
#ifdef USE_WINSOCK
|
||||||
WORD wVersionRequested;
|
WORD wVersionRequested;
|
||||||
@ -166,7 +176,7 @@ void win32_init(void)
|
|||||||
if(err) {
|
if(err) {
|
||||||
perror("Winsock init failed");
|
perror("Winsock init failed");
|
||||||
logmsg("Error initialising Winsock -- aborting");
|
logmsg("Error initialising Winsock -- aborting");
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(LOBYTE(wsaData.wVersion) != LOBYTE(wVersionRequested) ||
|
if(LOBYTE(wsaData.wVersion) != LOBYTE(wVersionRequested) ||
|
||||||
@ -174,19 +184,11 @@ void win32_init(void)
|
|||||||
WSACleanup();
|
WSACleanup();
|
||||||
perror("Winsock init failed");
|
perror("Winsock init failed");
|
||||||
logmsg("No suitable winsock.dll found -- aborting");
|
logmsg("No suitable winsock.dll found -- aborting");
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
#endif /* USE_WINSOCK */
|
#endif /* USE_WINSOCK */
|
||||||
}
|
atexit(win32_cleanup);
|
||||||
|
return 0;
|
||||||
void win32_cleanup(void)
|
|
||||||
{
|
|
||||||
#ifdef USE_WINSOCK
|
|
||||||
WSACleanup();
|
|
||||||
#endif /* USE_WINSOCK */
|
|
||||||
|
|
||||||
/* flush buffers of all streams regardless of their mode */
|
|
||||||
_flushall();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* socket-safe strerror (works on Winsock errors, too) */
|
/* socket-safe strerror (works on Winsock errors, too) */
|
||||||
|
|||||||
@ -51,8 +51,7 @@ extern const char *cmdfile;
|
|||||||
#define perror(m) win32_perror(m)
|
#define perror(m) win32_perror(m)
|
||||||
void win32_perror(const char *msg);
|
void win32_perror(const char *msg);
|
||||||
|
|
||||||
void win32_init(void);
|
int win32_init(void);
|
||||||
void win32_cleanup(void);
|
|
||||||
const char *sstrerror(int err);
|
const char *sstrerror(int err);
|
||||||
#else /* _WIN32 */
|
#else /* _WIN32 */
|
||||||
|
|
||||||
|
|||||||
@ -58,9 +58,11 @@ CFGSET=true
|
|||||||
!ENDIF
|
!ENDIF
|
||||||
|
|
||||||
!INCLUDE "../lib/Makefile.inc"
|
!INCLUDE "../lib/Makefile.inc"
|
||||||
|
CSOURCES=$(CSOURCES: = )
|
||||||
LIBCURL_OBJS=$(CSOURCES:.c=.obj)
|
LIBCURL_OBJS=$(CSOURCES:.c=.obj)
|
||||||
|
|
||||||
!INCLUDE "../src/Makefile.inc"
|
!INCLUDE "../src/Makefile.inc"
|
||||||
|
CURL_CFILES=$(CURL_CFILES: = )
|
||||||
CURL_OBJS=$(CURL_CFILES:.c=.obj)
|
CURL_OBJS=$(CURL_CFILES:.c=.obj)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user