Compare commits
376 Commits
curl-7_10_
...
curl-7_10_
Author | SHA1 | Date | |
---|---|---|---|
![]() |
bfd00ac2ed | ||
![]() |
735a4714f4 | ||
![]() |
827fd47198 | ||
![]() |
e26b917661 | ||
![]() |
92872a2a3c | ||
![]() |
16ddb09cb4 | ||
![]() |
d37031f14e | ||
![]() |
b4e84ca7d2 | ||
![]() |
47970b9e6f | ||
![]() |
f65f120d50 | ||
![]() |
df00ec3c82 | ||
![]() |
ad6fca28f9 | ||
![]() |
fd33923496 | ||
![]() |
a55649dc82 | ||
![]() |
9558f229db | ||
![]() |
7917bfb1c9 | ||
![]() |
25f611ca42 | ||
![]() |
e6eb49e7e0 | ||
![]() |
9a075f53dc | ||
![]() |
4b3f800c03 | ||
![]() |
82bc76b243 | ||
![]() |
18b9b04907 | ||
![]() |
87f1f08b36 | ||
![]() |
7d7ebbe9f7 | ||
![]() |
5111ce782f | ||
![]() |
20b0e563ce | ||
![]() |
8b6cf239a3 | ||
![]() |
bcc285cffd | ||
![]() |
d5ba030942 | ||
![]() |
803f43592a | ||
![]() |
904b9ccaa3 | ||
![]() |
89721ff04a | ||
![]() |
6164823921 | ||
![]() |
f8b3c47f99 | ||
![]() |
56dd2da962 | ||
![]() |
68bb74d172 | ||
![]() |
bf5e12c8e0 | ||
![]() |
de11f5e53a | ||
![]() |
b125e8e23a | ||
![]() |
b28b616eb2 | ||
![]() |
4534ca238d | ||
![]() |
cee0e94294 | ||
![]() |
8319ea7078 | ||
![]() |
5334a58f9b | ||
![]() |
2616bdc4cd | ||
![]() |
c149b3f797 | ||
![]() |
d349eb3d43 | ||
![]() |
9b43ade1c0 | ||
![]() |
ad05d0a8d9 | ||
![]() |
e6bfbe9683 | ||
![]() |
c871efca4b | ||
![]() |
12c72b419c | ||
![]() |
a15b7691ca | ||
![]() |
01618d323b | ||
![]() |
bb6d0e37e3 | ||
![]() |
24a6100897 | ||
![]() |
0251563c98 | ||
![]() |
72673a351b | ||
![]() |
96b7131844 | ||
![]() |
dcc2f16416 | ||
![]() |
c2b8a04000 | ||
![]() |
d65587b06c | ||
![]() |
1ab0134522 | ||
![]() |
afffce80f0 | ||
![]() |
70b80b0160 | ||
![]() |
64067a04b5 | ||
![]() |
38cf0268c0 | ||
![]() |
2d2034703f | ||
![]() |
571ceeff90 | ||
![]() |
34c4ba4321 | ||
![]() |
babb372eb9 | ||
![]() |
5b9b82c1cd | ||
![]() |
075c534270 | ||
![]() |
f317f8b149 | ||
![]() |
f8d552dde5 | ||
![]() |
606f72bb13 | ||
![]() |
327e6a2b4f | ||
![]() |
be8f6c7f5c | ||
![]() |
073448e0ea | ||
![]() |
f136f435b5 | ||
![]() |
ebea6b487b | ||
![]() |
e5b7dc56e6 | ||
![]() |
c2d8025a0a | ||
![]() |
853e240e1d | ||
![]() |
8755a6d1ac | ||
![]() |
9f723061cb | ||
![]() |
652683fc04 | ||
![]() |
83a463891d | ||
![]() |
957b618fdc | ||
![]() |
ebe5191b63 | ||
![]() |
c426234df7 | ||
![]() |
8c3a10392e | ||
![]() |
d0e44946e9 | ||
![]() |
46a593d968 | ||
![]() |
eb0cc34951 | ||
![]() |
1c7dfda4bc | ||
![]() |
3c0e4a2fa1 | ||
![]() |
c753072ae1 | ||
![]() |
243942a7aa | ||
![]() |
8d5ac8b43c | ||
![]() |
17962b3d2e | ||
![]() |
f70acd5979 | ||
![]() |
ffe5c46224 | ||
![]() |
3242ea5f66 | ||
![]() |
39a282bffc | ||
![]() |
29583004ce | ||
![]() |
0a1a185874 | ||
![]() |
8f809e2a93 | ||
![]() |
f216059b49 | ||
![]() |
9121b1f41d | ||
![]() |
60e015d0c1 | ||
![]() |
7e049fca61 | ||
![]() |
0f0e4de6a4 | ||
![]() |
bc1102922b | ||
![]() |
a3d3642a30 | ||
![]() |
248eb47329 | ||
![]() |
52ebf50607 | ||
![]() |
d34a4b126e | ||
![]() |
de96719a45 | ||
![]() |
9876ed09fe | ||
![]() |
17cbbe3dc5 | ||
![]() |
b995af17eb | ||
![]() |
6589579850 | ||
![]() |
5ddc260fc2 | ||
![]() |
db5c9cd4c0 | ||
![]() |
9b6d010aef | ||
![]() |
065b87e949 | ||
![]() |
a6206a3aef | ||
![]() |
30639ed72b | ||
![]() |
9d02a39e13 | ||
![]() |
fc0af0d4d1 | ||
![]() |
a683416081 | ||
![]() |
9faf57ee8d | ||
![]() |
44b9ccb7e2 | ||
![]() |
de003d9cf8 | ||
![]() |
8a2a523c70 | ||
![]() |
c3dfe50aaf | ||
![]() |
9659d862c7 | ||
![]() |
69ab4cd391 | ||
![]() |
498f3985b3 | ||
![]() |
977175d4fd | ||
![]() |
3ddc7b9390 | ||
![]() |
10e9bf623f | ||
![]() |
48a5c64e94 | ||
![]() |
140606ccd5 | ||
![]() |
f56d006f93 | ||
![]() |
beb13a1d3e | ||
![]() |
fa47138327 | ||
![]() |
9421d4510a | ||
![]() |
ff8abfca85 | ||
![]() |
5c858965b8 | ||
![]() |
e3f83cb17a | ||
![]() |
de6008e01a | ||
![]() |
6417e696df | ||
![]() |
5d28f3781b | ||
![]() |
10026bb62e | ||
![]() |
21c16f923c | ||
![]() |
32cef52f0d | ||
![]() |
e7dd7c54ff | ||
![]() |
b0b50bd12a | ||
![]() |
f2c6057490 | ||
![]() |
169b2eeb94 | ||
![]() |
f81d027f60 | ||
![]() |
872eeb7339 | ||
![]() |
7f67a28c2a | ||
![]() |
30a46e1135 | ||
![]() |
3a01478ce8 | ||
![]() |
53d71fab60 | ||
![]() |
be891f112c | ||
![]() |
89934239d7 | ||
![]() |
8986037fdd | ||
![]() |
a7c72b7abf | ||
![]() |
409ac80710 | ||
![]() |
fc7bebdf55 | ||
![]() |
ca52549557 | ||
![]() |
8948a65654 | ||
![]() |
b4e33cfcc7 | ||
![]() |
86742e8334 | ||
![]() |
173b35eaf8 | ||
![]() |
2b054e5309 | ||
![]() |
a302ff1605 | ||
![]() |
f7bb4e6138 | ||
![]() |
5c5489916b | ||
![]() |
5627cf7167 | ||
![]() |
c05dae4a68 | ||
![]() |
57e61e3743 | ||
![]() |
a6c395c156 | ||
![]() |
543e0b1e0f | ||
![]() |
64b0ff875f | ||
![]() |
a034208a00 | ||
![]() |
5f1251586b | ||
![]() |
6f6cffdc32 | ||
![]() |
21a98ef264 | ||
![]() |
aa90436435 | ||
![]() |
61225052f9 | ||
![]() |
dee3163d95 | ||
![]() |
8b0668b99e | ||
![]() |
8471a82c85 | ||
![]() |
ed4dff63b9 | ||
![]() |
838e776542 | ||
![]() |
39c12790bc | ||
![]() |
126e6d6645 | ||
![]() |
5796a1b282 | ||
![]() |
90982529fc | ||
![]() |
aba51d6b60 | ||
![]() |
49bc4567bb | ||
![]() |
2ac52705c6 | ||
![]() |
d0eb56dd97 | ||
![]() |
b9c60df04b | ||
![]() |
8c236e4dfa | ||
![]() |
154a59f21f | ||
![]() |
9689e1c548 | ||
![]() |
5a83976c99 | ||
![]() |
b5276a9a69 | ||
![]() |
30377baa5e | ||
![]() |
aa8b7dd336 | ||
![]() |
f26a338a54 | ||
![]() |
c4383f1d99 | ||
![]() |
4527995e66 | ||
![]() |
b0fbb98f41 | ||
![]() |
63667dfd96 | ||
![]() |
77c388c928 | ||
![]() |
a69b814ded | ||
![]() |
c51ada766d | ||
![]() |
ef2709f97c | ||
![]() |
bf9b9ca29d | ||
![]() |
64f224bb22 | ||
![]() |
285a8fe4d0 | ||
![]() |
3773d76dfd | ||
![]() |
94c5c7bd6d | ||
![]() |
12cfc4c0b0 | ||
![]() |
9a2de6e6ee | ||
![]() |
2ede47b8c8 | ||
![]() |
76e107506f | ||
![]() |
6f35ed51dc | ||
![]() |
c94ba66310 | ||
![]() |
a15133f5cf | ||
![]() |
cc09e9d4c2 | ||
![]() |
16e0da2c4b | ||
![]() |
ed22f75241 | ||
![]() |
ba25cad6e2 | ||
![]() |
abb01123cb | ||
![]() |
e2d249f8c5 | ||
![]() |
4a2ac166fa | ||
![]() |
5fab55383d | ||
![]() |
f152f23a68 | ||
![]() |
24e78b3571 | ||
![]() |
9a239edb52 | ||
![]() |
abcc5c5a82 | ||
![]() |
cb5ba675a7 | ||
![]() |
2288086695 | ||
![]() |
61421b7a8f | ||
![]() |
6a7e53a7c7 | ||
![]() |
ca134d5522 | ||
![]() |
ec24efda74 | ||
![]() |
7f0f10e498 | ||
![]() |
aa5af100b4 | ||
![]() |
37ae32f688 | ||
![]() |
d0cffdec5d | ||
![]() |
0f34521612 | ||
![]() |
e69362df22 | ||
![]() |
3de8f6f38e | ||
![]() |
5359bc8083 | ||
![]() |
eb6a14fe10 | ||
![]() |
2912537533 | ||
![]() |
cfb32da198 | ||
![]() |
9b4f92130f | ||
![]() |
5a2ab686a6 | ||
![]() |
3b8583b014 | ||
![]() |
ed29552b1e | ||
![]() |
a2ada3cf96 | ||
![]() |
88825a1187 | ||
![]() |
264e7fc58b | ||
![]() |
1698015e3c | ||
![]() |
39dc14c002 | ||
![]() |
04c499a5fc | ||
![]() |
efbe930a69 | ||
![]() |
747f87f61e | ||
![]() |
5a4c56fc44 | ||
![]() |
81f45ba92a | ||
![]() |
a5dc4e32f2 | ||
![]() |
2b839853ec | ||
![]() |
66b6cd68ed | ||
![]() |
0ef3d90838 | ||
![]() |
5cc50f9b27 | ||
![]() |
e879e26a5b | ||
![]() |
96d84150e1 | ||
![]() |
2aa0c6c488 | ||
![]() |
811138386f | ||
![]() |
c433cf7459 | ||
![]() |
e0d6ebc2f2 | ||
![]() |
4938991ab8 | ||
![]() |
13722f536e | ||
![]() |
57f0e3292d | ||
![]() |
da5ae565ab | ||
![]() |
87c5066242 | ||
![]() |
b528bde470 | ||
![]() |
57572e550f | ||
![]() |
3aea0d3d68 | ||
![]() |
9ae920c1b6 | ||
![]() |
dff406a360 | ||
![]() |
d346ba5c3c | ||
![]() |
978541adc2 | ||
![]() |
637bce2707 | ||
![]() |
07e3dc2ee2 | ||
![]() |
ead065d803 | ||
![]() |
0150bff7b4 | ||
![]() |
0f493b6038 | ||
![]() |
f26b709c50 | ||
![]() |
ae10d9cf22 | ||
![]() |
81af9674ed | ||
![]() |
b63df7991a | ||
![]() |
a79990465c | ||
![]() |
ad6bd530ac | ||
![]() |
c1b369fd4c | ||
![]() |
01fcd3c2d5 | ||
![]() |
7196d784d3 | ||
![]() |
0f0aaf51e0 | ||
![]() |
b5f493c55a | ||
![]() |
0aa031beb9 | ||
![]() |
db6ff224f8 | ||
![]() |
b3c7cd61f3 | ||
![]() |
9ae05c4d91 | ||
![]() |
264e6f6efd | ||
![]() |
ec7bccf671 | ||
![]() |
49f75ee8ce | ||
![]() |
4bcc866c52 | ||
![]() |
c65e088caf | ||
![]() |
6ca4116555 | ||
![]() |
f6cdb820af | ||
![]() |
081e5a82ff | ||
![]() |
2ad2a4bd9f | ||
![]() |
645e700da3 | ||
![]() |
92aea29a30 | ||
![]() |
e1c01af929 | ||
![]() |
7ef749497d | ||
![]() |
d72aa49126 | ||
![]() |
e92bd312ec | ||
![]() |
b097c2cfb0 | ||
![]() |
a39cdc80b7 | ||
![]() |
a47250810e | ||
![]() |
1f50f3031f | ||
![]() |
75145dd753 | ||
![]() |
d0b97f7e1f | ||
![]() |
199a0311e2 | ||
![]() |
fa446f860f | ||
![]() |
7a74303f3c | ||
![]() |
7d9eabb981 | ||
![]() |
ff5308a5af | ||
![]() |
3f8ba3a986 | ||
![]() |
4a555de1b2 | ||
![]() |
d27e4a08f9 | ||
![]() |
bf678a1ca9 | ||
![]() |
13a903de28 | ||
![]() |
a3c14c031e | ||
![]() |
e90d528026 | ||
![]() |
d64dd77993 | ||
![]() |
113850a748 | ||
![]() |
1c49a00d64 | ||
![]() |
eef6c83503 | ||
![]() |
ceb5648eb7 | ||
![]() |
a0eadb76ea | ||
![]() |
065852e46c | ||
![]() |
e5e2fb8274 | ||
![]() |
0210b3c893 | ||
![]() |
7df5677b46 | ||
![]() |
2e71876b28 | ||
![]() |
11576b1142 | ||
![]() |
ce011b8a2d | ||
![]() |
12cfb4f7ee | ||
![]() |
9e1123debe | ||
![]() |
c7354142c0 | ||
![]() |
dee84f448f | ||
![]() |
1607711603 | ||
![]() |
8bca5e05b8 | ||
![]() |
f68505ee23 |
539
CHANGES
539
CHANGES
@@ -6,6 +6,543 @@
|
|||||||
|
|
||||||
Changelog
|
Changelog
|
||||||
|
|
||||||
|
Version 7.10.4 (2 Apr 2003)
|
||||||
|
|
||||||
|
Daniel (1 Apr)
|
||||||
|
- Added test case 505 to exercise FTP upload with rename done with libcurl,
|
||||||
|
and for that I had to extend the test suite's FTP server to deal with the
|
||||||
|
RNFR and RNTO commands.
|
||||||
|
|
||||||
|
Daniel (31 Mar)
|
||||||
|
- Even more SSL config check modifications after Richard's testing.
|
||||||
|
|
||||||
|
Version 7.10.4-pre6 (31 Mar 2003)
|
||||||
|
|
||||||
|
Daniel (31 Mar)
|
||||||
|
- More fixes for the SSL session ID cache checks when SSL configs are changed
|
||||||
|
between connections. Based on tests and talks with Richard Bramante.
|
||||||
|
|
||||||
|
- Guillaume Cottenceau provided a patch that added CURLOPT_UNRESTRICTED_AUTH.
|
||||||
|
When enabled, it will prevent libcurl from limiting to which host it sends
|
||||||
|
user+password to when following locations. By default, libcurl only sends
|
||||||
|
name and password to the original host used in the first URL, but with this
|
||||||
|
option set it will send the auth info to all hosts it follows location
|
||||||
|
headers to. The new tool command line option for this is named
|
||||||
|
"--location-trusted".
|
||||||
|
|
||||||
|
- Frankie Fong reported a problem with libcurl if you re-used an easy handle
|
||||||
|
with a proxy, and you first made a https:// connction to a host and then
|
||||||
|
switched to a http:// one to the same host. libcurl would then wrongly re-use
|
||||||
|
the same connection for it and fail to get the second URL properly
|
||||||
|
|
||||||
|
Daniel (29 Mar)
|
||||||
|
- Dan Shearer's fix that makes curl complain if invoked with nothing but "curl
|
||||||
|
-O" was applied.
|
||||||
|
|
||||||
|
Daniel (26 Mar)
|
||||||
|
- Bryan Kemp was friendly enough to lend me an account on his Redhat 9 box and
|
||||||
|
I could fix the configure problems on redhat 8.1 and 9 in no time thanks to
|
||||||
|
this. Thanks a bunch Bryan!
|
||||||
|
|
||||||
|
Daniel (25 Mar)
|
||||||
|
- Renamed configure.in to configure.ac
|
||||||
|
|
||||||
|
Version 7.10.4-pre5 (25 Mar 2003)
|
||||||
|
|
||||||
|
Daniel (25 Mar)
|
||||||
|
- Richard Bramante provided a fix for a handle re-use problem seen when you
|
||||||
|
change options on an SSL-enabled connection between requests. Previously,
|
||||||
|
changing peer verification or host verification and similar things was not
|
||||||
|
taken into account when a connection were checked for re-use and thus
|
||||||
|
enabling stricter check between requests on a re-used connection made no
|
||||||
|
difference and the connection would thus be used erroneously.
|
||||||
|
|
||||||
|
Daniel (24 Mar)
|
||||||
|
- G<>tz Babin-Ebell pointed out that the ca-bundle.crt file contained a
|
||||||
|
certificate from Trustcenter that was a demo certificate only that was never
|
||||||
|
indended to be part of a CA bundle.
|
||||||
|
|
||||||
|
Daniel (21 Mar)
|
||||||
|
- Life is a mystery. Within a time period of 17 hours, Tim Pope and Michael
|
||||||
|
Churchill filed one bug report each, both identifying problems with a second
|
||||||
|
transfer when doing persistant transfers re-using a connection. Tim's one is
|
||||||
|
#706624, labeled "Multiple uploads per handle fail" and Michael's #707003
|
||||||
|
"Does not send Authorization: header when reusing connection". I could track
|
||||||
|
both down to the same piece of logic and it turned out libcurl was not using
|
||||||
|
new settings properly when re-using an existing connection. This concerned
|
||||||
|
both uploading and downloading and involved exactly those pieces these two
|
||||||
|
reports identified. This code has been this faulty since the day I
|
||||||
|
introduced persistant connection support in libcurl, more than 2 years ago.
|
||||||
|
|
||||||
|
Daniel (20 Mar 2003)
|
||||||
|
- Five year anniversary. Today five years ago, the first ever curl release saw
|
||||||
|
the light of day.
|
||||||
|
|
||||||
|
Daniel (17 Mar)
|
||||||
|
- Andy Cedilnik corrected flaws in some libcurl example-usage sources.
|
||||||
|
|
||||||
|
Daniel (16 Mar)
|
||||||
|
- Juan F. Codagnone reported that the fix from March 2nd was incomplete.
|
||||||
|
|
||||||
|
- Added code to the configure.in to check for select() argument types. I've
|
||||||
|
not made any code use the results just yet though.
|
||||||
|
|
||||||
|
Daniel (15 Mar)
|
||||||
|
- Gisle Vanem provided two patches to build better on Windows.
|
||||||
|
|
||||||
|
- Adjusted the test suite code to better make sure that the server(s) required
|
||||||
|
for a specific test is properly started before the test case is attempted.
|
||||||
|
Many tests now run a lot faster than before.
|
||||||
|
|
||||||
|
Daniel (14 Mar)
|
||||||
|
- Another configure.in adjustment made the configure detect functions properly
|
||||||
|
on HPUX now.
|
||||||
|
|
||||||
|
Daniel (13 Mar)
|
||||||
|
- Philippe Raoult fixed pre4-compile quirks for FreeBSD.
|
||||||
|
|
||||||
|
Version 7.10.4-pre4 (13 Mar 2003)
|
||||||
|
|
||||||
|
Daniel (13 Mar)
|
||||||
|
- Added a backup-check for functions that aren't found by AC_CHECK_FUNCS()
|
||||||
|
as I believe some checks on HPUX need this. At least some of the info given
|
||||||
|
to us by Rick Jones seemed to indicate this.
|
||||||
|
|
||||||
|
Daniel (12 Mar)
|
||||||
|
- Thomas Tonino found out that if you used the curl tool to do PUT operations
|
||||||
|
as in 'curl www.foo.com/dir/ -T file' and the file name included for example
|
||||||
|
space or other characters that don't belong in URLs, curl did not properly
|
||||||
|
URL encode them before using them in the URL.
|
||||||
|
|
||||||
|
- Added an option to configure called --enable-libgcc that simply adds -lgcc
|
||||||
|
to the LIBS variable, as this seems to be a common problem.
|
||||||
|
|
||||||
|
- I modified the configure.in file, so that the headers are now checked in an
|
||||||
|
order of "viality". We must also make sure to use the "default headers"
|
||||||
|
parameter to AC_CHECK_HEADERS() so that headers are checked with the proper
|
||||||
|
prerequisites included (i.e all the major and generally important header
|
||||||
|
files are included there by default). This might be what we need for various
|
||||||
|
Sun, HP, AIX and Tru64 systems to behave good again on the header check
|
||||||
|
front.
|
||||||
|
|
||||||
|
- Rick Jones pointed out a few compiler warnings on HP-UX that I addressed.
|
||||||
|
|
||||||
|
- I made the configure --help output nicer by using AC_HELP_STRING() a lot
|
||||||
|
more.
|
||||||
|
|
||||||
|
Daniel (11 Mar)
|
||||||
|
- Christophe Demory fixed the socket sending code to work better on HP-UX
|
||||||
|
when sending data to a socket that would block. It then returns EAGAIN, not
|
||||||
|
EWOULDBLOCK.
|
||||||
|
|
||||||
|
- Richard Gorton improved the seeding function for systems without a good
|
||||||
|
and reliable random source.
|
||||||
|
|
||||||
|
- Richard Gorton fixed a few warnings that popped up when you built curl
|
||||||
|
using the Sun compiler on a 64bit SPARC platform.
|
||||||
|
|
||||||
|
- Martin C. Martin fixed a case where a connect failure using the multi
|
||||||
|
interface didn't produce a human readable error string.
|
||||||
|
|
||||||
|
Daniel (10 Mar)
|
||||||
|
- Reverted ltmain.sh back to libtool 1.4.2 status again, as the 1.4.3 version
|
||||||
|
broke the build on numerous platforms. It seems that libtool 1.4.3 puts some
|
||||||
|
requirements on what versions of the other tools (autoconf + automake) that
|
||||||
|
I am not familiar with and thus I couldn't fulfill at this point.
|
||||||
|
|
||||||
|
Yes, this is more than mildly frustrating.
|
||||||
|
|
||||||
|
Daniel (7 Mar)
|
||||||
|
- Run libtoolize version 1.4.3.
|
||||||
|
|
||||||
|
Version 7.10.4-pre3 (4 Mar 2003)
|
||||||
|
|
||||||
|
Daniel (3 Mar)
|
||||||
|
- Added share.obj to the VC6 and Borland libcurl makefiles.
|
||||||
|
|
||||||
|
- Troels Walsted Hansen found and investigated a problem with libcurl on AIX,
|
||||||
|
presumably only on 4.3 or later. gethostbyname_r() is not returning data
|
||||||
|
that is possible to "keep" and cache the way libcurl does. But instead these
|
||||||
|
versions of AIX uses a gethostbyname() that works thread-safely we can
|
||||||
|
instead use the ordinary gethostbyname() and our pack_hostent() approach to
|
||||||
|
achieve what we want. The configure script now attempts to detect AIX 4.3 or
|
||||||
|
later to adjust for this.
|
||||||
|
|
||||||
|
Daniel (2 Mar)
|
||||||
|
- Juan F. Codagnone found a problem introduced in 7.10.3 when you first did a
|
||||||
|
POST and then back to a GET using the same easy handle.
|
||||||
|
|
||||||
|
Daniel (28 Feb)
|
||||||
|
- Removed the strequal and strnequal defines from curl/curl.h header. They
|
||||||
|
were never meant for the public header anyway. Philippe Raoult brought it
|
||||||
|
up.
|
||||||
|
|
||||||
|
- James Bursa fixed the RISC OS build.
|
||||||
|
|
||||||
|
Daniel (27 Feb)
|
||||||
|
- Avery Fay pointed out the very misleading curl_multi_info_read man page, and
|
||||||
|
I updated it to become more accurate.
|
||||||
|
|
||||||
|
- Salvatore Sorrentino found a problem with FTP downloading that turned out to
|
||||||
|
be his FTP server returning size zero (0 bytes) when SIZE was used on a file
|
||||||
|
while being in BINARY mode. We now make a second check for the actual size
|
||||||
|
by scanning the RETR reply anyway, even if the SIZE command returned 0.
|
||||||
|
|
||||||
|
Daniel (26 Feb)
|
||||||
|
- Kyle Sallee reported a case where he would do a transfer that didn't update
|
||||||
|
the progress meter properly. It turned out to be a case where libcurl would
|
||||||
|
loop a little too eagerly in the tranfer loop, which isn't really good for
|
||||||
|
the APIs, especially not the multi API.
|
||||||
|
|
||||||
|
Version 7.10.4-pre2 (24 Feb 2003)
|
||||||
|
|
||||||
|
Daniel (24 Feb)
|
||||||
|
- Kjetil Jacobsen found out that setting CURLOPT_MAXCONNECTS to a value higher
|
||||||
|
than 5 could cause a segfault.
|
||||||
|
|
||||||
|
- I believe I fixed the 'Expect: 100-continue' behavior that has been broken
|
||||||
|
for a while (I think since my change dated Dec 10 2002). When this header is
|
||||||
|
used, libcurl should wait for a HTTP 100 (or timeout) before sending the
|
||||||
|
post/put data.
|
||||||
|
|
||||||
|
Daniel (14 Feb)
|
||||||
|
- Matthew Clarke provided some info what to modify to make curl build
|
||||||
|
flawlessly on AIX 3.2.5.
|
||||||
|
|
||||||
|
- Martin C. Martin found and fixed a problem in the multi interface when
|
||||||
|
running on Windows and trying to connect to a port without a listener.
|
||||||
|
|
||||||
|
Daniel (13 Feb)
|
||||||
|
- Christopher R. Palmer fixed Curl_base64_encode() to deal with zeroes in the
|
||||||
|
data to encode.
|
||||||
|
|
||||||
|
Daniel (4 Feb)
|
||||||
|
- Jean-Philippe added the first code that enables the 'share' system. This
|
||||||
|
should now enable sharing of DNS data between two curl easy handles.
|
||||||
|
|
||||||
|
- Incorporated Nico Baggus' fixes to again compile flawlessly on VMS.
|
||||||
|
|
||||||
|
- James Bursa corrected a bad comment in the public include file curl/multi.h
|
||||||
|
|
||||||
|
- Peter Forret reported one of those error:00000000 cases in libcurl again
|
||||||
|
when connecting to a HTTPS site, and this time I did discover some oddities
|
||||||
|
in how curl reports SSL errors back. It could miss showing the actual error.
|
||||||
|
|
||||||
|
Version 7.10.4-pre1 (3 Feb 2003)
|
||||||
|
|
||||||
|
Daniel (3 Feb)
|
||||||
|
- Removed things in the docs saying capath doesn't work on Windows, as Julian
|
||||||
|
Noble told us it works fine.
|
||||||
|
|
||||||
|
Daniel (31 Jan)
|
||||||
|
- Kevin Roth fixed the zlib build stuff in the Mingw32 makefile.
|
||||||
|
|
||||||
|
Daniel (30 Jan)
|
||||||
|
- Kevin Roth found out that curl on Windows always checked for the CA cert
|
||||||
|
bundle using the environment variable and the path scan, even though
|
||||||
|
-k/--insecure was used.
|
||||||
|
|
||||||
|
- Hamish Mackenzie pointed out that curl only did strict host name verifying
|
||||||
|
if capath or cainfo was used. Now it'll always do it unless -k / --insecure
|
||||||
|
is used!
|
||||||
|
|
||||||
|
- Pavel Cenek pointed out that the Content-Type extraction was done wrongly
|
||||||
|
as the full string was not fetched. Added test case 57 to verify that curl
|
||||||
|
does it right now.
|
||||||
|
|
||||||
|
Daniel (29 Jan)
|
||||||
|
- Jamie Wilkinson provided a patch that now makes curl attempt to clear out
|
||||||
|
"sensitive" command line arguments so that they don't appear in ps outputs
|
||||||
|
(only on platforms that allow writing to argv[]).
|
||||||
|
|
||||||
|
- John McGowan found out that the DEBUGFUNCTION could be called with bad
|
||||||
|
arguments and thus cause the --trace outputs to go wrong.
|
||||||
|
|
||||||
|
- Removed all the emacs local variables from all files. Mats Lidell provided
|
||||||
|
the new sample.emacs file (for a sample of what to include in your .emacs)
|
||||||
|
and the curl-style.el that sets a better c-style for editing curl sources.
|
||||||
|
|
||||||
|
- Dave Halbakken found a problem with FTP downloads that could accidently
|
||||||
|
return CURLE_PARTIAL_FILE when curl_easy_perform() was called with NOBODY
|
||||||
|
set TRUE.
|
||||||
|
|
||||||
|
Daniel (27 Jan)
|
||||||
|
- The fopen.c example was flawed as Nick Humfrey noticed, and I fixed it to
|
||||||
|
work again.
|
||||||
|
|
||||||
|
Daniel (24 Jan)
|
||||||
|
- Bertrand Demiddelaer found and fixed a memory leak (the content-type string)
|
||||||
|
when following locations.
|
||||||
|
|
||||||
|
Daniel (22 Jan 2003)
|
||||||
|
- Ian Wilkes and Legoff Vincent both independently provided fixes for making
|
||||||
|
curl/multi.h work properly when compiled with a C++ compiler.
|
||||||
|
|
||||||
|
Daniel (20 Jan 2003)
|
||||||
|
- Fixed 'buildconf' to check version number of the required tools before
|
||||||
|
they're actually used.
|
||||||
|
|
||||||
|
- Wrote 'testcurl.sh', a script targeted for automatic and distributed curl
|
||||||
|
tests on various platforms.
|
||||||
|
|
||||||
|
- David Thiel pointed out that the .netrc file was not being dealt with
|
||||||
|
properly anymore. I broke this in the password prompting "fix".
|
||||||
|
|
||||||
|
- Markus F.X.J. Oberhumer patched libcurl to allocate the scratch buffer only
|
||||||
|
on demand and thus we save 32KB in each curl handle that don't use that
|
||||||
|
buffer. This need appeared when some people started using thousands of
|
||||||
|
simultaneous curl handles... :-)
|
||||||
|
|
||||||
|
Daniel (16 Jan 2003)
|
||||||
|
- Markus Oberhumer fixed curl-config --cflags when the includedir was not
|
||||||
|
/usr/include.
|
||||||
|
|
||||||
|
- Markus Oberhumer fixed CURLINFO_PRIVATE to properly return NULL if it was
|
||||||
|
set to NULL!
|
||||||
|
|
||||||
|
Version 7.10.3 (14 Jan 2003)
|
||||||
|
|
||||||
|
Daniel (10 Jan 2003)
|
||||||
|
- Steve Oliphant pointed out that test case 105 did not work anymore and this
|
||||||
|
was due to a missing fix for the password prompting.
|
||||||
|
|
||||||
|
Version 7.10.3-pre6 (10 Jan 2003)
|
||||||
|
|
||||||
|
Daniel (9 Jan 2003)
|
||||||
|
- Bryan Kemp pointed out that curl -u could not provide a blank password
|
||||||
|
without prompting the user. It can now. -u username: makes the password
|
||||||
|
empty, while -u username makes curl prompt the user for a password.
|
||||||
|
|
||||||
|
- Kjetil Jacobsen found a remaining connect problem in the multi interface on
|
||||||
|
ipv4 systems (Linux only?), that I fixed and Kjetil verified that it fixed
|
||||||
|
his problems.
|
||||||
|
|
||||||
|
- memanalyze.pl now reads a file name from the command line, and no longer
|
||||||
|
takes the data on stdin as before.
|
||||||
|
|
||||||
|
Version 7.10.3-pre5 (9 Jan 2003)
|
||||||
|
|
||||||
|
Daniel (9 Jan 2003)
|
||||||
|
- Fixed tests/memanalyze.pl to work with file names that contain colons (as on
|
||||||
|
Windows).
|
||||||
|
|
||||||
|
- Kjetil Jacobsen quickly pointed out that lib/share.h was missing...
|
||||||
|
|
||||||
|
Version 7.10.3-pre4 (9 Jan 2003)
|
||||||
|
|
||||||
|
Daniel (9 Jan 2003)
|
||||||
|
- Updated lib/share.c quite a bit to match the design document at
|
||||||
|
http://curl.haxx.se/dev/sharing.txt a lot more.
|
||||||
|
|
||||||
|
I'll try to update the document soonish. share.c is still not actually used
|
||||||
|
by libcurl, but the API is slowly getting there and we can start
|
||||||
|
implementing code that takes advantage of this system.
|
||||||
|
|
||||||
|
Daniel (8 Jan 2003)
|
||||||
|
- Updated share stuff in curl/curl.h, including data types, structs and
|
||||||
|
function prototypes. The corresponding files in lib/ were also modified
|
||||||
|
of course to remain compilable. Based on input from Jean-Philippe and also
|
||||||
|
to make it more in line with the design document.
|
||||||
|
|
||||||
|
- Jean-Philippe Barrette-LaPierre patched a very trivial memory leak in
|
||||||
|
curl_escape() that would happen when realloc() returns NULL...
|
||||||
|
|
||||||
|
- Matthew Blain provided feedback to make the --create-dirs stuff build
|
||||||
|
properly on Windows.
|
||||||
|
|
||||||
|
- Fixed the #include in tests/libtest/first.c as Legoff Vincent pointed out.
|
||||||
|
|
||||||
|
Daniel (7 Jan 2003)
|
||||||
|
- Philippe Raoult provided a patch that now makes libcurl properly support
|
||||||
|
wildcard checks for certificate names.
|
||||||
|
|
||||||
|
- Simon Liu added CURLOPT_HTTP200ALIASES, to let an application set other
|
||||||
|
strings recognized as "HTTP 200" to allow http-like protocols to get
|
||||||
|
downloaded fine by curl.
|
||||||
|
|
||||||
|
- Now using autoconf 2.57 and automake 1.7.2
|
||||||
|
|
||||||
|
- Doing "curl -I ftp://domain/non-existing-file" still outputed a date!
|
||||||
|
Wayne Haigh reported.
|
||||||
|
|
||||||
|
- The error message is now written properly with a newline in the --trace
|
||||||
|
file.
|
||||||
|
|
||||||
|
Daniel (6 Jan 2003)
|
||||||
|
- Sterling Hughes fixed a possible bug: previously, if you called
|
||||||
|
curl_easy_perform and then set the global dns cache, the global cache
|
||||||
|
wouldn't be used. Pointed out by Jean-Philippe Barrette-LaPierre.
|
||||||
|
|
||||||
|
- Matthew Blain's fixed the VC6 libcurl makefile to include better debug data
|
||||||
|
on debug builds.
|
||||||
|
|
||||||
|
Daniel (27 Dec 2002)
|
||||||
|
- Philippe Raoult reported a bug with HTTPS connections which I evidently
|
||||||
|
added in my 19 dec fix. I corrected it.
|
||||||
|
|
||||||
|
Daniel (20 Dec)
|
||||||
|
- Idea from the Debian latest patch: use AM_MAINTAINER_MODE in the configure
|
||||||
|
script to make the default makefile less confusing "to the casual
|
||||||
|
installer".
|
||||||
|
|
||||||
|
Version 7.10.3-pre3 (20 Dec)
|
||||||
|
|
||||||
|
Daniel (19 Dec)
|
||||||
|
- Matthew Blain patched the Curl_base64_decode() function.
|
||||||
|
|
||||||
|
- Evan Jordan reported in bug report #653022 that the SSL_read() usage was
|
||||||
|
wrong, and it certainly was. It could lead to curl using too much CPU due to
|
||||||
|
a stupid loop.
|
||||||
|
|
||||||
|
Daniel (18 Dec)
|
||||||
|
- As suggested by Margus Freudenthal, CURLE_HTTP_NOT_FOUND was renamed to
|
||||||
|
CURLE_HTTP_RETURNED_ERROR since it is returned on any >= 400 code when
|
||||||
|
CURLOPT_FAILONERROR is set.
|
||||||
|
|
||||||
|
Daniel (17 Dec)
|
||||||
|
- Bug reported #651464, reported by Christopher Palmer, provided an example
|
||||||
|
source code using the multi interface that hang when trying to connect to a
|
||||||
|
proxy on a localhost port where no proxy was listening. This bug was not
|
||||||
|
repeatable on libcurls that were IPv6-enabled.
|
||||||
|
|
||||||
|
Daniel (16 Dec)
|
||||||
|
- Christopher Palmer also noticed what Vojtech Janota already was
|
||||||
|
experiencing: The attempted name resolve fix for glibc 2.2.93 caused libcurl
|
||||||
|
to crash when used on some older glibc versions. The problem is of course
|
||||||
|
the silliness of the 2.2.93. I committed a fix that hopefully should make
|
||||||
|
the binary run fine on either one of the versions, even though the solution
|
||||||
|
is not as nice as I'd like it to be.
|
||||||
|
|
||||||
|
Daniel (13 Dec)
|
||||||
|
- Bug report #651460 by Christopher R. Palmer showed that when using libcurl
|
||||||
|
to for example go over a proxy on localhost, it would attempt to connect
|
||||||
|
through the proxy TWICE.
|
||||||
|
|
||||||
|
I added test case 503 with which I managed to repeat this problem and I
|
||||||
|
fixed the code to not re-attempt any connects (which also made it a nicer
|
||||||
|
fix for the #650941 bug mentioned below).
|
||||||
|
|
||||||
|
The sws server was extended to deal with CONNECT in order to make test
|
||||||
|
case 503 do good.
|
||||||
|
|
||||||
|
- Evan Jordan posted bug report #650989 about a memory leak in the public key
|
||||||
|
retrieving code. He provided a suggested fix and I merely applied it!
|
||||||
|
|
||||||
|
- Bug report #650941, posted by Christopher R. Palmer identified a problem
|
||||||
|
with the multi interface and getting file:// URLs. This was now fixed and
|
||||||
|
test case 502 was added to verify this.
|
||||||
|
|
||||||
|
Daniel (12 Dec)
|
||||||
|
- Test case 500 and 501 are the first ever libcurl test cases that run.
|
||||||
|
|
||||||
|
- Made "configure --enable-debug" cut off all -O* options to the compiler
|
||||||
|
|
||||||
|
- Finally fixed the test suite's ftp server so that test case 402 doesn't
|
||||||
|
cause the following test case to fail anymore!
|
||||||
|
|
||||||
|
Daniel (11 Dec)
|
||||||
|
- CURL_MAX_WRITE_SIZE is now decreased to 16KB since it makes the Windows
|
||||||
|
version perform uploads much faster!!! RBramante did lots of research on
|
||||||
|
this topic.
|
||||||
|
|
||||||
|
- Fixed the #include in curl/curl.h to include the other files outside the
|
||||||
|
extern "C" scope.
|
||||||
|
|
||||||
|
Daniel (10 Dec)
|
||||||
|
- Moved around and added more logic:
|
||||||
|
|
||||||
|
First, POST data is never sent as part of the request headers in the http.c
|
||||||
|
code. It is always sent the "normal" read callback then send() way. This now
|
||||||
|
enables a plain HTTP POST to be sent chunked if we want to. This also
|
||||||
|
reduces the risk of having very big POSTs causing problems.
|
||||||
|
|
||||||
|
Further, sending off the initial HTTP request is not done using a loop
|
||||||
|
anymore. If it wasn't all sent off in the first send(), the rest of the
|
||||||
|
request is sent off in the normal transfer select() loop. This makes several
|
||||||
|
things possible, but mainly it makes libcurl block less when used from the
|
||||||
|
multi interface and it also reduces the risk of problems with issuing very
|
||||||
|
large requests.
|
||||||
|
|
||||||
|
Daniel (9 Dec)
|
||||||
|
- Moved the read callback pointer and data within the structs to a more
|
||||||
|
suitable place. This in preparation for a better HTTP-request sending code
|
||||||
|
without (a silly) loop.
|
||||||
|
|
||||||
|
- The Dodds fix seems not to work.
|
||||||
|
|
||||||
|
- Vojtech Janota tests proved that the resolve fix from oct 21st is not good
|
||||||
|
enough since obviously older glibcs might return EAGAIN without this meaning
|
||||||
|
that the buffer was too small.
|
||||||
|
|
||||||
|
- [the other day] Made libcurl loop on recv() and send() now until done, and
|
||||||
|
then get back to select(). Previously it went back to select() more often
|
||||||
|
which really was a slight overhead. This was due to the reported performance
|
||||||
|
problems on HTTP PUT on Windows. I couldn't see any notable difference on
|
||||||
|
Linux...
|
||||||
|
|
||||||
|
Version 7.10.3-pre2 (4 Dec 2002)
|
||||||
|
|
||||||
|
Daniel (4 Dec 2002)
|
||||||
|
- Lots of work with Malcolm Dodds made me add a temporary code fix that now
|
||||||
|
shortens the timeout waiting for the 226 or 250 line after a completed
|
||||||
|
FTP transfer.
|
||||||
|
|
||||||
|
If no data is received within 60 seconds, this is taken as a sign of a dead
|
||||||
|
control connection and we bail out.
|
||||||
|
|
||||||
|
Daniel (3 Dec 2002)
|
||||||
|
- Ralph's bug report #644841 identified a problem in which curl returned a
|
||||||
|
timeout error code when in fact the problem was not a timeout. The proper
|
||||||
|
error should now be propagated better when they're detected in the FTP
|
||||||
|
response reading function.
|
||||||
|
|
||||||
|
- Updated the Borland Makefiles.
|
||||||
|
|
||||||
|
Daniel (2 Dec 2002)
|
||||||
|
- Nicolas Berloquin provided a patch that introduced --create-dirs to the
|
||||||
|
command line tool. When used in combination with -o, it lets curl create
|
||||||
|
[non-existing] directories used in -o, suitably used with #-combinations
|
||||||
|
such as:
|
||||||
|
|
||||||
|
curl "www.images.com/{flowers,cities,parks,mountains}/pic_[1-100].jpg \
|
||||||
|
-o "dir_#1/pic#2.jpg" --create-dirs
|
||||||
|
|
||||||
|
Version 7.10.3-pre1
|
||||||
|
|
||||||
|
Daniel (28 Nov 2002)
|
||||||
|
- I visited Lars Nordgren and had a go with his problem, which lead me to
|
||||||
|
implement this fix. If libcurl detects the added custom header
|
||||||
|
"Transfer-Encoding: chunked", it will now enable a chunked transfer.
|
||||||
|
|
||||||
|
Also, chunked transfer didn't quite work before but seems to do so now.
|
||||||
|
|
||||||
|
- Kjetil Jacobsen pointed out that ./configure --disable-ipv6 --without-zlib
|
||||||
|
didn't work on any platform...
|
||||||
|
|
||||||
|
Daniel (26 Nov 2002)
|
||||||
|
- Fixed a bad addrinfo free in the hostip.c code, hardly exposed anywhere
|
||||||
|
|
||||||
|
- Dan Becker found and fixed a minor memory leak on persistent connnections
|
||||||
|
using CURLOPT_USERPWD.
|
||||||
|
|
||||||
|
Daniel (22 Nov 2002)
|
||||||
|
- Based on Ralph Mitchell's excellent analysis I found a bug in the test suite
|
||||||
|
web server (sws) which now lets test case 306 run fine even in combination
|
||||||
|
with the other test cases.
|
||||||
|
|
||||||
|
- Juan Ignacio Herv<72>s found a crash in the verbose connect message that is
|
||||||
|
used on persistent connections. This bug was added in 7.10.2 due to the
|
||||||
|
rearranged name resolve code.
|
||||||
|
|
||||||
|
Daniel (20 Nov 2002)
|
||||||
|
- Kjetil Jacobsen provided a patch that introduces:
|
||||||
|
|
||||||
|
CURLOPT_PRIVATE stores a private pointer in the curl handle.
|
||||||
|
|
||||||
|
CURLINFO_PRIVATE retrieves the private pointer from the curl handle.
|
||||||
|
|
||||||
|
- Karol Pietrzak pointed out how curl-config --cflags didn't output a good
|
||||||
|
include dir so I've removed that for now.
|
||||||
|
|
||||||
Version 7.10.2 (18 Nov 2002)
|
Version 7.10.2 (18 Nov 2002)
|
||||||
|
|
||||||
@@ -1342,4 +1879,4 @@ Daniel (2 January 2002)
|
|||||||
changes done on dec-20 made test case 104 cease to work (in both branches).
|
changes done on dec-20 made test case 104 cease to work (in both branches).
|
||||||
|
|
||||||
- Philip Gladstone pointed out a few portability problems in the source code
|
- Philip Gladstone pointed out a few portability problems in the source code
|
||||||
that didn't compile on 64-bit sparcs using Sun's native
|
that didn't compile on 64-bit sparcs using Sun's native compiler.
|
||||||
|
2
COPYING
2
COPYING
@@ -1,6 +1,6 @@
|
|||||||
COPYRIGHT AND PERMISSION NOTICE
|
COPYRIGHT AND PERMISSION NOTICE
|
||||||
|
|
||||||
Copyright (c) 1996 - 2002, Daniel Stenberg, <daniel@haxx.se>.
|
Copyright (c) 1996 - 2003, Daniel Stenberg, <daniel@haxx.se>.
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
27
CVS-INFO
27
CVS-INFO
@@ -15,7 +15,8 @@ Compile and build instructions follow below.
|
|||||||
CHANGES.0 contains ancient changes.
|
CHANGES.0 contains ancient changes.
|
||||||
CHANGES.$year contains changes for the particular year.
|
CHANGES.$year contains changes for the particular year.
|
||||||
|
|
||||||
memanalyze.pl is for analyzing the output generated by curl if -DMALLOCDEBUG
|
tests/memanalyze.pl
|
||||||
|
is for analyzing the output generated by curl if -DMALLOCDEBUG
|
||||||
is used when compiling
|
is used when compiling
|
||||||
|
|
||||||
buildconf builds the makefiles and configure stuff
|
buildconf builds the makefiles and configure stuff
|
||||||
@@ -30,6 +31,11 @@ To build after having extracted everything from CVS, do this:
|
|||||||
./configure
|
./configure
|
||||||
make
|
make
|
||||||
|
|
||||||
|
Daniel uses a ./configure line similar to this for easier development:
|
||||||
|
|
||||||
|
./configure --disable-shared --enable-debug --enable-maintainer-mode
|
||||||
|
|
||||||
|
|
||||||
REQUIREMENTS
|
REQUIREMENTS
|
||||||
|
|
||||||
You need the following software installed:
|
You need the following software installed:
|
||||||
@@ -39,12 +45,19 @@ REQUIREMENTS
|
|||||||
o libtool 1.4 (or later)
|
o libtool 1.4 (or later)
|
||||||
o GNU m4 (required by autoconf)
|
o GNU m4 (required by autoconf)
|
||||||
|
|
||||||
o nroff + perl (if you don't have nroff and perl and you for some reason
|
o nroff + perl
|
||||||
don't want to install them, you can rename the source file
|
|
||||||
src/hugehelp.c.cvs to src/hugehelp.c and avoid having to generate this
|
If you don't have nroff and perl and you for some reason don't want to
|
||||||
file. This will of course give you an older version of the file that isn't
|
install them, you can rename the source file src/hugehelp.c.cvs to
|
||||||
up-to-date. That file was checked in once and won't be updated very
|
src/hugehelp.c and avoid having to generate this file. This will of course
|
||||||
regularly.)
|
give you an older version of the file that isn't up-to-date. That file was
|
||||||
|
checked in once and won't be updated very regularly.
|
||||||
|
|
||||||
|
o yacc/bison
|
||||||
|
|
||||||
|
If you don't have yacc or bison, you must rename the lib/getdate.c.cvs file
|
||||||
|
to lib/getdate.c to be able to build libcurl. yacc/bison is normally used
|
||||||
|
to generate the lib/getdate.c file from the lib/getdate.y source file.
|
||||||
|
|
||||||
MAC OS X
|
MAC OS X
|
||||||
|
|
||||||
|
25
LEGAL
25
LEGAL
@@ -1,25 +0,0 @@
|
|||||||
Copyright (C) 1998-2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
||||||
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies of this license
|
|
||||||
document, but changing it is not allowed.
|
|
||||||
|
|
||||||
In order to be useful for every potential user, the curl and libcurl are
|
|
||||||
dual-licensed under the MPL and the MIT/X-derivate licenses.
|
|
||||||
|
|
||||||
You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
|
||||||
copies of the Software, and permit persons to whom the Software is furnished
|
|
||||||
to do so, under the terms of the MPL or the MIT/X-derivate licenses. You may
|
|
||||||
pick one of these licenses. The files MITX.txt and MPL-1.1.txt contain the
|
|
||||||
license texts.
|
|
||||||
|
|
||||||
As a courtesy to the open-source and free software community, we ask you to
|
|
||||||
dual-license any modifications that you make as well, under the terms of this
|
|
||||||
document.
|
|
||||||
|
|
||||||
Please remember to always keep the licensing information included in
|
|
||||||
individual source files up-to-date, so as to avoid misleading anyone as to
|
|
||||||
the status of these files.
|
|
||||||
|
|
||||||
I will use a submission policy according to which I will only enter
|
|
||||||
contributions into the CVS tree if the contributor agrees to both licenses
|
|
||||||
and this dual-license approach.
|
|
21
MITX.txt
21
MITX.txt
@@ -1,21 +0,0 @@
|
|||||||
COPYRIGHT AND PERMISSION NOTICE
|
|
||||||
|
|
||||||
Copyright (c) 1996 - 2002, Daniel Stenberg, <daniel@haxx.se>.
|
|
||||||
|
|
||||||
All rights reserved.
|
|
||||||
|
|
||||||
Permission to use, copy, modify, and distribute this software for any purpose
|
|
||||||
with or without fee is hereby granted, provided that the above copyright
|
|
||||||
notice and this permission notice appear in all copies.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
|
|
||||||
NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
||||||
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
||||||
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
|
|
||||||
OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
Except as contained in this notice, the name of a copyright holder shall not
|
|
||||||
be used in advertising or otherwise to promote the sale, use or other dealings
|
|
||||||
in this Software without prior written authorization of the copyright holder.
|
|
470
MPL-1.1.txt
470
MPL-1.1.txt
@@ -1,470 +0,0 @@
|
|||||||
MOZILLA PUBLIC LICENSE
|
|
||||||
Version 1.1
|
|
||||||
|
|
||||||
---------------
|
|
||||||
|
|
||||||
1. Definitions.
|
|
||||||
|
|
||||||
1.0.1. "Commercial Use" means distribution or otherwise making the
|
|
||||||
Covered Code available to a third party.
|
|
||||||
|
|
||||||
1.1. "Contributor" means each entity that creates or contributes to
|
|
||||||
the creation of Modifications.
|
|
||||||
|
|
||||||
1.2. "Contributor Version" means the combination of the Original
|
|
||||||
Code, prior Modifications used by a Contributor, and the Modifications
|
|
||||||
made by that particular Contributor.
|
|
||||||
|
|
||||||
1.3. "Covered Code" means the Original Code or Modifications or the
|
|
||||||
combination of the Original Code and Modifications, in each case
|
|
||||||
including portions thereof.
|
|
||||||
|
|
||||||
1.4. "Electronic Distribution Mechanism" means a mechanism generally
|
|
||||||
accepted in the software development community for the electronic
|
|
||||||
transfer of data.
|
|
||||||
|
|
||||||
1.5. "Executable" means Covered Code in any form other than Source
|
|
||||||
Code.
|
|
||||||
|
|
||||||
1.6. "Initial Developer" means the individual or entity identified
|
|
||||||
as the Initial Developer in the Source Code notice required by Exhibit
|
|
||||||
A.
|
|
||||||
|
|
||||||
1.7. "Larger Work" means a work which combines Covered Code or
|
|
||||||
portions thereof with code not governed by the terms of this License.
|
|
||||||
|
|
||||||
1.8. "License" means this document.
|
|
||||||
|
|
||||||
1.8.1. "Licensable" means having the right to grant, to the maximum
|
|
||||||
extent possible, whether at the time of the initial grant or
|
|
||||||
subsequently acquired, any and all of the rights conveyed herein.
|
|
||||||
|
|
||||||
1.9. "Modifications" means any addition to or deletion from the
|
|
||||||
substance or structure of either the Original Code or any previous
|
|
||||||
Modifications. When Covered Code is released as a series of files, a
|
|
||||||
Modification is:
|
|
||||||
A. Any addition to or deletion from the contents of a file
|
|
||||||
containing Original Code or previous Modifications.
|
|
||||||
|
|
||||||
B. Any new file that contains any part of the Original Code or
|
|
||||||
previous Modifications.
|
|
||||||
|
|
||||||
1.10. "Original Code" means Source Code of computer software code
|
|
||||||
which is described in the Source Code notice required by Exhibit A as
|
|
||||||
Original Code, and which, at the time of its release under this
|
|
||||||
License is not already Covered Code governed by this License.
|
|
||||||
|
|
||||||
1.10.1. "Patent Claims" means any patent claim(s), now owned or
|
|
||||||
hereafter acquired, including without limitation, method, process,
|
|
||||||
and apparatus claims, in any patent Licensable by grantor.
|
|
||||||
|
|
||||||
1.11. "Source Code" means the preferred form of the Covered Code for
|
|
||||||
making modifications to it, including all modules it contains, plus
|
|
||||||
any associated interface definition files, scripts used to control
|
|
||||||
compilation and installation of an Executable, or source code
|
|
||||||
differential comparisons against either the Original Code or another
|
|
||||||
well known, available Covered Code of the Contributor's choice. The
|
|
||||||
Source Code can be in a compressed or archival form, provided the
|
|
||||||
appropriate decompression or de-archiving software is widely available
|
|
||||||
for no charge.
|
|
||||||
|
|
||||||
1.12. "You" (or "Your") means an individual or a legal entity
|
|
||||||
exercising rights under, and complying with all of the terms of, this
|
|
||||||
License or a future version of this License issued under Section 6.1.
|
|
||||||
For legal entities, "You" includes any entity which controls, is
|
|
||||||
controlled by, or is under common control with You. For purposes of
|
|
||||||
this definition, "control" means (a) the power, direct or indirect,
|
|
||||||
to cause the direction or management of such entity, whether by
|
|
||||||
contract or otherwise, or (b) ownership of more than fifty percent
|
|
||||||
(50%) of the outstanding shares or beneficial ownership of such
|
|
||||||
entity.
|
|
||||||
|
|
||||||
2. Source Code License.
|
|
||||||
|
|
||||||
2.1. The Initial Developer Grant.
|
|
||||||
The Initial Developer hereby grants You a world-wide, royalty-free,
|
|
||||||
non-exclusive license, subject to third party intellectual property
|
|
||||||
claims:
|
|
||||||
(a) under intellectual property rights (other than patent or
|
|
||||||
trademark) Licensable by Initial Developer to use, reproduce,
|
|
||||||
modify, display, perform, sublicense and distribute the Original
|
|
||||||
Code (or portions thereof) with or without Modifications, and/or
|
|
||||||
as part of a Larger Work; and
|
|
||||||
|
|
||||||
(b) under Patents Claims infringed by the making, using or
|
|
||||||
selling of Original Code, to make, have made, use, practice,
|
|
||||||
sell, and offer for sale, and/or otherwise dispose of the
|
|
||||||
Original Code (or portions thereof).
|
|
||||||
|
|
||||||
(c) the licenses granted in this Section 2.1(a) and (b) are
|
|
||||||
effective on the date Initial Developer first distributes
|
|
||||||
Original Code under the terms of this License.
|
|
||||||
|
|
||||||
(d) Notwithstanding Section 2.1(b) above, no patent license is
|
|
||||||
granted: 1) for code that You delete from the Original Code; 2)
|
|
||||||
separate from the Original Code; or 3) for infringements caused
|
|
||||||
by: i) the modification of the Original Code or ii) the
|
|
||||||
combination of the Original Code with other software or devices.
|
|
||||||
|
|
||||||
2.2. Contributor Grant.
|
|
||||||
Subject to third party intellectual property claims, each Contributor
|
|
||||||
hereby grants You a world-wide, royalty-free, non-exclusive license
|
|
||||||
|
|
||||||
(a) under intellectual property rights (other than patent or
|
|
||||||
trademark) Licensable by Contributor, to use, reproduce, modify,
|
|
||||||
display, perform, sublicense and distribute the Modifications
|
|
||||||
created by such Contributor (or portions thereof) either on an
|
|
||||||
unmodified basis, with other Modifications, as Covered Code
|
|
||||||
and/or as part of a Larger Work; and
|
|
||||||
|
|
||||||
(b) under Patent Claims infringed by the making, using, or
|
|
||||||
selling of Modifications made by that Contributor either alone
|
|
||||||
and/or in combination with its Contributor Version (or portions
|
|
||||||
of such combination), to make, use, sell, offer for sale, have
|
|
||||||
made, and/or otherwise dispose of: 1) Modifications made by that
|
|
||||||
Contributor (or portions thereof); and 2) the combination of
|
|
||||||
Modifications made by that Contributor with its Contributor
|
|
||||||
Version (or portions of such combination).
|
|
||||||
|
|
||||||
(c) the licenses granted in Sections 2.2(a) and 2.2(b) are
|
|
||||||
effective on the date Contributor first makes Commercial Use of
|
|
||||||
the Covered Code.
|
|
||||||
|
|
||||||
(d) Notwithstanding Section 2.2(b) above, no patent license is
|
|
||||||
granted: 1) for any code that Contributor has deleted from the
|
|
||||||
Contributor Version; 2) separate from the Contributor Version;
|
|
||||||
3) for infringements caused by: i) third party modifications of
|
|
||||||
Contributor Version or ii) the combination of Modifications made
|
|
||||||
by that Contributor with other software (except as part of the
|
|
||||||
Contributor Version) or other devices; or 4) under Patent Claims
|
|
||||||
infringed by Covered Code in the absence of Modifications made by
|
|
||||||
that Contributor.
|
|
||||||
|
|
||||||
3. Distribution Obligations.
|
|
||||||
|
|
||||||
3.1. Application of License.
|
|
||||||
The Modifications which You create or to which You contribute are
|
|
||||||
governed by the terms of this License, including without limitation
|
|
||||||
Section 2.2. The Source Code version of Covered Code may be
|
|
||||||
distributed only under the terms of this License or a future version
|
|
||||||
of this License released under Section 6.1, and You must include a
|
|
||||||
copy of this License with every copy of the Source Code You
|
|
||||||
distribute. You may not offer or impose any terms on any Source Code
|
|
||||||
version that alters or restricts the applicable version of this
|
|
||||||
License or the recipients' rights hereunder. However, You may include
|
|
||||||
an additional document offering the additional rights described in
|
|
||||||
Section 3.5.
|
|
||||||
|
|
||||||
3.2. Availability of Source Code.
|
|
||||||
Any Modification which You create or to which You contribute must be
|
|
||||||
made available in Source Code form under the terms of this License
|
|
||||||
either on the same media as an Executable version or via an accepted
|
|
||||||
Electronic Distribution Mechanism to anyone to whom you made an
|
|
||||||
Executable version available; and if made available via Electronic
|
|
||||||
Distribution Mechanism, must remain available for at least twelve (12)
|
|
||||||
months after the date it initially became available, or at least six
|
|
||||||
(6) months after a subsequent version of that particular Modification
|
|
||||||
has been made available to such recipients. You are responsible for
|
|
||||||
ensuring that the Source Code version remains available even if the
|
|
||||||
Electronic Distribution Mechanism is maintained by a third party.
|
|
||||||
|
|
||||||
3.3. Description of Modifications.
|
|
||||||
You must cause all Covered Code to which You contribute to contain a
|
|
||||||
file documenting the changes You made to create that Covered Code and
|
|
||||||
the date of any change. You must include a prominent statement that
|
|
||||||
the Modification is derived, directly or indirectly, from Original
|
|
||||||
Code provided by the Initial Developer and including the name of the
|
|
||||||
Initial Developer in (a) the Source Code, and (b) in any notice in an
|
|
||||||
Executable version or related documentation in which You describe the
|
|
||||||
origin or ownership of the Covered Code.
|
|
||||||
|
|
||||||
3.4. Intellectual Property Matters
|
|
||||||
(a) Third Party Claims.
|
|
||||||
If Contributor has knowledge that a license under a third party's
|
|
||||||
intellectual property rights is required to exercise the rights
|
|
||||||
granted by such Contributor under Sections 2.1 or 2.2,
|
|
||||||
Contributor must include a text file with the Source Code
|
|
||||||
distribution titled "LEGAL" which describes the claim and the
|
|
||||||
party making the claim in sufficient detail that a recipient will
|
|
||||||
know whom to contact. If Contributor obtains such knowledge after
|
|
||||||
the Modification is made available as described in Section 3.2,
|
|
||||||
Contributor shall promptly modify the LEGAL file in all copies
|
|
||||||
Contributor makes available thereafter and shall take other steps
|
|
||||||
(such as notifying appropriate mailing lists or newsgroups)
|
|
||||||
reasonably calculated to inform those who received the Covered
|
|
||||||
Code that new knowledge has been obtained.
|
|
||||||
|
|
||||||
(b) Contributor APIs.
|
|
||||||
If Contributor's Modifications include an application programming
|
|
||||||
interface and Contributor has knowledge of patent licenses which
|
|
||||||
are reasonably necessary to implement that API, Contributor must
|
|
||||||
also include this information in the LEGAL file.
|
|
||||||
|
|
||||||
(c) Representations.
|
|
||||||
Contributor represents that, except as disclosed pursuant to
|
|
||||||
Section 3.4(a) above, Contributor believes that Contributor's
|
|
||||||
Modifications are Contributor's original creation(s) and/or
|
|
||||||
Contributor has sufficient rights to grant the rights conveyed by
|
|
||||||
this License.
|
|
||||||
|
|
||||||
3.5. Required Notices.
|
|
||||||
You must duplicate the notice in Exhibit A in each file of the Source
|
|
||||||
Code. If it is not possible to put such notice in a particular Source
|
|
||||||
Code file due to its structure, then You must include such notice in a
|
|
||||||
location (such as a relevant directory) where a user would be likely
|
|
||||||
to look for such a notice. If You created one or more Modification(s)
|
|
||||||
You may add your name as a Contributor to the notice described in
|
|
||||||
Exhibit A. You must also duplicate this License in any documentation
|
|
||||||
for the Source Code where You describe recipients' rights or ownership
|
|
||||||
rights relating to Covered Code. You may choose to offer, and to
|
|
||||||
charge a fee for, warranty, support, indemnity or liability
|
|
||||||
obligations to one or more recipients of Covered Code. However, You
|
|
||||||
may do so only on Your own behalf, and not on behalf of the Initial
|
|
||||||
Developer or any Contributor. You must make it absolutely clear than
|
|
||||||
any such warranty, support, indemnity or liability obligation is
|
|
||||||
offered by You alone, and You hereby agree to indemnify the Initial
|
|
||||||
Developer and every Contributor for any liability incurred by the
|
|
||||||
Initial Developer or such Contributor as a result of warranty,
|
|
||||||
support, indemnity or liability terms You offer.
|
|
||||||
|
|
||||||
3.6. Distribution of Executable Versions.
|
|
||||||
You may distribute Covered Code in Executable form only if the
|
|
||||||
requirements of Section 3.1-3.5 have been met for that Covered Code,
|
|
||||||
and if You include a notice stating that the Source Code version of
|
|
||||||
the Covered Code is available under the terms of this License,
|
|
||||||
including a description of how and where You have fulfilled the
|
|
||||||
obligations of Section 3.2. The notice must be conspicuously included
|
|
||||||
in any notice in an Executable version, related documentation or
|
|
||||||
collateral in which You describe recipients' rights relating to the
|
|
||||||
Covered Code. You may distribute the Executable version of Covered
|
|
||||||
Code or ownership rights under a license of Your choice, which may
|
|
||||||
contain terms different from this License, provided that You are in
|
|
||||||
compliance with the terms of this License and that the license for the
|
|
||||||
Executable version does not attempt to limit or alter the recipient's
|
|
||||||
rights in the Source Code version from the rights set forth in this
|
|
||||||
License. If You distribute the Executable version under a different
|
|
||||||
license You must make it absolutely clear that any terms which differ
|
|
||||||
from this License are offered by You alone, not by the Initial
|
|
||||||
Developer or any Contributor. You hereby agree to indemnify the
|
|
||||||
Initial Developer and every Contributor for any liability incurred by
|
|
||||||
the Initial Developer or such Contributor as a result of any such
|
|
||||||
terms You offer.
|
|
||||||
|
|
||||||
3.7. Larger Works.
|
|
||||||
You may create a Larger Work by combining Covered Code with other code
|
|
||||||
not governed by the terms of this License and distribute the Larger
|
|
||||||
Work as a single product. In such a case, You must make sure the
|
|
||||||
requirements of this License are fulfilled for the Covered Code.
|
|
||||||
|
|
||||||
4. Inability to Comply Due to Statute or Regulation.
|
|
||||||
|
|
||||||
If it is impossible for You to comply with any of the terms of this
|
|
||||||
License with respect to some or all of the Covered Code due to
|
|
||||||
statute, judicial order, or regulation then You must: (a) comply with
|
|
||||||
the terms of this License to the maximum extent possible; and (b)
|
|
||||||
describe the limitations and the code they affect. Such description
|
|
||||||
must be included in the LEGAL file described in Section 3.4 and must
|
|
||||||
be included with all distributions of the Source Code. Except to the
|
|
||||||
extent prohibited by statute or regulation, such description must be
|
|
||||||
sufficiently detailed for a recipient of ordinary skill to be able to
|
|
||||||
understand it.
|
|
||||||
|
|
||||||
5. Application of this License.
|
|
||||||
|
|
||||||
This License applies to code to which the Initial Developer has
|
|
||||||
attached the notice in Exhibit A and to related Covered Code.
|
|
||||||
|
|
||||||
6. Versions of the License.
|
|
||||||
|
|
||||||
6.1. New Versions.
|
|
||||||
Netscape Communications Corporation ("Netscape") may publish revised
|
|
||||||
and/or new versions of the License from time to time. Each version
|
|
||||||
will be given a distinguishing version number.
|
|
||||||
|
|
||||||
6.2. Effect of New Versions.
|
|
||||||
Once Covered Code has been published under a particular version of the
|
|
||||||
License, You may always continue to use it under the terms of that
|
|
||||||
version. You may also choose to use such Covered Code under the terms
|
|
||||||
of any subsequent version of the License published by Netscape. No one
|
|
||||||
other than Netscape has the right to modify the terms applicable to
|
|
||||||
Covered Code created under this License.
|
|
||||||
|
|
||||||
6.3. Derivative Works.
|
|
||||||
If You create or use a modified version of this License (which you may
|
|
||||||
only do in order to apply it to code which is not already Covered Code
|
|
||||||
governed by this License), You must (a) rename Your license so that
|
|
||||||
the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
|
|
||||||
"MPL", "NPL" or any confusingly similar phrase do not appear in your
|
|
||||||
license (except to note that your license differs from this License)
|
|
||||||
and (b) otherwise make it clear that Your version of the license
|
|
||||||
contains terms which differ from the Mozilla Public License and
|
|
||||||
Netscape Public License. (Filling in the name of the Initial
|
|
||||||
Developer, Original Code or Contributor in the notice described in
|
|
||||||
Exhibit A shall not of themselves be deemed to be modifications of
|
|
||||||
this License.)
|
|
||||||
|
|
||||||
7. DISCLAIMER OF WARRANTY.
|
|
||||||
|
|
||||||
COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
|
||||||
WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
|
|
||||||
DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
|
|
||||||
THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
|
|
||||||
IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
|
|
||||||
YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
|
|
||||||
COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
|
|
||||||
OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
|
|
||||||
ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
|
|
||||||
|
|
||||||
8. TERMINATION.
|
|
||||||
|
|
||||||
8.1. This License and the rights granted hereunder will terminate
|
|
||||||
automatically if You fail to comply with terms herein and fail to cure
|
|
||||||
such breach within 30 days of becoming aware of the breach. All
|
|
||||||
sublicenses to the Covered Code which are properly granted shall
|
|
||||||
survive any termination of this License. Provisions which, by their
|
|
||||||
nature, must remain in effect beyond the termination of this License
|
|
||||||
shall survive.
|
|
||||||
|
|
||||||
8.2. If You initiate litigation by asserting a patent infringement
|
|
||||||
claim (excluding declatory judgment actions) against Initial Developer
|
|
||||||
or a Contributor (the Initial Developer or Contributor against whom
|
|
||||||
You file such action is referred to as "Participant") alleging that:
|
|
||||||
|
|
||||||
(a) such Participant's Contributor Version directly or indirectly
|
|
||||||
infringes any patent, then any and all rights granted by such
|
|
||||||
Participant to You under Sections 2.1 and/or 2.2 of this License
|
|
||||||
shall, upon 60 days notice from Participant terminate prospectively,
|
|
||||||
unless if within 60 days after receipt of notice You either: (i)
|
|
||||||
agree in writing to pay Participant a mutually agreeable reasonable
|
|
||||||
royalty for Your past and future use of Modifications made by such
|
|
||||||
Participant, or (ii) withdraw Your litigation claim with respect to
|
|
||||||
the Contributor Version against such Participant. If within 60 days
|
|
||||||
of notice, a reasonable royalty and payment arrangement are not
|
|
||||||
mutually agreed upon in writing by the parties or the litigation claim
|
|
||||||
is not withdrawn, the rights granted by Participant to You under
|
|
||||||
Sections 2.1 and/or 2.2 automatically terminate at the expiration of
|
|
||||||
the 60 day notice period specified above.
|
|
||||||
|
|
||||||
(b) any software, hardware, or device, other than such Participant's
|
|
||||||
Contributor Version, directly or indirectly infringes any patent, then
|
|
||||||
any rights granted to You by such Participant under Sections 2.1(b)
|
|
||||||
and 2.2(b) are revoked effective as of the date You first made, used,
|
|
||||||
sold, distributed, or had made, Modifications made by that
|
|
||||||
Participant.
|
|
||||||
|
|
||||||
8.3. If You assert a patent infringement claim against Participant
|
|
||||||
alleging that such Participant's Contributor Version directly or
|
|
||||||
indirectly infringes any patent where such claim is resolved (such as
|
|
||||||
by license or settlement) prior to the initiation of patent
|
|
||||||
infringement litigation, then the reasonable value of the licenses
|
|
||||||
granted by such Participant under Sections 2.1 or 2.2 shall be taken
|
|
||||||
into account in determining the amount or value of any payment or
|
|
||||||
license.
|
|
||||||
|
|
||||||
8.4. In the event of termination under Sections 8.1 or 8.2 above,
|
|
||||||
all end user license agreements (excluding distributors and resellers)
|
|
||||||
which have been validly granted by You or any distributor hereunder
|
|
||||||
prior to termination shall survive termination.
|
|
||||||
|
|
||||||
9. LIMITATION OF LIABILITY.
|
|
||||||
|
|
||||||
UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
|
|
||||||
(INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
|
|
||||||
DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
|
|
||||||
OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
|
|
||||||
ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
|
|
||||||
CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
|
|
||||||
WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
|
|
||||||
COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
|
|
||||||
INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
|
|
||||||
LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
|
|
||||||
RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
|
|
||||||
PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
|
|
||||||
EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
|
|
||||||
THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
|
|
||||||
|
|
||||||
10. U.S. GOVERNMENT END USERS.
|
|
||||||
|
|
||||||
The Covered Code is a "commercial item," as that term is defined in
|
|
||||||
48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
|
|
||||||
software" and "commercial computer software documentation," as such
|
|
||||||
terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
|
|
||||||
C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
|
|
||||||
all U.S. Government End Users acquire Covered Code with only those
|
|
||||||
rights set forth herein.
|
|
||||||
|
|
||||||
11. MISCELLANEOUS.
|
|
||||||
|
|
||||||
This License represents the complete agreement concerning subject
|
|
||||||
matter hereof. If any provision of this License is held to be
|
|
||||||
unenforceable, such provision shall be reformed only to the extent
|
|
||||||
necessary to make it enforceable. This License shall be governed by
|
|
||||||
California law provisions (except to the extent applicable law, if
|
|
||||||
any, provides otherwise), excluding its conflict-of-law provisions.
|
|
||||||
With respect to disputes in which at least one party is a citizen of,
|
|
||||||
or an entity chartered or registered to do business in the United
|
|
||||||
States of America, any litigation relating to this License shall be
|
|
||||||
subject to the jurisdiction of the Federal Courts of the Northern
|
|
||||||
District of California, with venue lying in Santa Clara County,
|
|
||||||
California, with the losing party responsible for costs, including
|
|
||||||
without limitation, court costs and reasonable attorneys' fees and
|
|
||||||
expenses. The application of the United Nations Convention on
|
|
||||||
Contracts for the International Sale of Goods is expressly excluded.
|
|
||||||
Any law or regulation which provides that the language of a contract
|
|
||||||
shall be construed against the drafter shall not apply to this
|
|
||||||
License.
|
|
||||||
|
|
||||||
12. RESPONSIBILITY FOR CLAIMS.
|
|
||||||
|
|
||||||
As between Initial Developer and the Contributors, each party is
|
|
||||||
responsible for claims and damages arising, directly or indirectly,
|
|
||||||
out of its utilization of rights under this License and You agree to
|
|
||||||
work with Initial Developer and Contributors to distribute such
|
|
||||||
responsibility on an equitable basis. Nothing herein is intended or
|
|
||||||
shall be deemed to constitute any admission of liability.
|
|
||||||
|
|
||||||
13. MULTIPLE-LICENSED CODE.
|
|
||||||
|
|
||||||
Initial Developer may designate portions of the Covered Code as
|
|
||||||
"Multiple-Licensed". "Multiple-Licensed" means that the Initial
|
|
||||||
Developer permits you to utilize portions of the Covered Code under
|
|
||||||
Your choice of the NPL or the alternative licenses, if any, specified
|
|
||||||
by the Initial Developer in the file described in Exhibit A.
|
|
||||||
|
|
||||||
EXHIBIT A -Mozilla Public License.
|
|
||||||
|
|
||||||
``The contents of this file are subject to the Mozilla Public License
|
|
||||||
Version 1.1 (the "License"); you may not use this file except in
|
|
||||||
compliance with the License. You may obtain a copy of the License at
|
|
||||||
http://www.mozilla.org/MPL/
|
|
||||||
|
|
||||||
Software distributed under the License is distributed on an "AS IS"
|
|
||||||
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
|
|
||||||
License for the specific language governing rights and limitations
|
|
||||||
under the License.
|
|
||||||
|
|
||||||
The Original Code is ______________________________________.
|
|
||||||
|
|
||||||
The Initial Developer of the Original Code is ________________________.
|
|
||||||
Portions created by ______________________ are Copyright (C) ______
|
|
||||||
_______________________. All Rights Reserved.
|
|
||||||
|
|
||||||
Contributor(s): ______________________________________.
|
|
||||||
|
|
||||||
Alternatively, the contents of this file may be used under the terms
|
|
||||||
of the _____ license (the "[___] License"), in which case the
|
|
||||||
provisions of [______] License are applicable instead of those
|
|
||||||
above. If you wish to allow use of your version of this file only
|
|
||||||
under the terms of the [____] License and not to allow others to use
|
|
||||||
your version of this file under the MPL, indicate your decision by
|
|
||||||
deleting the provisions above and replace them with the notice and
|
|
||||||
other provisions required by the [___] License. If you do not delete
|
|
||||||
the provisions above, a recipient may use your version of this file
|
|
||||||
under either the MPL or the [___] License."
|
|
||||||
|
|
||||||
[NOTE: The text of this Exhibit A may differ slightly from the text of
|
|
||||||
the notices in the Source Code files of the Original Code. You should
|
|
||||||
use the text of this Exhibit A rather than the text found in the
|
|
||||||
Original Code Source Code for Your Modifications.]
|
|
||||||
|
|
@@ -5,7 +5,7 @@
|
|||||||
AUTOMAKE_OPTIONS = foreign
|
AUTOMAKE_OPTIONS = foreign
|
||||||
|
|
||||||
EXTRA_DIST = CHANGES COPYING maketgz SSLCERTS reconf Makefile.dist \
|
EXTRA_DIST = CHANGES COPYING maketgz SSLCERTS reconf Makefile.dist \
|
||||||
curl-config.in build_vms.com curl-mode.el
|
curl-config.in build_vms.com curl-style.el sample.emacs testcurl.sh
|
||||||
|
|
||||||
bin_SCRIPTS = curl-config
|
bin_SCRIPTS = curl-config
|
||||||
|
|
||||||
@@ -13,6 +13,7 @@ SUBDIRS = docs lib src include tests packages
|
|||||||
|
|
||||||
# create a root makefile in the distribution:
|
# create a root makefile in the distribution:
|
||||||
dist-hook:
|
dist-hook:
|
||||||
|
rm -rf $(top_builddir)/tests/log
|
||||||
cp $(srcdir)/Makefile.dist $(distdir)/Makefile
|
cp $(srcdir)/Makefile.dist $(distdir)/Makefile
|
||||||
|
|
||||||
html:
|
html:
|
||||||
@@ -26,6 +27,9 @@ check: test
|
|||||||
test:
|
test:
|
||||||
@(cd tests; $(MAKE) quiet-test)
|
@(cd tests; $(MAKE) quiet-test)
|
||||||
|
|
||||||
|
test-full:
|
||||||
|
@(cd tests; $(MAKE) full-test)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Build source and binary rpms. For rpm-3.0 and above, the ~/.rpmmacros
|
# Build source and binary rpms. For rpm-3.0 and above, the ~/.rpmmacros
|
||||||
# must contain the following line:
|
# must contain the following line:
|
||||||
|
32
README
32
README
@@ -11,27 +11,41 @@ README
|
|||||||
MANUAL document. Find out how to install Curl by reading the INSTALL
|
MANUAL document. Find out how to install Curl by reading the INSTALL
|
||||||
document.
|
document.
|
||||||
|
|
||||||
libcurl is a library that Curl is using to do its job. It is readily
|
libcurl is the library curl is using to do its job. It is readily
|
||||||
available to be used by your software. Read the libcurl.3 man page to
|
available to be used by your software. Read the libcurl.3 man page to
|
||||||
find out how!
|
learn how!
|
||||||
|
|
||||||
You find answers to the most frequent questions we get in the FAQ document.
|
You find answers to the most frequent questions we get in the FAQ document.
|
||||||
|
|
||||||
Study the LEGAL file for distribution terms and similar.
|
Study the COPYING file for distribution terms and similar.
|
||||||
|
|
||||||
|
CONTACT
|
||||||
|
|
||||||
|
If you have problems, questions, ideas or suggestions, please contact us
|
||||||
|
by posting to a suitable mailing list. See http://curl.haxx.se/mail/
|
||||||
|
|
||||||
|
Many major contributors to the project are listed in the THANKS document.
|
||||||
|
|
||||||
|
WEB SITE
|
||||||
|
|
||||||
Visit the curl web site or mirrors for the latest news:
|
Visit the curl web site or mirrors for the latest news:
|
||||||
|
|
||||||
http://curl.haxx.se/
|
Sweden -- http://curl.haxx.se/
|
||||||
http://curl.sf.net/
|
US -- http://curl.sf.net/
|
||||||
http://curl.planetmirror.com/
|
Australia -- http://curl.planetmirror.com/
|
||||||
|
|
||||||
|
DOWNLOAD
|
||||||
|
|
||||||
The official download mirror sites are:
|
The official download mirror sites are:
|
||||||
|
|
||||||
Sweden -- ftp://ftp.sunet.se/pub/www/utilities/curl/
|
Sweden -- ftp://ftp.sunet.se/pub/www/utilities/curl/
|
||||||
Sweden -- http://cool.haxx.se/curl/
|
Sweden -- http://cool.haxx.se/curl/
|
||||||
Germany -- ftp://ftp.fu-berlin.de/pub/unix/network/curl/
|
Germany -- ftp://ftp.fu-berlin.de/pub/unix/network/curl/
|
||||||
Australia -- http://curl.planetmirror.com/pub/curl/
|
Australia -- http://curl.planetmirror.com/download/
|
||||||
US -- http://curl.sourceforge.net/download.html
|
US -- http://curl.sourceforge.net/download/
|
||||||
|
Hongkong -- http://www.execve.net/curl/
|
||||||
|
|
||||||
|
CVS
|
||||||
|
|
||||||
To download the very latest source off the CVS server do this:
|
To download the very latest source off the CVS server do this:
|
||||||
|
|
||||||
@@ -47,6 +61,8 @@ README
|
|||||||
|
|
||||||
(you're off the hook!)
|
(you're off the hook!)
|
||||||
|
|
||||||
|
NOTICE
|
||||||
|
|
||||||
Curl contains pieces of source code that is Copyright (c) 1998, 1999
|
Curl contains pieces of source code that is Copyright (c) 1998, 1999
|
||||||
Kungliga Tekniska H<>gskolan. This notice is included here to comply with the
|
Kungliga Tekniska H<>gskolan. This notice is included here to comply with the
|
||||||
distribution terms.
|
distribution terms.
|
||||||
|
20
SSLCERTS
20
SSLCERTS
@@ -6,9 +6,9 @@ default. This is done by installing a default CA cert bundle on 'make install'
|
|||||||
(or similar), that CA bundle package is used by default on operations against
|
(or similar), that CA bundle package is used by default on operations against
|
||||||
SSL servers.
|
SSL servers.
|
||||||
|
|
||||||
Alas, if you communicate with HTTPS servers using certifcates that are signed
|
Alas, if you communicate with HTTPS servers using certificates that are signed
|
||||||
by CAs present in the bundle, you will not notice any changed behavior and you
|
by CAs present in the bundle, you will not notice any changed behavior and you
|
||||||
will seeminglessly get a higher security level on your SSL connections since
|
will seamlessly get a higher security level on your SSL connections since you
|
||||||
can be sure that the remote server really is the one it claims to be.
|
can be sure that the remote server really is the one it claims to be.
|
||||||
|
|
||||||
If the remote server uses a self-signed certificate, or if you don't install
|
If the remote server uses a self-signed certificate, or if you don't install
|
||||||
@@ -26,10 +26,14 @@ included in the bundle, then you need to do one of the following:
|
|||||||
|
|
||||||
With the curl command tool: --cacert [file]
|
With the curl command tool: --cacert [file]
|
||||||
|
|
||||||
This upgrade procedure has been deemed The Right Thing even though it adds
|
Neglecting to use one of the above menthods when dealing with a server using a
|
||||||
this extra trouble for some users, since it adds security to a majority of the
|
certficate that isn't signed by one of the certficates in the installed CA
|
||||||
SSL connections that previously weren't really secure.
|
cert bundle, will cause SSL to report an error ("certificate verify failed")
|
||||||
|
during the handshake and SSL will then refuse further communication with that
|
||||||
|
server.
|
||||||
|
|
||||||
It turned out many people were using previous versions of curl/libcurl without
|
This procedure has been deemed The Right Thing even though it adds this extra
|
||||||
realizing the need for the CA cert options to get truly secure SSL
|
trouble for some users, since it adds security to a majority of the SSL
|
||||||
connections.
|
connections that previously weren't really secure. It turned out many people
|
||||||
|
were using previous versions of curl/libcurl without realizing the need for
|
||||||
|
the CA cert options to get truly secure SSL connections.
|
||||||
|
34
UPGRADE
34
UPGRADE
@@ -1,34 +0,0 @@
|
|||||||
Upgrading to curl/libcurl 7.10 from any previous version
|
|
||||||
========================================================
|
|
||||||
|
|
||||||
libcurl 7.10 performs peer SSL certificate verification by default. This is
|
|
||||||
done by installing a default CA cert bundle on 'make install' (or similar),
|
|
||||||
that CA bundle package is used by default on operations against SSL servers.
|
|
||||||
|
|
||||||
Alas, if you communicate with HTTPS servers using certifcates that are signed
|
|
||||||
by CAs present in the bundle, you will not notice any changed behavior and you
|
|
||||||
will seeminglessly get a higher security level on your SSL connections since
|
|
||||||
can be sure that the remote server really is the one it claims to be.
|
|
||||||
|
|
||||||
If the remote server uses a self-signed certificate, or if you don't install
|
|
||||||
curl's CA cert bundle or if it uses a certificate signed by a CA that isn't
|
|
||||||
included in the bundle, then you need to do one of the following:
|
|
||||||
|
|
||||||
1. Tell libcurl to *not* verify the peer. With libcurl you disable with with
|
|
||||||
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE);
|
|
||||||
|
|
||||||
With the curl command tool, you disable this with -k/--insecure.
|
|
||||||
|
|
||||||
2. Get a CA certificate that can verify the remote server and use the proper
|
|
||||||
option to point out this CA cert for verification when connecting. For
|
|
||||||
libcurl hackers: curl_easy_setopt(curl, CURLOPT_CAPATH, capath);
|
|
||||||
|
|
||||||
With the curl command tool: --cacert [file]
|
|
||||||
|
|
||||||
This upgrade procedure has been deemed The Right Thing even though it adds
|
|
||||||
this extra trouble for some users, since it adds security to a majority of the
|
|
||||||
SSL connections that previously weren't really secure.
|
|
||||||
|
|
||||||
It turned out many people were using previous versions of curl/libcurl without
|
|
||||||
realizing the need for the CA cert options to get truly secure SSL
|
|
||||||
connections.
|
|
90
acconfig.h
90
acconfig.h
@@ -1,90 +0,0 @@
|
|||||||
/* Name of this package! */
|
|
||||||
#undef PACKAGE
|
|
||||||
|
|
||||||
/* Version number of this archive. */
|
|
||||||
#undef VERSION
|
|
||||||
|
|
||||||
/* Define if you have the getpass function. */
|
|
||||||
#undef HAVE_GETPASS
|
|
||||||
|
|
||||||
/* Define cpu-machine-OS */
|
|
||||||
#undef OS
|
|
||||||
|
|
||||||
/* Define if you have the gethostbyaddr_r() function with 5 arguments */
|
|
||||||
#undef HAVE_GETHOSTBYADDR_R_5
|
|
||||||
|
|
||||||
/* Define if you have the gethostbyaddr_r() function with 7 arguments */
|
|
||||||
#undef HAVE_GETHOSTBYADDR_R_7
|
|
||||||
|
|
||||||
/* Define if you have the gethostbyaddr_r() function with 8 arguments */
|
|
||||||
#undef HAVE_GETHOSTBYADDR_R_8
|
|
||||||
|
|
||||||
/* Define if you have the gethostbyname_r() function with 3 arguments */
|
|
||||||
#undef HAVE_GETHOSTBYNAME_R_3
|
|
||||||
|
|
||||||
/* Define if you have the gethostbyname_r() function with 5 arguments */
|
|
||||||
#undef HAVE_GETHOSTBYNAME_R_5
|
|
||||||
|
|
||||||
/* Define if you have the gethostbyname_r() function with 6 arguments */
|
|
||||||
#undef HAVE_GETHOSTBYNAME_R_6
|
|
||||||
|
|
||||||
/* Define if you have the inet_ntoa_r function declared. */
|
|
||||||
#undef HAVE_INET_NTOA_R_DECL
|
|
||||||
|
|
||||||
/* Define if you need the _REENTRANT define for some functions */
|
|
||||||
#undef NEED_REENTRANT
|
|
||||||
|
|
||||||
/* Define if you have the Kerberos4 libraries (including -ldes) */
|
|
||||||
#undef KRB4
|
|
||||||
|
|
||||||
/* Define if you want to enable IPv6 support */
|
|
||||||
#undef ENABLE_IPV6
|
|
||||||
|
|
||||||
/* Define this to 'int' if ssize_t is not an available typedefed type */
|
|
||||||
#undef ssize_t
|
|
||||||
|
|
||||||
/* Define this to 'int' if socklen_t is not an available typedefed type */
|
|
||||||
#undef socklen_t
|
|
||||||
|
|
||||||
/* Define this as a suitable file to read random data from */
|
|
||||||
#undef RANDOM_FILE
|
|
||||||
|
|
||||||
/* Define this to your Entropy Gathering Daemon socket pathname */
|
|
||||||
#undef EGD_SOCKET
|
|
||||||
|
|
||||||
/* Define if you have a working OpenSSL installation */
|
|
||||||
#undef OPENSSL_ENABLED
|
|
||||||
|
|
||||||
/* Define the one correct non-blocking socket method below */
|
|
||||||
#undef HAVE_FIONBIO
|
|
||||||
#undef HAVE_IOCTLSOCKET
|
|
||||||
#undef HAVE_IOCTLSOCKET_CASE
|
|
||||||
#undef HAVE_O_NONBLOCK
|
|
||||||
#undef HAVE_DISABLED_NONBLOCKING
|
|
||||||
|
|
||||||
/* Define this to 'int' if in_addr_t is not an available typedefed type */
|
|
||||||
#undef in_addr_t
|
|
||||||
|
|
||||||
/* Define to disable DICT */
|
|
||||||
#undef CURL_DISABLE_DICT
|
|
||||||
|
|
||||||
/* Define to disable FILE */
|
|
||||||
#undef CURL_DISABLE_FILE
|
|
||||||
|
|
||||||
/* Define to disable FTP */
|
|
||||||
#undef CURL_DISABLE_FTP
|
|
||||||
|
|
||||||
/* Define to disable GOPHER */
|
|
||||||
#undef CURL_DISABLE_GOPHER
|
|
||||||
|
|
||||||
/* Define to disable HTTP */
|
|
||||||
#undef CURL_DISABLE_HTTP
|
|
||||||
|
|
||||||
/* Define to disable LDAP */
|
|
||||||
#undef CURL_DISABLE_LDAP
|
|
||||||
|
|
||||||
/* Define to disable TELNET */
|
|
||||||
#undef CURL_DISABLE_TELNET
|
|
||||||
|
|
||||||
/* Define if you have zlib present */
|
|
||||||
#undef HAVE_LIBZ
|
|
36
acinclude.m4
36
acinclude.m4
@@ -38,7 +38,7 @@ AC_DEFUN(CURL_CHECK_NONBLOCKING_SOCKET,
|
|||||||
],[
|
],[
|
||||||
dnl the O_NONBLOCK test was fine
|
dnl the O_NONBLOCK test was fine
|
||||||
nonblock="O_NONBLOCK"
|
nonblock="O_NONBLOCK"
|
||||||
AC_DEFINE(HAVE_O_NONBLOCK)
|
AC_DEFINE(HAVE_O_NONBLOCK, 1, [use O_NONBLOCK for non-blocking sockets])
|
||||||
],[
|
],[
|
||||||
dnl the code was bad, try a different program now, test 2
|
dnl the code was bad, try a different program now, test 2
|
||||||
|
|
||||||
@@ -52,7 +52,7 @@ dnl the code was bad, try a different program now, test 2
|
|||||||
],[
|
],[
|
||||||
dnl FIONBIO test was good
|
dnl FIONBIO test was good
|
||||||
nonblock="FIONBIO"
|
nonblock="FIONBIO"
|
||||||
AC_DEFINE(HAVE_FIONBIO)
|
AC_DEFINE(HAVE_FIONBIO, 1, [use FIONBIO for non-blocking sockets])
|
||||||
],[
|
],[
|
||||||
dnl FIONBIO test was also bad
|
dnl FIONBIO test was also bad
|
||||||
dnl the code was bad, try a different program now, test 3
|
dnl the code was bad, try a different program now, test 3
|
||||||
@@ -66,7 +66,7 @@ dnl the code was bad, try a different program now, test 3
|
|||||||
],[
|
],[
|
||||||
dnl ioctlsocket test was good
|
dnl ioctlsocket test was good
|
||||||
nonblock="ioctlsocket"
|
nonblock="ioctlsocket"
|
||||||
AC_DEFINE(HAVE_IOCTLSOCKET)
|
AC_DEFINE(HAVE_IOCTLSOCKET, 1, [use ioctlsocket() for non-blocking sockets])
|
||||||
],[
|
],[
|
||||||
dnl ioctlsocket didnt compile!
|
dnl ioctlsocket didnt compile!
|
||||||
|
|
||||||
@@ -79,11 +79,11 @@ dnl ioctlsocket didnt compile!
|
|||||||
],[
|
],[
|
||||||
dnl ioctlsocket test was good
|
dnl ioctlsocket test was good
|
||||||
nonblock="IoctlSocket"
|
nonblock="IoctlSocket"
|
||||||
AC_DEFINE(HAVE_IOCTLSOCKET_CASE)
|
AC_DEFINE(HAVE_IOCTLSOCKET_CASE, 1, [use Ioctlsocket() for non-blocking sockets])
|
||||||
],[
|
],[
|
||||||
dnl ioctlsocket didnt compile!
|
dnl ioctlsocket didnt compile!
|
||||||
nonblock="nada"
|
nonblock="nada"
|
||||||
AC_DEFINE(HAVE_DISABLED_NONBLOCKING)
|
AC_DEFINE(HAVE_DISABLED_NONBLOCKING, 1, [disabled non-blocking sockets])
|
||||||
])
|
])
|
||||||
dnl end of forth test
|
dnl end of forth test
|
||||||
|
|
||||||
@@ -272,15 +272,15 @@ AC_DEFUN(CURL_CHECK_INET_NTOA_R,
|
|||||||
AC_MSG_CHECKING(whether inet_ntoa_r is declared)
|
AC_MSG_CHECKING(whether inet_ntoa_r is declared)
|
||||||
AC_EGREP_CPP(inet_ntoa_r,[
|
AC_EGREP_CPP(inet_ntoa_r,[
|
||||||
#include <arpa/inet.h>],[
|
#include <arpa/inet.h>],[
|
||||||
AC_DEFINE(HAVE_INET_NTOA_R_DECL)
|
AC_DEFINE(HAVE_INET_NTOA_R_DECL, 1, [inet_ntoa_r() is declared])
|
||||||
AC_MSG_RESULT(yes)],[
|
AC_MSG_RESULT(yes)],[
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
AC_MSG_CHECKING(whether inet_ntoa_r with -D_REENTRANT is declared)
|
AC_MSG_CHECKING(whether inet_ntoa_r with -D_REENTRANT is declared)
|
||||||
AC_EGREP_CPP(inet_ntoa_r,[
|
AC_EGREP_CPP(inet_ntoa_r,[
|
||||||
#define _REENTRANT
|
#define _REENTRANT
|
||||||
#include <arpa/inet.h>],[
|
#include <arpa/inet.h>],[
|
||||||
AC_DEFINE(HAVE_INET_NTOA_R_DECL)
|
AC_DEFINE(HAVE_INET_NTOA_R_DECL, 1, [inet_ntoa_r() is declared])
|
||||||
AC_DEFINE(NEED_REENTRANT)
|
AC_DEFINE(NEED_REENTRANT, 1, [need REENTRANT defined])
|
||||||
AC_MSG_RESULT(yes)],
|
AC_MSG_RESULT(yes)],
|
||||||
AC_MSG_RESULT(no))])])
|
AC_MSG_RESULT(no))])])
|
||||||
])
|
])
|
||||||
@@ -302,7 +302,7 @@ struct hostent_data hdata;
|
|||||||
int rc;
|
int rc;
|
||||||
rc = gethostbyaddr_r(address, length, type, &h, &hdata);],[
|
rc = gethostbyaddr_r(address, length, type, &h, &hdata);],[
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
AC_DEFINE(HAVE_GETHOSTBYADDR_R_5)
|
AC_DEFINE(HAVE_GETHOSTBYADDR_R_5, 1, [gethostbyaddr_r() takes 5 args])
|
||||||
ac_cv_gethostbyaddr_args=5],[
|
ac_cv_gethostbyaddr_args=5],[
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
AC_MSG_CHECKING(if gethostbyaddr_r with -D_REENTRANT takes 5 arguments)
|
AC_MSG_CHECKING(if gethostbyaddr_r with -D_REENTRANT takes 5 arguments)
|
||||||
@@ -318,8 +318,8 @@ struct hostent_data hdata;
|
|||||||
int rc;
|
int rc;
|
||||||
rc = gethostbyaddr_r(address, length, type, &h, &hdata);],[
|
rc = gethostbyaddr_r(address, length, type, &h, &hdata);],[
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
AC_DEFINE(HAVE_GETHOSTBYADDR_R_5)
|
AC_DEFINE(HAVE_GETHOSTBYADDR_R_5, 1, [gethostbyaddr_r() takes 5 args])
|
||||||
AC_DEFINE(NEED_REENTRANT)
|
AC_DEFINE(NEED_REENTRANT, 1, [need REENTRANT])
|
||||||
ac_cv_gethostbyaddr_args=5],[
|
ac_cv_gethostbyaddr_args=5],[
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
AC_MSG_CHECKING(if gethostbyaddr_r takes 7 arguments)
|
AC_MSG_CHECKING(if gethostbyaddr_r takes 7 arguments)
|
||||||
@@ -337,7 +337,7 @@ struct hostent * hp;
|
|||||||
hp = gethostbyaddr_r(address, length, type, &h,
|
hp = gethostbyaddr_r(address, length, type, &h,
|
||||||
buffer, 8192, &h_errnop);],[
|
buffer, 8192, &h_errnop);],[
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
AC_DEFINE(HAVE_GETHOSTBYADDR_R_7)
|
AC_DEFINE(HAVE_GETHOSTBYADDR_R_7, 1, [gethostbyaddr_r() takes 7 args] )
|
||||||
ac_cv_gethostbyaddr_args=7],[
|
ac_cv_gethostbyaddr_args=7],[
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
AC_MSG_CHECKING(if gethostbyaddr_r takes 8 arguments)
|
AC_MSG_CHECKING(if gethostbyaddr_r takes 8 arguments)
|
||||||
@@ -356,7 +356,7 @@ int rc;
|
|||||||
rc = gethostbyaddr_r(address, length, type, &h,
|
rc = gethostbyaddr_r(address, length, type, &h,
|
||||||
buffer, 8192, &hp, &h_errnop);],[
|
buffer, 8192, &hp, &h_errnop);],[
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
AC_DEFINE(HAVE_GETHOSTBYADDR_R_8)
|
AC_DEFINE(HAVE_GETHOSTBYADDR_R_8, 1, [gethostbyaddr_r() takes 8 args])
|
||||||
ac_cv_gethostbyaddr_args=8],[
|
ac_cv_gethostbyaddr_args=8],[
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
have_missing_r_funcs="$have_missing_r_funcs gethostbyaddr_r"])])])])])
|
have_missing_r_funcs="$have_missing_r_funcs gethostbyaddr_r"])])])])])
|
||||||
@@ -380,7 +380,7 @@ gethostbyname_r(const char *, struct hostent *, struct hostent_data *);],[
|
|||||||
struct hostent_data data;
|
struct hostent_data data;
|
||||||
gethostbyname_r(NULL, NULL, NULL);],[
|
gethostbyname_r(NULL, NULL, NULL);],[
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
AC_DEFINE(HAVE_GETHOSTBYNAME_R_3)
|
AC_DEFINE(HAVE_GETHOSTBYNAME_R_3, 1, [gethostbyname_r() takes 3 args])
|
||||||
ac_cv_gethostbyname_args=3],[
|
ac_cv_gethostbyname_args=3],[
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
AC_MSG_CHECKING([if gethostbyname_r with -D_REENTRANT takes 3 arguments])
|
AC_MSG_CHECKING([if gethostbyname_r with -D_REENTRANT takes 3 arguments])
|
||||||
@@ -398,8 +398,8 @@ gethostbyname_r(const char *,struct hostent *, struct hostent_data *);],[
|
|||||||
struct hostent_data data;
|
struct hostent_data data;
|
||||||
gethostbyname_r(NULL, NULL, NULL);],[
|
gethostbyname_r(NULL, NULL, NULL);],[
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
AC_DEFINE(HAVE_GETHOSTBYNAME_R_3)
|
AC_DEFINE(HAVE_GETHOSTBYNAME_R_3, 1, [gethostbyname_r() takes 3 args])
|
||||||
AC_DEFINE(NEED_REENTRANT)
|
AC_DEFINE(NEED_REENTRANT, 1, [needs REENTRANT])
|
||||||
ac_cv_gethostbyname_args=3],[
|
ac_cv_gethostbyname_args=3],[
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
AC_MSG_CHECKING([if gethostbyname_r takes 5 arguments])
|
AC_MSG_CHECKING([if gethostbyname_r takes 5 arguments])
|
||||||
@@ -413,7 +413,7 @@ struct hostent *
|
|||||||
gethostbyname_r(const char *, struct hostent *, char *, int, int *);],[
|
gethostbyname_r(const char *, struct hostent *, char *, int, int *);],[
|
||||||
gethostbyname_r(NULL, NULL, NULL, 0, NULL);],[
|
gethostbyname_r(NULL, NULL, NULL, 0, NULL);],[
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
AC_DEFINE(HAVE_GETHOSTBYNAME_R_5)
|
AC_DEFINE(HAVE_GETHOSTBYNAME_R_5, 1, [gethostbyname_r() takes 5 args])
|
||||||
ac_cv_gethostbyname_args=5],[
|
ac_cv_gethostbyname_args=5],[
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
AC_MSG_CHECKING([if gethostbyname_r takes 6 arguments])
|
AC_MSG_CHECKING([if gethostbyname_r takes 6 arguments])
|
||||||
@@ -428,7 +428,7 @@ gethostbyname_r(const char *, struct hostent *, char *, size_t,
|
|||||||
struct hostent **, int *);],[
|
struct hostent **, int *);],[
|
||||||
gethostbyname_r(NULL, NULL, NULL, 0, NULL, NULL);],[
|
gethostbyname_r(NULL, NULL, NULL, 0, NULL, NULL);],[
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
AC_DEFINE(HAVE_GETHOSTBYNAME_R_6)
|
AC_DEFINE(HAVE_GETHOSTBYNAME_R_6, 1, [gethostbyname_r() takes 6 args])
|
||||||
ac_cv_gethostbyname_args=6],[
|
ac_cv_gethostbyname_args=6],[
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
have_missing_r_funcs="$have_missing_r_funcs gethostbyname_r"],
|
have_missing_r_funcs="$have_missing_r_funcs gethostbyname_r"],
|
||||||
|
@@ -6,7 +6,7 @@ $ loc = f$environment("PROCEDURE")
|
|||||||
$ def = f$parse("X.X;1",loc) - "X.X;1"
|
$ def = f$parse("X.X;1",loc) - "X.X;1"
|
||||||
$
|
$
|
||||||
$ set def 'def'
|
$ set def 'def'
|
||||||
$ cc_qual = "/define=HAVE_CONFIG_H=1/include=(""../include/"",""../"",""../../openssl-0_9_6c/include/"")"
|
$ cc_qual = "/define=HAVE_CONFIG_H=1/include=(""../include/"",""../"",""../../openssl-0_9_7/include/"")"
|
||||||
$ if p1 .eqs. "LISTING" then cc_qual = cc_qual + "/LIST/MACHINE"
|
$ if p1 .eqs. "LISTING" then cc_qual = cc_qual + "/LIST/MACHINE"
|
||||||
$ if p1 .eqs. "DEBUG" then cc_qual = cc_qual + "/LIST/MACHINE/DEBUG"
|
$ if p1 .eqs. "DEBUG" then cc_qual = cc_qual + "/LIST/MACHINE/DEBUG"
|
||||||
$ msg_qual = ""
|
$ msg_qual = ""
|
||||||
@@ -14,8 +14,8 @@ $ call build "[.lib]" "*.c"
|
|||||||
$ call build "[.src]" "*.c"
|
$ call build "[.src]" "*.c"
|
||||||
$ call build "[.src]" "*.msg"
|
$ call build "[.src]" "*.msg"
|
||||||
$ link /exe=curl.exe [.src]curl/lib/include=main,[.lib]curl/lib, -
|
$ link /exe=curl.exe [.src]curl/lib/include=main,[.lib]curl/lib, -
|
||||||
[-.openssl-0_9_6c.axp.exe.ssl]libssl/lib, -
|
[-.openssl-0_9_7.axp.exe.ssl]libssl/lib, -
|
||||||
[-.openssl-0_9_6c.axp.exe.crypto]libcrypto/lib
|
[-.openssl-0_9_7.axp.exe.crypto]libcrypto/lib
|
||||||
$
|
$
|
||||||
$
|
$
|
||||||
$ goto Common_Exit
|
$ goto Common_Exit
|
||||||
|
109
buildconf
109
buildconf
@@ -5,7 +5,114 @@ die(){
|
|||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------------
|
||||||
|
# autoconf 2.50 or newer
|
||||||
|
#
|
||||||
|
ac_version=`${AUTOCONF:-autoconf} --version 2>/dev/null|head -1| sed -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'`
|
||||||
|
if test -z "$ac_version"; then
|
||||||
|
echo "buildconf: autoconf not found."
|
||||||
|
echo " You need autoconf version 2.50 or newer installed."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
IFS=.; set $ac_version; IFS=' '
|
||||||
|
if test "$1" = "2" -a "$2" -lt "50" || test "$1" -lt "2"; then
|
||||||
|
echo "buildconf: autoconf version $ac_version found."
|
||||||
|
echo " You need autoconf version 2.50 or newer installed."
|
||||||
|
echo " If you have a sufficient autoconf installed, but it"
|
||||||
|
echo " is not named 'autoconf', then try setting the"
|
||||||
|
echo " AUTOCONF environment variable."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "buildconf: autoconf version $ac_version (ok)"
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------------
|
||||||
|
# autoheader 2.50 or newer
|
||||||
|
#
|
||||||
|
ah_version=`${AUTOHEADER:-autoheader} --version 2>/dev/null|head -1| sed -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'`
|
||||||
|
if test -z "$ah_version"; then
|
||||||
|
echo "buildconf: autoheader not found."
|
||||||
|
echo " You need autoheader version 2.50 or newer installed."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
IFS=.; set $ah_version; IFS=' '
|
||||||
|
if test "$1" = "2" -a "$2" -lt "50" || test "$1" -lt "2"; then
|
||||||
|
echo "buildconf: autoheader version $ah_version found."
|
||||||
|
echo " You need autoheader version 2.50 or newer installed."
|
||||||
|
echo " If you have a sufficient autoheader installed, but it"
|
||||||
|
echo " is not named 'autoheader', then try setting the"
|
||||||
|
echo " AUTOHEADER environment variable."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "buildconf: autoheader version $ah_version (ok)"
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------------
|
||||||
|
# automake 1.5 or newer
|
||||||
|
#
|
||||||
|
am_version=`${AUTOMAKE:-automake} --version 2>/dev/null|head -1| sed -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'`
|
||||||
|
if test -z "$am_version"; then
|
||||||
|
echo "buildconf: automake not found."
|
||||||
|
echo " You need automake version 1.5 or newer installed."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
IFS=.; set $am_version; IFS=' '
|
||||||
|
if test "$1" = "1" -a "$2" -lt "5" || test "$1" -lt "1"; then
|
||||||
|
echo "buildconf: automake version $am_version found."
|
||||||
|
echo " You need automake version 1.5 or newer installed."
|
||||||
|
echo " If you have a sufficient automake installed, but it"
|
||||||
|
echo " is not named 'autommake', then try setting the"
|
||||||
|
echo " AUTOMAKE environment variable."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "buildconf: automake version $am_version (ok)"
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------------
|
||||||
|
# libtool 1.4 or newer
|
||||||
|
#
|
||||||
|
LIBTOOL_WANTED_MAJOR=1
|
||||||
|
LIBTOOL_WANTED_MINOR=4
|
||||||
|
LIBTOOL_WANTED_PATCH=
|
||||||
|
LIBTOOL_WANTED_VERSION=1.4
|
||||||
|
|
||||||
|
libtool=`which glibtool 2>/dev/null`
|
||||||
|
if test ! -x "$libtool"; then
|
||||||
|
libtool=`which libtool`
|
||||||
|
fi
|
||||||
|
lt_pversion=`$libtool --version 2>/dev/null|sed -e 's/^[^0-9]*//' -e 's/[- ].*//'`
|
||||||
|
if test -z "$lt_pversion"; then
|
||||||
|
echo "buildconf: libtool not found."
|
||||||
|
echo " You need libtool version $LIBTOOL_WANTED_VERSION or newer installed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
lt_version=`echo $lt_pversion|sed -e 's/\([a-z]*\)$/.\1/'`
|
||||||
|
IFS=.; set $lt_version; IFS=' '
|
||||||
|
lt_status="good"
|
||||||
|
if test "$1" = "$LIBTOOL_WANTED_MAJOR"; then
|
||||||
|
if test "$2" -lt "$LIBTOOL_WANTED_MINOR"; then
|
||||||
|
lt_status="bad"
|
||||||
|
elif test ! -z "$LIBTOOL_WANTED_PATCH"; then
|
||||||
|
if test "$3" -lt "$LIBTOOL_WANTED_PATCH"; then
|
||||||
|
lt_status="bad"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if test $lt_status != "good"; then
|
||||||
|
echo "buildconf: libtool version $lt_pversion found."
|
||||||
|
echo " You need libtool version $LIBTOOL_WANTED_VERSION or newer installed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "buildconf: libtool version $lt_pversion (ok)"
|
||||||
|
|
||||||
|
echo "buildconf: running aclocal"
|
||||||
aclocal || die "The command 'aclocal' failed"
|
aclocal || die "The command 'aclocal' failed"
|
||||||
|
echo "buildconf: running autoheader"
|
||||||
autoheader || die "The command 'autoheader' failed"
|
autoheader || die "The command 'autoheader' failed"
|
||||||
|
echo "buildconf: running autoconf"
|
||||||
autoconf || die "The command 'autoconf' failed"
|
autoconf || die "The command 'autoconf' failed"
|
||||||
automake -a || die "The command 'automake $MAKEFILES' failed"
|
echo "buildconf: running automake"
|
||||||
|
automake -a || die "The command 'automake -a' failed"
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
336
config.guess
vendored
336
config.guess
vendored
@@ -1,9 +1,9 @@
|
|||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Attempt to guess a canonical system name.
|
# Attempt to guess a canonical system name.
|
||||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
|
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||||
# Free Software Foundation, Inc.
|
# 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
timestamp='2001-09-04'
|
timestamp='2002-10-21'
|
||||||
|
|
||||||
# This file is free software; you can redistribute it and/or modify it
|
# This file is free software; you can redistribute it and/or modify it
|
||||||
# under the terms of the GNU General Public License as published by
|
# under the terms of the GNU General Public License as published by
|
||||||
@@ -24,8 +24,9 @@ timestamp='2001-09-04'
|
|||||||
# configuration script generated by Autoconf, you may include it under
|
# configuration script generated by Autoconf, you may include it under
|
||||||
# the same distribution terms that you use for the rest of that program.
|
# the same distribution terms that you use for the rest of that program.
|
||||||
|
|
||||||
# Written by Per Bothner <bothner@cygnus.com>.
|
# Originally written by Per Bothner <per@bothner.com>.
|
||||||
# Please send patches to <config-patches@gnu.org>.
|
# Please send patches to <config-patches@gnu.org>. Submit a context
|
||||||
|
# diff and a properly formatted ChangeLog entry.
|
||||||
#
|
#
|
||||||
# This script attempts to guess a canonical system name similar to
|
# This script attempts to guess a canonical system name similar to
|
||||||
# config.sub. If it succeeds, it prints the system name on stdout, and
|
# config.sub. If it succeeds, it prints the system name on stdout, and
|
||||||
@@ -87,30 +88,40 @@ if test $# != 0; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
trap 'exit 1' 1 2 15
|
||||||
|
|
||||||
dummy=dummy-$$
|
# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
|
||||||
trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15
|
# compiler to aid in system detection is discouraged as it requires
|
||||||
|
# temporary files to be created and, as you can see below, it is a
|
||||||
|
# headache to deal with in a portable fashion.
|
||||||
|
|
||||||
# CC_FOR_BUILD -- compiler used by this script.
|
|
||||||
# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
|
# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
|
||||||
# use `HOST_CC' if defined, but it is deprecated.
|
# use `HOST_CC' if defined, but it is deprecated.
|
||||||
|
|
||||||
set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in
|
# This shell variable is my proudest work .. or something. --bje
|
||||||
,,) echo "int dummy(){}" > $dummy.c ;
|
|
||||||
for c in cc gcc c89 ; do
|
set_cc_for_build='tmpdir=${TMPDIR-/tmp}/config-guess-$$ ;
|
||||||
($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ;
|
(old=`umask` && umask 077 && mkdir $tmpdir && umask $old && unset old)
|
||||||
if test $? = 0 ; then
|
|| (echo "$me: cannot create $tmpdir" >&2 && exit 1) ;
|
||||||
|
dummy=$tmpdir/dummy ;
|
||||||
|
files="$dummy.c $dummy.o $dummy.rel $dummy" ;
|
||||||
|
trap '"'"'rm -f $files; rmdir $tmpdir; exit 1'"'"' 1 2 15 ;
|
||||||
|
case $CC_FOR_BUILD,$HOST_CC,$CC in
|
||||||
|
,,) echo "int x;" > $dummy.c ;
|
||||||
|
for c in cc gcc c89 c99 ; do
|
||||||
|
if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
|
||||||
CC_FOR_BUILD="$c"; break ;
|
CC_FOR_BUILD="$c"; break ;
|
||||||
fi ;
|
fi ;
|
||||||
done ;
|
done ;
|
||||||
rm -f $dummy.c $dummy.o $dummy.rel ;
|
rm -f $files ;
|
||||||
if test x"$CC_FOR_BUILD" = x ; then
|
if test x"$CC_FOR_BUILD" = x ; then
|
||||||
CC_FOR_BUILD=no_compiler_found ;
|
CC_FOR_BUILD=no_compiler_found ;
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
,,*) CC_FOR_BUILD=$CC ;;
|
,,*) CC_FOR_BUILD=$CC ;;
|
||||||
,*,*) CC_FOR_BUILD=$HOST_CC ;;
|
,*,*) CC_FOR_BUILD=$HOST_CC ;;
|
||||||
esac'
|
esac ;
|
||||||
|
unset files'
|
||||||
|
|
||||||
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
|
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
|
||||||
# (ghazi@noc.rutgers.edu 1994-08-24)
|
# (ghazi@noc.rutgers.edu 1994-08-24)
|
||||||
@@ -127,29 +138,30 @@ UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
|
|||||||
|
|
||||||
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||||
*:NetBSD:*:*)
|
*:NetBSD:*:*)
|
||||||
# Netbsd (nbsd) targets should (where applicable) match one or
|
# NetBSD (nbsd) targets should (where applicable) match one or
|
||||||
# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
|
# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
|
||||||
# *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
|
# *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
|
||||||
# switched to ELF, *-*-netbsd* would select the old
|
# switched to ELF, *-*-netbsd* would select the old
|
||||||
# object file format. This provides both forward
|
# object file format. This provides both forward
|
||||||
# compatibility and a consistent mechanism for selecting the
|
# compatibility and a consistent mechanism for selecting the
|
||||||
# object file format.
|
# object file format.
|
||||||
# Determine the machine/vendor (is the vendor relevant).
|
#
|
||||||
case "${UNAME_MACHINE}" in
|
# Note: NetBSD doesn't particularly care about the vendor
|
||||||
amiga) machine=m68k-unknown ;;
|
# portion of the name. We always set it to "unknown".
|
||||||
arm32) machine=arm-unknown ;;
|
sysctl="sysctl -n hw.machine_arch"
|
||||||
atari*) machine=m68k-atari ;;
|
UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
|
||||||
sun3*) machine=m68k-sun ;;
|
/usr/sbin/$sysctl 2>/dev/null || echo unknown)`
|
||||||
mac68k) machine=m68k-apple ;;
|
case "${UNAME_MACHINE_ARCH}" in
|
||||||
macppc) machine=powerpc-apple ;;
|
armeb) machine=armeb-unknown ;;
|
||||||
hp3[0-9][05]) machine=m68k-hp ;;
|
arm*) machine=arm-unknown ;;
|
||||||
ibmrt|romp-ibm) machine=romp-ibm ;;
|
sh3el) machine=shl-unknown ;;
|
||||||
*) machine=${UNAME_MACHINE}-unknown ;;
|
sh3eb) machine=sh-unknown ;;
|
||||||
|
*) machine=${UNAME_MACHINE_ARCH}-unknown ;;
|
||||||
esac
|
esac
|
||||||
# The Operating System including object format, if it has switched
|
# The Operating System including object format, if it has switched
|
||||||
# to ELF recently, or will in the future.
|
# to ELF recently, or will in the future.
|
||||||
case "${UNAME_MACHINE}" in
|
case "${UNAME_MACHINE_ARCH}" in
|
||||||
i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k)
|
arm*|i386|m68k|ns32k|sh3*|sparc|vax)
|
||||||
eval $set_cc_for_build
|
eval $set_cc_for_build
|
||||||
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
|
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
|
||||||
| grep __ELF__ >/dev/null
|
| grep __ELF__ >/dev/null
|
||||||
@@ -172,6 +184,45 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
|||||||
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
|
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
|
||||||
echo "${machine}-${os}${release}"
|
echo "${machine}-${os}${release}"
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
amiga:OpenBSD:*:*)
|
||||||
|
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
arc:OpenBSD:*:*)
|
||||||
|
echo mipsel-unknown-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
hp300:OpenBSD:*:*)
|
||||||
|
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
mac68k:OpenBSD:*:*)
|
||||||
|
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
macppc:OpenBSD:*:*)
|
||||||
|
echo powerpc-unknown-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
mvme68k:OpenBSD:*:*)
|
||||||
|
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
mvme88k:OpenBSD:*:*)
|
||||||
|
echo m88k-unknown-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
mvmeppc:OpenBSD:*:*)
|
||||||
|
echo powerpc-unknown-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
pmax:OpenBSD:*:*)
|
||||||
|
echo mipsel-unknown-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
sgi:OpenBSD:*:*)
|
||||||
|
echo mipseb-unknown-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
sun3:OpenBSD:*:*)
|
||||||
|
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
wgrisc:OpenBSD:*:*)
|
||||||
|
echo mipsel-unknown-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
*:OpenBSD:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
alpha:OSF1:*:*)
|
alpha:OSF1:*:*)
|
||||||
if test $UNAME_RELEASE = "V4.0"; then
|
if test $UNAME_RELEASE = "V4.0"; then
|
||||||
UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
|
UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
|
||||||
@@ -180,6 +231,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
|||||||
# A Tn.n version is a released field test version.
|
# A Tn.n version is a released field test version.
|
||||||
# A Xn.n version is an unreleased experimental baselevel.
|
# A Xn.n version is an unreleased experimental baselevel.
|
||||||
# 1.2 uses "1.2" for uname -r.
|
# 1.2 uses "1.2" for uname -r.
|
||||||
|
eval $set_cc_for_build
|
||||||
cat <<EOF >$dummy.s
|
cat <<EOF >$dummy.s
|
||||||
.data
|
.data
|
||||||
\$Lformat:
|
\$Lformat:
|
||||||
@@ -205,10 +257,9 @@ main:
|
|||||||
jsr \$26,exit
|
jsr \$26,exit
|
||||||
.end main
|
.end main
|
||||||
EOF
|
EOF
|
||||||
eval $set_cc_for_build
|
$CC_FOR_BUILD -o $dummy $dummy.s 2>/dev/null
|
||||||
$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
|
|
||||||
if test "$?" = 0 ; then
|
if test "$?" = 0 ; then
|
||||||
case `./$dummy` in
|
case `$dummy` in
|
||||||
0-0)
|
0-0)
|
||||||
UNAME_MACHINE="alpha"
|
UNAME_MACHINE="alpha"
|
||||||
;;
|
;;
|
||||||
@@ -230,9 +281,12 @@ EOF
|
|||||||
2-1307)
|
2-1307)
|
||||||
UNAME_MACHINE="alphaev68"
|
UNAME_MACHINE="alphaev68"
|
||||||
;;
|
;;
|
||||||
|
3-1307)
|
||||||
|
UNAME_MACHINE="alphaev7"
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
rm -f $dummy.s $dummy
|
rm -f $dummy.s $dummy && rmdir $tmpdir
|
||||||
echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
|
echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
Alpha\ *:Windows_NT*:*)
|
Alpha\ *:Windows_NT*:*)
|
||||||
@@ -247,29 +301,11 @@ EOF
|
|||||||
Amiga*:UNIX_System_V:4.0:*)
|
Amiga*:UNIX_System_V:4.0:*)
|
||||||
echo m68k-unknown-sysv4
|
echo m68k-unknown-sysv4
|
||||||
exit 0;;
|
exit 0;;
|
||||||
amiga:OpenBSD:*:*)
|
|
||||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
*:[Aa]miga[Oo][Ss]:*:*)
|
*:[Aa]miga[Oo][Ss]:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-amigaos
|
echo ${UNAME_MACHINE}-unknown-amigaos
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
arc64:OpenBSD:*:*)
|
*:[Mm]orph[Oo][Ss]:*:*)
|
||||||
echo mips64el-unknown-openbsd${UNAME_RELEASE}
|
echo ${UNAME_MACHINE}-unknown-morphos
|
||||||
exit 0 ;;
|
|
||||||
arc:OpenBSD:*:*)
|
|
||||||
echo mipsel-unknown-openbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
hkmips:OpenBSD:*:*)
|
|
||||||
echo mips-unknown-openbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
pmax:OpenBSD:*:*)
|
|
||||||
echo mipsel-unknown-openbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
sgi:OpenBSD:*:*)
|
|
||||||
echo mips-unknown-openbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
wgrisc:OpenBSD:*:*)
|
|
||||||
echo mipsel-unknown-openbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
*:OS/390:*:*)
|
*:OS/390:*:*)
|
||||||
echo i370-ibm-openedition
|
echo i370-ibm-openedition
|
||||||
@@ -291,6 +327,10 @@ EOF
|
|||||||
NILE*:*:*:dcosx)
|
NILE*:*:*:dcosx)
|
||||||
echo pyramid-pyramid-svr4
|
echo pyramid-pyramid-svr4
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
DRS?6000:UNIX_SV:4.2*:7*)
|
||||||
|
case `/usr/bin/uname -p` in
|
||||||
|
sparc) echo sparc-icl-nx7 && exit 0 ;;
|
||||||
|
esac ;;
|
||||||
sun4H:SunOS:5.*:*)
|
sun4H:SunOS:5.*:*)
|
||||||
echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -319,7 +359,7 @@ EOF
|
|||||||
echo m68k-sun-sunos${UNAME_RELEASE}
|
echo m68k-sun-sunos${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
sun*:*:4.2BSD:*)
|
sun*:*:4.2BSD:*)
|
||||||
UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
|
UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
|
||||||
test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
|
test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
|
||||||
case "`/bin/arch`" in
|
case "`/bin/arch`" in
|
||||||
sun3)
|
sun3)
|
||||||
@@ -333,12 +373,6 @@ EOF
|
|||||||
aushp:SunOS:*:*)
|
aushp:SunOS:*:*)
|
||||||
echo sparc-auspex-sunos${UNAME_RELEASE}
|
echo sparc-auspex-sunos${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
sparc*:NetBSD:*)
|
|
||||||
echo `uname -p`-unknown-netbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
atari*:OpenBSD:*:*)
|
|
||||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
# The situation for MiNT is a little confusing. The machine name
|
# The situation for MiNT is a little confusing. The machine name
|
||||||
# can be virtually everything (everything which is not
|
# can be virtually everything (everything which is not
|
||||||
# "atarist" or "atariste" at least should have a processor
|
# "atarist" or "atariste" at least should have a processor
|
||||||
@@ -365,18 +399,6 @@ EOF
|
|||||||
*:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
|
*:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
|
||||||
echo m68k-unknown-mint${UNAME_RELEASE}
|
echo m68k-unknown-mint${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
sun3*:OpenBSD:*:*)
|
|
||||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
mac68k:OpenBSD:*:*)
|
|
||||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
mvme68k:OpenBSD:*:*)
|
|
||||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
mvme88k:OpenBSD:*:*)
|
|
||||||
echo m88k-unknown-openbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
powerpc:machten:*:*)
|
powerpc:machten:*:*)
|
||||||
echo powerpc-apple-machten${UNAME_RELEASE}
|
echo powerpc-apple-machten${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -415,15 +437,21 @@ EOF
|
|||||||
exit (-1);
|
exit (-1);
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
$CC_FOR_BUILD $dummy.c -o $dummy \
|
$CC_FOR_BUILD -o $dummy $dummy.c \
|
||||||
&& ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
|
&& $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
|
||||||
&& rm -f $dummy.c $dummy && exit 0
|
&& rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0
|
||||||
rm -f $dummy.c $dummy
|
rm -f $dummy.c $dummy && rmdir $tmpdir
|
||||||
echo mips-mips-riscos${UNAME_RELEASE}
|
echo mips-mips-riscos${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
Motorola:PowerMAX_OS:*:*)
|
Motorola:PowerMAX_OS:*:*)
|
||||||
echo powerpc-motorola-powermax
|
echo powerpc-motorola-powermax
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
Motorola:*:4.3:PL8-*)
|
||||||
|
echo powerpc-harris-powermax
|
||||||
|
exit 0 ;;
|
||||||
|
Night_Hawk:*:*:PowerMAX_OS)
|
||||||
|
echo powerpc-harris-powermax
|
||||||
|
exit 0 ;;
|
||||||
Night_Hawk:Power_UNIX:*:*)
|
Night_Hawk:Power_UNIX:*:*)
|
||||||
echo powerpc-harris-powerunix
|
echo powerpc-harris-powerunix
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -496,8 +524,8 @@ EOF
|
|||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
|
$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0
|
||||||
rm -f $dummy.c $dummy
|
rm -f $dummy.c $dummy && rmdir $tmpdir
|
||||||
echo rs6000-ibm-aix3.2.5
|
echo rs6000-ibm-aix3.2.5
|
||||||
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
|
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
|
||||||
echo rs6000-ibm-aix3.2.4
|
echo rs6000-ibm-aix3.2.4
|
||||||
@@ -506,7 +534,7 @@ EOF
|
|||||||
fi
|
fi
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
*:AIX:*:[45])
|
*:AIX:*:[45])
|
||||||
IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
|
IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
|
||||||
if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
|
if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
|
||||||
IBM_ARCH=rs6000
|
IBM_ARCH=rs6000
|
||||||
else
|
else
|
||||||
@@ -546,8 +574,6 @@ EOF
|
|||||||
9000/31? ) HP_ARCH=m68000 ;;
|
9000/31? ) HP_ARCH=m68000 ;;
|
||||||
9000/[34]?? ) HP_ARCH=m68k ;;
|
9000/[34]?? ) HP_ARCH=m68k ;;
|
||||||
9000/[678][0-9][0-9])
|
9000/[678][0-9][0-9])
|
||||||
case "${HPUX_REV}" in
|
|
||||||
11.[0-9][0-9])
|
|
||||||
if [ -x /usr/bin/getconf ]; then
|
if [ -x /usr/bin/getconf ]; then
|
||||||
sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
|
sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
|
||||||
sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
|
sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
|
||||||
@@ -558,10 +584,10 @@ EOF
|
|||||||
case "${sc_kernel_bits}" in
|
case "${sc_kernel_bits}" in
|
||||||
32) HP_ARCH="hppa2.0n" ;;
|
32) HP_ARCH="hppa2.0n" ;;
|
||||||
64) HP_ARCH="hppa2.0w" ;;
|
64) HP_ARCH="hppa2.0w" ;;
|
||||||
|
'') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
|
||||||
esac ;;
|
esac ;;
|
||||||
esac
|
esac
|
||||||
fi ;;
|
fi
|
||||||
esac
|
|
||||||
if [ "${HP_ARCH}" = "" ]; then
|
if [ "${HP_ARCH}" = "" ]; then
|
||||||
eval $set_cc_for_build
|
eval $set_cc_for_build
|
||||||
sed 's/^ //' << EOF >$dummy.c
|
sed 's/^ //' << EOF >$dummy.c
|
||||||
@@ -597,9 +623,9 @@ EOF
|
|||||||
exit (0);
|
exit (0);
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
(CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
|
(CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
|
||||||
if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
|
if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
|
||||||
rm -f $dummy.c $dummy
|
rm -f $dummy.c $dummy && rmdir $tmpdir
|
||||||
fi ;;
|
fi ;;
|
||||||
esac
|
esac
|
||||||
echo ${HP_ARCH}-hp-hpux${HPUX_REV}
|
echo ${HP_ARCH}-hp-hpux${HPUX_REV}
|
||||||
@@ -635,8 +661,8 @@ EOF
|
|||||||
exit (0);
|
exit (0);
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
|
$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0
|
||||||
rm -f $dummy.c $dummy
|
rm -f $dummy.c $dummy && rmdir $tmpdir
|
||||||
echo unknown-hitachi-hiuxwe2
|
echo unknown-hitachi-hiuxwe2
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
|
9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
|
||||||
@@ -664,9 +690,6 @@ EOF
|
|||||||
parisc*:Lites*:*:*)
|
parisc*:Lites*:*:*)
|
||||||
echo hppa1.1-hp-lites
|
echo hppa1.1-hp-lites
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
hppa*:OpenBSD:*:*)
|
|
||||||
echo hppa-unknown-openbsd
|
|
||||||
exit 0 ;;
|
|
||||||
C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
|
C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
|
||||||
echo c1-convex-bsd
|
echo c1-convex-bsd
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -685,9 +708,6 @@ EOF
|
|||||||
C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
|
C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
|
||||||
echo c4-convex-bsd
|
echo c4-convex-bsd
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
CRAY*X-MP:*:*:*)
|
|
||||||
echo xmp-cray-unicos
|
|
||||||
exit 0 ;;
|
|
||||||
CRAY*Y-MP:*:*:*)
|
CRAY*Y-MP:*:*:*)
|
||||||
echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -709,18 +729,12 @@ EOF
|
|||||||
CRAY*SV1:*:*:*)
|
CRAY*SV1:*:*:*)
|
||||||
echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
CRAY-2:*:*:*)
|
|
||||||
echo cray2-cray-unicos
|
|
||||||
exit 0 ;;
|
|
||||||
F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
|
F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
|
||||||
FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
|
FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
|
||||||
FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
|
FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
|
||||||
FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
|
FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
|
||||||
echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
|
echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
hp300:OpenBSD:*:*)
|
|
||||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
|
i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
|
||||||
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
|
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -731,10 +745,19 @@ EOF
|
|||||||
echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
|
echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
*:FreeBSD:*:*)
|
*:FreeBSD:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
|
# Determine whether the default compiler uses glibc.
|
||||||
exit 0 ;;
|
eval $set_cc_for_build
|
||||||
*:OpenBSD:*:*)
|
sed 's/^ //' << EOF >$dummy.c
|
||||||
echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
#include <features.h>
|
||||||
|
#if __GLIBC__ >= 2
|
||||||
|
LIBC=gnu
|
||||||
|
#else
|
||||||
|
LIBC=
|
||||||
|
#endif
|
||||||
|
EOF
|
||||||
|
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
|
||||||
|
rm -f $dummy.c && rmdir $tmpdir
|
||||||
|
echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
i*:CYGWIN*:*)
|
i*:CYGWIN*:*)
|
||||||
echo ${UNAME_MACHINE}-pc-cygwin
|
echo ${UNAME_MACHINE}-pc-cygwin
|
||||||
@@ -745,6 +768,9 @@ EOF
|
|||||||
i*:PW*:*)
|
i*:PW*:*)
|
||||||
echo ${UNAME_MACHINE}-pc-pw32
|
echo ${UNAME_MACHINE}-pc-pw32
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
x86:Interix*:3*)
|
||||||
|
echo i386-pc-interix3
|
||||||
|
exit 0 ;;
|
||||||
i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
|
i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
|
||||||
# How do we know it's Interix rather than the generic POSIX subsystem?
|
# How do we know it's Interix rather than the generic POSIX subsystem?
|
||||||
# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
|
# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
|
||||||
@@ -770,16 +796,30 @@ EOF
|
|||||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
ia64:Linux:*:*)
|
ia64:Linux:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-linux
|
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
m68*:Linux:*:*)
|
m68*:Linux:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
mips:Linux:*:*)
|
mips:Linux:*:*)
|
||||||
case `sed -n '/^byte/s/^.*: \(.*\) endian/\1/p' < /proc/cpuinfo` in
|
eval $set_cc_for_build
|
||||||
big) echo mips-unknown-linux-gnu && exit 0 ;;
|
sed 's/^ //' << EOF >$dummy.c
|
||||||
little) echo mipsel-unknown-linux-gnu && exit 0 ;;
|
#undef CPU
|
||||||
esac
|
#undef mips
|
||||||
|
#undef mipsel
|
||||||
|
#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
|
||||||
|
CPU=mipsel
|
||||||
|
#else
|
||||||
|
#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
|
||||||
|
CPU=mips
|
||||||
|
#else
|
||||||
|
CPU=
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
EOF
|
||||||
|
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
|
||||||
|
rm -f $dummy.c && rmdir $tmpdir
|
||||||
|
test x"${CPU}" != x && echo "${CPU}-pc-linux-gnu" && exit 0
|
||||||
;;
|
;;
|
||||||
ppc:Linux:*:*)
|
ppc:Linux:*:*)
|
||||||
echo powerpc-unknown-linux-gnu
|
echo powerpc-unknown-linux-gnu
|
||||||
@@ -828,7 +868,8 @@ EOF
|
|||||||
# The BFD linker knows what the default object file format is, so
|
# The BFD linker knows what the default object file format is, so
|
||||||
# first see if it will tell us. cd to the root directory to prevent
|
# first see if it will tell us. cd to the root directory to prevent
|
||||||
# problems with other programs or directories called `ld' in the path.
|
# problems with other programs or directories called `ld' in the path.
|
||||||
ld_supported_targets=`cd /; ld --help 2>&1 \
|
# Set LC_ALL=C to ensure ld outputs messages in English.
|
||||||
|
ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
|
||||||
| sed -ne '/supported targets:/!d
|
| sed -ne '/supported targets:/!d
|
||||||
s/[ ][ ]*/ /g
|
s/[ ][ ]*/ /g
|
||||||
s/.*supported targets: *//
|
s/.*supported targets: *//
|
||||||
@@ -852,32 +893,29 @@ EOF
|
|||||||
esac
|
esac
|
||||||
# Determine whether the default compiler is a.out or elf
|
# Determine whether the default compiler is a.out or elf
|
||||||
eval $set_cc_for_build
|
eval $set_cc_for_build
|
||||||
cat >$dummy.c <<EOF
|
sed 's/^ //' << EOF >$dummy.c
|
||||||
#include <features.h>
|
#include <features.h>
|
||||||
#ifdef __cplusplus
|
#ifdef __ELF__
|
||||||
#include <stdio.h> /* for printf() prototype */
|
# ifdef __GLIBC__
|
||||||
int main (int argc, char *argv[]) {
|
# if __GLIBC__ >= 2
|
||||||
#else
|
LIBC=gnu
|
||||||
int main (argc, argv) int argc; char *argv[]; {
|
# else
|
||||||
#endif
|
LIBC=gnulibc1
|
||||||
#ifdef __ELF__
|
# endif
|
||||||
# ifdef __GLIBC__
|
# else
|
||||||
# if __GLIBC__ >= 2
|
LIBC=gnulibc1
|
||||||
printf ("%s-pc-linux-gnu\n", argv[1]);
|
# endif
|
||||||
# else
|
#else
|
||||||
printf ("%s-pc-linux-gnulibc1\n", argv[1]);
|
#ifdef __INTEL_COMPILER
|
||||||
# endif
|
LIBC=gnu
|
||||||
# else
|
#else
|
||||||
printf ("%s-pc-linux-gnulibc1\n", argv[1]);
|
LIBC=gnuaout
|
||||||
# endif
|
#endif
|
||||||
#else
|
#endif
|
||||||
printf ("%s-pc-linux-gnuaout\n", argv[1]);
|
|
||||||
#endif
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
EOF
|
EOF
|
||||||
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0
|
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
|
||||||
rm -f $dummy.c $dummy
|
rm -f $dummy.c && rmdir $tmpdir
|
||||||
|
test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
|
||||||
test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
|
test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
|
||||||
;;
|
;;
|
||||||
i*86:DYNIX/ptx:4*:*)
|
i*86:DYNIX/ptx:4*:*)
|
||||||
@@ -915,13 +953,13 @@ EOF
|
|||||||
UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
|
UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
|
||||||
echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
|
echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
|
||||||
elif /bin/uname -X 2>/dev/null >/dev/null ; then
|
elif /bin/uname -X 2>/dev/null >/dev/null ; then
|
||||||
UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
|
UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
|
||||||
(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
|
(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
|
||||||
(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
|
(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
|
||||||
&& UNAME_MACHINE=i586
|
&& UNAME_MACHINE=i586
|
||||||
(/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \
|
(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
|
||||||
&& UNAME_MACHINE=i686
|
&& UNAME_MACHINE=i686
|
||||||
(/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \
|
(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
|
||||||
&& UNAME_MACHINE=i686
|
&& UNAME_MACHINE=i686
|
||||||
echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
|
echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
|
||||||
else
|
else
|
||||||
@@ -954,9 +992,12 @@ EOF
|
|||||||
# "miniframe"
|
# "miniframe"
|
||||||
echo m68010-convergent-sysv
|
echo m68010-convergent-sysv
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
mc68k:UNIX:SYSTEM5:3.51m)
|
||||||
|
echo m68k-convergent-sysv
|
||||||
|
exit 0 ;;
|
||||||
M68*:*:R3V[567]*:*)
|
M68*:*:R3V[567]*:*)
|
||||||
test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
|
test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
|
||||||
3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
|
3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0)
|
||||||
OS_REL=''
|
OS_REL=''
|
||||||
test -r /etc/.relid \
|
test -r /etc/.relid \
|
||||||
&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
|
&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
|
||||||
@@ -1047,6 +1088,9 @@ EOF
|
|||||||
SX-5:SUPER-UX:*:*)
|
SX-5:SUPER-UX:*:*)
|
||||||
echo sx5-nec-superux${UNAME_RELEASE}
|
echo sx5-nec-superux${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
SX-6:SUPER-UX:*:*)
|
||||||
|
echo sx6-nec-superux${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
Power*:Rhapsody:*:*)
|
Power*:Rhapsody:*:*)
|
||||||
echo powerpc-apple-rhapsody${UNAME_RELEASE}
|
echo powerpc-apple-rhapsody${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -1057,15 +1101,17 @@ EOF
|
|||||||
echo `uname -p`-apple-darwin${UNAME_RELEASE}
|
echo `uname -p`-apple-darwin${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
*:procnto*:*:* | *:QNX:[0123456789]*:*)
|
*:procnto*:*:* | *:QNX:[0123456789]*:*)
|
||||||
if test "${UNAME_MACHINE}" = "x86pc"; then
|
UNAME_PROCESSOR=`uname -p`
|
||||||
|
if test "$UNAME_PROCESSOR" = "x86"; then
|
||||||
|
UNAME_PROCESSOR=i386
|
||||||
UNAME_MACHINE=pc
|
UNAME_MACHINE=pc
|
||||||
fi
|
fi
|
||||||
echo `uname -p`-${UNAME_MACHINE}-nto-qnx
|
echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
*:QNX:*:4*)
|
*:QNX:*:4*)
|
||||||
echo i386-pc-qnx
|
echo i386-pc-qnx
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
NSR-[KW]:NONSTOP_KERNEL:*:*)
|
NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*)
|
||||||
echo nsr-tandem-nsk${UNAME_RELEASE}
|
echo nsr-tandem-nsk${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
*:NonStop-UX:*:*)
|
*:NonStop-UX:*:*)
|
||||||
@@ -1237,8 +1283,8 @@ main ()
|
|||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0
|
$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0
|
||||||
rm -f $dummy.c $dummy
|
rm -f $dummy.c $dummy && rmdir $tmpdir
|
||||||
|
|
||||||
# Apollos put the system type in the environment.
|
# Apollos put the system type in the environment.
|
||||||
|
|
||||||
|
219
config.sub
vendored
219
config.sub
vendored
@@ -1,9 +1,9 @@
|
|||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Configuration validation subroutine script.
|
# Configuration validation subroutine script.
|
||||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
|
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||||
# Free Software Foundation, Inc.
|
# 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
timestamp='2001-09-07'
|
timestamp='2002-09-05'
|
||||||
|
|
||||||
# This file is (in principle) common to ALL GNU software.
|
# This file is (in principle) common to ALL GNU software.
|
||||||
# The presence of a machine in this file suggests that SOME GNU software
|
# The presence of a machine in this file suggests that SOME GNU software
|
||||||
@@ -29,7 +29,8 @@ timestamp='2001-09-07'
|
|||||||
# configuration script generated by Autoconf, you may include it under
|
# configuration script generated by Autoconf, you may include it under
|
||||||
# the same distribution terms that you use for the rest of that program.
|
# the same distribution terms that you use for the rest of that program.
|
||||||
|
|
||||||
# Please send patches to <config-patches@gnu.org>.
|
# Please send patches to <config-patches@gnu.org>. Submit a context
|
||||||
|
# diff and a properly formatted ChangeLog entry.
|
||||||
#
|
#
|
||||||
# Configuration subroutine to validate and canonicalize a configuration type.
|
# Configuration subroutine to validate and canonicalize a configuration type.
|
||||||
# Supply the specified configuration type as an argument.
|
# Supply the specified configuration type as an argument.
|
||||||
@@ -117,7 +118,7 @@ esac
|
|||||||
# Here we must recognize all the valid KERNEL-OS combinations.
|
# Here we must recognize all the valid KERNEL-OS combinations.
|
||||||
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
||||||
case $maybe_os in
|
case $maybe_os in
|
||||||
nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-*)
|
nto-qnx* | linux-gnu* | freebsd*-gnu* | storm-chaos* | os2-emx* | windows32-* | rtmk-nova*)
|
||||||
os=-$maybe_os
|
os=-$maybe_os
|
||||||
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
|
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
|
||||||
;;
|
;;
|
||||||
@@ -226,32 +227,42 @@ case $basic_machine in
|
|||||||
1750a | 580 \
|
1750a | 580 \
|
||||||
| a29k \
|
| a29k \
|
||||||
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
|
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
|
||||||
|
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
|
||||||
| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
|
| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
|
||||||
| c4x | clipper \
|
| clipper \
|
||||||
| d10v | d30v | dsp16xx \
|
| d10v | d30v | dlx | dsp16xx \
|
||||||
| fr30 \
|
| fr30 | frv \
|
||||||
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
|
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
|
||||||
| i370 | i860 | i960 | ia64 \
|
| i370 | i860 | i960 | ia64 \
|
||||||
|
| ip2k \
|
||||||
| m32r | m68000 | m68k | m88k | mcore \
|
| m32r | m68000 | m68k | m88k | mcore \
|
||||||
| mips16 | mips64 | mips64el | mips64orion | mips64orionel \
|
| mips | mipsbe | mipseb | mipsel | mipsle \
|
||||||
| mips64vr4100 | mips64vr4100el | mips64vr4300 \
|
| mips16 \
|
||||||
| mips64vr4300el | mips64vr5000 | mips64vr5000el \
|
| mips64 | mips64el \
|
||||||
| mipsbe | mipseb | mipsel | mipsle | mipstx39 | mipstx39el \
|
| mips64vr | mips64vrel \
|
||||||
| mipsisa32 \
|
| mips64orion | mips64orionel \
|
||||||
|
| mips64vr4100 | mips64vr4100el \
|
||||||
|
| mips64vr4300 | mips64vr4300el \
|
||||||
|
| mips64vr5000 | mips64vr5000el \
|
||||||
|
| mipsisa32 | mipsisa32el \
|
||||||
|
| mipsisa64 | mipsisa64el \
|
||||||
|
| mipsisa64sb1 | mipsisa64sb1el \
|
||||||
|
| mipsisa64sr71k | mipsisa64sr71kel \
|
||||||
|
| mipstx39 | mipstx39el \
|
||||||
| mn10200 | mn10300 \
|
| mn10200 | mn10300 \
|
||||||
| ns16k | ns32k \
|
| ns16k | ns32k \
|
||||||
| openrisc \
|
| openrisc | or32 \
|
||||||
| pdp10 | pdp11 | pj | pjl \
|
| pdp10 | pdp11 | pj | pjl \
|
||||||
| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
|
| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
|
||||||
| pyramid \
|
| pyramid \
|
||||||
| s390 | s390x \
|
| sh | sh[1234] | sh3e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
|
||||||
| sh | sh[34] | sh[34]eb | shbe | shle \
|
| sh64 | sh64le \
|
||||||
| sparc | sparc64 | sparclet | sparclite | sparcv9 | sparcv9b \
|
| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
|
||||||
| stormy16 | strongarm \
|
| strongarm \
|
||||||
| tahoe | thumb | tic80 | tron \
|
| tahoe | thumb | tic80 | tron \
|
||||||
| v850 \
|
| v850 | v850e \
|
||||||
| we32k \
|
| we32k \
|
||||||
| x86 | xscale \
|
| x86 | xscale | xstormy16 | xtensa \
|
||||||
| z8k)
|
| z8k)
|
||||||
basic_machine=$basic_machine-unknown
|
basic_machine=$basic_machine-unknown
|
||||||
;;
|
;;
|
||||||
@@ -278,38 +289,51 @@ case $basic_machine in
|
|||||||
580-* \
|
580-* \
|
||||||
| a29k-* \
|
| a29k-* \
|
||||||
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
|
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
|
||||||
| alphapca5[67]-* | arc-* \
|
| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
|
||||||
| arm-* | armbe-* | armle-* | armv*-* \
|
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
|
||||||
|
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
|
||||||
|
| avr-* \
|
||||||
| bs2000-* \
|
| bs2000-* \
|
||||||
| c[123]* | c30-* | [cjt]90-* | c54x-* \
|
| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* \
|
||||||
| clipper-* | cray2-* | cydra-* \
|
| clipper-* | cydra-* \
|
||||||
| d10v-* | d30v-* \
|
| d10v-* | d30v-* | dlx-* \
|
||||||
| elxsi-* \
|
| elxsi-* \
|
||||||
| f30[01]-* | f700-* | fr30-* | fx80-* \
|
| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
|
||||||
| h8300-* | h8500-* \
|
| h8300-* | h8500-* \
|
||||||
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
|
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
|
||||||
| i*86-* | i860-* | i960-* | ia64-* \
|
| i*86-* | i860-* | i960-* | ia64-* \
|
||||||
|
| ip2k-* \
|
||||||
| m32r-* \
|
| m32r-* \
|
||||||
| m68000-* | m680[01234]0-* | m68360-* | m683?2-* | m68k-* \
|
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
|
||||||
| m88110-* | m88k-* | mcore-* \
|
| m88110-* | m88k-* | mcore-* \
|
||||||
| mips-* | mips16-* | mips64-* | mips64el-* | mips64orion-* \
|
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
|
||||||
| mips64orionel-* | mips64vr4100-* | mips64vr4100el-* \
|
| mips16-* \
|
||||||
| mips64vr4300-* | mips64vr4300el-* | mipsbe-* | mipseb-* \
|
| mips64-* | mips64el-* \
|
||||||
| mipsle-* | mipsel-* | mipstx39-* | mipstx39el-* \
|
| mips64vr-* | mips64vrel-* \
|
||||||
|
| mips64orion-* | mips64orionel-* \
|
||||||
|
| mips64vr4100-* | mips64vr4100el-* \
|
||||||
|
| mips64vr4300-* | mips64vr4300el-* \
|
||||||
|
| mips64vr5000-* | mips64vr5000el-* \
|
||||||
|
| mipsisa32-* | mipsisa32el-* \
|
||||||
|
| mipsisa64-* | mipsisa64el-* \
|
||||||
|
| mipsisa64sb1-* | mipsisa64sb1el-* \
|
||||||
|
| mipsisa64sr71k-* | mipsisa64sr71kel-* \
|
||||||
|
| mipstx39 | mipstx39el \
|
||||||
| none-* | np1-* | ns16k-* | ns32k-* \
|
| none-* | np1-* | ns16k-* | ns32k-* \
|
||||||
| orion-* \
|
| orion-* \
|
||||||
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
|
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
|
||||||
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
|
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
|
||||||
| pyramid-* \
|
| pyramid-* \
|
||||||
| romp-* | rs6000-* \
|
| romp-* | rs6000-* \
|
||||||
| s390-* | s390x-* \
|
| sh-* | sh[1234]-* | sh3e-* | sh[34]eb-* | shbe-* \
|
||||||
| sh-* | sh[34]-* | sh[34]eb-* | shbe-* | shle-* \
|
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
|
||||||
| sparc-* | sparc64-* | sparc86x-* | sparclite-* \
|
| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
|
||||||
| sparcv9-* | sparcv9b-* | stormy16-* | strongarm-* | sv1-* \
|
| sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
|
||||||
| t3e-* | tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \
|
| tahoe-* | thumb-* | tic30-* | tic4x-* | tic54x-* | tic80-* | tron-* \
|
||||||
| v850-* | vax-* \
|
| v850-* | v850e-* | vax-* \
|
||||||
| we32k-* \
|
| we32k-* \
|
||||||
| x86-* | x86_64-* | xmp-* | xps100-* | xscale-* \
|
| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
|
||||||
|
| xtensa-* \
|
||||||
| ymp-* \
|
| ymp-* \
|
||||||
| z8k-*)
|
| z8k-*)
|
||||||
;;
|
;;
|
||||||
@@ -374,6 +398,10 @@ case $basic_machine in
|
|||||||
basic_machine=ns32k-sequent
|
basic_machine=ns32k-sequent
|
||||||
os=-dynix
|
os=-dynix
|
||||||
;;
|
;;
|
||||||
|
c90)
|
||||||
|
basic_machine=c90-cray
|
||||||
|
os=-unicos
|
||||||
|
;;
|
||||||
convex-c1)
|
convex-c1)
|
||||||
basic_machine=c1-convex
|
basic_machine=c1-convex
|
||||||
os=-bsd
|
os=-bsd
|
||||||
@@ -394,16 +422,8 @@ case $basic_machine in
|
|||||||
basic_machine=c38-convex
|
basic_machine=c38-convex
|
||||||
os=-bsd
|
os=-bsd
|
||||||
;;
|
;;
|
||||||
cray | ymp)
|
cray | j90)
|
||||||
basic_machine=ymp-cray
|
basic_machine=j90-cray
|
||||||
os=-unicos
|
|
||||||
;;
|
|
||||||
cray2)
|
|
||||||
basic_machine=cray2-cray
|
|
||||||
os=-unicos
|
|
||||||
;;
|
|
||||||
[cjt]90)
|
|
||||||
basic_machine=${basic_machine}-cray
|
|
||||||
os=-unicos
|
os=-unicos
|
||||||
;;
|
;;
|
||||||
crds | unos)
|
crds | unos)
|
||||||
@@ -418,6 +438,14 @@ case $basic_machine in
|
|||||||
decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
|
decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
|
||||||
basic_machine=mips-dec
|
basic_machine=mips-dec
|
||||||
;;
|
;;
|
||||||
|
decsystem10* | dec10*)
|
||||||
|
basic_machine=pdp10-dec
|
||||||
|
os=-tops10
|
||||||
|
;;
|
||||||
|
decsystem20* | dec20*)
|
||||||
|
basic_machine=pdp10-dec
|
||||||
|
os=-tops20
|
||||||
|
;;
|
||||||
delta | 3300 | motorola-3300 | motorola-delta \
|
delta | 3300 | motorola-3300 | motorola-delta \
|
||||||
| 3300-motorola | delta-motorola)
|
| 3300-motorola | delta-motorola)
|
||||||
basic_machine=m68k-motorola
|
basic_machine=m68k-motorola
|
||||||
@@ -598,14 +626,6 @@ case $basic_machine in
|
|||||||
basic_machine=m68k-atari
|
basic_machine=m68k-atari
|
||||||
os=-mint
|
os=-mint
|
||||||
;;
|
;;
|
||||||
mipsel*-linux*)
|
|
||||||
basic_machine=mipsel-unknown
|
|
||||||
os=-linux-gnu
|
|
||||||
;;
|
|
||||||
mips*-linux*)
|
|
||||||
basic_machine=mips-unknown
|
|
||||||
os=-linux-gnu
|
|
||||||
;;
|
|
||||||
mips3*-*)
|
mips3*-*)
|
||||||
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
|
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
|
||||||
;;
|
;;
|
||||||
@@ -620,6 +640,10 @@ case $basic_machine in
|
|||||||
basic_machine=m68k-rom68k
|
basic_machine=m68k-rom68k
|
||||||
os=-coff
|
os=-coff
|
||||||
;;
|
;;
|
||||||
|
morphos)
|
||||||
|
basic_machine=powerpc-unknown
|
||||||
|
os=-morphos
|
||||||
|
;;
|
||||||
msdos)
|
msdos)
|
||||||
basic_machine=i386-pc
|
basic_machine=i386-pc
|
||||||
os=-msdos
|
os=-msdos
|
||||||
@@ -699,6 +723,10 @@ case $basic_machine in
|
|||||||
basic_machine=hppa1.1-oki
|
basic_machine=hppa1.1-oki
|
||||||
os=-proelf
|
os=-proelf
|
||||||
;;
|
;;
|
||||||
|
or32 | or32-*)
|
||||||
|
basic_machine=or32-unknown
|
||||||
|
os=-coff
|
||||||
|
;;
|
||||||
OSE68000 | ose68000)
|
OSE68000 | ose68000)
|
||||||
basic_machine=m68000-ericsson
|
basic_machine=m68000-ericsson
|
||||||
os=-ose
|
os=-ose
|
||||||
@@ -724,16 +752,16 @@ case $basic_machine in
|
|||||||
pc532 | pc532-*)
|
pc532 | pc532-*)
|
||||||
basic_machine=ns32k-pc532
|
basic_machine=ns32k-pc532
|
||||||
;;
|
;;
|
||||||
pentium | p5 | k5 | k6 | nexgen)
|
pentium | p5 | k5 | k6 | nexgen | viac3)
|
||||||
basic_machine=i586-pc
|
basic_machine=i586-pc
|
||||||
;;
|
;;
|
||||||
pentiumpro | p6 | 6x86 | athlon)
|
pentiumpro | p6 | 6x86 | athlon | athlon_*)
|
||||||
basic_machine=i686-pc
|
basic_machine=i686-pc
|
||||||
;;
|
;;
|
||||||
pentiumii | pentium2)
|
pentiumii | pentium2)
|
||||||
basic_machine=i686-pc
|
basic_machine=i686-pc
|
||||||
;;
|
;;
|
||||||
pentium-* | p5-* | k5-* | k6-* | nexgen-*)
|
pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
|
||||||
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
|
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
;;
|
;;
|
||||||
pentiumpro-* | p6-* | 6x86-* | athlon-*)
|
pentiumpro-* | p6-* | 6x86-* | athlon-*)
|
||||||
@@ -784,10 +812,22 @@ case $basic_machine in
|
|||||||
rtpc | rtpc-*)
|
rtpc | rtpc-*)
|
||||||
basic_machine=romp-ibm
|
basic_machine=romp-ibm
|
||||||
;;
|
;;
|
||||||
|
s390 | s390-*)
|
||||||
|
basic_machine=s390-ibm
|
||||||
|
;;
|
||||||
|
s390x | s390x-*)
|
||||||
|
basic_machine=s390x-ibm
|
||||||
|
;;
|
||||||
sa29200)
|
sa29200)
|
||||||
basic_machine=a29k-amd
|
basic_machine=a29k-amd
|
||||||
os=-udi
|
os=-udi
|
||||||
;;
|
;;
|
||||||
|
sb1)
|
||||||
|
basic_machine=mipsisa64sb1-unknown
|
||||||
|
;;
|
||||||
|
sb1el)
|
||||||
|
basic_machine=mipsisa64sb1el-unknown
|
||||||
|
;;
|
||||||
sequent)
|
sequent)
|
||||||
basic_machine=i386-sequent
|
basic_machine=i386-sequent
|
||||||
;;
|
;;
|
||||||
@@ -795,7 +835,7 @@ case $basic_machine in
|
|||||||
basic_machine=sh-hitachi
|
basic_machine=sh-hitachi
|
||||||
os=-hms
|
os=-hms
|
||||||
;;
|
;;
|
||||||
sparclite-wrs)
|
sparclite-wrs | simso-wrs)
|
||||||
basic_machine=sparclite-wrs
|
basic_machine=sparclite-wrs
|
||||||
os=-vxworks
|
os=-vxworks
|
||||||
;;
|
;;
|
||||||
@@ -861,10 +901,22 @@ case $basic_machine in
|
|||||||
basic_machine=i386-sequent
|
basic_machine=i386-sequent
|
||||||
os=-dynix
|
os=-dynix
|
||||||
;;
|
;;
|
||||||
t3e)
|
t3d)
|
||||||
basic_machine=t3e-cray
|
basic_machine=alpha-cray
|
||||||
os=-unicos
|
os=-unicos
|
||||||
;;
|
;;
|
||||||
|
t3e)
|
||||||
|
basic_machine=alphaev5-cray
|
||||||
|
os=-unicos
|
||||||
|
;;
|
||||||
|
t90)
|
||||||
|
basic_machine=t90-cray
|
||||||
|
os=-unicos
|
||||||
|
;;
|
||||||
|
tic4x | c4x*)
|
||||||
|
basic_machine=tic4x-unknown
|
||||||
|
os=-coff
|
||||||
|
;;
|
||||||
tic54x | c54x*)
|
tic54x | c54x*)
|
||||||
basic_machine=tic54x-unknown
|
basic_machine=tic54x-unknown
|
||||||
os=-coff
|
os=-coff
|
||||||
@@ -875,6 +927,10 @@ case $basic_machine in
|
|||||||
tx39el)
|
tx39el)
|
||||||
basic_machine=mipstx39el-unknown
|
basic_machine=mipstx39el-unknown
|
||||||
;;
|
;;
|
||||||
|
toad1)
|
||||||
|
basic_machine=pdp10-xkl
|
||||||
|
os=-tops20
|
||||||
|
;;
|
||||||
tower | tower-32)
|
tower | tower-32)
|
||||||
basic_machine=m68k-ncr
|
basic_machine=m68k-ncr
|
||||||
;;
|
;;
|
||||||
@@ -925,13 +981,13 @@ case $basic_machine in
|
|||||||
basic_machine=i386-pc
|
basic_machine=i386-pc
|
||||||
os=-windows32-msvcrt
|
os=-windows32-msvcrt
|
||||||
;;
|
;;
|
||||||
xmp)
|
|
||||||
basic_machine=xmp-cray
|
|
||||||
os=-unicos
|
|
||||||
;;
|
|
||||||
xps | xps100)
|
xps | xps100)
|
||||||
basic_machine=xps100-honeywell
|
basic_machine=xps100-honeywell
|
||||||
;;
|
;;
|
||||||
|
ymp)
|
||||||
|
basic_machine=ymp-cray
|
||||||
|
os=-unicos
|
||||||
|
;;
|
||||||
z8k-*-coff)
|
z8k-*-coff)
|
||||||
basic_machine=z8k-unknown
|
basic_machine=z8k-unknown
|
||||||
os=-sim
|
os=-sim
|
||||||
@@ -952,13 +1008,6 @@ case $basic_machine in
|
|||||||
op60c)
|
op60c)
|
||||||
basic_machine=hppa1.1-oki
|
basic_machine=hppa1.1-oki
|
||||||
;;
|
;;
|
||||||
mips)
|
|
||||||
if [ x$os = x-linux-gnu ]; then
|
|
||||||
basic_machine=mips-unknown
|
|
||||||
else
|
|
||||||
basic_machine=mips-mips
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
romp)
|
romp)
|
||||||
basic_machine=romp-ibm
|
basic_machine=romp-ibm
|
||||||
;;
|
;;
|
||||||
@@ -978,9 +1027,12 @@ case $basic_machine in
|
|||||||
we32k)
|
we32k)
|
||||||
basic_machine=we32k-att
|
basic_machine=we32k-att
|
||||||
;;
|
;;
|
||||||
sh3 | sh4 | sh3eb | sh4eb)
|
sh3 | sh4 | sh3eb | sh4eb | sh[1234]le | sh3ele)
|
||||||
basic_machine=sh-unknown
|
basic_machine=sh-unknown
|
||||||
;;
|
;;
|
||||||
|
sh64)
|
||||||
|
basic_machine=sh64-unknown
|
||||||
|
;;
|
||||||
sparc | sparcv9 | sparcv9b)
|
sparc | sparcv9 | sparcv9b)
|
||||||
basic_machine=sparc-sun
|
basic_machine=sparc-sun
|
||||||
;;
|
;;
|
||||||
@@ -999,10 +1051,6 @@ case $basic_machine in
|
|||||||
pmac | pmac-mpw)
|
pmac | pmac-mpw)
|
||||||
basic_machine=powerpc-apple
|
basic_machine=powerpc-apple
|
||||||
;;
|
;;
|
||||||
c4x*)
|
|
||||||
basic_machine=c4x-none
|
|
||||||
os=-coff
|
|
||||||
;;
|
|
||||||
*-unknown)
|
*-unknown)
|
||||||
# Make sure to match an already-canonicalized machine name.
|
# Make sure to match an already-canonicalized machine name.
|
||||||
;;
|
;;
|
||||||
@@ -1068,7 +1116,8 @@ case $os in
|
|||||||
| -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
|
| -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
|
||||||
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
|
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
|
||||||
| -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
|
| -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
|
||||||
| -os2* | -vos*)
|
| -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
|
||||||
|
| -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* | -powermax*)
|
||||||
# Remember, each alternative MUST END IN *, to match a version number.
|
# Remember, each alternative MUST END IN *, to match a version number.
|
||||||
;;
|
;;
|
||||||
-qnx*)
|
-qnx*)
|
||||||
@@ -1120,12 +1169,18 @@ case $os in
|
|||||||
-acis*)
|
-acis*)
|
||||||
os=-aos
|
os=-aos
|
||||||
;;
|
;;
|
||||||
|
-atheos*)
|
||||||
|
os=-atheos
|
||||||
|
;;
|
||||||
-386bsd)
|
-386bsd)
|
||||||
os=-bsd
|
os=-bsd
|
||||||
;;
|
;;
|
||||||
-ctix* | -uts*)
|
-ctix* | -uts*)
|
||||||
os=-sysv
|
os=-sysv
|
||||||
;;
|
;;
|
||||||
|
-nova*)
|
||||||
|
os=-rtmk-nova
|
||||||
|
;;
|
||||||
-ns2 )
|
-ns2 )
|
||||||
os=-nextstep2
|
os=-nextstep2
|
||||||
;;
|
;;
|
||||||
@@ -1200,6 +1255,7 @@ case $basic_machine in
|
|||||||
arm*-semi)
|
arm*-semi)
|
||||||
os=-aout
|
os=-aout
|
||||||
;;
|
;;
|
||||||
|
# This must come before the *-dec entry.
|
||||||
pdp10-*)
|
pdp10-*)
|
||||||
os=-tops20
|
os=-tops20
|
||||||
;;
|
;;
|
||||||
@@ -1230,6 +1286,9 @@ case $basic_machine in
|
|||||||
mips*-*)
|
mips*-*)
|
||||||
os=-elf
|
os=-elf
|
||||||
;;
|
;;
|
||||||
|
or32-*)
|
||||||
|
os=-coff
|
||||||
|
;;
|
||||||
*-tti) # must be before sparc entry or we get the wrong os.
|
*-tti) # must be before sparc entry or we get the wrong os.
|
||||||
os=-sysv3
|
os=-sysv3
|
||||||
;;
|
;;
|
||||||
@@ -1377,7 +1436,7 @@ case $basic_machine in
|
|||||||
-ptx*)
|
-ptx*)
|
||||||
vendor=sequent
|
vendor=sequent
|
||||||
;;
|
;;
|
||||||
-vxsim* | -vxworks*)
|
-vxsim* | -vxworks* | -windiss*)
|
||||||
vendor=wrs
|
vendor=wrs
|
||||||
;;
|
;;
|
||||||
-aux*)
|
-aux*)
|
||||||
|
@@ -5,18 +5,30 @@ dnl Ensure that this file is processed with autoconf 2.50 or newer
|
|||||||
dnl Don't even think about removing this check!
|
dnl Don't even think about removing this check!
|
||||||
AC_PREREQ(2.50)
|
AC_PREREQ(2.50)
|
||||||
|
|
||||||
dnl First some basic init macros
|
dnl We don't know the version number "staticly" so we use a dash here
|
||||||
AC_INIT
|
AC_INIT(curl, [-], [curl-bug@haxx.se])
|
||||||
|
|
||||||
|
dnl configure script copyright
|
||||||
|
AC_COPYRIGHT([Copyright (c) 1998 - 2003 Daniel Stenberg, <daniel@haxx.se>
|
||||||
|
This configure script may be copied, distributed and modified under the
|
||||||
|
terms of the curl license; see COPYING for more details])
|
||||||
|
|
||||||
AC_CONFIG_SRCDIR([lib/urldata.h])
|
AC_CONFIG_SRCDIR([lib/urldata.h])
|
||||||
AM_CONFIG_HEADER(lib/config.h src/config.h tests/server/config.h lib/ca-bundle.h)
|
AM_CONFIG_HEADER(lib/config.h src/config.h tests/server/config.h lib/ca-bundle.h)
|
||||||
|
AM_MAINTAINER_MODE
|
||||||
|
|
||||||
|
AC_PATH_PROG( SED, sed, , $PATH:/usr/bin:/usr/local/bin)
|
||||||
|
AC_SUBST(SED)
|
||||||
|
|
||||||
dnl figure out the libcurl version
|
dnl figure out the libcurl version
|
||||||
VERSION=`sed -ne 's/^#define LIBCURL_VERSION "\(.*\)"/\1/p' ${srcdir}/include/curl/curl.h`
|
VERSION=`$SED -ne 's/^#define LIBCURL_VERSION "\(.*\)"/\1/p' ${srcdir}/include/curl/curl.h`
|
||||||
AM_INIT_AUTOMAKE(curl,$VERSION)
|
AM_INIT_AUTOMAKE(curl,$VERSION)
|
||||||
|
AC_MSG_CHECKING([curl version])
|
||||||
|
AC_MSG_RESULT($VERSION)
|
||||||
|
|
||||||
dnl
|
dnl
|
||||||
dnl we extract the numerical version for curl-config only
|
dnl we extract the numerical version for curl-config only
|
||||||
VERSIONNUM=`sed -ne 's/^#define LIBCURL_VERSION_NUM 0x\(.*\)/\1/p' ${srcdir}/include/curl/curl.h`
|
VERSIONNUM=`$SED -ne 's/^#define LIBCURL_VERSION_NUM 0x\(.*\)/\1/p' ${srcdir}/include/curl/curl.h`
|
||||||
AC_SUBST(VERSIONNUM)
|
AC_SUBST(VERSIONNUM)
|
||||||
|
|
||||||
dnl Solaris pkgadd support definitions
|
dnl Solaris pkgadd support definitions
|
||||||
@@ -71,8 +83,8 @@ dnl switch off particular protocols
|
|||||||
dnl
|
dnl
|
||||||
AC_MSG_CHECKING([whether to support http])
|
AC_MSG_CHECKING([whether to support http])
|
||||||
AC_ARG_ENABLE(http,
|
AC_ARG_ENABLE(http,
|
||||||
[ --enable-http Enable HTTP support
|
AC_HELP_STRING([--enable-http],[Enable HTTP support])
|
||||||
--disable-http Disable HTTP support],
|
AC_HELP_STRING([--disable-http],[Disable HTTP support]),
|
||||||
[ case "$enableval" in
|
[ case "$enableval" in
|
||||||
no)
|
no)
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
@@ -89,8 +101,8 @@ AC_ARG_ENABLE(http,
|
|||||||
)
|
)
|
||||||
AC_MSG_CHECKING([whether to support ftp])
|
AC_MSG_CHECKING([whether to support ftp])
|
||||||
AC_ARG_ENABLE(ftp,
|
AC_ARG_ENABLE(ftp,
|
||||||
[ --enable-ftp Enable FTP support
|
AC_HELP_STRING([--enable-ftp],[Enable FTP support])
|
||||||
--disable-ftp Disable FTP support],
|
AC_HELP_STRING([--disable-ftp],[Disable FTP support]),
|
||||||
[ case "$enableval" in
|
[ case "$enableval" in
|
||||||
no)
|
no)
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
@@ -104,8 +116,8 @@ AC_ARG_ENABLE(ftp,
|
|||||||
)
|
)
|
||||||
AC_MSG_CHECKING([whether to support gopher])
|
AC_MSG_CHECKING([whether to support gopher])
|
||||||
AC_ARG_ENABLE(gopher,
|
AC_ARG_ENABLE(gopher,
|
||||||
[ --enable-gopher Enable GOPHER support
|
AC_HELP_STRING([--enable-gopher],[Enable GOPHER support])
|
||||||
--disable-gopher Disable GOPHER support],
|
AC_HELP_STRING([--disable-gopher],[Disable GOPHER support]),
|
||||||
[ case "$enableval" in
|
[ case "$enableval" in
|
||||||
no)
|
no)
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
@@ -119,8 +131,8 @@ AC_ARG_ENABLE(gopher,
|
|||||||
)
|
)
|
||||||
AC_MSG_CHECKING([whether to support file])
|
AC_MSG_CHECKING([whether to support file])
|
||||||
AC_ARG_ENABLE(file,
|
AC_ARG_ENABLE(file,
|
||||||
[ --enable-file Enable FILE support
|
AC_HELP_STRING([--enable-file],[Enable FILE support])
|
||||||
--disable-file Disable FILE support],
|
AC_HELP_STRING([--disable-file],[Disable FILE support]),
|
||||||
[ case "$enableval" in
|
[ case "$enableval" in
|
||||||
no)
|
no)
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
@@ -134,8 +146,8 @@ AC_ARG_ENABLE(file,
|
|||||||
)
|
)
|
||||||
AC_MSG_CHECKING([whether to support ldap])
|
AC_MSG_CHECKING([whether to support ldap])
|
||||||
AC_ARG_ENABLE(ldap,
|
AC_ARG_ENABLE(ldap,
|
||||||
[ --enable-ldap Enable LDAP support
|
AC_HELP_STRING([--enable-ldap],[Enable LDAP support])
|
||||||
--disable-ldap Disable LDAP support],
|
AC_HELP_STRING([--disable-ldap],[Disable LDAP support]),
|
||||||
[ case "$enableval" in
|
[ case "$enableval" in
|
||||||
no)
|
no)
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
@@ -149,12 +161,12 @@ AC_ARG_ENABLE(ldap,
|
|||||||
)
|
)
|
||||||
AC_MSG_CHECKING([whether to support dict])
|
AC_MSG_CHECKING([whether to support dict])
|
||||||
AC_ARG_ENABLE(dict,
|
AC_ARG_ENABLE(dict,
|
||||||
[ --enable-dict Enable DICT support
|
AC_HELP_STRING([--enable-dict],[Enable DICT support])
|
||||||
--disable-dict Disable DICT support],
|
AC_HELP_STRING([--disable-dict],[Disable DICT support]),
|
||||||
[ case "$enableval" in
|
[ case "$enableval" in
|
||||||
no)
|
no)
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
AC_DEFINE(CURL_DISABLE_DICT, 1 [to disable DICT])
|
AC_DEFINE(CURL_DISABLE_DICT, 1, [to disable DICT])
|
||||||
AC_SUBST(CURL_DISABLE_DICT)
|
AC_SUBST(CURL_DISABLE_DICT)
|
||||||
;;
|
;;
|
||||||
*) AC_MSG_RESULT(yes)
|
*) AC_MSG_RESULT(yes)
|
||||||
@@ -164,8 +176,8 @@ AC_ARG_ENABLE(dict,
|
|||||||
)
|
)
|
||||||
AC_MSG_CHECKING([whether to support telnet])
|
AC_MSG_CHECKING([whether to support telnet])
|
||||||
AC_ARG_ENABLE(telnet,
|
AC_ARG_ENABLE(telnet,
|
||||||
[ --enable-telnet Enable TELNET support
|
AC_HELP_STRING([--enable-telnet],[Enable TELNET support])
|
||||||
--disable-telnet Disable TELNET support],
|
AC_HELP_STRING([--disable-telnet],[Disable TELNET support]),
|
||||||
[ case "$enableval" in
|
[ case "$enableval" in
|
||||||
no)
|
no)
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
@@ -185,8 +197,8 @@ dnl **********************************************************************
|
|||||||
|
|
||||||
AC_MSG_CHECKING([whether to enable ipv6])
|
AC_MSG_CHECKING([whether to enable ipv6])
|
||||||
AC_ARG_ENABLE(ipv6,
|
AC_ARG_ENABLE(ipv6,
|
||||||
[ --enable-ipv6 Enable ipv6 (with ipv4) support
|
AC_HELP_STRING([--enable-ipv6],[Enable ipv6 (with ipv4) support])
|
||||||
--disable-ipv6 Disable ipv6 support],
|
AC_HELP_STRING([--disable-ipv6],[Disable ipv6 support]),
|
||||||
[ case "$enableval" in
|
[ case "$enableval" in
|
||||||
no)
|
no)
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
@@ -270,12 +282,26 @@ AC_CHECK_FUNC(connect, , [ AC_CHECK_LIB(socket, connect) ])
|
|||||||
dnl dl lib?
|
dnl dl lib?
|
||||||
AC_CHECK_FUNC(dlclose, , [ AC_CHECK_LIB(dl, dlopen) ])
|
AC_CHECK_FUNC(dlclose, , [ AC_CHECK_LIB(dl, dlopen) ])
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([whether to use libgcc])
|
||||||
|
AC_ARG_ENABLE(libgcc,
|
||||||
|
AC_HELP_STRING([--enable-libgcc],[use libgcc when linking]),
|
||||||
|
[ case "$enableval" in
|
||||||
|
yes)
|
||||||
|
LIBS="$LIBS -lgcc"
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
;;
|
||||||
|
*) AC_MSG_RESULT(no)
|
||||||
|
;;
|
||||||
|
esac ],
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
)
|
||||||
|
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
dnl Check how non-blocking sockets are set
|
dnl Check how non-blocking sockets are set
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
AC_ARG_ENABLE(nonblocking,
|
AC_ARG_ENABLE(nonblocking,
|
||||||
[ --enable-nonblocking Makes the script detect how to do it
|
AC_HELP_STRING([--enable-nonblocking],[Enable detecting how to do it])
|
||||||
--disable-nonblocking Makes the script disable non-blocking sockets],
|
AC_HELP_STRING([--disable-nonblocking],[Disable non-blocking socket detection]),
|
||||||
[
|
[
|
||||||
if test "$enableval" = "no" ; then
|
if test "$enableval" = "no" ; then
|
||||||
AC_MSG_WARN([non-blocking sockets disabled])
|
AC_MSG_WARN([non-blocking sockets disabled])
|
||||||
@@ -294,7 +320,8 @@ dnl Check for the random seed preferences
|
|||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
|
|
||||||
AC_ARG_WITH(egd-socket,
|
AC_ARG_WITH(egd-socket,
|
||||||
[ --with-egd-socket=FILE Entropy Gathering Daemon socket pathname],
|
AC_HELP_STRING([--with-egd-socket=FILE],
|
||||||
|
[Entropy Gathering Daemon socket pathname]),
|
||||||
[ EGD_SOCKET="$withval" ]
|
[ EGD_SOCKET="$withval" ]
|
||||||
)
|
)
|
||||||
if test -n "$EGD_SOCKET" ; then
|
if test -n "$EGD_SOCKET" ; then
|
||||||
@@ -304,7 +331,7 @@ fi
|
|||||||
|
|
||||||
dnl Check for user-specified random device
|
dnl Check for user-specified random device
|
||||||
AC_ARG_WITH(random,
|
AC_ARG_WITH(random,
|
||||||
[ --with-random=FILE read randomness from FILE (default=/dev/urandom)],
|
AC_HELP_STRING([--with-random=FILE],[read randomness from FILE (default=/dev/urandom)]),
|
||||||
[ RANDOM_FILE="$withval" ],
|
[ RANDOM_FILE="$withval" ],
|
||||||
[
|
[
|
||||||
dnl Check for random device
|
dnl Check for random device
|
||||||
@@ -317,19 +344,36 @@ if test -n "$RANDOM_FILE" ; then
|
|||||||
[a suitable file to read random data from])
|
[a suitable file to read random data from])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
dnl **********************************************************************
|
||||||
|
dnl Check if the operating system allows programs to write to their own argv[]
|
||||||
|
dnl **********************************************************************
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([if argv can be written to])
|
||||||
|
AC_TRY_RUN([
|
||||||
|
int main(int argc, char ** argv) {
|
||||||
|
argv[0][0] = ' ';
|
||||||
|
return (argv[0][0] == ' ')?0:1;
|
||||||
|
}
|
||||||
|
],
|
||||||
|
AC_DEFINE(HAVE_WRITABLE_ARGV, 1, [Define this symbol if your OS supports changing the contents of argv])
|
||||||
|
AC_MSG_RESULT(yes),
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
)
|
||||||
|
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
dnl Check for the presence of Kerberos4 libraries and headers
|
dnl Check for the presence of Kerberos4 libraries and headers
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
|
|
||||||
AC_ARG_WITH(krb4-includes,
|
AC_ARG_WITH(krb4-includes,
|
||||||
[ --with-krb4-includes[=DIR] Specify location of kerberos4 headers],[
|
AC_HELP_STRING([--with-krb4-includes=DIR],
|
||||||
|
[Specify location of kerberos4 headers]),[
|
||||||
CPPFLAGS="$CPPFLAGS -I$withval"
|
CPPFLAGS="$CPPFLAGS -I$withval"
|
||||||
KRB4INC="$withval"
|
KRB4INC="$withval"
|
||||||
want_krb4=yes
|
want_krb4=yes
|
||||||
])
|
])
|
||||||
|
|
||||||
AC_ARG_WITH(krb4-libs,
|
AC_ARG_WITH(krb4-libs,
|
||||||
[ --with-krb4-libs[=DIR] Specify location of kerberos4 libs],[
|
AC_HELP_STRING([--with-krb4-libs=DIR],[Specify location of kerberos4 libs]),[
|
||||||
LDFLAGS="$LDFLAGS -L$withval"
|
LDFLAGS="$LDFLAGS -L$withval"
|
||||||
KRB4LIB="$withval"
|
KRB4LIB="$withval"
|
||||||
want_krb4=yes
|
want_krb4=yes
|
||||||
@@ -338,7 +382,7 @@ AC_ARG_WITH(krb4-libs,
|
|||||||
|
|
||||||
OPT_KRB4=off
|
OPT_KRB4=off
|
||||||
AC_ARG_WITH(krb4,dnl
|
AC_ARG_WITH(krb4,dnl
|
||||||
[ --with-krb4[=DIR] where to look for Kerberos4],[
|
AC_HELP_STRING([--with-krb4=DIR],[where to look for Kerberos4]),[
|
||||||
OPT_KRB4="$withval"
|
OPT_KRB4="$withval"
|
||||||
if test X"$OPT_KRB4" != Xyes
|
if test X"$OPT_KRB4" != Xyes
|
||||||
then
|
then
|
||||||
@@ -408,6 +452,31 @@ else
|
|||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
dnl Detect the pkg-config tool, as it may have extra info about the
|
||||||
|
dnl openssl installation we can use. I *believe* this is what we are
|
||||||
|
dnl expected to do on really recent Redhat Linux hosts.
|
||||||
|
AC_PATH_PROG( PKGCONFIG, pkg-config, no, $PATH:/usr/bin:/usr/local/bin)
|
||||||
|
if test "$PKGCONFIG" != "no" ; then
|
||||||
|
AC_MSG_CHECKING([for OpenSSL options using pkg-config])
|
||||||
|
|
||||||
|
$PKGCONFIG --exists openssl
|
||||||
|
SSL_EXISTS=$?
|
||||||
|
|
||||||
|
if test "$SSL_EXISTS" -eq "0"; then
|
||||||
|
SSL_LIBS=`$PKGCONFIG --libs-only-l openssl 2>/dev/null`
|
||||||
|
SSL_LDFLAGS=`$PKGCONFIG --libs-only-L openssl 2>/dev/null`
|
||||||
|
SSL_CPPFLAGS=`$PKGCONFIG --cflags-only-I openssl 2>/dev/null`
|
||||||
|
|
||||||
|
LIBS="$LIBS $SSL_LIBS"
|
||||||
|
CPPFLAGS="$CPPFLAGS $SSL_CPPFLAGS"
|
||||||
|
LDFLAGS="$LDFLAGS $SSL_LDFLAGS"
|
||||||
|
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
dnl Check for the presence of SSL libraries and headers
|
dnl Check for the presence of SSL libraries and headers
|
||||||
@@ -416,7 +485,7 @@ dnl **********************************************************************
|
|||||||
dnl Default to compiler & linker defaults for SSL files & libraries.
|
dnl Default to compiler & linker defaults for SSL files & libraries.
|
||||||
OPT_SSL=off
|
OPT_SSL=off
|
||||||
AC_ARG_WITH(ssl,dnl
|
AC_ARG_WITH(ssl,dnl
|
||||||
AC_HELP_STRING([--with-ssl=PATH], [where to look for SSL, PATH points to the SSL installation (default: /usr/local/ssl)])
|
AC_HELP_STRING([--with-ssl=PATH],[where to look for SSL, PATH points to the SSL installation (default: /usr/local/ssl)])
|
||||||
AC_HELP_STRING([--without-ssl], [disable SSL]),
|
AC_HELP_STRING([--without-ssl], [disable SSL]),
|
||||||
OPT_SSL=$withval)
|
OPT_SSL=$withval)
|
||||||
|
|
||||||
@@ -524,8 +593,8 @@ _cppflags=$CPPFLAGS
|
|||||||
_ldflags=$LDFLAGS
|
_ldflags=$LDFLAGS
|
||||||
OPT_ZLIB="/usr/local"
|
OPT_ZLIB="/usr/local"
|
||||||
AC_ARG_WITH(zlib,
|
AC_ARG_WITH(zlib,
|
||||||
AC_HELP_STRING([--with-zlib=PATH], [search for zlib in PATH])
|
AC_HELP_STRING([--with-zlib=PATH],[search for zlib in PATH])
|
||||||
AC_HELP_STRING([--without-zlib], [disable use of zlib]),
|
AC_HELP_STRING([--without-zlib],[disable use of zlib]),
|
||||||
[OPT_ZLIB="$withval"])
|
[OPT_ZLIB="$withval"])
|
||||||
|
|
||||||
case "$OPT_ZLIB" in
|
case "$OPT_ZLIB" in
|
||||||
@@ -543,8 +612,7 @@ case "$OPT_ZLIB" in
|
|||||||
|
|
||||||
AC_CHECK_HEADER(zlib.h,[
|
AC_CHECK_HEADER(zlib.h,[
|
||||||
AC_CHECK_LIB(z, gzread,
|
AC_CHECK_LIB(z, gzread,
|
||||||
[AM_CONDITIONAL(CONTENT_ENCODING, true)
|
[HAVE_LIBZ="1"
|
||||||
HAVE_LIBZ="1"
|
|
||||||
AC_SUBST(HAVE_LIBZ)
|
AC_SUBST(HAVE_LIBZ)
|
||||||
LIBS="$LIBS -lz"
|
LIBS="$LIBS -lz"
|
||||||
AC_DEFINE(HAVE_ZLIB_H, 1, [if you have the zlib.h header file])
|
AC_DEFINE(HAVE_ZLIB_H, 1, [if you have the zlib.h header file])
|
||||||
@@ -559,14 +627,30 @@ esac
|
|||||||
|
|
||||||
dnl Default is to try the thread-safe versions of a few functions
|
dnl Default is to try the thread-safe versions of a few functions
|
||||||
OPT_THREAD=on
|
OPT_THREAD=on
|
||||||
|
|
||||||
|
dnl detect AIX 4.3 or later
|
||||||
|
dnl see full docs on this reasoning in the lib/hostip.c source file
|
||||||
|
AC_MSG_CHECKING([AIX 4.3 or later])
|
||||||
|
AC_PREPROC_IFELSE([
|
||||||
|
#if defined(_AIX) && defined(_AIX43)
|
||||||
|
printf("just fine");
|
||||||
|
#else
|
||||||
|
#error "this is not AIX 4.3 or later"
|
||||||
|
#endif
|
||||||
|
],
|
||||||
|
[ AC_MSG_RESULT([yes])
|
||||||
|
OPT_THREAD=off ],
|
||||||
|
[ AC_MSG_RESULT([no]) ]
|
||||||
|
)
|
||||||
|
|
||||||
AC_ARG_ENABLE(thread,dnl
|
AC_ARG_ENABLE(thread,dnl
|
||||||
[ --disable-thread tell configure to not look for thread-safe functions],
|
AC_HELP_STRING([--disable-thread],[don't look for thread-safe functions]),
|
||||||
OPT_THREAD=off
|
OPT_THREAD=off
|
||||||
|
AC_MSG_WARN(libcurl will not get built using thread-safe functions)
|
||||||
)
|
)
|
||||||
|
|
||||||
if test X"$OPT_THREAD" = Xoff
|
if test X"$OPT_THREAD" = Xoff
|
||||||
then
|
then
|
||||||
AC_MSG_WARN(libcurl will not get built using thread-safe functions)
|
|
||||||
AC_DEFINE(DISABLED_THREADSAFE, 1, \
|
AC_DEFINE(DISABLED_THREADSAFE, 1, \
|
||||||
Set to explicitly specify we don't want to use thread-safe functions)
|
Set to explicitly specify we don't want to use thread-safe functions)
|
||||||
else
|
else
|
||||||
@@ -593,21 +677,23 @@ dnl **********************************************************************
|
|||||||
|
|
||||||
dnl Checks for header files.
|
dnl Checks for header files.
|
||||||
AC_HEADER_STDC
|
AC_HEADER_STDC
|
||||||
AC_CHECK_HEADERS( \
|
|
||||||
|
dnl First check for the very most basic headers. Then we can use these
|
||||||
|
dnl ones as default-headers when checking for the rest!
|
||||||
|
AC_CHECK_HEADERS(
|
||||||
|
sys/types.h \
|
||||||
|
sys/time.h \
|
||||||
|
sys/select.h \
|
||||||
|
sys/socket.h \
|
||||||
unistd.h \
|
unistd.h \
|
||||||
malloc.h \
|
malloc.h \
|
||||||
stdlib.h \
|
stdlib.h \
|
||||||
arpa/inet.h \
|
arpa/inet.h \
|
||||||
net/if.h \
|
net/if.h \
|
||||||
netinet/in.h \
|
netinet/in.h \
|
||||||
netinet/if_ether.h \
|
|
||||||
netdb.h \
|
netdb.h \
|
||||||
sys/select.h \
|
|
||||||
sys/socket.h \
|
|
||||||
sys/sockio.h \
|
sys/sockio.h \
|
||||||
sys/stat.h \
|
sys/stat.h \
|
||||||
sys/types.h \
|
|
||||||
sys/time.h \
|
|
||||||
sys/param.h \
|
sys/param.h \
|
||||||
termios.h \
|
termios.h \
|
||||||
termio.h \
|
termio.h \
|
||||||
@@ -622,7 +708,26 @@ AC_CHECK_HEADERS( \
|
|||||||
utime.h \
|
utime.h \
|
||||||
sys/utime.h \
|
sys/utime.h \
|
||||||
sys/poll.h \
|
sys/poll.h \
|
||||||
setjmp.h
|
setjmp.h,
|
||||||
|
dnl to do if not found
|
||||||
|
[],
|
||||||
|
dnl to do if found
|
||||||
|
[],
|
||||||
|
dnl default includes
|
||||||
|
[
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_TIME_H
|
||||||
|
#include <sys/time.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SELECT_H
|
||||||
|
#include <sys/select.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
dnl Checks for typedefs, structures, and compiler characteristics.
|
dnl Checks for typedefs, structures, and compiler characteristics.
|
||||||
@@ -643,6 +748,8 @@ AC_CHECK_TYPE(ssize_t, int)
|
|||||||
TYPE_SOCKLEN_T
|
TYPE_SOCKLEN_T
|
||||||
TYPE_IN_ADDR_T
|
TYPE_IN_ADDR_T
|
||||||
|
|
||||||
|
AC_FUNC_SELECT_ARGTYPES
|
||||||
|
|
||||||
dnl Checks for library functions.
|
dnl Checks for library functions.
|
||||||
dnl AC_PROG_GCC_TRADITIONAL
|
dnl AC_PROG_GCC_TRADITIONAL
|
||||||
AC_TYPE_SIGNAL
|
AC_TYPE_SIGNAL
|
||||||
@@ -675,7 +782,21 @@ AC_CHECK_FUNCS( socket \
|
|||||||
dlopen \
|
dlopen \
|
||||||
utime \
|
utime \
|
||||||
sigsetjmp \
|
sigsetjmp \
|
||||||
poll
|
poll,
|
||||||
|
dnl if found
|
||||||
|
[],
|
||||||
|
dnl if not found, $ac_func is the name we check for
|
||||||
|
func="$ac_func"
|
||||||
|
AC_MSG_CHECKING([deeper for $func])
|
||||||
|
AC_TRY_LINK( [],
|
||||||
|
[ $func ();],
|
||||||
|
AC_MSG_RESULT(yes!)
|
||||||
|
eval "ac_cv_func_$func=yes"
|
||||||
|
def=`echo "HAVE_$func" | tr 'a-z' 'A-Z'`
|
||||||
|
AC_DEFINE_UNQUOTED($def, 1, [If you have $func]),
|
||||||
|
AC_MSG_RESULT(but still no)
|
||||||
|
)
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
||||||
dnl sigsetjmp() might be a macro and no function so if it isn't found already
|
dnl sigsetjmp() might be a macro and no function so if it isn't found already
|
||||||
@@ -691,15 +812,6 @@ if test "$ac_cv_func_sigsetjmp" != "yes"; then
|
|||||||
)
|
)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl removed 'getpass' check on October 26, 2000
|
|
||||||
|
|
||||||
if test "$ac_cv_func_select" != "yes"; then
|
|
||||||
AC_MSG_ERROR(Can't work without an existing select() function)
|
|
||||||
fi
|
|
||||||
if test "$ac_cv_func_socket" != "yes"; then
|
|
||||||
AC_MSG_ERROR(Can't work without an existing socket() function)
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_PATH_PROG( PERL, perl, ,
|
AC_PATH_PROG( PERL, perl, ,
|
||||||
$PATH:/usr/local/bin/perl:/usr/bin/:/usr/local/bin )
|
$PATH:/usr/local/bin/perl:/usr/bin/:/usr/local/bin )
|
||||||
AC_SUBST(PERL)
|
AC_SUBST(PERL)
|
||||||
@@ -708,7 +820,6 @@ AC_PATH_PROGS( NROFF, gnroff nroff, ,
|
|||||||
$PATH:/usr/bin/:/usr/local/bin )
|
$PATH:/usr/bin/:/usr/local/bin )
|
||||||
AC_SUBST(NROFF)
|
AC_SUBST(NROFF)
|
||||||
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([CA cert bundle install path])
|
AC_MSG_CHECKING([CA cert bundle install path])
|
||||||
|
|
||||||
AC_ARG_WITH(ca-bundle,
|
AC_ARG_WITH(ca-bundle,
|
||||||
@@ -745,8 +856,8 @@ dnl lame option to switch on debug options
|
|||||||
dnl
|
dnl
|
||||||
AC_MSG_CHECKING([whether to enable debug options])
|
AC_MSG_CHECKING([whether to enable debug options])
|
||||||
AC_ARG_ENABLE(debug,
|
AC_ARG_ENABLE(debug,
|
||||||
[ --enable-debug Enable pedantic debug options
|
AC_HELP_STRING([--enable-debug],[Enable pedantic debug options])
|
||||||
--disable-debug Disable debug options],
|
AC_HELP_STRING([--disable-debug],[Disable debug options]),
|
||||||
[ case "$enableval" in
|
[ case "$enableval" in
|
||||||
no)
|
no)
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
@@ -756,10 +867,21 @@ AC_ARG_ENABLE(debug,
|
|||||||
CPPFLAGS="$CPPFLAGS -DMALLOCDEBUG"
|
CPPFLAGS="$CPPFLAGS -DMALLOCDEBUG"
|
||||||
CFLAGS="$CFLAGS -g"
|
CFLAGS="$CFLAGS -g"
|
||||||
if test "$GCC" = "yes"; then
|
if test "$GCC" = "yes"; then
|
||||||
CFLAGS="$CFLAGS -W -Wall -Wwrite-strings -pedantic -Wundef -Wpointer-arith -Wcast-align -Wnested-externs"
|
CFLAGS="$CFLAGS -W -Wall -Wwrite-strings -pedantic -Wundef -Wpointer-arith -Wnested-externs"
|
||||||
fi
|
fi
|
||||||
dnl strip off optimizer flags
|
dnl strip off optimizer flags
|
||||||
CFLAGS=`echo $CFLAGS | sed -e 's/-O[0-9 ]//g'`
|
NEWFLAGS=""
|
||||||
|
for flag in $CFLAGS; do
|
||||||
|
case "$flag" in
|
||||||
|
-O*)
|
||||||
|
dnl echo "cut off $flag"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
NEWFLAGS="$NEWFLAGS $flag"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
CFLAGS=$NEWFLAGS
|
||||||
;;
|
;;
|
||||||
esac ],
|
esac ],
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
@@ -776,6 +898,7 @@ AC_CONFIG_FILES([Makefile \
|
|||||||
tests/Makefile \
|
tests/Makefile \
|
||||||
tests/data/Makefile \
|
tests/data/Makefile \
|
||||||
tests/server/Makefile \
|
tests/server/Makefile \
|
||||||
|
tests/libtest/Makefile \
|
||||||
packages/Makefile \
|
packages/Makefile \
|
||||||
packages/Win32/Makefile \
|
packages/Win32/Makefile \
|
||||||
packages/Win32/cygwin/Makefile \
|
packages/Win32/cygwin/Makefile \
|
@@ -107,7 +107,11 @@ while test $# -gt 0; do
|
|||||||
;;
|
;;
|
||||||
|
|
||||||
--cflags)
|
--cflags)
|
||||||
echo -I@includedir@
|
if test "X@includedir@" = "X/usr/include"; then
|
||||||
|
echo ""
|
||||||
|
else
|
||||||
|
echo "-I@includedir@"
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
|
|
||||||
--libs)
|
--libs)
|
||||||
|
21
curl-mode.el
21
curl-mode.el
@@ -1,21 +0,0 @@
|
|||||||
;;;; Emacs Lisp help for writing curl code. ;;;;
|
|
||||||
|
|
||||||
;;; In C files, put something like this to load this file automatically:
|
|
||||||
;;
|
|
||||||
;; /* -----------------------------------------------------------------
|
|
||||||
;; * local variables:
|
|
||||||
;; * eval: (load-file "../curl-mode.el")
|
|
||||||
;; * end:
|
|
||||||
;; */
|
|
||||||
;;
|
|
||||||
;; (note: make sure to get the path right in the argument to load-file).
|
|
||||||
|
|
||||||
|
|
||||||
;;; The curl hacker's C conventions
|
|
||||||
|
|
||||||
;;; we use intent-level 2
|
|
||||||
(setq c-basic-offset 2)
|
|
||||||
;;; never ever use tabs to indent!
|
|
||||||
(setq indent-tabs-mode nil)
|
|
||||||
;;; I like this, stolen from Subversion! ;-)
|
|
||||||
(setq angry-mob-with-torches-and-pitchforks t)
|
|
50
curl-style.el
Normal file
50
curl-style.el
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
;;;; Emacs Lisp help for writing curl code. ;;;;
|
||||||
|
;;;; $Id$
|
||||||
|
|
||||||
|
;;; The curl hacker's C conventions.
|
||||||
|
|
||||||
|
;;; After loading this file and added the mode-hook you can in C
|
||||||
|
;;; files, put something like this to use the curl style
|
||||||
|
;;; automatically:
|
||||||
|
;;
|
||||||
|
;; /* -----------------------------------------------------------------
|
||||||
|
;; * local variables:
|
||||||
|
;; * eval: (set c-file-style "curl")
|
||||||
|
;; * end:
|
||||||
|
;; */
|
||||||
|
;;
|
||||||
|
|
||||||
|
(defconst curl-c-style
|
||||||
|
'((c-basic-offset . 2)
|
||||||
|
(c-comment-only-line-offset . 0)
|
||||||
|
(c-hanging-braces-alist . ((substatement-open before after)))
|
||||||
|
(c-offsets-alist . ((topmost-intro . 0)
|
||||||
|
(topmost-intro-cont . 0)
|
||||||
|
(substatement . +)
|
||||||
|
(substatement-open . 0)
|
||||||
|
(statement-case-intro . +)
|
||||||
|
(statement-case-open . 0)
|
||||||
|
(case-label . 0)
|
||||||
|
))
|
||||||
|
)
|
||||||
|
"Curl C Programming Style")
|
||||||
|
|
||||||
|
;; Customizations for all of c-mode, c++-mode, and objc-mode
|
||||||
|
(defun curl-c-mode-common-hook ()
|
||||||
|
"Curl C mode hook"
|
||||||
|
;; add curl style and set it for the current buffer
|
||||||
|
(c-add-style "curl" curl-c-style t)
|
||||||
|
(setq tab-width 8
|
||||||
|
indent-tabs-mode nil ; Use spaces. Not tabs.
|
||||||
|
comment-column 40
|
||||||
|
c-font-lock-extra-types (append '("bool" "CURL" "CURLcode" "ssize_t" "size_t" "socklen_t" "fd_set"))
|
||||||
|
)
|
||||||
|
;; keybindings for C, C++, and Objective-C. We can put these in
|
||||||
|
;; c-mode-base-map because of inheritance ...
|
||||||
|
(define-key c-mode-base-map "\M-q" 'c-fill-paragraph)
|
||||||
|
(setq c-recognize-knr-p nil)
|
||||||
|
)
|
||||||
|
|
||||||
|
;; Set this is in your .emacs if you want to use the c-mode-hook as
|
||||||
|
;; defined here right out of the box.
|
||||||
|
; (add-hook 'c-mode-common-hook 'curl-c-mode-common-hook)
|
11
docs/BUGS
11
docs/BUGS
@@ -8,7 +8,7 @@ $Id$
|
|||||||
BUGS
|
BUGS
|
||||||
|
|
||||||
Curl and libcurl have grown substantially since the beginning. At the time
|
Curl and libcurl have grown substantially since the beginning. At the time
|
||||||
of writing (end of April 2002), there are 32000 lines of source code, and by
|
of writing (end of March 2003), there are 35000 lines of source code, and by
|
||||||
the time you read this it has probably grown even more.
|
the time you read this it has probably grown even more.
|
||||||
|
|
||||||
Of course there are lots of bugs left. And lots of misfeatures.
|
Of course there are lots of bugs left. And lots of misfeatures.
|
||||||
@@ -19,18 +19,21 @@ BUGS
|
|||||||
WHERE TO REPORT
|
WHERE TO REPORT
|
||||||
|
|
||||||
If you can't fix a bug yourself and submit a fix for it, try to report an as
|
If you can't fix a bug yourself and submit a fix for it, try to report an as
|
||||||
detailed report as possible to the curl mailing list to allow one of us to
|
detailed report as possible to a curl mailing list to allow one of us to
|
||||||
have a go at a solution. You should also post your bug/problem at curl's bug
|
have a go at a solution. You should also post your bug/problem at curl's bug
|
||||||
tracking system over at
|
tracking system over at
|
||||||
|
|
||||||
http://sourceforge.net/bugs/?group_id=976
|
http://sourceforge.net/bugs/?group_id=976
|
||||||
|
|
||||||
(but please read the section below first before doing that)
|
(but please read the sections below first before doing that)
|
||||||
|
|
||||||
|
If you feel you need to ask around first, find a suitable mailing list and
|
||||||
|
post there. The lists are available on http://curl.haxx.se/mail/
|
||||||
|
|
||||||
WHAT TO REPORT
|
WHAT TO REPORT
|
||||||
|
|
||||||
When reporting a bug, you should include information that will help us
|
When reporting a bug, you should include information that will help us
|
||||||
understand what's wrong what you expected to happen and how to repeat the
|
understand what's wrong, what you expected to happen and how to repeat the
|
||||||
bad behavior. You therefore need to tell us:
|
bad behavior. You therefore need to tell us:
|
||||||
|
|
||||||
- your operating system's name and version number (uname -a under a unix
|
- your operating system's name and version number (uname -a under a unix
|
||||||
|
@@ -42,7 +42,8 @@ Naming
|
|||||||
understandable and be named according to what they're used for. File-local
|
understandable and be named according to what they're used for. File-local
|
||||||
functions should be made static. We like lower case names.
|
functions should be made static. We like lower case names.
|
||||||
|
|
||||||
See the INTERNALS document on how we name non-exported library-global symbols.
|
See the INTERNALS document on how we name non-exported library-global
|
||||||
|
symbols.
|
||||||
|
|
||||||
Indenting
|
Indenting
|
||||||
|
|
||||||
@@ -55,7 +56,7 @@ Indenting
|
|||||||
|
|
||||||
Commenting
|
Commenting
|
||||||
|
|
||||||
Comment your source code extensively using C comments (/* comment */), do not
|
Comment your source code extensively using C comments (/* comment */), DO NOT
|
||||||
use C++ comments (// this style). Commented code is quality code and enables
|
use C++ comments (// this style). Commented code is quality code and enables
|
||||||
future modifications much more. Uncommented code much more risk being
|
future modifications much more. Uncommented code much more risk being
|
||||||
completely replaced when someone wants to extend things, since other persons'
|
completely replaced when someone wants to extend things, since other persons'
|
||||||
@@ -64,7 +65,7 @@ Commenting
|
|||||||
General Style
|
General Style
|
||||||
|
|
||||||
Keep your functions small. If they're small you avoid a lot of mistakes and
|
Keep your functions small. If they're small you avoid a lot of mistakes and
|
||||||
you don't accidentally mix up variables.
|
you don't accidentally mix up variables etc.
|
||||||
|
|
||||||
Non-clobbering All Over
|
Non-clobbering All Over
|
||||||
|
|
||||||
@@ -78,11 +79,11 @@ Non-clobbering All Over
|
|||||||
Platform Dependent Code
|
Platform Dependent Code
|
||||||
|
|
||||||
Use #ifdef HAVE_FEATURE to do conditional code. We avoid checking for
|
Use #ifdef HAVE_FEATURE to do conditional code. We avoid checking for
|
||||||
particular operting systems or hardware in the #ifdef lines. The HAVE_FEATURE
|
particular operating systems or hardware in the #ifdef lines. The
|
||||||
shall be generated by the configure script for unix-like systems and they are
|
HAVE_FEATURE shall be generated by the configure script for unix-like systems
|
||||||
hard-coded in the config-[system].h files for the others.
|
and they are hard-coded in the config-[system].h files for the others.
|
||||||
|
|
||||||
Separate Patches Doing Different Things
|
Separate Patches
|
||||||
|
|
||||||
It is annoying when you get a huge patch from someone that is said to fix 511
|
It is annoying when you get a huge patch from someone that is said to fix 511
|
||||||
odd problems, but discussions and opinions don't agree with 510 of them - or
|
odd problems, but discussions and opinions don't agree with 510 of them - or
|
||||||
@@ -128,3 +129,31 @@ Test Cases
|
|||||||
in the test suite. Every feature that is added should get at least one valid
|
in the test suite. Every feature that is added should get at least one valid
|
||||||
test case that verifies that it works as documented. If every submitter also
|
test case that verifies that it works as documented. If every submitter also
|
||||||
post a few test cases, it won't end up as a heavy burden on a single person!
|
post a few test cases, it won't end up as a heavy burden on a single person!
|
||||||
|
|
||||||
|
How To Make a Patch
|
||||||
|
|
||||||
|
Keep a copy of the unmodified curl sources. Make your changes in a separate
|
||||||
|
source tree. When you think you have something that you want to offer the
|
||||||
|
curl community, use GNU diff to generate patches.
|
||||||
|
|
||||||
|
If you have modified a single file, try something like:
|
||||||
|
|
||||||
|
diff -u undmodified-file.c my-changed-one.c > my-fixes.diff
|
||||||
|
|
||||||
|
If you have modified several files, possibly in different directories, you
|
||||||
|
can use diff recursively:
|
||||||
|
|
||||||
|
diff -ur curl-original-dir curl-modfied-sources-dir > my-fixes.diff
|
||||||
|
|
||||||
|
The GNU diff and GNU patch tools exist for virtually all platforms, including
|
||||||
|
all kinds of unixes and Windows:
|
||||||
|
|
||||||
|
For unix-like operating systems:
|
||||||
|
|
||||||
|
http://www.fsf.org/software/patch/patch.html
|
||||||
|
http://www.gnu.org/directory/diffutils.html
|
||||||
|
|
||||||
|
For Windows:
|
||||||
|
|
||||||
|
http://gnuwin32.sourceforge.net/packages/patch.htm
|
||||||
|
http://gnuwin32.sourceforge.net/packages/diffutils.htm
|
||||||
|
105
docs/FAQ
105
docs/FAQ
@@ -1,4 +1,4 @@
|
|||||||
Updated: November 12, 2002 (http://curl.haxx.se/docs/faq.html)
|
Updated: February 25, 2003 (http://curl.haxx.se/docs/faq.html)
|
||||||
_ _ ____ _
|
_ _ ____ _
|
||||||
___| | | | _ \| |
|
___| | | | _ \| |
|
||||||
/ __| | | | |_) | |
|
/ __| | | | |_) | |
|
||||||
@@ -59,6 +59,7 @@ FAQ
|
|||||||
4.9 Curl can't authenticate to the server that requires NTLM?
|
4.9 Curl can't authenticate to the server that requires NTLM?
|
||||||
4.10 My HTTP request using HEAD, PUT or DELETE doesn't work!
|
4.10 My HTTP request using HEAD, PUT or DELETE doesn't work!
|
||||||
4.11 Why does my HTTP range requests return the full document?
|
4.11 Why does my HTTP range requests return the full document?
|
||||||
|
4.12 Why do I get "certificate verify failed" ?
|
||||||
|
|
||||||
5. libcurl Issues
|
5. libcurl Issues
|
||||||
5.1 Is libcurl thread-safe?
|
5.1 Is libcurl thread-safe?
|
||||||
@@ -174,20 +175,21 @@ FAQ
|
|||||||
Project cURL is entirely free and open. No person gets paid for developing
|
Project cURL is entirely free and open. No person gets paid for developing
|
||||||
curl. We do this voluntarily on our spare time.
|
curl. We do this voluntarily on our spare time.
|
||||||
|
|
||||||
We get some help from companies. Contactor Data hosts the curl web site and
|
We get some help from companies. Contactor Data hosts the curl web site,
|
||||||
the main mailing list, Haxx owns the curl web site's domain and
|
Haxx owns the curl web site's domain and sourceforge.net hosts several
|
||||||
sourceforge.net hosts several project tools we take advantage from like the
|
project services we take advantage from, like the bug tracker, mailing lists
|
||||||
bug tracker, mailing lists and more.
|
and more.
|
||||||
|
|
||||||
If you want to support our project with a donation or similar, one way of
|
If you want to support our project with a donation or similar, one way of
|
||||||
doing that would be to buy "gift certificates" at useful online shopping
|
doing that would be to buy "gift certificates" at useful online shopping
|
||||||
sites, such as amazon.com or thinkgeek.com. Another way would be to sponsor
|
sites, such as amazon.com or thinkgeek.com. Another way would be to sponsor
|
||||||
us through a banner-program or even better: by helping us coding,
|
us through a banner-program or even better: by helping us coding,
|
||||||
documenting, testing etc.
|
documenting, testing etc. You're welcome to send us a buck using paypal, as
|
||||||
|
described here: http://curl.haxx.se/donation.html
|
||||||
|
|
||||||
1.7 What about CURL from curl.com?
|
1.7 What about CURL from curl.com?
|
||||||
|
|
||||||
During the summer 2001, curl.com has been busy advertising their client-side
|
During the summer 2001, curl.com was busy advertising their client-side
|
||||||
programming language for the web, named CURL.
|
programming language for the web, named CURL.
|
||||||
|
|
||||||
We are in no way associated with curl.com or their CURL programming
|
We are in no way associated with curl.com or their CURL programming
|
||||||
@@ -202,17 +204,17 @@ FAQ
|
|||||||
|
|
||||||
1.8 I have a problem who do I mail?
|
1.8 I have a problem who do I mail?
|
||||||
|
|
||||||
Please do not attempt to mail any single individual unless you really need
|
Please do not mail any single individual unless you really need to. Keep
|
||||||
to. Keep curl-related questions on a suitable mailing list. All available
|
curl-related questions on a suitable mailing list. All available mailing
|
||||||
mailing lists are listed in the MANUAL document and online at
|
lists are listed in the MANUAL document and online at
|
||||||
http://curl.haxx.se/mail/
|
http://curl.haxx.se/mail/
|
||||||
|
|
||||||
Keeping curl-related questions and discussions on mailing lists allows others
|
Keeping curl-related questions and discussions on mailing lists allows
|
||||||
to join in and help, to share their ideas, contribute their suggestions and
|
others to join in and help, to share their ideas, contribute their
|
||||||
spread their wisdom. Keeping discussions on public mailing lists also allows
|
suggestions and spread their wisdom. Keeping discussions on public mailing
|
||||||
for others to learn from this (both current and future users thanks to the
|
lists also allows for others to learn from this (both current and future
|
||||||
web based archives of the mailing lists), thus saving us from having to
|
users thanks to the web based archives of the mailing lists), thus saving us
|
||||||
repeat ourselves even more. Thanks for respecting this.
|
from having to repeat ourselves even more. Thanks for respecting this.
|
||||||
|
|
||||||
|
|
||||||
2. Install Related Problems
|
2. Install Related Problems
|
||||||
@@ -274,8 +276,8 @@ FAQ
|
|||||||
|
|
||||||
2.4. Does cURL support Socks (RFC 1928) ?
|
2.4. Does cURL support Socks (RFC 1928) ?
|
||||||
|
|
||||||
No. Nobody has wanted it that badly yet. We appreciate patches that bring
|
There is limited support for SOCKS5 for curl built with IPv6 support
|
||||||
this functionality.
|
disabled.
|
||||||
|
|
||||||
|
|
||||||
3. Usage problems
|
3. Usage problems
|
||||||
@@ -367,9 +369,10 @@ FAQ
|
|||||||
|
|
||||||
http://curl.haxx.se/libcurl/
|
http://curl.haxx.se/libcurl/
|
||||||
|
|
||||||
In December 2001, there are interfaces available for the following
|
In February 2003, there are interfaces available for the following
|
||||||
languages: C/C++, Cocoa, Dylan, Java, Perl, PHP, Python, Rexx, Ruby, Scheme
|
languages: Basic, C, C++, Cocoa, Dylan, Euphoria, Java, Lua, Object-Pascal,
|
||||||
and Tcl. By the time you read this, additional ones may have appeared!
|
Pascal, Perl, PHP, PostgreSQL, Python, Rexx, Ruby, Scheme and Tcl. By the
|
||||||
|
time you read this, additional ones may have appeared!
|
||||||
|
|
||||||
3.10 What about SOAP, WebDAV, XML-RPC or similar protocols over HTTP?
|
3.10 What about SOAP, WebDAV, XML-RPC or similar protocols over HTTP?
|
||||||
|
|
||||||
@@ -378,8 +381,8 @@ FAQ
|
|||||||
XML-RPC are all such ones. You can use -X to set custom requests and -H to
|
XML-RPC are all such ones. You can use -X to set custom requests and -H to
|
||||||
set custom headers (or replace internally generated ones).
|
set custom headers (or replace internally generated ones).
|
||||||
|
|
||||||
Using libcurl or PHP's curl modules is just as fine and you'd just use the
|
Using libcurl is of course just as fine and you'd just use the proper
|
||||||
proper library options to do the same.
|
library options to do the same.
|
||||||
|
|
||||||
3.11 How do I POST with a different Content-Type?
|
3.11 How do I POST with a different Content-Type?
|
||||||
|
|
||||||
@@ -493,8 +496,7 @@ FAQ
|
|||||||
curl '{curl,www}.haxx.se'
|
curl '{curl,www}.haxx.se'
|
||||||
|
|
||||||
To be able to use those letters as actual parts of the URL (without using
|
To be able to use those letters as actual parts of the URL (without using
|
||||||
them for the curl URL "globbing" system), use the -g/--globoff option (curl
|
them for the curl URL "globbing" system), use the -g/--globoff option:
|
||||||
7.6 and later):
|
|
||||||
|
|
||||||
curl -g 'www.site.com/weirdname[].html'
|
curl -g 'www.site.com/weirdname[].html'
|
||||||
|
|
||||||
@@ -607,6 +609,30 @@ FAQ
|
|||||||
Because the range may not be supported by the server, or the server may
|
Because the range may not be supported by the server, or the server may
|
||||||
choose to ignore it and return the full document anyway.
|
choose to ignore it and return the full document anyway.
|
||||||
|
|
||||||
|
4.12 Why do I get "certificate verify failed" ?
|
||||||
|
|
||||||
|
You invoke curl 7.10 or later to communicate on a https:// URL and get an
|
||||||
|
error back looking something similar to this:
|
||||||
|
|
||||||
|
curl: (35) SSL: error:14090086:SSL routines:
|
||||||
|
SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
|
||||||
|
|
||||||
|
Then it means that curl couldn't verify that the server's certificate was
|
||||||
|
good. Curl verifies the certificate using the CA cert bundle that comes with
|
||||||
|
the curl installation.
|
||||||
|
|
||||||
|
To disable the verification (which makes it act like curl did before 7.10),
|
||||||
|
use -k. This does however enable man-in-the-middle attacks.
|
||||||
|
|
||||||
|
If you get this failure but are having a CA cert bundle installed and used,
|
||||||
|
the server's certificate is not signed by one of the CA's in the bundle. It
|
||||||
|
might for example be self-signed. You then correct this problem by obtaining
|
||||||
|
a valid CA cert for the server. Or again, decrease the security by disabling
|
||||||
|
this check.
|
||||||
|
|
||||||
|
Details are also in the SSLCERTS file in the release archives, found online
|
||||||
|
here: http://curl.haxx.se/docs/sslcerts.html
|
||||||
|
|
||||||
5. libcurl Issues
|
5. libcurl Issues
|
||||||
|
|
||||||
5.1. Is libcurl thread-safe?
|
5.1. Is libcurl thread-safe?
|
||||||
@@ -657,20 +683,15 @@ FAQ
|
|||||||
|
|
||||||
5.3 How do I fetch multiple files with libcurl?
|
5.3 How do I fetch multiple files with libcurl?
|
||||||
|
|
||||||
Starting with version 7.7, curl and libcurl will have excellent support for
|
libcurl has excellent support for transferring multiple files. You should
|
||||||
transferring multiple files. You should just repeatedly set new URLs with
|
just repeatedly set new URLs with curl_easy_setopt() and then transfer it
|
||||||
curl_easy_setopt() and then transfer it with curl_easy_perform(). The handle
|
with curl_easy_perform(). The handle you get from curl_easy_init() is not
|
||||||
you get from curl_easy_init() is not only reusable starting with libcurl
|
only reusable, but you're even encouraged to reuse it if you can, as that
|
||||||
7.7, but also you're encouraged to reuse it if you can, as that will enable
|
will enable libcurl to use persistent connections.
|
||||||
libcurl to use persistent connections.
|
|
||||||
|
|
||||||
For libcurl prior to 7.7, there was no multiple file support. The only
|
|
||||||
available way to do multiple requests was to init/perform/cleanup for each
|
|
||||||
transfer.
|
|
||||||
|
|
||||||
5.4 Does libcurl do Winsock initialization on win32 systems?
|
5.4 Does libcurl do Winsock initialization on win32 systems?
|
||||||
|
|
||||||
Yes (since 7.8.1) if told to in the curl_global_init() call.
|
Yes, if told to in the curl_global_init() call.
|
||||||
|
|
||||||
5.5 Does CURLOPT_FILE and CURLOPT_INFILE work on win32 ?
|
5.5 Does CURLOPT_FILE and CURLOPT_INFILE work on win32 ?
|
||||||
|
|
||||||
@@ -684,13 +705,11 @@ FAQ
|
|||||||
|
|
||||||
5.6 What about Keep-Alive or persistent connections?
|
5.6 What about Keep-Alive or persistent connections?
|
||||||
|
|
||||||
Starting with version 7.7, curl and libcurl will have excellent support for
|
curl and libcurl have excellent support for persistent connections when
|
||||||
persistent connections when transferring several files from the same server.
|
transferring several files from the same server. Curl will attempt to reuse
|
||||||
Curl will attempt to reuse connections for all URLs specified on the same
|
connections for all URLs specified on the same command line/config file, and
|
||||||
command line/config file, and libcurl will reuse connections for all
|
libcurl will reuse connections for all transfers that are made using the
|
||||||
transfers that are made using the same libcurl handle.
|
same libcurl handle.
|
||||||
|
|
||||||
Previous versions had no persistent connection support.
|
|
||||||
|
|
||||||
5.7 Link errors when building libcurl on Windows!
|
5.7 Link errors when building libcurl on Windows!
|
||||||
|
|
||||||
|
11
docs/HISTORY
11
docs/HISTORY
@@ -54,7 +54,7 @@ OpenSSL took over where SSLeay was abandoned.
|
|||||||
May 1999, first Debian package.
|
May 1999, first Debian package.
|
||||||
|
|
||||||
August 1999, LDAP:// and FILE:// support added. The curl web site gets 1300
|
August 1999, LDAP:// and FILE:// support added. The curl web site gets 1300
|
||||||
visits daily.
|
visits weekly.
|
||||||
|
|
||||||
Released curl 6.0 in September. 15000 lines of code.
|
Released curl 6.0 in September. 15000 lines of code.
|
||||||
|
|
||||||
@@ -67,7 +67,7 @@ the easy interface and turned out to be the beginning of actually getting
|
|||||||
other software and programs to get based on and powered by libcurl. Almost
|
other software and programs to get based on and powered by libcurl. Almost
|
||||||
20000 lines of code.
|
20000 lines of code.
|
||||||
|
|
||||||
August 2000, the curl web site gets 4000 visits daily.
|
August 2000, the curl web site gets 4000 visits weekly.
|
||||||
|
|
||||||
The PHP guys adopted libcurl already the same month, when the first ever third
|
The PHP guys adopted libcurl already the same month, when the first ever third
|
||||||
party libcurl binding showed up. CURL has been a supported module in PHP since
|
party libcurl binding showed up. CURL has been a supported module in PHP since
|
||||||
@@ -92,7 +92,7 @@ code.
|
|||||||
|
|
||||||
August 2001. curl is bundled in Mac OS X, 10.1. It was already becoming more
|
August 2001. curl is bundled in Mac OS X, 10.1. It was already becoming more
|
||||||
and more of a standard utility of Linux distributions and a regular in the BSD
|
and more of a standard utility of Linux distributions and a regular in the BSD
|
||||||
ports collections. The curl web site gets 8000 visits daily. Curl Corporation
|
ports collections. The curl web site gets 8000 visits weekly. Curl Corporation
|
||||||
contacted Daniel to discuss "the name issue". After Daniel's reply, they have
|
contacted Daniel to discuss "the name issue". After Daniel's reply, they have
|
||||||
never since got in touch again.
|
never since got in touch again.
|
||||||
|
|
||||||
@@ -100,7 +100,7 @@ September 2001, libcurl 7.9 introduces cookie jar and curl_formadd(). During
|
|||||||
the forthcoming 7.9.x releases, we introduced the multi interface slowly and
|
the forthcoming 7.9.x releases, we introduced the multi interface slowly and
|
||||||
without much whistles.
|
without much whistles.
|
||||||
|
|
||||||
June 2002, the curl web site gets 13000 visits daily. curl and libcurl is
|
June 2002, the curl web site gets 13000 visits weekly. curl and libcurl is
|
||||||
35000 lines of code. Reported successful compiles on more than 40 combinations
|
35000 lines of code. Reported successful compiles on more than 40 combinations
|
||||||
of CPUs and operating systems.
|
of CPUs and operating systems.
|
||||||
|
|
||||||
@@ -111,3 +111,6 @@ distributions and otherwise retrieved as part of other software.
|
|||||||
|
|
||||||
September 2002, with the release of curl 7.10 it is released under the MIT
|
September 2002, with the release of curl 7.10 it is released under the MIT
|
||||||
license only.
|
license only.
|
||||||
|
|
||||||
|
February 2003, the curl site averages at 20000 visits weekly. At any given
|
||||||
|
moment, there's an average of 3 people browsing the curl.haxx.se site.
|
||||||
|
25
docs/HOWTO-RELEASE
Normal file
25
docs/HOWTO-RELEASE
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
Steps To Perform When Building a Public Release
|
||||||
|
|
||||||
|
* "make distcheck"
|
||||||
|
|
||||||
|
* ./maketgz
|
||||||
|
then upload the 3 curl packages maketgz created
|
||||||
|
|
||||||
|
* update these files:
|
||||||
|
www/_download.html
|
||||||
|
www/_changes.html
|
||||||
|
www/_newslog.html
|
||||||
|
www/Makefile
|
||||||
|
|
||||||
|
* commit the web changes
|
||||||
|
|
||||||
|
* 'cvs commit'
|
||||||
|
|
||||||
|
* 'cvs tag'
|
||||||
|
|
||||||
|
* write the release announcement, including:
|
||||||
|
- changes / bugfixes
|
||||||
|
- other curl-related news
|
||||||
|
- contributors
|
||||||
|
|
||||||
|
* mail release-announcement to curl-announce and curl-users
|
52
docs/INSTALL
52
docs/INSTALL
@@ -28,11 +28,22 @@ UNIX
|
|||||||
|
|
||||||
You probably need to be root when doing the last command.
|
You probably need to be root when doing the last command.
|
||||||
|
|
||||||
|
If you have checked out the sources from the CVS repository, read the
|
||||||
|
CVS-INFO on how to proceed.
|
||||||
|
|
||||||
If you want to install curl in a different file hierarchy than /usr/local,
|
If you want to install curl in a different file hierarchy than /usr/local,
|
||||||
you need to specify that already when running configure:
|
you need to specify that already when running configure:
|
||||||
|
|
||||||
./configure --prefix=/path/to/curl/tree
|
./configure --prefix=/path/to/curl/tree
|
||||||
|
|
||||||
|
If you happen to have write permission in that directory, you can do 'make
|
||||||
|
install' without being root. An example of this would be to make a local
|
||||||
|
install in your own home directory:
|
||||||
|
|
||||||
|
./configure --prefix=$HOME
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
The configure script always tries to find a working SSL library unless
|
The configure script always tries to find a working SSL library unless
|
||||||
explicitly told not to. If you have OpenSSL installed in the default search
|
explicitly told not to. If you have OpenSSL installed in the default search
|
||||||
path for your compiler/linker, you don't need to do anything special. If
|
path for your compiler/linker, you don't need to do anything special. If
|
||||||
@@ -71,33 +82,6 @@ UNIX
|
|||||||
LIBS=-lRSAglue -lrsaref
|
LIBS=-lRSAglue -lrsaref
|
||||||
(as suggested by Doug Kaufman)
|
(as suggested by Doug Kaufman)
|
||||||
|
|
||||||
KNOWN PROBLEMS (these ones should not happen anymore)
|
|
||||||
|
|
||||||
If you happen to have autoconf installed, but a version older than 2.12
|
|
||||||
you will get into trouble. Then you can still build curl by issuing these
|
|
||||||
commands (note that this requires curl to be built staticly): (from Ralph
|
|
||||||
Beckmann)
|
|
||||||
|
|
||||||
./configure [...]
|
|
||||||
cd lib; make; cd ..
|
|
||||||
cd src; make; cd ..
|
|
||||||
cp src/curl elsewhere/bin/
|
|
||||||
|
|
||||||
As suggested by David West, you can make a faked version of autoconf and
|
|
||||||
autoheader:
|
|
||||||
|
|
||||||
----start of autoconf----
|
|
||||||
#!/bin/bash
|
|
||||||
#fake autoconf for building curl
|
|
||||||
if [ "$1" = "--version" ] then
|
|
||||||
echo "Autoconf version 2.13"
|
|
||||||
fi
|
|
||||||
----end of autoconf----
|
|
||||||
|
|
||||||
Then make autoheader a symbolic link to the same script and make sure
|
|
||||||
they're executable and set to appear in the path *BEFORE* the actual (but
|
|
||||||
obsolete) autoconf and autoheader scripts.
|
|
||||||
|
|
||||||
MORE OPTIONS
|
MORE OPTIONS
|
||||||
|
|
||||||
To force configure to use the standard cc compiler if both cc and gcc are
|
To force configure to use the standard cc compiler if both cc and gcc are
|
||||||
@@ -416,6 +400,17 @@ CROSS COMPILE
|
|||||||
The '--prefix' parameter specifies where cURL will be installed. If
|
The '--prefix' parameter specifies where cURL will be installed. If
|
||||||
'configure' completes successfully, do 'make' and 'make install' as usual.
|
'configure' completes successfully, do 'make' and 'make install' as usual.
|
||||||
|
|
||||||
|
RISC OS
|
||||||
|
=======
|
||||||
|
The library can be cross-compiled using gccsdk as follows:
|
||||||
|
|
||||||
|
CC=riscos-gcc AR=riscos-ar RANLIB='riscos-ar -s' ./configure \
|
||||||
|
--host=arm-riscos-aof --without-random --disable-shared
|
||||||
|
make
|
||||||
|
|
||||||
|
where riscos-gcc and riscos-ar are links to the gccsdk tools.
|
||||||
|
You can then link your program with curl/lib/.libs/libcurl.a
|
||||||
|
|
||||||
PORTS
|
PORTS
|
||||||
=====
|
=====
|
||||||
This is a probably incomplete list of known hardware and operating systems
|
This is a probably incomplete list of known hardware and operating systems
|
||||||
@@ -435,7 +430,7 @@ PORTS
|
|||||||
- MIPS IRIX 6.2, 6.5
|
- MIPS IRIX 6.2, 6.5
|
||||||
- MIPS Linux
|
- MIPS Linux
|
||||||
- Pocket PC/Win CE 3.0
|
- Pocket PC/Win CE 3.0
|
||||||
- Power AIX 4.2, 4.3.1, 4.3.2, 5.1
|
- Power AIX 3.2.5, 4.2, 4.3.1, 4.3.2, 5.1
|
||||||
- PowerPC Darwin 1.0
|
- PowerPC Darwin 1.0
|
||||||
- PowerPC Linux
|
- PowerPC Linux
|
||||||
- PowerPC Mac OS 9
|
- PowerPC Mac OS 9
|
||||||
@@ -464,6 +459,7 @@ PORTS
|
|||||||
- m68k Linux
|
- m68k Linux
|
||||||
- m68k OpenBSD
|
- m68k OpenBSD
|
||||||
- s390 Linux
|
- s390 Linux
|
||||||
|
- XScale/PXA250 Linux 2.4
|
||||||
|
|
||||||
OpenSSL
|
OpenSSL
|
||||||
=======
|
=======
|
||||||
|
@@ -15,6 +15,8 @@ may have been fixed since this was written!
|
|||||||
* configure --disable-http is not fully supported. All other protocols seem
|
* configure --disable-http is not fully supported. All other protocols seem
|
||||||
to work to disable.
|
to work to disable.
|
||||||
|
|
||||||
|
* The -m parameter does not work when using telnet with curl on Windows.
|
||||||
|
|
||||||
* If a HTTP server responds to a HEAD request and includes a body (thus
|
* If a HTTP server responds to a HEAD request and includes a body (thus
|
||||||
violating the RFC2616), curl won't wait to read the response but just stop
|
violating the RFC2616), curl won't wait to read the response but just stop
|
||||||
reading and return back. If a second request (let's assume a GET) is then
|
reading and return back. If a second request (let's assume a GET) is then
|
||||||
|
35
docs/MANUAL
35
docs/MANUAL
@@ -166,13 +166,21 @@ UPLOADING
|
|||||||
|
|
||||||
VERBOSE / DEBUG
|
VERBOSE / DEBUG
|
||||||
|
|
||||||
If curl fails where it isn't supposed to, if the servers don't let you
|
If curl fails where it isn't supposed to, if the servers don't let you in,
|
||||||
in, if you can't understand the responses: use the -v flag to get VERBOSE
|
if you can't understand the responses: use the -v flag to get verbose
|
||||||
fetching. Curl will output lots of info and all data it sends and
|
fetching. Curl will output lots of info and what it sends and receives in
|
||||||
receives in order to let the user see all client-server interaction.
|
order to let the user see all client-server interaction (but it won't show
|
||||||
|
you the actual data).
|
||||||
|
|
||||||
curl -v ftp://ftp.upload.com/
|
curl -v ftp://ftp.upload.com/
|
||||||
|
|
||||||
|
To get even more details and information on what curl does, try using the
|
||||||
|
--trace or --trace-ascii options with a given file name to log to, like
|
||||||
|
this:
|
||||||
|
|
||||||
|
curl --trace trace.txt www.haxx.se
|
||||||
|
|
||||||
|
|
||||||
DETAILED INFORMATION
|
DETAILED INFORMATION
|
||||||
|
|
||||||
Different protocols provide different ways of getting detailed information
|
Different protocols provide different ways of getting detailed information
|
||||||
@@ -350,6 +358,13 @@ COOKIES
|
|||||||
|
|
||||||
curl -b headers www.example.com
|
curl -b headers www.example.com
|
||||||
|
|
||||||
|
While saving headers to a file is a working way to store cookies, it is
|
||||||
|
however error-prone and not the prefered way to do this. Instead, make curl
|
||||||
|
save the incoming cookies using the well-known netscape cookie format like
|
||||||
|
this:
|
||||||
|
|
||||||
|
curl -c cookies.txt www.example.com
|
||||||
|
|
||||||
Note that by specifying -b you enable the "cookie awareness" and with -L
|
Note that by specifying -b you enable the "cookie awareness" and with -L
|
||||||
you can make curl follow a location: (which often is used in combination
|
you can make curl follow a location: (which often is used in combination
|
||||||
with cookies). So that if a site sends cookies and a location, you can
|
with cookies). So that if a site sends cookies and a location, you can
|
||||||
@@ -364,6 +379,10 @@ COOKIES
|
|||||||
stored cookies which match the request as it follows the location. The
|
stored cookies which match the request as it follows the location. The
|
||||||
file "empty.txt" may be a non-existant file.
|
file "empty.txt" may be a non-existant file.
|
||||||
|
|
||||||
|
Alas, to both read and write cookies from a netscape cookie file, you can
|
||||||
|
set both -b and -c to use the same file:
|
||||||
|
|
||||||
|
curl -b cookies.txt -c cookies.txt www.example.com
|
||||||
|
|
||||||
PROGRESS METER
|
PROGRESS METER
|
||||||
|
|
||||||
@@ -413,7 +432,8 @@ SPEED LIMIT
|
|||||||
|
|
||||||
Forcing curl not to transfer data faster than a given rate is also possible,
|
Forcing curl not to transfer data faster than a given rate is also possible,
|
||||||
which might be useful if you're using a limited bandwidth connection and you
|
which might be useful if you're using a limited bandwidth connection and you
|
||||||
don't want your transfer to use all of it.
|
don't want your transfer to use all of it (sometimes referred to as
|
||||||
|
"bandwith throttle").
|
||||||
|
|
||||||
Make curl transfer data no faster than 10 kilobytes per second:
|
Make curl transfer data no faster than 10 kilobytes per second:
|
||||||
|
|
||||||
@@ -427,6 +447,11 @@ SPEED LIMIT
|
|||||||
|
|
||||||
curl -T upload --limit-rate 1M ftp://uploadshereplease.com
|
curl -T upload --limit-rate 1M ftp://uploadshereplease.com
|
||||||
|
|
||||||
|
When using the --limit-rate option, the transfer rate is regulated on a
|
||||||
|
per-second basis, which will cause the total transfer speed to become lower
|
||||||
|
than the given number. Sometimes of course substantially lower, if your
|
||||||
|
transfer stalls during periods.
|
||||||
|
|
||||||
CONFIG FILE
|
CONFIG FILE
|
||||||
|
|
||||||
Curl automatically tries to read the .curlrc file (or _curlrc file on win32
|
Curl automatically tries to read the .curlrc file (or _curlrc file on win32
|
||||||
|
@@ -10,7 +10,8 @@ man_MANS = \
|
|||||||
|
|
||||||
HTMLPAGES = \
|
HTMLPAGES = \
|
||||||
curl.html \
|
curl.html \
|
||||||
curl-config.html
|
curl-config.html \
|
||||||
|
index.html
|
||||||
|
|
||||||
PDFPAGES = \
|
PDFPAGES = \
|
||||||
curl.pdf \
|
curl.pdf \
|
||||||
|
@@ -82,3 +82,8 @@ that have contributed with non-trivial parts:
|
|||||||
- Andreas Damm <andreas-sourceforge@radab.org>
|
- Andreas Damm <andreas-sourceforge@radab.org>
|
||||||
- Jacky Lam <sylam@emsoftltd.com>
|
- Jacky Lam <sylam@emsoftltd.com>
|
||||||
- James Gallagher <jgallagher@gso.uri.edu>
|
- James Gallagher <jgallagher@gso.uri.edu>
|
||||||
|
- Kjetil Jacobsen <kjetilja@cs.uit.no>
|
||||||
|
- Markus F.X.J. Oberhumer <markus@oberhumer.com>
|
||||||
|
- Miklos Nemeth <mnemeth@kfkisystems.com>
|
||||||
|
- Kevin Roth <kproth@users.sourceforge.net>
|
||||||
|
- Ralph Mitchell <rmitchell@eds.com>
|
||||||
|
65
docs/TODO
65
docs/TODO
@@ -15,7 +15,8 @@ TODO
|
|||||||
* Introduce an interface to libcurl that allows applications to easier get to
|
* Introduce an interface to libcurl that allows applications to easier get to
|
||||||
know what cookies that are received. Pushing interface that calls a
|
know what cookies that are received. Pushing interface that calls a
|
||||||
callback on each received cookie? Querying interface that asks about
|
callback on each received cookie? Querying interface that asks about
|
||||||
existing cookies? We probably need both.
|
existing cookies? We probably need both. Enable applications to modify
|
||||||
|
existing cookies as well.
|
||||||
|
|
||||||
* Make content encoding/decoding internally be made using a filter system.
|
* Make content encoding/decoding internally be made using a filter system.
|
||||||
|
|
||||||
@@ -23,16 +24,9 @@ TODO
|
|||||||
less copy of data and thus a faster operation.
|
less copy of data and thus a faster operation.
|
||||||
[http://curl.haxx.se/dev/no_copy_callbacks.txt]
|
[http://curl.haxx.se/dev/no_copy_callbacks.txt]
|
||||||
|
|
||||||
* Run-time querying about library characterics. What protocols do this
|
* Add asynchronous name resolving (http://libdenise.sf.net/). This should be
|
||||||
running libcurl support? What is the version number of the running libcurl
|
made to work on most of the supported platforms, or otherwise it isn't
|
||||||
(returning the well-defined version-#define). This could possibly be made
|
really interesting.
|
||||||
by allowing curl_easy_getinfo() work with a NULL pointer for global info,
|
|
||||||
but perhaps better would be to introduce a new curl_getinfo() (or similar)
|
|
||||||
function for global info reading.
|
|
||||||
|
|
||||||
* Add asynchronous name resolving (http://daniel.haxx.se/resolver/). This
|
|
||||||
should be made to work on most of the supported platforms, or otherwise it
|
|
||||||
isn't really interesting.
|
|
||||||
|
|
||||||
* Data sharing. Tell which easy handles within a multi handle that should
|
* Data sharing. Tell which easy handles within a multi handle that should
|
||||||
share cookies, connection cache, dns cache, ssl session cache. Full
|
share cookies, connection cache, dns cache, ssl session cache. Full
|
||||||
@@ -51,12 +45,9 @@ TODO
|
|||||||
>4GB all over. Bug reports (and source reviews) indicate that it doesn't
|
>4GB all over. Bug reports (and source reviews) indicate that it doesn't
|
||||||
currently work properly.
|
currently work properly.
|
||||||
|
|
||||||
* Make the built-in progress meter use its own dedicated output stream, and
|
|
||||||
make it possible to set it. Use stderr by default.
|
|
||||||
|
|
||||||
* CURLOPT_MAXFILESIZE. Prevent downloads that are larger than the specified
|
* CURLOPT_MAXFILESIZE. Prevent downloads that are larger than the specified
|
||||||
size. CURLE_FILESIZE_EXCEEDED would then be returned. Gautam Mani
|
size. CURLE_FILESIZE_EXCEEDED would then be returned. Gautam Mani
|
||||||
requested. That is, the download should even begin but be aborted
|
requested. That is, the download should not even begin but be aborted
|
||||||
immediately.
|
immediately.
|
||||||
|
|
||||||
* Allow the http_proxy (and other) environment variables to contain user and
|
* Allow the http_proxy (and other) environment variables to contain user and
|
||||||
@@ -66,13 +57,15 @@ TODO
|
|||||||
LIBCURL - multi interface
|
LIBCURL - multi interface
|
||||||
|
|
||||||
* Make sure we don't ever loop because of non-blocking sockets return
|
* Make sure we don't ever loop because of non-blocking sockets return
|
||||||
EWOULDBLOCK or similar. This concerns the HTTP request sending (and
|
EWOULDBLOCK or similar. This FTP command sending, the SSL connection etc.
|
||||||
especially regular HTTP POST), the FTP command sending etc.
|
|
||||||
|
|
||||||
* Make uploads treated better. We need a way to tell libcurl we have data to
|
* Make transfers treated more carefully. We need a way to tell libcurl we
|
||||||
write, as the current system expects us to upload data each time the socket
|
have data to write, as the current system expects us to upload data each
|
||||||
is writable and there is no way to say that we want to upload data soon
|
time the socket is writable and there is no way to say that we want to
|
||||||
just not right now, without that aborting the upload.
|
upload data soon just not right now, without that aborting the upload. The
|
||||||
|
opposite situation should be possible as well, that we tell libcurl we're
|
||||||
|
ready to accept read data. Today libcurl feeds the data as soon as it is
|
||||||
|
available for reading, no matter what.
|
||||||
|
|
||||||
DOCUMENTATION
|
DOCUMENTATION
|
||||||
|
|
||||||
@@ -86,6 +79,9 @@ TODO
|
|||||||
receiver will convert the data from the standard form to his own internal
|
receiver will convert the data from the standard form to his own internal
|
||||||
form."
|
form."
|
||||||
|
|
||||||
|
* Since USERPWD always override the user and password specified in URLs, we
|
||||||
|
might need another way to specify user+password for anonymous ftp logins.
|
||||||
|
|
||||||
* An option to only download remote FTP files if they're newer than the local
|
* An option to only download remote FTP files if they're newer than the local
|
||||||
one is a good idea, and it would fit right into the same syntax as the
|
one is a good idea, and it would fit right into the same syntax as the
|
||||||
already working http dito works. It of course requires that 'MDTM' works,
|
already working http dito works. It of course requires that 'MDTM' works,
|
||||||
@@ -97,17 +93,12 @@ TODO
|
|||||||
|
|
||||||
HTTP
|
HTTP
|
||||||
|
|
||||||
* Pass a list of host name to libcurl to which we allow the user name and
|
* If the "body" of the POST is < MSS it really aught to be sent along with
|
||||||
password to get sent to. Currently, it only get sent to the host name that
|
the headers. More generally, if the last chunk of the POST body is < MSS,
|
||||||
the first URL uses (to prevent others from being able to read it), but this
|
it should be sent with the previous chunk (which may be the POST headers).
|
||||||
also prevents the authentication info from getting sent when following
|
So long as any one send is larger than MSS (or there is only one send when
|
||||||
locations to legitimate other host names.
|
< MSS :), the Nagle Algorithm will not be a problem on any stack where
|
||||||
|
Nagle is implemented correctly. (pointed out by Rick Jones)
|
||||||
* "Content-Encoding: compress/gzip/zlib" HTTP 1.1 clearly defines how to get
|
|
||||||
and decode compressed documents. There is the zlib that is pretty good at
|
|
||||||
decompressing stuff. This work was started in October 1999 but halted again
|
|
||||||
since it proved more work than we thought. It is still a good idea to
|
|
||||||
implement though. This requires the filter system mentioned above.
|
|
||||||
|
|
||||||
* Authentication: NTLM. Support for that MS crap called NTLM
|
* Authentication: NTLM. Support for that MS crap called NTLM
|
||||||
authentication. MS proxies and servers sometime require that. Since that
|
authentication. MS proxies and servers sometime require that. Since that
|
||||||
@@ -212,6 +203,9 @@ TODO
|
|||||||
|
|
||||||
TEST SUITE
|
TEST SUITE
|
||||||
|
|
||||||
|
* If perl wasn't found by the configure script, don't attempt to run the
|
||||||
|
tests but explain something nice why it doesn't.
|
||||||
|
|
||||||
* Extend the test suite to include more protocols. The telnet could just do
|
* Extend the test suite to include more protocols. The telnet could just do
|
||||||
ftp or http operations (for which we have test servers).
|
ftp or http operations (for which we have test servers).
|
||||||
|
|
||||||
@@ -219,3 +213,10 @@ TODO
|
|||||||
fork()s and it should become even more portable.
|
fork()s and it should become even more portable.
|
||||||
|
|
||||||
* Introduce a test suite that tests libcurl better and more explicitly.
|
* Introduce a test suite that tests libcurl better and more explicitly.
|
||||||
|
|
||||||
|
NEXT MAJOR RELEASE
|
||||||
|
|
||||||
|
* curl_easy_cleanup() returns void, but curl_multi_cleanup() returns a
|
||||||
|
CURLMcode. These should be changed to be the same.
|
||||||
|
|
||||||
|
* curl_formparse() should be removed
|
||||||
|
43
docs/curl.1
43
docs/curl.1
@@ -2,7 +2,7 @@
|
|||||||
.\" nroff -man curl.1
|
.\" nroff -man curl.1
|
||||||
.\" Written by Daniel Stenberg
|
.\" Written by Daniel Stenberg
|
||||||
.\"
|
.\"
|
||||||
.TH curl 1 "11 Sep 2002" "Curl 7.10" "Curl Manual"
|
.TH curl 1 "14 Feb 2003" "Curl 7.10.3" "Curl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
curl \- transfer a URL
|
curl \- transfer a URL
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@@ -122,6 +122,9 @@ Use "-C -" to tell curl to automatically find out where/how to resume the
|
|||||||
transfer. It then uses the given output/input files to figure that out.
|
transfer. It then uses the given output/input files to figure that out.
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
|
.IP "---create-dirs"
|
||||||
|
When used in conjunction with the -o option, curl will create the necessary
|
||||||
|
local directory hierarchy as needed.
|
||||||
.IP "--crlf"
|
.IP "--crlf"
|
||||||
(FTP) Convert LF to CRLF in upload. Useful for MVS (OS/390).
|
(FTP) Convert LF to CRLF in upload. Useful for MVS (OS/390).
|
||||||
|
|
||||||
@@ -214,14 +217,21 @@ If this option is used several times, the last one will be used.
|
|||||||
peer. The file may contain multiple CA certificates. The certificate(s) must
|
peer. The file may contain multiple CA certificates. The certificate(s) must
|
||||||
be in PEM format.
|
be in PEM format.
|
||||||
|
|
||||||
|
curl recognizes the environment variable named 'CURL_CA_BUNDLE' if that is
|
||||||
|
set, and uses the given path as a path to a CA cert bundle. This option
|
||||||
|
overrides that variable.
|
||||||
|
|
||||||
|
The windows version of curl will automatically look for a CA certs file named
|
||||||
|
\'curl-ca-bundle.crt\', either in the same directory as curl.exe, or in the
|
||||||
|
Current Working Directory, or in any folder along your PATH.
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "--capath <CA certificate directory>"
|
.IP "--capath <CA certificate directory>"
|
||||||
(HTTPS) Tells curl to use the specified certificate directory to verify the
|
(HTTPS) Tells curl to use the specified certificate directory to verify the
|
||||||
peer. The certificates must be in PEM format, and the directory must have been
|
peer. The certificates must be in PEM format, and the directory must have been
|
||||||
processed using the c_rehash utility supplied with openssl. Certificate directories
|
processed using the c_rehash utility supplied with openssl. Using --capath can
|
||||||
are not supported under Windows (because c_rehash uses symbolink links to
|
allow curl to make https connections much more efficiently than using --cacert
|
||||||
create them). Using --capath can allow curl to make https connections much
|
if the --cacert file contains many CA certificates.
|
||||||
more efficiently than using --cacert if the --cacert file contains many CA certificates.
|
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "-f/--fail"
|
.IP "-f/--fail"
|
||||||
@@ -315,6 +325,8 @@ to be made secure by using the CA certificate bundle installed by
|
|||||||
default. This makes all connections considered "insecure" to fail unless
|
default. This makes all connections considered "insecure" to fail unless
|
||||||
-k/--insecure is used.
|
-k/--insecure is used.
|
||||||
|
|
||||||
|
This option is ignored if --cacert or --capath is used!
|
||||||
|
|
||||||
If this option is used twice, the second time will again disable it.
|
If this option is used twice, the second time will again disable it.
|
||||||
.IP "--krb4 <level>"
|
.IP "--krb4 <level>"
|
||||||
(FTP) Enable kerberos4 authentication and use. The level must be entered and
|
(FTP) Enable kerberos4 authentication and use. The level must be entered and
|
||||||
@@ -342,8 +354,8 @@ url = "http://curl.haxx.se/docs/"
|
|||||||
This option can be used multiple times.
|
This option can be used multiple times.
|
||||||
.IP "--limit-rate <speed>"
|
.IP "--limit-rate <speed>"
|
||||||
Specify the maximum transfer rate you want curl to use. This feature is useful
|
Specify the maximum transfer rate you want curl to use. This feature is useful
|
||||||
if you have a limited pipe and you'd prefer you have your transfer not use
|
if you have a limited pipe and you'd like your transfer not use your entire
|
||||||
your entire bandwidth.
|
bandwidth.
|
||||||
|
|
||||||
The given speed is measured in bytes/second, unless a suffix is
|
The given speed is measured in bytes/second, unless a suffix is
|
||||||
appended. Appending 'k' or 'K' will count the number as kilobytes, 'm' or M'
|
appended. Appending 'k' or 'K' will count the number as kilobytes, 'm' or M'
|
||||||
@@ -425,6 +437,8 @@ or use several variables like:
|
|||||||
curl http://{site,host}.host[1-5].com -o "#1_#2"
|
curl http://{site,host}.host[1-5].com -o "#1_#2"
|
||||||
|
|
||||||
You may use this option as many times as you have number of URLs.
|
You may use this option as many times as you have number of URLs.
|
||||||
|
|
||||||
|
See also the --create-dirs option to create the local directories dynamically.
|
||||||
.IP "-O/--remote-name"
|
.IP "-O/--remote-name"
|
||||||
Write output to a local file named like the remote file we get. (Only
|
Write output to a local file named like the remote file we get. (Only
|
||||||
the file part of the remote file is used, the path is cut off.)
|
the file part of the remote file is used, the path is cut off.)
|
||||||
@@ -579,9 +593,9 @@ read for untrained humans.
|
|||||||
If this option is used several times, the last one will be used. (Added in
|
If this option is used several times, the last one will be used. (Added in
|
||||||
curl 7.9.7)
|
curl 7.9.7)
|
||||||
.IP "-u/--user <user:password>"
|
.IP "-u/--user <user:password>"
|
||||||
Specify user and password to use when fetching. See README.curl for detailed
|
Specify user and password to use when fetching. Read the MANUAL for detailed
|
||||||
examples of how to use this. If no password is specified, curl will
|
examples of how to use this. If no password is specified, curl will ask for it
|
||||||
ask for it interactively.
|
interactively.
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "-U/--proxy-user <user:password>"
|
.IP "-U/--proxy-user <user:password>"
|
||||||
@@ -607,6 +621,9 @@ info provided by curl.
|
|||||||
Note that if you want to see HTTP headers in the output, \fI-i/--include\fP
|
Note that if you want to see HTTP headers in the output, \fI-i/--include\fP
|
||||||
might be option you're looking for.
|
might be option you're looking for.
|
||||||
|
|
||||||
|
If you think this option still doesn't give you enough details, consider using
|
||||||
|
\fI--trace\fP or \fI--trace-ascii\fP instead.
|
||||||
|
|
||||||
If this option is used twice, the second will again disable verbose.
|
If this option is used twice, the second will again disable verbose.
|
||||||
.IP "-V/--version"
|
.IP "-V/--version"
|
||||||
Displays the full version of curl, libcurl and other 3rd party libraries
|
Displays the full version of curl, libcurl and other 3rd party libraries
|
||||||
@@ -820,13 +837,15 @@ FTP couldn't set binary. Couldn't change transfer method to binary.
|
|||||||
.IP 18
|
.IP 18
|
||||||
Partial file. Only a part of the file was transfered.
|
Partial file. Only a part of the file was transfered.
|
||||||
.IP 19
|
.IP 19
|
||||||
FTP couldn't RETR file. The RETR command failed.
|
FTP couldn't download/access the given file, the RETR (or similar) command
|
||||||
|
failed.
|
||||||
.IP 20
|
.IP 20
|
||||||
FTP write error. The transfer was reported bad by the server.
|
FTP write error. The transfer was reported bad by the server.
|
||||||
.IP 21
|
.IP 21
|
||||||
FTP quote error. A quote command returned error from the server.
|
FTP quote error. A quote command returned error from the server.
|
||||||
.IP 22
|
.IP 22
|
||||||
HTTP not found. The requested page was not found. This return code only
|
HTTP page not retrieved. The requested url was not found or returned another
|
||||||
|
error with the HTTP error code being 400 or above. This return code only
|
||||||
appears if --fail is used.
|
appears if --fail is used.
|
||||||
.IP 23
|
.IP 23
|
||||||
Write error. Curl couldn't write data to a local filesystem or similar.
|
Write error. Curl couldn't write data to a local filesystem or similar.
|
||||||
|
@@ -22,10 +22,13 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
#include <curl/types.h>
|
|
||||||
#include <curl/easy.h>
|
#if (LIBCURL_VERSION_NUM < 0x070907)
|
||||||
|
#error "too old libcurl version, get the latest!"
|
||||||
|
#endif
|
||||||
|
|
||||||
struct data {
|
struct data {
|
||||||
int type;
|
int type;
|
||||||
@@ -34,8 +37,8 @@ struct data {
|
|||||||
FILE *file;
|
FILE *file;
|
||||||
} handle;
|
} handle;
|
||||||
|
|
||||||
/* TODO: We should perhaps document the biggest possible buffer chunk we can
|
/* This is the documented biggest possible buffer chunk we can get from
|
||||||
get from libcurl in one single callback... */
|
libcurl in one single callback! */
|
||||||
char buffer[CURL_MAX_WRITE_SIZE];
|
char buffer[CURL_MAX_WRITE_SIZE];
|
||||||
|
|
||||||
char *readptr; /* read from here */
|
char *readptr; /* read from here */
|
||||||
@@ -62,6 +65,8 @@ size_t write_callback(char *buffer,
|
|||||||
url->readptr += size;
|
url->readptr += size;
|
||||||
url->bytes += size;
|
url->bytes += size;
|
||||||
|
|
||||||
|
fprintf(stderr, "callback %d size bytes\n", size);
|
||||||
|
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -72,6 +77,7 @@ URL_FILE *url_fopen(char *url, char *operation)
|
|||||||
|
|
||||||
URL_FILE *file;
|
URL_FILE *file;
|
||||||
int still_running;
|
int still_running;
|
||||||
|
(void)operation;
|
||||||
|
|
||||||
file = (URL_FILE *)malloc(sizeof(URL_FILE));
|
file = (URL_FILE *)malloc(sizeof(URL_FILE));
|
||||||
if(!file)
|
if(!file)
|
||||||
@@ -134,11 +140,13 @@ size_t url_fread(void *ptr, size_t size, size_t nmemb, URL_FILE *file)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!still_running) {
|
if(!still_running) {
|
||||||
printf("NO MORE RUNNING AROUND!\n");
|
printf("DONE RUNNING AROUND!\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
do {
|
||||||
|
|
||||||
FD_ZERO(&fdread);
|
FD_ZERO(&fdread);
|
||||||
FD_ZERO(&fdwrite);
|
FD_ZERO(&fdwrite);
|
||||||
FD_ZERO(&fdexcep);
|
FD_ZERO(&fdexcep);
|
||||||
@@ -160,6 +168,7 @@ size_t url_fread(void *ptr, size_t size, size_t nmemb, URL_FILE *file)
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
/* timeout or readable/writable sockets */
|
/* timeout or readable/writable sockets */
|
||||||
|
printf("select() returned %d!\n", rc);
|
||||||
do {
|
do {
|
||||||
file->m = curl_multi_perform(multi_handle, &still_running);
|
file->m = curl_multi_perform(multi_handle, &still_running);
|
||||||
|
|
||||||
@@ -171,10 +180,11 @@ size_t url_fread(void *ptr, size_t size, size_t nmemb, URL_FILE *file)
|
|||||||
|
|
||||||
|
|
||||||
if(!still_running)
|
if(!still_running)
|
||||||
printf("NO MORE RUNNING AROUND!\n");
|
printf("DONE RUNNING AROUND!\n");
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
} while(still_running && (file->bytes <= 0));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
printf("(fread) Skip network read\n");
|
printf("(fread) Skip network read\n");
|
||||||
@@ -204,7 +214,10 @@ int main(int argc, char *argv[])
|
|||||||
int nread;
|
int nread;
|
||||||
char buffer[256];
|
char buffer[256];
|
||||||
|
|
||||||
handle = url_fopen("http://www.haxx.se", "r");
|
(void)argc;
|
||||||
|
(void)argv;
|
||||||
|
|
||||||
|
handle = url_fopen("http://curl.haxx.se/", "r");
|
||||||
|
|
||||||
if(!handle) {
|
if(!handle) {
|
||||||
printf("couldn't url_fopen()\n");
|
printf("couldn't url_fopen()\n");
|
||||||
|
@@ -11,6 +11,9 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This example shows an FTP upload, with a rename of the file just after
|
* This example shows an FTP upload, with a rename of the file just after
|
||||||
|
@@ -74,6 +74,10 @@ int main(int argc, char **argv)
|
|||||||
* bytes big and contains the remote file.
|
* bytes big and contains the remote file.
|
||||||
*
|
*
|
||||||
* Do something nice with it!
|
* Do something nice with it!
|
||||||
|
*
|
||||||
|
* You should be aware of the fact that at this point we might have an
|
||||||
|
* allocated data block, and nothing has yet deallocated that data. So when
|
||||||
|
* you're done with it, you should free() it as a nice application.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@@ -83,7 +83,8 @@ int main(int argc, char **argv)
|
|||||||
default:
|
default:
|
||||||
/* one or more of curl's file descriptors say there's data to read
|
/* one or more of curl's file descriptors say there's data to read
|
||||||
or write */
|
or write */
|
||||||
curl_multi_perform(multi_handle, &still_running);
|
while(CURLM_CALL_MULTI_PERFORM ==
|
||||||
|
curl_multi_perform(multi_handle, &still_running));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -80,7 +80,8 @@ int main(int argc, char **argv)
|
|||||||
case 0:
|
case 0:
|
||||||
default:
|
default:
|
||||||
/* timeout or readable/writable sockets */
|
/* timeout or readable/writable sockets */
|
||||||
curl_multi_perform(multi_handle, &still_running);
|
while(CURLM_CALL_MULTI_PERFORM ==
|
||||||
|
curl_multi_perform(multi_handle, &still_running));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -74,7 +74,8 @@ int main(int argc, char **argv)
|
|||||||
case 0:
|
case 0:
|
||||||
default:
|
default:
|
||||||
/* timeout or readable/writable sockets */
|
/* timeout or readable/writable sockets */
|
||||||
curl_multi_perform(multi_handle, &still_running);
|
while(CURLM_CALL_MULTI_PERFORM ==
|
||||||
|
curl_multi_perform(multi_handle, &still_running));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream)
|
size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream)
|
||||||
{
|
{
|
||||||
written = fwrite(ptr, size, nmemb, (FILE *)stream);
|
int written = fwrite(ptr, size, nmemb, (FILE *)stream);
|
||||||
return written;
|
return written;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -66,7 +66,7 @@ int main(int argc, char **argv)
|
|||||||
curl = curl_easy_init();
|
curl = curl_easy_init();
|
||||||
if(curl) {
|
if(curl) {
|
||||||
/* what call to write: */
|
/* what call to write: */
|
||||||
curl_easy_setopt(curl, CURLOPT_URL, "HTTPS://curl.haxx.se");
|
curl_easy_setopt(curl, CURLOPT_URL, "HTTPS://your.favourite.ssl.site");
|
||||||
curl_easy_setopt(curl, CURLOPT_WRITEHEADER, headerfile);
|
curl_easy_setopt(curl, CURLOPT_WRITEHEADER, headerfile);
|
||||||
|
|
||||||
while(1) /* do some ugly short cut... */
|
while(1) /* do some ugly short cut... */
|
||||||
|
@@ -232,6 +232,7 @@ Multi-threading issues
|
|||||||
For SIGPIPE info see the UNIX Socket FAQ at
|
For SIGPIPE info see the UNIX Socket FAQ at
|
||||||
http://www.unixguide.net/network/socketfaq/2.22.shtml
|
http://www.unixguide.net/network/socketfaq/2.22.shtml
|
||||||
|
|
||||||
|
Also, note that CURLOPT_DNS_USE_GLOBAL_CACHE is not thread-safe.
|
||||||
|
|
||||||
When It Doesn't Work
|
When It Doesn't Work
|
||||||
|
|
||||||
@@ -255,6 +256,9 @@ When It Doesn't Work
|
|||||||
possible of your code that uses libcurl, operating system name and version,
|
possible of your code that uses libcurl, operating system name and version,
|
||||||
compiler name and version etc.
|
compiler name and version etc.
|
||||||
|
|
||||||
|
If CURLOPT_VERBOSE is not enough, you increase the level of debug data your
|
||||||
|
application receive by using the CURLOPT_DEBUGFUNCTION.
|
||||||
|
|
||||||
Getting some in-depth knowledge about the protocols involved is never wrong,
|
Getting some in-depth knowledge about the protocols involved is never wrong,
|
||||||
and if you're trying to do funny things, you might very well understand
|
and if you're trying to do funny things, you might very well understand
|
||||||
libcurl and how to use it better if you study the appropriate RFC documents
|
libcurl and how to use it better if you study the appropriate RFC documents
|
||||||
@@ -293,8 +297,8 @@ Upload Data to a Remote Site
|
|||||||
curl_easy_setopt(easyhandle, CURLOPT_UPLOAD, TRUE);
|
curl_easy_setopt(easyhandle, CURLOPT_UPLOAD, TRUE);
|
||||||
|
|
||||||
A few protocols won't behave properly when uploads are done without any prior
|
A few protocols won't behave properly when uploads are done without any prior
|
||||||
knowledge of the expected file size. HTTP PUT is one example [1]. So, set the
|
knowledge of the expected file size. So, set the upload file size using the
|
||||||
upload file size using the CURLOPT_INFILESIZE like this:
|
CURLOPT_INFILESIZE for all known file sizes like this[1]:
|
||||||
|
|
||||||
curl_easy_setopt(easyhandle, CURLOPT_INFILESIZE, file_size);
|
curl_easy_setopt(easyhandle, CURLOPT_INFILESIZE, file_size);
|
||||||
|
|
||||||
@@ -404,7 +408,7 @@ HTTP POSTing
|
|||||||
headers = curl_slist_append(headers, "Content-Type: text/xml");
|
headers = curl_slist_append(headers, "Content-Type: text/xml");
|
||||||
|
|
||||||
/* post binary data */
|
/* post binary data */
|
||||||
curl_easy_setopt(easyhandle, CURLOPT_POSTFIELD, binaryptr);
|
curl_easy_setopt(easyhandle, CURLOPT_POSTFIELDS, binaryptr);
|
||||||
|
|
||||||
/* set the size of the postfields data */
|
/* set the size of the postfields data */
|
||||||
curl_easy_setopt(easyhandle, CURLOPT_POSTFIELDSIZE, 23);
|
curl_easy_setopt(easyhandle, CURLOPT_POSTFIELDSIZE, 23);
|
||||||
@@ -726,6 +730,35 @@ Persistancy Is The Way to Happiness
|
|||||||
CURLOPT_FORBID_REUSE to TRUE.
|
CURLOPT_FORBID_REUSE to TRUE.
|
||||||
|
|
||||||
|
|
||||||
|
HTTP Headers Used by libcurl
|
||||||
|
|
||||||
|
When you use libcurl to do HTTP requeests, it'll pass along a series of
|
||||||
|
headers automaticly. It might be good for you to know and understand these
|
||||||
|
ones.
|
||||||
|
|
||||||
|
Host
|
||||||
|
|
||||||
|
This header is required by HTTP 1.1 and even many 1.0 servers and should
|
||||||
|
be the name of the server we want to talk to. This includes the port
|
||||||
|
number if anything but default.
|
||||||
|
|
||||||
|
Pragma
|
||||||
|
|
||||||
|
"no-cache". Tells a possible proxy to not grap a copy from the cache but
|
||||||
|
to fetch a fresh one.
|
||||||
|
|
||||||
|
Accept:
|
||||||
|
|
||||||
|
"image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*". Cloned from a
|
||||||
|
browser once a hundred years ago.
|
||||||
|
|
||||||
|
Expect:
|
||||||
|
|
||||||
|
When doing multi-part formposts, libcurl will set this header to
|
||||||
|
"100-continue" to ask the server for an "OK" message before it proceeds
|
||||||
|
with sending the data part of the post.
|
||||||
|
|
||||||
|
|
||||||
Customizing Operations
|
Customizing Operations
|
||||||
|
|
||||||
There is an ongoing development today where more and more protocols are built
|
There is an ongoing development today where more and more protocols are built
|
||||||
@@ -738,20 +771,24 @@ Customizing Operations
|
|||||||
|
|
||||||
libcurl is your friend here too.
|
libcurl is your friend here too.
|
||||||
|
|
||||||
If just changing the actual HTTP request keyword is what you want, like when
|
CUSTOMREQUEST
|
||||||
GET, HEAD or POST is not good enough for you, CURLOPT_CUSTOMREQUEST is there
|
|
||||||
for you. It is very simple to use:
|
If just changing the actual HTTP request keyword is what you want, like
|
||||||
|
when GET, HEAD or POST is not good enough for you, CURLOPT_CUSTOMREQUEST
|
||||||
|
is there for you. It is very simple to use:
|
||||||
|
|
||||||
curl_easy_setopt(easyhandle, CURLOPT_CUSTOMREQUEST, "MYOWNRUQUEST");
|
curl_easy_setopt(easyhandle, CURLOPT_CUSTOMREQUEST, "MYOWNRUQUEST");
|
||||||
|
|
||||||
When using the custom request, you change the request keyword of the actual
|
When using the custom request, you change the request keyword of the
|
||||||
request you are performing. Thus, by default you make GET request but you can
|
actual request you are performing. Thus, by default you make GET request
|
||||||
also make a POST operation (as described before) and then replace the POST
|
but you can also make a POST operation (as described before) and then
|
||||||
keyword if you want to. You're the boss.
|
replace the POST keyword if you want to. You're the boss.
|
||||||
|
|
||||||
|
Modify Headers
|
||||||
|
|
||||||
HTTP-like protocols pass a series of headers to the server when doing the
|
HTTP-like protocols pass a series of headers to the server when doing the
|
||||||
request, and you're free to pass any amount of extra headers that you think
|
request, and you're free to pass any amount of extra headers that you
|
||||||
fit. Adding headers are this easy:
|
think fit. Adding headers are this easy:
|
||||||
|
|
||||||
struct curl_slist *headers=NULL; /* init to NULL is important */
|
struct curl_slist *headers=NULL; /* init to NULL is important */
|
||||||
|
|
||||||
@@ -766,43 +803,59 @@ Customizing Operations
|
|||||||
curl_slist_free_all(headers); /* free the header list */
|
curl_slist_free_all(headers); /* free the header list */
|
||||||
|
|
||||||
... and if you think some of the internally generated headers, such as
|
... and if you think some of the internally generated headers, such as
|
||||||
User-Agent:, Accept: or Host: don't contain the data you want them to
|
Accept: or Host: don't contain the data you want them to contain, you can
|
||||||
contain, you can replace them by simply setting them too:
|
replace them by simply setting them too:
|
||||||
|
|
||||||
headers = curl_slist_append(headers, "User-Agent: 007");
|
headers = curl_slist_append(headers, "Accept: Agent-007");
|
||||||
headers = curl_slist_append(headers, "Host: munged.host.line");
|
headers = curl_slist_append(headers, "Host: munged.host.line");
|
||||||
|
|
||||||
If you replace an existing header with one with no contents, you will prevent
|
Delete Headers
|
||||||
the header from being sent. Like if you want to completely prevent the
|
|
||||||
"Accept:" header to be sent, you can disable it with code similar to this:
|
If you replace an existing header with one with no contents, you will
|
||||||
|
prevent the header from being sent. Like if you want to completely prevent
|
||||||
|
the "Accept:" header to be sent, you can disable it with code similar to
|
||||||
|
this:
|
||||||
|
|
||||||
headers = curl_slist_append(headers, "Accept:");
|
headers = curl_slist_append(headers, "Accept:");
|
||||||
|
|
||||||
Both replacing and cancelling internal headers should be done with careful
|
Both replacing and cancelling internal headers should be done with careful
|
||||||
consideration and you should be aware that you may violate the HTTP protocol
|
consideration and you should be aware that you may violate the HTTP
|
||||||
when doing so.
|
protocol when doing so.
|
||||||
|
|
||||||
|
Enforcing chunked transfer-encoding
|
||||||
|
|
||||||
|
By making sure a request uses the custom header "Transfer-Encoding:
|
||||||
|
chunked" when doing a non-GET HTTP operation, libcurl will switch over to
|
||||||
|
"chunked" upload, even though the size of the data to upload might be
|
||||||
|
known. By default, libcurl usually switches over to chunked upload
|
||||||
|
automaticly if the upload data size is unknown.
|
||||||
|
|
||||||
|
HTTP Version
|
||||||
|
|
||||||
There's only one aspect left in the HTTP requests that we haven't yet
|
There's only one aspect left in the HTTP requests that we haven't yet
|
||||||
mentioned how to modify: the version field. All HTTP requests includes the
|
mentioned how to modify: the version field. All HTTP requests includes the
|
||||||
version number to tell the server which version we support. libcurl speak
|
version number to tell the server which version we support. libcurl speak
|
||||||
HTTP 1.1 by default. Some very old servers don't like getting 1.1-requests
|
HTTP 1.1 by default. Some very old servers don't like getting 1.1-requests
|
||||||
and when dealing with stubborn old things like that, you can tell libcurl to
|
and when dealing with stubborn old things like that, you can tell libcurl
|
||||||
use 1.0 instead by doing something like this:
|
to use 1.0 instead by doing something like this:
|
||||||
|
|
||||||
curl_easy_setopt(easyhandle, CURLOPT_HTTP_VERSION, CURLHTTP_VERSION_1_0);
|
curl_easy_setopt(easyhandle, CURLOPT_HTTP_VERSION,
|
||||||
|
CURLHTTP_VERSION_1_0);
|
||||||
|
|
||||||
Not all protocols are HTTP-like, and thus the above may not help you when you
|
FTP Custom Commands
|
||||||
want to make for example your FTP transfers to behave differently.
|
|
||||||
|
Not all protocols are HTTP-like, and thus the above may not help you when
|
||||||
|
you want to make for example your FTP transfers to behave differently.
|
||||||
|
|
||||||
Sending custom commands to a FTP server means that you need to send the
|
Sending custom commands to a FTP server means that you need to send the
|
||||||
comands exactly as the FTP server expects them (RFC959 is a good guide here),
|
comands exactly as the FTP server expects them (RFC959 is a good guide
|
||||||
and you can only use commands that work on the control-connection alone. All
|
here), and you can only use commands that work on the control-connection
|
||||||
kinds of commands that requires data interchange and thus needs a
|
alone. All kinds of commands that requires data interchange and thus needs
|
||||||
data-connection must be left to libcurl's own judgement. Also be aware that
|
a data-connection must be left to libcurl's own judgement. Also be aware
|
||||||
libcurl will do its very best to change directory to the target directory
|
that libcurl will do its very best to change directory to the target
|
||||||
before doing any transfer, so if you change directory (with CWD or similar)
|
directory before doing any transfer, so if you change directory (with CWD
|
||||||
you might confuse libcurl and then it might not attempt to transfer the file
|
or similar) you might confuse libcurl and then it might not attempt to
|
||||||
in the correct remote directory.
|
transfer the file in the correct remote directory.
|
||||||
|
|
||||||
A little example that deletes a given file before an operation:
|
A little example that deletes a given file before an operation:
|
||||||
|
|
||||||
@@ -815,24 +868,32 @@ Customizing Operations
|
|||||||
|
|
||||||
curl_slist_free_all(headers); /* free the header list */
|
curl_slist_free_all(headers); /* free the header list */
|
||||||
|
|
||||||
If you would instead want this operation (or chain of operations) to happen
|
If you would instead want this operation (or chain of operations) to
|
||||||
_after_ the data transfer took place the option to curl_easy_setopt() would
|
happen _after_ the data transfer took place the option to
|
||||||
instead be called CURLOPT_POSTQUOTE and used the exact same way.
|
curl_easy_setopt() would instead be called CURLOPT_POSTQUOTE and used the
|
||||||
|
exact same way.
|
||||||
|
|
||||||
The custom FTP command will be issued to the server in the same order they
|
The custom FTP command will be issued to the server in the same order they
|
||||||
are added to the list, and if a command gets an error code returned back from
|
are added to the list, and if a command gets an error code returned back
|
||||||
the server, no more commands will be issued and libcurl will bail out with an
|
from the server, no more commands will be issued and libcurl will bail out
|
||||||
error code (CURLE_FTP_QUOTE_ERROR). Note that if you use CURLOPT_QUOTE to
|
with an error code (CURLE_FTP_QUOTE_ERROR). Note that if you use
|
||||||
send commands before a transfer, no transfer will actually take place when a
|
CURLOPT_QUOTE to send commands before a transfer, no transfer will
|
||||||
quote command has failed.
|
actually take place when a quote command has failed.
|
||||||
|
|
||||||
If you set the CURLOPT_HEADER to true, you will tell libcurl to get
|
If you set the CURLOPT_HEADER to true, you will tell libcurl to get
|
||||||
information about the target file and output "headers" about it. The headers
|
information about the target file and output "headers" about it. The
|
||||||
will be in "HTTP-style", looking like they do in HTTP.
|
headers will be in "HTTP-style", looking like they do in HTTP.
|
||||||
|
|
||||||
The option to enable headers or to run custom FTP commands may be useful to
|
The option to enable headers or to run custom FTP commands may be useful
|
||||||
combine with CURLOPT_NOBODY. If this option is set, no actual file content
|
to combine with CURLOPT_NOBODY. If this option is set, no actual file
|
||||||
transfer will be performed.
|
content transfer will be performed.
|
||||||
|
|
||||||
|
FTP Custom CUSTOMREQUEST
|
||||||
|
|
||||||
|
If you do what list the contents of a FTP directory using your own defined
|
||||||
|
FTP command, CURLOPT_CUSTOMREQUEST will do just that. "NLST" is the
|
||||||
|
default one for listing directories but you're free to pass in your idea
|
||||||
|
of a good alternative.
|
||||||
|
|
||||||
|
|
||||||
Cookies Without Chocolate Chips
|
Cookies Without Chocolate Chips
|
||||||
@@ -1007,19 +1068,30 @@ SSL, Certificates and Other Tricks
|
|||||||
|
|
||||||
[ seeding, passwords, keys, certificates, ENGINE, ca certs ]
|
[ seeding, passwords, keys, certificates, ENGINE, ca certs ]
|
||||||
|
|
||||||
|
Multiple Transfers Using the multi Interface
|
||||||
|
|
||||||
|
The easy interface as described in detail in this document is a synchronous
|
||||||
|
interface that transfers one file at a time and doesn't return until its
|
||||||
|
done.
|
||||||
|
|
||||||
|
The multi interface on the other hand, allows your program to transfer
|
||||||
|
multiple files in both directions at the same time, without forcing you to
|
||||||
|
use multiple threads.
|
||||||
|
|
||||||
|
[fill in lots of more multi stuff here]
|
||||||
|
|
||||||
Future
|
Future
|
||||||
|
|
||||||
[ multi interface, sharing between handles, mutexes, pipelining ]
|
[ sharing between handles, mutexes, pipelining ]
|
||||||
|
|
||||||
|
|
||||||
-----
|
-----
|
||||||
Footnotes:
|
Footnotes:
|
||||||
|
|
||||||
[1] = HTTP PUT without knowing the size prior to transfer is indeed possible,
|
[1] = libcurl 7.10.3 and later have the ability to switch over to chunked
|
||||||
but libcurl does not support the chunked transfers on uploading that is
|
Tranfer-Encoding in cases were HTTP uploads are done with data of an
|
||||||
necessary for this feature to work. We'd gratefully appreciate patches
|
unknown size.
|
||||||
that bring this functionality...
|
|
||||||
|
|
||||||
[2] = This happens on Windows machines when libcurl is built and used as a
|
[2] = This happens on Windows machines when libcurl is built and used as a
|
||||||
DLL. However, you can still do this on Windows if you link with a static
|
DLL. However, you can still do this on Windows if you link with a static
|
||||||
|
@@ -115,8 +115,12 @@ Pass a pointer to a 'char *' to receive the content-type of the downloaded
|
|||||||
object. This is the value read from the Content-Type: field. If you get NULL,
|
object. This is the value read from the Content-Type: field. If you get NULL,
|
||||||
it means that the server didn't send a valid Content-Type header or that the
|
it means that the server didn't send a valid Content-Type header or that the
|
||||||
protocol used doesn't support this. (Added in 7.9.4)
|
protocol used doesn't support this. (Added in 7.9.4)
|
||||||
|
.TP
|
||||||
|
.B CURLINFO_PRIVATE
|
||||||
|
Pass a pointer to a 'char *' to receive the pointer to the private data
|
||||||
|
associated with the curl handle (set with the CURLOPT_PRIVATE option to curl_easy_setopt).
|
||||||
|
(Added in 7.10.3)
|
||||||
.PP
|
.PP
|
||||||
|
|
||||||
.SH RETURN VALUE
|
.SH RETURN VALUE
|
||||||
If the operation was successful, CURLE_OK is returned. Otherwise an
|
If the operation was successful, CURLE_OK is returned. Otherwise an
|
||||||
appropriate error code will be returned.
|
appropriate error code will be returned.
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
.\" nroff -man [file]
|
.\" nroff -man [file]
|
||||||
.\" $Id$
|
.\" $Id$
|
||||||
.\"
|
.\"
|
||||||
.TH curl_easy_setopt 3 "13 Nov 2002" "libcurl 7.10" "libcurl Manual"
|
.TH curl_easy_setopt 3 "3 Dec 2002" "libcurl 7.10.3" "libcurl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
curl_easy_setopt - set options for a curl easy handle
|
curl_easy_setopt - set options for a curl easy handle
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@@ -70,10 +70,10 @@ Function pointer that should match the following prototype: \fBsize_t
|
|||||||
function( void *ptr, size_t size, size_t nmemb, void *stream);\fP This
|
function( void *ptr, size_t size, size_t nmemb, void *stream);\fP This
|
||||||
function gets called by libcurl as soon as there is data reveiced that needs
|
function gets called by libcurl as soon as there is data reveiced that needs
|
||||||
to be saved. The size of the data pointed to by \fIptr\fP is \fIsize\fP
|
to be saved. The size of the data pointed to by \fIptr\fP is \fIsize\fP
|
||||||
multiplied with \fInmemb\fP. Return the number of bytes actually taken care
|
multiplied with \fInmemb\fP, it will not be zero terminated. Return the number
|
||||||
of. If that amount differs from the amount passed to your function, it'll
|
of bytes actually taken care of. If that amount differs from the amount passed
|
||||||
signal an error to the library and it will abort the transfer and return
|
to your function, it'll signal an error to the library and it will abort the
|
||||||
\fICURLE_WRITE_ERROR\fP.
|
transfer and return \fICURLE_WRITE_ERROR\fP.
|
||||||
|
|
||||||
Set the \fIstream\fP argument with the \fBCURLOPT_FILE\fP option.
|
Set the \fIstream\fP argument with the \fBCURLOPT_FILE\fP option.
|
||||||
|
|
||||||
@@ -175,6 +175,10 @@ curl_debug_callback (CURL *, curl_infotype, char *, size_t, void *);\fP
|
|||||||
This function will receive debug information if CURLOPT_VERBOSE is
|
This function will receive debug information if CURLOPT_VERBOSE is
|
||||||
enabled. The curl_infotype argument specifies what kind of information it
|
enabled. The curl_infotype argument specifies what kind of information it
|
||||||
is. This funtion must return 0.
|
is. This funtion must return 0.
|
||||||
|
|
||||||
|
NOTE: the data pointed to by the char * passed to this function WILL NOT be
|
||||||
|
zero terminated, but will be exactly of the size as told by the size_t
|
||||||
|
argument.
|
||||||
.TP
|
.TP
|
||||||
.B CURLOPT_DEBUGDATA
|
.B CURLOPT_DEBUGDATA
|
||||||
Pass a pointer to whatever you want passed in to your CURLOPT_DEBUGFUNCTION in
|
Pass a pointer to whatever you want passed in to your CURLOPT_DEBUGFUNCTION in
|
||||||
@@ -311,8 +315,16 @@ user.
|
|||||||
.TP
|
.TP
|
||||||
.B CURLOPT_USERPWD
|
.B CURLOPT_USERPWD
|
||||||
Pass a char * as parameter, which should be [user name]:[password] to use for
|
Pass a char * as parameter, which should be [user name]:[password] to use for
|
||||||
the connection. If the password is left out, you will be prompted for it.
|
the connection. If both the colon and password is left out, you will be
|
||||||
\fICURLOPT_PASSWDFUNCTION\fP can be used to set your own prompt function.
|
prompted for it while using a colon with no password will make libcurl use an
|
||||||
|
empty password. \fICURLOPT_PASSWDFUNCTION\fP can be used to set your own
|
||||||
|
prompt function.
|
||||||
|
|
||||||
|
When using HTTP and CURLOPT_FOLLOWLOCATION, libcurl might perform several
|
||||||
|
requests to possibly different hosts. libcurl will only send this user and
|
||||||
|
password information to hosts using the initial host name, so if libcurl
|
||||||
|
follows locations to other hosts it will not send the user and password to
|
||||||
|
those. This is enforced to prevent accidental information leakage.
|
||||||
.TP
|
.TP
|
||||||
.B CURLOPT_PROXYUSERPWD
|
.B CURLOPT_PROXYUSERPWD
|
||||||
Pass a char * as parameter, which should be [user name]:[password] to use for
|
Pass a char * as parameter, which should be [user name]:[password] to use for
|
||||||
@@ -337,6 +349,11 @@ new location and follow new Location: headers all the way until no more such
|
|||||||
headers are returned. \fICURLOPT_MAXREDIRS\fP can be used to limit the number
|
headers are returned. \fICURLOPT_MAXREDIRS\fP can be used to limit the number
|
||||||
of redirects libcurl will follow.
|
of redirects libcurl will follow.
|
||||||
.TP
|
.TP
|
||||||
|
.B CURLOPT_UNRESTRICTED_AUTH
|
||||||
|
A non-zero parameter tells the library it can continue to send authentication
|
||||||
|
(user+password) when following locations, even when hostname changed. Note
|
||||||
|
that this is meaningful only when setting \fICURLOPT_FOLLOWLOCATION\fP.
|
||||||
|
.TP
|
||||||
.B CURLOPT_MAXREDIRS
|
.B CURLOPT_MAXREDIRS
|
||||||
Pass a long. The set number will be the redirection limit. If that many
|
Pass a long. The set number will be the redirection limit. If that many
|
||||||
redirections have been followed, the next redirect will cause an error
|
redirections have been followed, the next redirect will cause an error
|
||||||
@@ -357,9 +374,14 @@ will imply this option.
|
|||||||
.TP
|
.TP
|
||||||
.B CURLOPT_POSTFIELDS
|
.B CURLOPT_POSTFIELDS
|
||||||
Pass a char * as parameter, which should be the full data to post in a HTTP
|
Pass a char * as parameter, which should be the full data to post in a HTTP
|
||||||
post operation. This is a normal application/x-www-form-urlencoded kind, which
|
post operation. You need to make sure that the data is formatted the way you
|
||||||
is the most commonly used one by HTML forms. See also the CURLOPT_POST. Since
|
want the server to receive it. libcurl will not convert or encode it for
|
||||||
7.8, using CURLOPT_POSTFIELDS implies CURLOPT_POST.
|
you. Most web servers will assume this data to be url-encoded. Take note.
|
||||||
|
|
||||||
|
This POST is a normal application/x-www-form-urlencoded kind (and libcurl will
|
||||||
|
set that Content-Type by default when this option is used), which is the most
|
||||||
|
commonly used one by HTML forms. See also the CURLOPT_POST. Using
|
||||||
|
CURLOPT_POSTFIELDS implies CURLOPT_POST.
|
||||||
|
|
||||||
\fBNote:\fP to make multipart/formdata posts (aka rfc1867-posts), check out
|
\fBNote:\fP to make multipart/formdata posts (aka rfc1867-posts), check out
|
||||||
the \fICURLOPT_HTTPPOST\fP option.
|
the \fICURLOPT_HTTPPOST\fP option.
|
||||||
@@ -401,11 +423,31 @@ list. If you add a header that is otherwise generated and used by libcurl
|
|||||||
internally, your added one will be used instead. If you add a header with no
|
internally, your added one will be used instead. If you add a header with no
|
||||||
contents as in 'Accept:' (no data on the right side of the colon), the
|
contents as in 'Accept:' (no data on the right side of the colon), the
|
||||||
internally used header will get disabled. Thus, using this option you can add
|
internally used header will get disabled. Thus, using this option you can add
|
||||||
new headers, replace internal headers and remove internal headers.
|
new headers, replace internal headers and remove internal headers. The
|
||||||
|
headers included in the linked list must not be CRLF-terminated, because
|
||||||
|
curl adds CRLF after each header item. Failure to comply with this will
|
||||||
|
result in strange bugs because the server will most likely ignore part
|
||||||
|
of the headers you specified.
|
||||||
|
|
||||||
\fBNOTE:\fPThe most commonly replaced headers have "shortcuts" in the options
|
\fBNOTE:\fPThe most commonly replaced headers have "shortcuts" in the options
|
||||||
CURLOPT_COOKIE, CURLOPT_USERAGENT and CURLOPT_REFERER.
|
CURLOPT_COOKIE, CURLOPT_USERAGENT and CURLOPT_REFERER.
|
||||||
.TP
|
.TP
|
||||||
|
.B CURLOPT_HTTP200ALIASES
|
||||||
|
Pass a pointer to a linked list of aliases to be treated as valid HTTP 200
|
||||||
|
responses. Some servers respond with a custom header response line. For
|
||||||
|
example, IceCast servers respond with "ICY 200 OK". By including this string
|
||||||
|
in your list of aliases, the response will be treated as a valid HTTP header
|
||||||
|
line such as "HTTP/1.0 200 OK". (Added in 7.10.3)
|
||||||
|
|
||||||
|
The linked list should be a fully valid list of struct curl_slist structs, and
|
||||||
|
be properly filled in. Use \fIcurl_slist_append(3)\fP to create the list and
|
||||||
|
\fIcurl_slist_free_all(3)\fP to clean up an entire list.
|
||||||
|
|
||||||
|
\fBNOTE:\fPThe alias itself is not parsed for any version strings. So if your
|
||||||
|
alias is "MYHTTP/9.9", Libcurl will not treat the server as responding with
|
||||||
|
HTTP version 9.9. Instead Libcurl will use the value set by option
|
||||||
|
\fICURLOPT_HTTP_VERSION\fP.
|
||||||
|
.TP
|
||||||
.B CURLOPT_COOKIE
|
.B CURLOPT_COOKIE
|
||||||
Pass a pointer to a zero terminated string as parameter. It will be used to
|
Pass a pointer to a zero terminated string as parameter. It will be used to
|
||||||
set a cookie in the http request. The format of the string should be
|
set a cookie in the http request. The format of the string should be
|
||||||
@@ -478,6 +520,9 @@ tells the remote server to connect to our specified IP address. The string may
|
|||||||
be a plain IP address, a host name, an network interface name (under Unix) or
|
be a plain IP address, a host name, an network interface name (under Unix) or
|
||||||
just a '-' letter to let the library use your systems default IP
|
just a '-' letter to let the library use your systems default IP
|
||||||
address. Default FTP operations are passive, and thus won't use PORT.
|
address. Default FTP operations are passive, and thus won't use PORT.
|
||||||
|
|
||||||
|
You disable PORT again and go back to using the passive version by setting
|
||||||
|
this option to NULL.
|
||||||
.TP
|
.TP
|
||||||
.B CURLOPT_QUOTE
|
.B CURLOPT_QUOTE
|
||||||
Pass a pointer to a linked list of FTP commands to pass to the server prior to
|
Pass a pointer to a linked list of FTP commands to pass to the server prior to
|
||||||
@@ -712,10 +757,13 @@ Pass a long as parameter. Set what version of SSL to attempt to use, 2 or
|
|||||||
servers make this difficult why you at times may have to use this option.
|
servers make this difficult why you at times may have to use this option.
|
||||||
.TP
|
.TP
|
||||||
.B CURLOPT_SSL_VERIFYPEER
|
.B CURLOPT_SSL_VERIFYPEER
|
||||||
Pass a long that is set to a non-zero value to make curl verify the peer's
|
Pass a long that is set to a zero value to stop curl from verifying the peer's
|
||||||
certificate. The certificate to verify against must be specified with the
|
certificate (7.10 starting setting this option to TRUE by default). Alternate
|
||||||
CURLOPT_CAINFO option (Added in 7.4.2) or a certificate directory must be specified
|
certificates to verify against can be specified with the CURLOPT_CAINFO option
|
||||||
with the CURLOPT_CAPATH option (Added in 7.9.8).
|
(Added in 7.4.2) or a certificate directory can be specified with the
|
||||||
|
CURLOPT_CAPATH option (Added in 7.9.8). As of 7.10, curl installs a default
|
||||||
|
bundle. CURLOPT_SSL_VERIFYHOST may also need to be set to 1 or 0 if
|
||||||
|
CURLOPT_SSL_VERIFYPEER is disabled (it defaults to 2).
|
||||||
.TP
|
.TP
|
||||||
.B CURLOPT_CAINFO
|
.B CURLOPT_CAINFO
|
||||||
Pass a char * to a zero terminated string naming a file holding one or more
|
Pass a char * to a zero terminated string naming a file holding one or more
|
||||||
@@ -742,7 +790,8 @@ socket. It will be used to seed the random engine for SSL.
|
|||||||
.B CURLOPT_SSL_VERIFYHOST
|
.B CURLOPT_SSL_VERIFYHOST
|
||||||
Pass a long. Set if we should verify the Common name from the peer certificate
|
Pass a long. Set if we should verify the Common name from the peer certificate
|
||||||
in the SSL handshake, set 1 to check existence, 2 to ensure that it matches
|
in the SSL handshake, set 1 to check existence, 2 to ensure that it matches
|
||||||
the provided hostname. (Added in 7.8.1)
|
the provided hostname. This is by default set to 2. (Added in 7.8.1, default
|
||||||
|
changed in 7.10)
|
||||||
.TP
|
.TP
|
||||||
.B CURLOPT_SSL_CIPHER_LIST
|
.B CURLOPT_SSL_CIPHER_LIST
|
||||||
Pass a char *, pointing to a zero terminated string holding the list of
|
Pass a char *, pointing to a zero terminated string holding the list of
|
||||||
@@ -763,6 +812,13 @@ krb4 awareness. This is a string, 'clear', 'safe', 'confidential' or
|
|||||||
will be used. Set the string to NULL to disable kerberos4. The kerberos
|
will be used. Set the string to NULL to disable kerberos4. The kerberos
|
||||||
support only works for FTP. (Added in 7.3)
|
support only works for FTP. (Added in 7.3)
|
||||||
.PP
|
.PP
|
||||||
|
.SH OTHER OPTIONS
|
||||||
|
.TP 0.4i
|
||||||
|
.B CURLOPT_PRIVATE
|
||||||
|
Pass a char * as parameter, pointing to data that should be associated with
|
||||||
|
the curl handle. The pointer can be subsequently retrieved using the
|
||||||
|
CURLINFO_PRIVATE options to curl_easy_getinfo. (Added in 7.10.3)
|
||||||
|
.PP
|
||||||
.SH RETURN VALUE
|
.SH RETURN VALUE
|
||||||
CURLE_OK (zero) means that the option was set properly, non-zero means an
|
CURLE_OK (zero) means that the option was set properly, non-zero means an
|
||||||
error occurred as \fI<curl/curl.h>\fP defines. See the \fIlibcurl-errors.3\fP
|
error occurred as \fI<curl/curl.h>\fP defines. See the \fIlibcurl-errors.3\fP
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
.\" $Id$
|
.\" $Id$
|
||||||
.\"
|
.\"
|
||||||
.TH curl_multi_info_read 3 "1 March 2002" "libcurl 7.9.5" "libcurl Manual"
|
.TH curl_multi_info_read 3 "27 Feb 2002" "libcurl 7.10.3" "libcurl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
curl_multi_info_read - read multi stack informationals
|
curl_multi_info_read - read multi stack informationals
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@@ -10,15 +10,15 @@ CURLMsg *curl_multi_info_read( CURLM *multi_handle,
|
|||||||
int *msgs_in_queue);
|
int *msgs_in_queue);
|
||||||
.ad
|
.ad
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
Ask the multi handle if there's any messages/informationals from the
|
Ask the multi handle if there are any messages/informationals from the
|
||||||
individual transfers. Messages include informationals such as an error code
|
individual transfers. Messages may include informationals such as an error
|
||||||
from the transfer or just the fact that a transfer is completed. More details
|
code from the transfer or just the fact that a transfer is completed. More
|
||||||
on these should be written down as well.
|
details on these should be written down as well.
|
||||||
|
|
||||||
Repeated calls to this function will return a new struct each time, until a
|
Repeated calls to this function will return a new struct each time, until a
|
||||||
special "end of msgs" struct is returned as a signal that there is no more to
|
NULL is returned as a signal that there is no more to get at this point. The
|
||||||
get at this point. The integer pointed to with \fImsgs_in_queue\fP will
|
integer pointed to with \fImsgs_in_queue\fP will contain the number of
|
||||||
contain the number of remaining messages after this function was called.
|
remaining messages after this function was called.
|
||||||
|
|
||||||
The data the returned pointer points to will not survive calling
|
The data the returned pointer points to will not survive calling
|
||||||
curl_multi_cleanup().
|
curl_multi_cleanup().
|
||||||
@@ -26,10 +26,19 @@ curl_multi_cleanup().
|
|||||||
The 'CURLMsg' struct is very simple and only contain very basic informations.
|
The 'CURLMsg' struct is very simple and only contain very basic informations.
|
||||||
If more involved information is wanted, the particular "easy handle" in
|
If more involved information is wanted, the particular "easy handle" in
|
||||||
present in that struct and can thus be used in subsequent regular
|
present in that struct and can thus be used in subsequent regular
|
||||||
curl_easy_getinfo() calls (or similar).
|
curl_easy_getinfo() calls (or similar):
|
||||||
|
|
||||||
|
struct CURLMsg {
|
||||||
|
CURLMSG msg; /* what this message means */
|
||||||
|
CURL *easy_handle; /* the handle it concerns */
|
||||||
|
union {
|
||||||
|
void *whatever; /* message-specific data */
|
||||||
|
CURLcode result; /* return code for transfer */
|
||||||
|
} data;
|
||||||
|
};
|
||||||
.SH "RETURN VALUE"
|
.SH "RETURN VALUE"
|
||||||
A pointer to a filled-in struct, or NULL if it failed or ran out of
|
A pointer to a filled-in struct, or NULL if it failed or ran out of
|
||||||
structs. It also writes the number of messages left in the queue (after this
|
structs. It also writes the number of messages left in the queue (after this
|
||||||
read) in the integer the second argument points to.
|
read) in the integer the second argument points to.
|
||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
.BR curl_multi_cleanup "(3)," curl_multi_init "(3)," curl_multi_perform "(3)"
|
.BR curl_multi_cleanup "(3), " curl_multi_init "(3), " curl_multi_perform "(3)"
|
||||||
|
@@ -19,6 +19,12 @@ integer-pointer.
|
|||||||
.SH "RETURN VALUE"
|
.SH "RETURN VALUE"
|
||||||
CURLMcode type, general libcurl multi interface error code.
|
CURLMcode type, general libcurl multi interface error code.
|
||||||
|
|
||||||
|
If you receive \fICURLM_CALL_MULTI_PERFORM\fP, this basicly means that you
|
||||||
|
should call \fIcurl_multi_perform\fP again, before you select() on more
|
||||||
|
actions. You don't have to do it immediately, but the return code means that
|
||||||
|
libcurl may have more data available to return or that there may be more data
|
||||||
|
to send off before it is "satisfied".
|
||||||
|
|
||||||
NOTE that this only returns errors etc regarding the whole multi stack. There
|
NOTE that this only returns errors etc regarding the whole multi stack. There
|
||||||
might still have occurred problems on invidual transfers even when this
|
might still have occurred problems on invidual transfers even when this
|
||||||
function returns OK.
|
function returns OK.
|
||||||
|
@@ -14,6 +14,9 @@ specified easy handle be removed from this multi handle's control.
|
|||||||
|
|
||||||
When the easy handle has been removed from a multi stack, it is again
|
When the easy handle has been removed from a multi stack, it is again
|
||||||
perfectly legal to invoke \fIcurl_easy_perform()\fP on this easy handle.
|
perfectly legal to invoke \fIcurl_easy_perform()\fP on this easy handle.
|
||||||
|
|
||||||
|
Removing a handle while being used, will effectively halt all transfers in
|
||||||
|
progress.
|
||||||
.SH RETURN VALUE
|
.SH RETURN VALUE
|
||||||
CURLMcode type, general libcurl multi interface error code.
|
CURLMcode type, general libcurl multi interface error code.
|
||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
.\" nroff -man [file]
|
.\" nroff -man [file]
|
||||||
.\" $Id$
|
.\" $Id$
|
||||||
.\"
|
.\"
|
||||||
.TH curl_slist_append 3 "5 March 2001" "libcurl 7.0" "libcurl Manual"
|
.TH curl_slist_append 3 "21 Feb 2003" "libcurl 7.10.4" "libcurl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
curl_slist_append - add a string to an slist
|
curl_slist_append - add a string to an slist
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@@ -13,17 +13,26 @@ curl_slist_append - add a string to an slist
|
|||||||
.ad
|
.ad
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
curl_slist_append() appends a specified string to a linked list of
|
curl_slist_append() appends a specified string to a linked list of
|
||||||
strings. The existing
|
strings. The existing \fIlist\fP should be passed as the first argument while
|
||||||
.I list
|
the new list is returned from this function. The specified \fIstring\fP has
|
||||||
should be passed as the first argument while the new list is returned from
|
been appended when this function returns.
|
||||||
this function. The specified
|
|
||||||
.I string
|
The list should be freed again (after usage) with \fBcurl_slist_free_all()\fP.
|
||||||
has been appended when this function returns.
|
|
||||||
.SH RETURN VALUE
|
.SH RETURN VALUE
|
||||||
A null pointer is returned if anything went wrong, otherwise the new list
|
A null pointer is returned if anything went wrong, otherwise the new list
|
||||||
pointer is returned.
|
pointer is returned.
|
||||||
|
.SH EXAMPLE
|
||||||
|
CURL handle;
|
||||||
|
curl_slist *slist=NULL;
|
||||||
|
|
||||||
|
slist = curl_slist_append(slist, "pragma:");
|
||||||
|
curl_easy_setopt(handle, CURLOPT_HTTPHEADER, slist);
|
||||||
|
|
||||||
|
curl_easy_perform(handle);
|
||||||
|
|
||||||
|
curl_slist_free_all(slist); /* free the list again */
|
||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
.BR curl_slist_free_all "(3), "
|
.BR curl_slist_free_all "(3), "
|
||||||
.SH BUGS
|
.SH BUGS
|
||||||
Surely there are some, you tell me!
|
None.
|
||||||
|
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
.\" nroff -man [file]
|
.\" nroff -man [file]
|
||||||
.\" $Id$
|
.\" $Id$
|
||||||
.\"
|
.\"
|
||||||
.TH libcurl-errors 3 "10 April 2002" "libcurl 7.9.6" "libcurl errors"
|
.TH libcurl-errors 3 "18 Dec 2002" "libcurl 7.10.3" "libcurl errors"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
error codes in libcurl
|
error codes in libcurl
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
@@ -104,7 +104,7 @@ After a completed file transfer, the FTP server did not respond a proper
|
|||||||
When sending custom "QUOTE" commands to the remote server, one of the commands
|
When sending custom "QUOTE" commands to the remote server, one of the commands
|
||||||
returned an error code that was 400 or higher.
|
returned an error code that was 400 or higher.
|
||||||
.TP
|
.TP
|
||||||
.B CURLE_HTTP_NOT_FOUND (22)
|
.B CURLE_HTTP_RETURNED_ERROR (22)
|
||||||
This is returned if CURLOPT_FAILONERROR is set TRUE and the HTTP server
|
This is returned if CURLOPT_FAILONERROR is set TRUE and the HTTP server
|
||||||
returns an error code that is >= 400.
|
returns an error code that is >= 400.
|
||||||
.TP
|
.TP
|
||||||
|
@@ -72,9 +72,9 @@ timeout every now and then, should you want that.
|
|||||||
A little note here about the return codes from the multi functions, and
|
A little note here about the return codes from the multi functions, and
|
||||||
especially the \fIcurl_multi_perform\fP: if you receive
|
especially the \fIcurl_multi_perform\fP: if you receive
|
||||||
\fICURLM_CALL_MULTI_PERFORM\fP, this basicly means that you should call
|
\fICURLM_CALL_MULTI_PERFORM\fP, this basicly means that you should call
|
||||||
\fIcurlm_call_multi_perform\fP again, before you select() on more actions. You
|
\fIcurl_multi_perform\fP again, before you select() on more actions. You don't
|
||||||
don't have to do it immediately, but the return code means that libcurl may
|
have to do it immediately, but the return code means that libcurl may have
|
||||||
have more data available to return or that there may be more data to send off
|
more data available to return or that there may be more data to send off
|
||||||
before it is "satisfied".
|
before it is "satisfied".
|
||||||
|
|
||||||
\fIcurl_multi_perform\fP stores the number of still running transfers in one
|
\fIcurl_multi_perform\fP stores the number of still running transfers in one
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -96,7 +96,9 @@ typedef int (*curl_progress_callback)(void *clientp,
|
|||||||
double ultotal,
|
double ultotal,
|
||||||
double ulnow);
|
double ulnow);
|
||||||
|
|
||||||
#define CURL_MAX_WRITE_SIZE 20480
|
/* Tests have proven that 20K is a very bad buffer size for uploads on
|
||||||
|
Windows, while 16K for some odd reason performed a lot better. */
|
||||||
|
#define CURL_MAX_WRITE_SIZE 16384
|
||||||
|
|
||||||
typedef size_t (*curl_write_callback)(char *buffer,
|
typedef size_t (*curl_write_callback)(char *buffer,
|
||||||
size_t size,
|
size_t size,
|
||||||
@@ -160,7 +162,7 @@ typedef enum {
|
|||||||
CURLE_FTP_COULDNT_RETR_FILE, /* 19 */
|
CURLE_FTP_COULDNT_RETR_FILE, /* 19 */
|
||||||
CURLE_FTP_WRITE_ERROR, /* 20 */
|
CURLE_FTP_WRITE_ERROR, /* 20 */
|
||||||
CURLE_FTP_QUOTE_ERROR, /* 21 */
|
CURLE_FTP_QUOTE_ERROR, /* 21 */
|
||||||
CURLE_HTTP_NOT_FOUND, /* 22 */
|
CURLE_HTTP_RETURNED_ERROR, /* 22 */
|
||||||
CURLE_WRITE_ERROR, /* 23 */
|
CURLE_WRITE_ERROR, /* 23 */
|
||||||
CURLE_MALFORMAT_USER, /* 24 - user name is illegally specified */
|
CURLE_MALFORMAT_USER, /* 24 - user name is illegally specified */
|
||||||
CURLE_FTP_COULDNT_STOR_FILE, /* 25 - failed FTP upload */
|
CURLE_FTP_COULDNT_STOR_FILE, /* 25 - failed FTP upload */
|
||||||
@@ -207,6 +209,7 @@ typedef enum {
|
|||||||
|
|
||||||
/* Make a spelling correction for the operation timed-out define */
|
/* Make a spelling correction for the operation timed-out define */
|
||||||
#define CURLE_OPERATION_TIMEDOUT CURLE_OPERATION_TIMEOUTED
|
#define CURLE_OPERATION_TIMEDOUT CURLE_OPERATION_TIMEOUTED
|
||||||
|
#define CURLE_HTTP_NOT_FOUND CURLE_HTTP_RETURNED_ERROR
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
CURLPROXY_HTTP = 0,
|
CURLPROXY_HTTP = 0,
|
||||||
@@ -610,6 +613,16 @@ typedef enum {
|
|||||||
the response to be compressed. */
|
the response to be compressed. */
|
||||||
CINIT(ENCODING, OBJECTPOINT, 102),
|
CINIT(ENCODING, OBJECTPOINT, 102),
|
||||||
|
|
||||||
|
/* Set pointer to private data */
|
||||||
|
CINIT(PRIVATE, OBJECTPOINT, 103),
|
||||||
|
|
||||||
|
/* Set aliases for HTTP 200 in the HTTP Response header */
|
||||||
|
CINIT(HTTP200ALIASES, OBJECTPOINT, 104),
|
||||||
|
|
||||||
|
/* Continue to send authentication (user+password) when following locations,
|
||||||
|
even when hostname changed. This can potentionally send off the name
|
||||||
|
and password to whatever host the server decides. */
|
||||||
|
CINIT(UNRESTRICTED_AUTH, LONG, 105),
|
||||||
|
|
||||||
CURLOPT_LASTENTRY /* the last unused */
|
CURLOPT_LASTENTRY /* the last unused */
|
||||||
} CURLoption;
|
} CURLoption;
|
||||||
@@ -688,8 +701,6 @@ typedef enum {
|
|||||||
*/
|
*/
|
||||||
extern int (curl_strequal)(const char *s1, const char *s2);
|
extern int (curl_strequal)(const char *s1, const char *s2);
|
||||||
extern int (curl_strnequal)(const char *s1, const char *s2, size_t n);
|
extern int (curl_strnequal)(const char *s1, const char *s2, size_t n);
|
||||||
#define strequal(a,b) curl_strequal(a,b)
|
|
||||||
#define strnequal(a,b,c) curl_strnequal(a,b,c)
|
|
||||||
|
|
||||||
/* DEPRECATED function to build formdata */
|
/* DEPRECATED function to build formdata */
|
||||||
int curl_formparse(char *, struct curl_httppost **,
|
int curl_formparse(char *, struct curl_httppost **,
|
||||||
@@ -803,8 +814,8 @@ CURLcode curl_global_init(long flags);
|
|||||||
void curl_global_cleanup(void);
|
void curl_global_cleanup(void);
|
||||||
|
|
||||||
/* This is the version number */
|
/* This is the version number */
|
||||||
#define LIBCURL_VERSION "7.10.2"
|
#define LIBCURL_VERSION "7.10.4"
|
||||||
#define LIBCURL_VERSION_NUM 0x070a02
|
#define LIBCURL_VERSION_NUM 0x070a04
|
||||||
|
|
||||||
/* linked-list structure for the CURLOPT_QUOTE option (and other) */
|
/* linked-list structure for the CURLOPT_QUOTE option (and other) */
|
||||||
struct curl_slist {
|
struct curl_slist {
|
||||||
@@ -861,16 +872,13 @@ typedef enum {
|
|||||||
CURLINFO_REDIRECT_TIME = CURLINFO_DOUBLE + 19,
|
CURLINFO_REDIRECT_TIME = CURLINFO_DOUBLE + 19,
|
||||||
CURLINFO_REDIRECT_COUNT = CURLINFO_LONG + 20,
|
CURLINFO_REDIRECT_COUNT = CURLINFO_LONG + 20,
|
||||||
|
|
||||||
|
CURLINFO_PRIVATE = CURLINFO_STRING + 21,
|
||||||
|
|
||||||
/* Fill in new entries here! */
|
/* Fill in new entries here! */
|
||||||
|
|
||||||
CURLINFO_LASTONE = 21
|
CURLINFO_LASTONE = 22
|
||||||
} CURLINFO;
|
} CURLINFO;
|
||||||
|
|
||||||
/* unfortunately, the easy.h and multi.h include files need options and info
|
|
||||||
stuff before they can be included! */
|
|
||||||
#include "easy.h" /* nothing in curl is fun without the easy stuff */
|
|
||||||
#include "multi.h"
|
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
CURLCLOSEPOLICY_NONE, /* first, never use this */
|
CURLCLOSEPOLICY_NONE, /* first, never use this */
|
||||||
|
|
||||||
@@ -894,35 +902,61 @@ typedef enum {
|
|||||||
* Setup defines, protos etc for the sharing stuff.
|
* Setup defines, protos etc for the sharing stuff.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Different types of locks that a share can aquire */
|
/* Different data locks for a single share */
|
||||||
typedef enum {
|
typedef enum {
|
||||||
CURL_LOCK_TYPE_NONE = 0,
|
CURL_LOCK_DATA_NONE = 0,
|
||||||
CURL_LOCK_TYPE_COOKIE = 1<<0,
|
/* CURL_LOCK_DATA_SHARE is used internaly to say that
|
||||||
CURL_LOCK_TYPE_DNS = 1<<1,
|
* the locking is just made to change the internal state of the share
|
||||||
CURL_LOCK_TYPE_SSL_SESSION = 2<<1,
|
* itself.
|
||||||
CURL_LOCK_TYPE_CONNECT = 2<<2,
|
*/
|
||||||
CURL_LOCK_TYPE_LAST
|
CURL_LOCK_DATA_SHARE,
|
||||||
} curl_lock_type;
|
CURL_LOCK_DATA_COOKIE,
|
||||||
|
CURL_LOCK_DATA_DNS,
|
||||||
|
CURL_LOCK_DATA_SSL_SESSION,
|
||||||
|
CURL_LOCK_DATA_CONNECT,
|
||||||
|
CURL_LOCK_DATA_LAST
|
||||||
|
} curl_lock_data;
|
||||||
|
|
||||||
typedef void (*curl_lock_function)(CURL *, curl_lock_type, void *);
|
/* Different lock access types */
|
||||||
typedef void (*curl_unlock_function)(CURL *, curl_lock_type, void *);
|
typedef enum {
|
||||||
|
CURL_LOCK_ACCESS_NONE = 0, /* unspecified action */
|
||||||
|
CURL_LOCK_ACCESS_SHARED = 1, /* for read perhaps */
|
||||||
|
CURL_LOCK_ACCESS_SINGLE = 2, /* for write perhaps */
|
||||||
|
CURL_LOCK_ACCESS_LAST /* never use */
|
||||||
|
} curl_lock_access;
|
||||||
|
|
||||||
typedef struct {
|
typedef void (*curl_lock_function)(CURL *handle,
|
||||||
unsigned int specifier;
|
curl_lock_data data,
|
||||||
unsigned int locked;
|
curl_lock_access access,
|
||||||
unsigned int dirty;
|
void *userptr);
|
||||||
|
typedef void (*curl_unlock_function)(CURL *handle,
|
||||||
|
curl_lock_data data,
|
||||||
|
void *userptr);
|
||||||
|
|
||||||
curl_lock_function lockfunc;
|
typedef void CURLSH;
|
||||||
curl_unlock_function unlockfunc;
|
|
||||||
void *clientdata;
|
|
||||||
} curl_share;
|
|
||||||
|
|
||||||
curl_share *curl_share_init (void);
|
typedef enum {
|
||||||
CURLcode curl_share_setopt (curl_share *, curl_lock_type, int);
|
CURLSHE_OK, /* all is fine */
|
||||||
CURLcode curl_share_set_lock_function (curl_share *, curl_lock_function);
|
CURLSHE_BAD_OPTION, /* 1 */
|
||||||
CURLcode curl_share_set_unlock_function (curl_share *, curl_unlock_function);
|
CURLSHE_IN_USE, /* 2 */
|
||||||
CURLcode curl_share_set_lock_data (curl_share *, void *);
|
CURLSHE_INVALID, /* 3 */
|
||||||
CURLcode curl_share_destroy (curl_share *);
|
CURLSHE_LAST /* never use */
|
||||||
|
} CURLSHcode;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
CURLSHOPT_NONE, /* don't use */
|
||||||
|
CURLSHOPT_SHARE, /* specify a data type to share */
|
||||||
|
CURLSHOPT_UNSHARE, /* specify shich data type to stop sharing */
|
||||||
|
CURLSHOPT_LOCKFUNC, /* pass in a 'curl_lock_function' pointer */
|
||||||
|
CURLSHOPT_UNLOCKFUNC, /* pass in a 'curl_unlock_function' pointer */
|
||||||
|
CURLSHOPT_USERDATA, /* pass in a user data pointer used in the lock/unlock
|
||||||
|
callback functions */
|
||||||
|
CURLSHOPT_LAST /* never use */
|
||||||
|
} CURLSHoption;
|
||||||
|
|
||||||
|
CURLSH *curl_share_init(void);
|
||||||
|
CURLSHcode curl_share_setopt(CURLSH *, CURLSHoption option, ...);
|
||||||
|
CURLSHcode curl_share_cleanup(CURLSH *);
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Structures for querying information about the curl library at runtime.
|
* Structures for querying information about the curl library at runtime.
|
||||||
@@ -965,4 +999,9 @@ curl_version_info_data *curl_version_info(CURLversion);
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* unfortunately, the easy.h and multi.h include files need options and info
|
||||||
|
stuff before they can be included! */
|
||||||
|
#include "easy.h" /* nothing in curl is fun without the easy stuff */
|
||||||
|
#include "multi.h"
|
||||||
|
|
||||||
#endif /* __CURL_CURL_H */
|
#endif /* __CURL_CURL_H */
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
|
@@ -1,54 +1,25 @@
|
|||||||
/*************************************************************************
|
/***************************************************************************
|
||||||
|
* _ _ ____ _
|
||||||
|
* Project ___| | | | _ \| |
|
||||||
|
* / __| | | | |_) | |
|
||||||
|
* | (__| |_| | _ <| |___
|
||||||
|
* \___|\___/|_| \_\_____|
|
||||||
|
*
|
||||||
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
|
*
|
||||||
|
* This software is licensed as described in the file COPYING, which
|
||||||
|
* you should have received as part of this distribution. The terms
|
||||||
|
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||||
|
*
|
||||||
|
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||||
|
* copies of the Software, and permit persons to whom the Software is
|
||||||
|
* furnished to do so, under the terms of the COPYING file.
|
||||||
|
*
|
||||||
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||||
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
* $Id$
|
* $Id$
|
||||||
*
|
***************************************************************************/
|
||||||
* Permission to use, copy, modify, and distribute this software for any
|
|
||||||
* purpose with or without fee is hereby granted, provided that the above
|
|
||||||
* copyright notice and this permission notice appear in all copies.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
|
||||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
|
||||||
* MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
|
|
||||||
* CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
|
|
||||||
*
|
|
||||||
*************************************************************************
|
|
||||||
*
|
|
||||||
* Preliminary documentation
|
|
||||||
*
|
|
||||||
* printf conversions:
|
|
||||||
*
|
|
||||||
* conversion ::= '%%' | '%' [position] ( number | float | string )
|
|
||||||
* position ::= digits '$'
|
|
||||||
* number ::= [number-flags] ( 'd' | 'i' | 'o' | 'x' | 'X' | 'u')
|
|
||||||
* number-flags ::= 'h' | 'l' | 'L' ...
|
|
||||||
* float ::= [float-flags] ( 'f' | 'e' | 'E' | 'g' | 'G' )
|
|
||||||
* string ::= [string-flags] 's'
|
|
||||||
* string-flags ::= padding | '#'
|
|
||||||
* digits ::= (digit)+
|
|
||||||
* digit ::= 0-9
|
|
||||||
*
|
|
||||||
* c
|
|
||||||
* p
|
|
||||||
* n
|
|
||||||
*
|
|
||||||
* qualifiers
|
|
||||||
*
|
|
||||||
* - : left adjustment
|
|
||||||
* + : show sign
|
|
||||||
* SPACE : padding
|
|
||||||
* # : alterative
|
|
||||||
* . : precision
|
|
||||||
* * : width
|
|
||||||
* 0 : padding / size
|
|
||||||
* 1-9 : size
|
|
||||||
* h : short
|
|
||||||
* l : long
|
|
||||||
* ll : longlong
|
|
||||||
* L : long double
|
|
||||||
* Z : long / longlong
|
|
||||||
* q : longlong
|
|
||||||
*
|
|
||||||
************************************************************************/
|
|
||||||
|
|
||||||
#ifndef H_MPRINTF
|
#ifndef H_MPRINTF
|
||||||
#define H_MPRINTF
|
#define H_MPRINTF
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -44,8 +44,6 @@
|
|||||||
o Enable the application to select() on its own file descriptors and curl's
|
o Enable the application to select() on its own file descriptors and curl's
|
||||||
file descriptors simultaneous easily.
|
file descriptors simultaneous easily.
|
||||||
|
|
||||||
Example sources using this interface is here: ../multi/
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__)
|
#if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__)
|
||||||
@@ -53,10 +51,15 @@
|
|||||||
#else
|
#else
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
#include <sys/types.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "curl.h"
|
#include "curl.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef void CURLM;
|
typedef void CURLM;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
@@ -71,7 +74,7 @@ typedef enum {
|
|||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
CURLMSG_NONE, /* first, not used */
|
CURLMSG_NONE, /* first, not used */
|
||||||
CURLMSG_DONE, /* This easy handle has completed. 'whatever' points to
|
CURLMSG_DONE, /* This easy handle has completed. 'result' contains
|
||||||
the CURLcode of the transfer */
|
the CURLcode of the transfer */
|
||||||
CURLMSG_LAST /* last, not used */
|
CURLMSG_LAST /* last, not used */
|
||||||
} CURLMSG;
|
} CURLMSG;
|
||||||
@@ -187,4 +190,8 @@ CURLMcode curl_multi_cleanup(CURLM *multi_handle);
|
|||||||
CURLMsg *curl_multi_info_read(CURLM *multi_handle,
|
CURLMsg *curl_multi_info_read(CURLM *multi_handle,
|
||||||
int *msgs_in_queue);
|
int *msgs_in_queue);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* end of extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
|
@@ -5,4 +5,6 @@ Makefile
|
|||||||
.deps
|
.deps
|
||||||
.libs
|
.libs
|
||||||
config.h
|
config.h
|
||||||
stamp-h1
|
stamp-*
|
||||||
|
ca-bundle.h
|
||||||
|
getdate.c
|
||||||
|
@@ -66,7 +66,7 @@ getpass.c netrc.c telnet.h getinfo.c getinfo.h transfer.c strequal.c \
|
|||||||
strequal.h easy.c security.h security.c krb4.c krb4.h memdebug.c \
|
strequal.h easy.c security.h security.c krb4.c krb4.h memdebug.c \
|
||||||
memdebug.h inet_ntoa_r.h http_chunks.c http_chunks.h strtok.c strtok.h \
|
memdebug.h inet_ntoa_r.h http_chunks.c http_chunks.h strtok.c strtok.h \
|
||||||
connect.c connect.h llist.c llist.h hash.c hash.h multi.c \
|
connect.c connect.h llist.c llist.h hash.c hash.h multi.c \
|
||||||
content_encoding.c content_encoding.h
|
content_encoding.c content_encoding.h share.c share.h
|
||||||
|
|
||||||
noinst_HEADERS = setup.h transfer.h
|
noinst_HEADERS = setup.h transfer.h
|
||||||
|
|
||||||
|
@@ -59,7 +59,12 @@ SOURCES = \
|
|||||||
easy.c \
|
easy.c \
|
||||||
strequal.c \
|
strequal.c \
|
||||||
strtok.c \
|
strtok.c \
|
||||||
connect.c
|
connect.c \
|
||||||
|
hash.c \
|
||||||
|
share.c \
|
||||||
|
llist.c \
|
||||||
|
multi.c \
|
||||||
|
content_encoding.c
|
||||||
|
|
||||||
OBJECTS = $(SOURCES:.c=.obj)
|
OBJECTS = $(SOURCES:.c=.obj)
|
||||||
|
|
||||||
|
@@ -28,4 +28,9 @@
|
|||||||
+easy.obj &
|
+easy.obj &
|
||||||
+strequal.obj &
|
+strequal.obj &
|
||||||
+strtok.obj &
|
+strtok.obj &
|
||||||
+connect.obj
|
+connect.obj &
|
||||||
|
+hash.obj &
|
||||||
|
+share.obj &
|
||||||
|
+llist.obj &
|
||||||
|
+multi.obj &
|
||||||
|
+content_encoding.obj
|
||||||
|
@@ -12,8 +12,8 @@ AR = ar
|
|||||||
RM = rm -f
|
RM = rm -f
|
||||||
RANLIB = ranlib
|
RANLIB = ranlib
|
||||||
STRIP = strip -g
|
STRIP = strip -g
|
||||||
OPENSSL_PATH = ../../openssl-0.9.6g
|
OPENSSL_PATH = ../../openssl-0.9.7a
|
||||||
ZLIB_PATH = ../../zlib-1.1.3
|
ZLIB_PATH = ../../zlib-1.1.4
|
||||||
|
|
||||||
########################################################
|
########################################################
|
||||||
## Nothing more to do below this line!
|
## Nothing more to do below this line!
|
||||||
@@ -22,12 +22,12 @@ INCLUDES = -I. -I.. -I../include -I../src
|
|||||||
CFLAGS = -g -O2 -DMINGW32
|
CFLAGS = -g -O2 -DMINGW32
|
||||||
ifdef SSL
|
ifdef SSL
|
||||||
INCLUDES += -I"$(OPENSSL_PATH)/outinc" -I"$(OPENSSL_PATH)/outinc/openssl"
|
INCLUDES += -I"$(OPENSSL_PATH)/outinc" -I"$(OPENSSL_PATH)/outinc/openssl"
|
||||||
CFLAGS += -DUSE_SSLEAY
|
CFLAGS += -DUSE_SSLEAY -DHAVE_OPENSSL_ENGINE_H
|
||||||
DLL_LIBS = -L$(OPENSSL_PATH)/out -leay32 -lssl32 -lRSAglue
|
DLL_LIBS = -L$(OPENSSL_PATH)/out -leay32 -lssl32
|
||||||
endif
|
endif
|
||||||
ifdef ZLIB
|
ifdef ZLIB
|
||||||
INCLUDES += -I"$(ZLIB_PATH)"
|
INCLUDES += -I"$(ZLIB_PATH)"
|
||||||
CFLAGS += -DHAVE_ZLIB
|
CFLAGS += -DHAVE_LIBZ -DHAVE_ZLIB_H
|
||||||
DLL_LIBS += -L$(ZLIB_PATH) -lz
|
DLL_LIBS += -L$(ZLIB_PATH) -lz
|
||||||
endif
|
endif
|
||||||
COMPILE = $(CC) $(INCLUDES) $(CFLAGS)
|
COMPILE = $(CC) $(INCLUDES) $(CFLAGS)
|
||||||
@@ -42,7 +42,7 @@ libcurl_a_SOURCES = arpa_telnet.h file.c getpass.h netrc.h timeval.c base64.c \
|
|||||||
ldap.h ssluse.h escape.c getenv.h mprintf.c telnet.c escape.h getpass.c netrc.c \
|
ldap.h ssluse.h escape.c getenv.h mprintf.c telnet.c escape.h getpass.c netrc.c \
|
||||||
telnet.h getinfo.c strequal.c strequal.h easy.c security.h \
|
telnet.h getinfo.c strequal.c strequal.h easy.c security.h \
|
||||||
security.c krb4.h krb4.c memdebug.h memdebug.c inet_ntoa_r.h http_chunks.h http_chunks.c \
|
security.c krb4.h krb4.c memdebug.h memdebug.c inet_ntoa_r.h http_chunks.h http_chunks.c \
|
||||||
strtok.c connect.c hash.c llist.c multi.c \
|
strtok.c connect.c hash.c llist.c multi.c share.c share.h\
|
||||||
content_encoding.h content_encoding.c
|
content_encoding.h content_encoding.c
|
||||||
|
|
||||||
libcurl_a_OBJECTS = file.o timeval.o base64.o hostip.o progress.o \
|
libcurl_a_OBJECTS = file.o timeval.o base64.o hostip.o progress.o \
|
||||||
@@ -50,7 +50,7 @@ libcurl_a_OBJECTS = file.o timeval.o base64.o hostip.o progress.o \
|
|||||||
speedcheck.o getdate.o transfer.o ldap.o ssluse.o version.o \
|
speedcheck.o getdate.o transfer.o ldap.o ssluse.o version.o \
|
||||||
getenv.o escape.o mprintf.o telnet.o getpass.o netrc.o getinfo.o \
|
getenv.o escape.o mprintf.o telnet.o getpass.o netrc.o getinfo.o \
|
||||||
strequal.o easy.o security.o krb4.o memdebug.o http_chunks.o \
|
strequal.o easy.o security.o krb4.o memdebug.o http_chunks.o \
|
||||||
strtok.o connect.o hash.o llist.o multi.o \
|
strtok.o connect.o hash.o llist.o multi.o share.o \
|
||||||
content_encoding.o
|
content_encoding.o
|
||||||
|
|
||||||
LIBRARIES = $(libcurl_a_LIBRARIES)
|
LIBRARIES = $(libcurl_a_LIBRARIES)
|
||||||
|
@@ -116,7 +116,7 @@ CFGSET = TRUE
|
|||||||
!IF "$(CFG)" == "debug-dll"
|
!IF "$(CFG)" == "debug-dll"
|
||||||
TARGET =$(LIB_NAME_DEBUG).dll
|
TARGET =$(LIB_NAME_DEBUG).dll
|
||||||
DIROBJ =.\$(CFG)
|
DIROBJ =.\$(CFG)
|
||||||
LNK = $(LNKDLL) /out:$(TARGET) /IMPLIB:"$(LIB_NAME_DEBUG).lib"
|
LNK = $(LNKDLL) /DEBUG /out:$(TARGET) /IMPLIB:"$(LIB_NAME_DEBUG).lib" /PDB:"$(LIB_NAME_DEBUG).pdb"
|
||||||
CC = $(CCDEBUG)
|
CC = $(CCDEBUG)
|
||||||
CFGSET = TRUE
|
CFGSET = TRUE
|
||||||
!ENDIF
|
!ENDIF
|
||||||
@@ -139,7 +139,8 @@ CFGSET = TRUE
|
|||||||
!IF "$(CFG)" == "debug-ssl-dll"
|
!IF "$(CFG)" == "debug-ssl-dll"
|
||||||
TARGET =$(LIB_NAME_DEBUG).dll
|
TARGET =$(LIB_NAME_DEBUG).dll
|
||||||
DIROBJ =.\$(CFG)
|
DIROBJ =.\$(CFG)
|
||||||
LNK = $(LNKDLL) $(LFLAGSSSL) /out:$(TARGET) /IMPLIB:"$(LIB_NAME_DEBUG).lib"
|
LFLAGSSSL = /LIBPATH:$(OPENSSL_PATH)/out32dll
|
||||||
|
LNK = $(LNKDLL) $(LFLAGSSSL) /DEBUG /out:$(TARGET) /IMPLIB:"$(LIB_NAME_DEBUG).lib" /PDB:"$(LIB_NAME_DEBUG).pdb"
|
||||||
LINKLIBS = $(LINKLIBS) $(SSLLIBS)
|
LINKLIBS = $(LINKLIBS) $(SSLLIBS)
|
||||||
CC = $(CCDEBUG) $(CFLAGSSSL)
|
CC = $(CCDEBUG) $(CFLAGSSSL)
|
||||||
CFGSET = TRUE
|
CFGSET = TRUE
|
||||||
@@ -199,6 +200,7 @@ X_OBJS= \
|
|||||||
$(DIROBJ)\connect.obj \
|
$(DIROBJ)\connect.obj \
|
||||||
$(DIROBJ)\hash.obj \
|
$(DIROBJ)\hash.obj \
|
||||||
$(DIROBJ)\llist.obj \
|
$(DIROBJ)\llist.obj \
|
||||||
|
$(DIROBJ)\share.obj \
|
||||||
$(DIROBJ)\multi.obj
|
$(DIROBJ)\multi.obj
|
||||||
|
|
||||||
all : $(TARGET)
|
all : $(TARGET)
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -26,15 +26,15 @@
|
|||||||
/*
|
/*
|
||||||
* Telnet option defines. Add more here if in need.
|
* Telnet option defines. Add more here if in need.
|
||||||
*/
|
*/
|
||||||
#define TELOPT_BINARY 0 /* binary 8bit data */
|
#define CURL_TELOPT_BINARY 0 /* binary 8bit data */
|
||||||
#define TELOPT_SGA 3 /* Supress Go Ahead */
|
#define CURL_TELOPT_SGA 3 /* Supress Go Ahead */
|
||||||
#define TELOPT_EXOPL 255 /* EXtended OPtions List */
|
#define CURL_TELOPT_EXOPL 255 /* EXtended OPtions List */
|
||||||
#define TELOPT_TTYPE 24 /* Terminal TYPE */
|
#define CURL_TELOPT_TTYPE 24 /* Terminal TYPE */
|
||||||
#define TELOPT_XDISPLOC 35 /* X DISPlay LOCation */
|
#define CURL_TELOPT_XDISPLOC 35 /* X DISPlay LOCation */
|
||||||
|
|
||||||
#define TELOPT_NEW_ENVIRON 39 /* NEW ENVIRONment variables */
|
#define CURL_TELOPT_NEW_ENVIRON 39 /* NEW ENVIRONment variables */
|
||||||
#define NEW_ENV_VAR 0
|
#define CURL_NEW_ENV_VAR 0
|
||||||
#define NEW_ENV_VALUE 1
|
#define CURL_NEW_ENV_VALUE 1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The telnet options represented as strings
|
* The telnet options represented as strings
|
||||||
@@ -53,27 +53,27 @@ static const char *telnetoptions[]=
|
|||||||
"OLD-ENVIRON", "AUTHENTICATION", "ENCRYPT", "NEW-ENVIRON"
|
"OLD-ENVIRON", "AUTHENTICATION", "ENCRYPT", "NEW-ENVIRON"
|
||||||
};
|
};
|
||||||
|
|
||||||
#define TELOPT_MAXIMUM TELOPT_NEW_ENVIRON
|
#define CURL_TELOPT_MAXIMUM CURL_TELOPT_NEW_ENVIRON
|
||||||
|
|
||||||
#define TELOPT_OK(x) ((x) <= TELOPT_MAXIMUM)
|
#define CURL_TELOPT_OK(x) ((x) <= CURL_TELOPT_MAXIMUM)
|
||||||
#define TELOPT(x) telnetoptions[x]
|
#define CURL_TELOPT(x) telnetoptions[x]
|
||||||
|
|
||||||
#define NTELOPTS 40
|
#define CURL_NTELOPTS 40
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* First some defines
|
* First some defines
|
||||||
*/
|
*/
|
||||||
#define xEOF 236 /* End Of File */
|
#define CURL_xEOF 236 /* End Of File */
|
||||||
#define SE 240 /* Sub negotiation End */
|
#define CURL_SE 240 /* Sub negotiation End */
|
||||||
#define NOP 241 /* No OPeration */
|
#define CURL_NOP 241 /* No OPeration */
|
||||||
#define DM 242 /* Data Mark */
|
#define CURL_DM 242 /* Data Mark */
|
||||||
#define GA 249 /* Go Ahead, reverse the line */
|
#define CURL_GA 249 /* Go Ahead, reverse the line */
|
||||||
#define SB 250 /* SuBnegotiation */
|
#define CURL_SB 250 /* SuBnegotiation */
|
||||||
#define WILL 251 /* Our side WILL use this option */
|
#define CURL_WILL 251 /* Our side WILL use this option */
|
||||||
#define WONT 252 /* Our side WON'T use this option */
|
#define CURL_WONT 252 /* Our side WON'T use this option */
|
||||||
#define DO 253 /* DO use this option! */
|
#define CURL_DO 253 /* DO use this option! */
|
||||||
#define DONT 254 /* DON'T use this option! */
|
#define CURL_DONT 254 /* DON'T use this option! */
|
||||||
#define IAC 255 /* Interpret As Command */
|
#define CURL_IAC 255 /* Interpret As Command */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Then those numbers represented as strings:
|
* Then those numbers represented as strings:
|
||||||
@@ -86,16 +86,16 @@ static const char *telnetcmds[]=
|
|||||||
"WILL", "WONT", "DO", "DONT", "IAC"
|
"WILL", "WONT", "DO", "DONT", "IAC"
|
||||||
};
|
};
|
||||||
|
|
||||||
#define TELCMD_MINIMUM xEOF /* the first one */
|
#define CURL_TELCMD_MINIMUM CURL_xEOF /* the first one */
|
||||||
#define TELCMD_MAXIMUM IAC /* surprise, 255 is the last one! ;-) */
|
#define CURL_TELCMD_MAXIMUM CURL_IAC /* surprise, 255 is the last one! ;-) */
|
||||||
|
|
||||||
#define TELQUAL_IS 0
|
#define CURL_TELQUAL_IS 0
|
||||||
#define TELQUAL_SEND 1
|
#define CURL_TELQUAL_SEND 1
|
||||||
#define TELQUAL_INFO 2
|
#define CURL_TELQUAL_INFO 2
|
||||||
#define TELQUAL_NAME 3
|
#define CURL_TELQUAL_NAME 3
|
||||||
|
|
||||||
#define TELCMD_OK(x) ( ((unsigned int)(x) >= TELCMD_MINIMUM) && \
|
#define CURL_TELCMD_OK(x) ( ((unsigned int)(x) >= CURL_TELCMD_MINIMUM) && \
|
||||||
((unsigned int)(x) <= TELCMD_MAXIMUM) )
|
((unsigned int)(x) <= CURL_TELCMD_MAXIMUM) )
|
||||||
#define TELCMD(x) telnetcmds[(x)-TELCMD_MINIMUM]
|
#define CURL_TELCMD(x) telnetcmds[(x)-CURL_TELCMD_MINIMUM]
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
34
lib/base64.c
34
lib/base64.c
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -61,6 +61,8 @@ static void decodeQuantum(unsigned char *dest, char *src)
|
|||||||
x = (x << 6) + 62;
|
x = (x << 6) + 62;
|
||||||
else if(src[i] == '/')
|
else if(src[i] == '/')
|
||||||
x = (x << 6) + 63;
|
x = (x << 6) + 63;
|
||||||
|
else if(src[i] == '=')
|
||||||
|
x = (x << 6);
|
||||||
}
|
}
|
||||||
|
|
||||||
dest[2] = (unsigned char)(x & 255); x >>= 8;
|
dest[2] = (unsigned char)(x & 255); x >>= 8;
|
||||||
@@ -78,6 +80,7 @@ static void base64Decode(unsigned char *dest, char *src, int *rawLength)
|
|||||||
int length = 0;
|
int length = 0;
|
||||||
int equalsTerm = 0;
|
int equalsTerm = 0;
|
||||||
int i;
|
int i;
|
||||||
|
int numQuantums;
|
||||||
unsigned char lastQuantum[3];
|
unsigned char lastQuantum[3];
|
||||||
|
|
||||||
while((src[length] != '=') && src[length])
|
while((src[length] != '=') && src[length])
|
||||||
@@ -85,16 +88,18 @@ static void base64Decode(unsigned char *dest, char *src, int *rawLength)
|
|||||||
while(src[length+equalsTerm] == '=')
|
while(src[length+equalsTerm] == '=')
|
||||||
equalsTerm++;
|
equalsTerm++;
|
||||||
|
|
||||||
|
numQuantums = (length + equalsTerm) / 4;
|
||||||
if(rawLength)
|
if(rawLength)
|
||||||
*rawLength = (length * 3 / 4) - equalsTerm;
|
*rawLength = (numQuantums * 3) - equalsTerm;
|
||||||
|
|
||||||
for(i = 0; i < length/4 - 1; i++) {
|
for(i = 0; i < numQuantums - 1; i++) {
|
||||||
decodeQuantum(dest, src);
|
decodeQuantum(dest, src);
|
||||||
dest += 3; src += 4;
|
dest += 3; src += 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
decodeQuantum(lastQuantum, src);
|
decodeQuantum(lastQuantum, src);
|
||||||
for(i = 0; i < 3 - equalsTerm; i++) dest[i] = lastQuantum[i];
|
for(i = 0; i < 3 - equalsTerm; i++)
|
||||||
|
dest[i] = lastQuantum[i];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -130,7 +135,7 @@ int Curl_base64_encode(const void *inp, int insize, char **outptr)
|
|||||||
|
|
||||||
while(insize > 0) {
|
while(insize > 0) {
|
||||||
for (i = inputparts = 0; i < 3; i++) {
|
for (i = inputparts = 0; i < 3; i++) {
|
||||||
if(*indata) {
|
if(insize > 0) {
|
||||||
inputparts++;
|
inputparts++;
|
||||||
ibuf[i] = *indata;
|
ibuf[i] = *indata;
|
||||||
indata++;
|
indata++;
|
||||||
@@ -194,7 +199,8 @@ int Curl_base64_decode(const char *str, void *data)
|
|||||||
#define TEST_NEED_SUCK
|
#define TEST_NEED_SUCK
|
||||||
void *suck(int *);
|
void *suck(int *);
|
||||||
|
|
||||||
int main(int argc, char **argv, char **envp) {
|
int main(int argc, char **argv, char **envp)
|
||||||
|
{
|
||||||
char *base64;
|
char *base64;
|
||||||
int base64Len;
|
int base64Len;
|
||||||
unsigned char *data;
|
unsigned char *data;
|
||||||
@@ -220,7 +226,8 @@ int main(int argc, char **argv, char **envp) {
|
|||||||
#define TEST_NEED_SUCK
|
#define TEST_NEED_SUCK
|
||||||
void *suck(int *);
|
void *suck(int *);
|
||||||
|
|
||||||
int main(int argc, char **argv, char **envp) {
|
int main(int argc, char **argv, char **envp)
|
||||||
|
{
|
||||||
char *base64;
|
char *base64;
|
||||||
int base64Len;
|
int base64Len;
|
||||||
unsigned char *data;
|
unsigned char *data;
|
||||||
@@ -233,7 +240,6 @@ int main(int argc, char **argv, char **envp) {
|
|||||||
fprintf(stderr, "%d\n", dataLen);
|
fprintf(stderr, "%d\n", dataLen);
|
||||||
fwrite(data,1,dataLen,stdout);
|
fwrite(data,1,dataLen,stdout);
|
||||||
|
|
||||||
|
|
||||||
free(base64); free(data);
|
free(base64); free(data);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -241,7 +247,8 @@ int main(int argc, char **argv, char **envp) {
|
|||||||
|
|
||||||
#ifdef TEST_NEED_SUCK
|
#ifdef TEST_NEED_SUCK
|
||||||
/* this function 'sucks' in as much as possible from stdin */
|
/* this function 'sucks' in as much as possible from stdin */
|
||||||
void *suck(int *lenptr) {
|
void *suck(int *lenptr)
|
||||||
|
{
|
||||||
int cursize = 8192;
|
int cursize = 8192;
|
||||||
unsigned char *buf = NULL;
|
unsigned char *buf = NULL;
|
||||||
int lastread;
|
int lastread;
|
||||||
@@ -259,12 +266,3 @@ void *suck(int *lenptr) {
|
|||||||
return (void *)buf;
|
return (void *)buf;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* local variables:
|
|
||||||
* eval: (load-file "../curl-mode.el")
|
|
||||||
* end:
|
|
||||||
* vim600: fdm=marker
|
|
||||||
* vim: et sw=2 ts=2 sts=2 tw=78
|
|
||||||
*/
|
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
|
@@ -2287,82 +2287,6 @@ Certificate Ingredients:
|
|||||||
ec:b9:94:6a:aa:12:4f:1a:dd:f5:77:b5:25:8c:f2:8a:0a:f1:
|
ec:b9:94:6a:aa:12:4f:1a:dd:f5:77:b5:25:8c:f2:8a:0a:f1:
|
||||||
fc:52:5b:58
|
fc:52:5b:58
|
||||||
|
|
||||||
TC TrustCenter, Germany, Class 0 CA
|
|
||||||
===================================
|
|
||||||
MD5 Fingerprint: 35:85:49:8E:6E:57:FE:BD:97:F1:C9:46:23:3A:B6:7D
|
|
||||||
PEM Data:
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIENTCCA56gAwIBAgIBATANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx
|
|
||||||
EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD
|
|
||||||
IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx
|
|
||||||
IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDAgQ0ExKTAnBgkqhkiG9w0B
|
|
||||||
CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTEzNTQ0OFoX
|
|
||||||
DTA1MTIzMTEzNTQ0OFowgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn
|
|
||||||
MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig
|
|
||||||
U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz
|
|
||||||
dENlbnRlciBDbGFzcyAwIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0
|
|
||||||
cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA333mvr/V
|
|
||||||
8C9tTg7R4I0LfztU6IrisJ8oxYrGubMzJ/UnyhpMVBJrtLJGsx1Ls/QhC0sCLqHC
|
|
||||||
NJyFoMR4EdvbaycrCSoYTkDMn3EZZ5l0onw/wdiLI8hjO4ohq1zeHvSN3LQYwwVz
|
|
||||||
9Gq0ofoBCCsBD203W6o4hmc51+Vf+uR+zKMCAwEAAaOCAUMwggE/MEAGCWCGSAGG
|
|
||||||
+EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr
|
|
||||||
LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl
|
|
||||||
ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw
|
|
||||||
czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI
|
|
||||||
AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p
|
|
||||||
bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyAw
|
|
||||||
IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQBNB39fCTAZ
|
|
||||||
kqoFR3qUdVQqrs/82AxC4UU4KySVssqHynnEw5eQXmIYxsk4YUxoNdNMFBHrxM2h
|
|
||||||
qdjFnmgnMgc1RQT4XyGgYB4cAEgEWNLFy65tMm49d5WMhcflrlCddUp7/wsneepN
|
|
||||||
pFn/7FrqJqU5g6TReM6nqX683SvKEpMDSg==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
Certificate Ingredients:
|
|
||||||
Data:
|
|
||||||
Version: 3 (0x2)
|
|
||||||
Serial Number: 1 (0x1)
|
|
||||||
Signature Algorithm: md5WithRSAEncryption
|
|
||||||
Issuer: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 0 CA/Email=certificate@trustcenter.de
|
|
||||||
Validity
|
|
||||||
Not Before: Mar 9 13:54:48 1998 GMT
|
|
||||||
Not After : Dec 31 13:54:48 2005 GMT
|
|
||||||
Subject: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 0 CA/Email=certificate@trustcenter.de
|
|
||||||
Subject Public Key Info:
|
|
||||||
Public Key Algorithm: rsaEncryption
|
|
||||||
RSA Public Key: (1024 bit)
|
|
||||||
Modulus (1024 bit):
|
|
||||||
00:df:7d:e6:be:bf:d5:f0:2f:6d:4e:0e:d1:e0:8d:
|
|
||||||
0b:7f:3b:54:e8:8a:e2:b0:9f:28:c5:8a:c6:b9:b3:
|
|
||||||
33:27:f5:27:ca:1a:4c:54:12:6b:b4:b2:46:b3:1d:
|
|
||||||
4b:b3:f4:21:0b:4b:02:2e:a1:c2:34:9c:85:a0:c4:
|
|
||||||
78:11:db:db:6b:27:2b:09:2a:18:4e:40:cc:9f:71:
|
|
||||||
19:67:99:74:a2:7c:3f:c1:d8:8b:23:c8:63:3b:8a:
|
|
||||||
21:ab:5c:de:1e:f4:8d:dc:b4:18:c3:05:73:f4:6a:
|
|
||||||
b4:a1:fa:01:08:2b:01:0f:6d:37:5b:aa:38:86:67:
|
|
||||||
39:d7:e5:5f:fa:e4:7e:cc:a3
|
|
||||||
Exponent: 65537 (0x10001)
|
|
||||||
X509v3 extensions:
|
|
||||||
Netscape Revocation Url:
|
|
||||||
https://www.trustcenter.de/cgi-bin/check-rev.cgi?
|
|
||||||
Netscape CA Revocation Url:
|
|
||||||
https://www.trustcenter.de/cgi-bin/check-rev.cgi?
|
|
||||||
Netscape Renewal Url:
|
|
||||||
https://www.trustcenter.de/cgi-bin/Renew.cgi?
|
|
||||||
Netscape CA Policy Url:
|
|
||||||
http://www.trustcenter.de/guidelines/index.html
|
|
||||||
Netscape Comment:
|
|
||||||
TC TrustCenter Class 0 CA
|
|
||||||
Netscape Cert Type:
|
|
||||||
SSL CA, S/MIME CA, Object Signing CA
|
|
||||||
Signature Algorithm: md5WithRSAEncryption
|
|
||||||
4d:07:7f:5f:09:30:19:92:aa:05:47:7a:94:75:54:2a:ae:cf:
|
|
||||||
fc:d8:0c:42:e1:45:38:2b:24:95:b2:ca:87:ca:79:c4:c3:97:
|
|
||||||
90:5e:62:18:c6:c9:38:61:4c:68:35:d3:4c:14:11:eb:c4:cd:
|
|
||||||
a1:a9:d8:c5:9e:68:27:32:07:35:45:04:f8:5f:21:a0:60:1e:
|
|
||||||
1c:00:48:04:58:d2:c5:cb:ae:6d:32:6e:3d:77:95:8c:85:c7:
|
|
||||||
e5:ae:50:9d:75:4a:7b:ff:0b:27:79:ea:4d:a4:59:ff:ec:5a:
|
|
||||||
ea:26:a5:39:83:a4:d1:78:ce:a7:a9:7e:bc:dd:2b:ca:12:93:
|
|
||||||
03:4a
|
|
||||||
|
|
||||||
TC TrustCenter, Germany, Class 1 CA
|
TC TrustCenter, Germany, Class 1 CA
|
||||||
===================================
|
===================================
|
||||||
MD5 Fingerprint: 64:3F:F8:3E:52:14:4A:59:BA:93:56:04:0B:23:02:D1
|
MD5 Fingerprint: 64:3F:F8:3E:52:14:4A:59:BA:93:56:04:0B:23:02:D1
|
||||||
|
@@ -369,3 +369,13 @@
|
|||||||
|
|
||||||
/* Define if you have the `sigsetjmp' function. */
|
/* Define if you have the `sigsetjmp' function. */
|
||||||
#define HAVE_SIGSETJMP 1
|
#define HAVE_SIGSETJMP 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <setjmp.h> header file. */
|
||||||
|
#define HAVE_SETJMP_H 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This needs to be defined for OpenSSL 0.9.7 and other versions that have the
|
||||||
|
* ENGINE stuff supported. If an include of "openssl/engine.h" fails, then
|
||||||
|
* undefine the define below.
|
||||||
|
*/
|
||||||
|
#define HAVE_OPENSSL_ENGINE_H 1
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -82,7 +82,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
static
|
static
|
||||||
int geterrno(void)
|
int ourerrno(void)
|
||||||
{
|
{
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
return (int)GetLastError();
|
return (int)GetLastError();
|
||||||
@@ -144,7 +144,11 @@ int Curl_nonblock(int socket, /* operate on this */
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return 0 on fine connect, -1 on error and 1 on timeout.
|
* waitconnect() returns:
|
||||||
|
* 0 fine connect
|
||||||
|
* -1 select() error
|
||||||
|
* 1 select() timeout
|
||||||
|
* 2 select() returned with an error condition
|
||||||
*/
|
*/
|
||||||
static
|
static
|
||||||
int waitconnect(int sockfd, /* socket */
|
int waitconnect(int sockfd, /* socket */
|
||||||
@@ -176,10 +180,9 @@ int waitconnect(int sockfd, /* socket */
|
|||||||
/* timeout, no connect today */
|
/* timeout, no connect today */
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if(FD_ISSET(sockfd, &errfd)) {
|
if(FD_ISSET(sockfd, &errfd))
|
||||||
/* error condition caught */
|
/* error condition caught */
|
||||||
return 2;
|
return 2;
|
||||||
}
|
|
||||||
|
|
||||||
/* we have a connect! */
|
/* we have a connect! */
|
||||||
return 0;
|
return 0;
|
||||||
@@ -249,17 +252,26 @@ static CURLcode bindlocal(struct connectdata *conn,
|
|||||||
if ( h ) {
|
if ( h ) {
|
||||||
Curl_addrinfo *addr = h->addr;
|
Curl_addrinfo *addr = h->addr;
|
||||||
|
|
||||||
Curl_resolv_unlock(h);
|
Curl_resolv_unlock(data, h);
|
||||||
/* we don't need it anymore after this function has returned */
|
/* we don't need it anymore after this function has returned */
|
||||||
|
|
||||||
memset((char *)&sa, 0, sizeof(sa));
|
|
||||||
#ifdef ENABLE_IPV6
|
#ifdef ENABLE_IPV6
|
||||||
memcpy((char *)&sa.sin_addr, addr->ai_addr, addr->ai_addrlen);
|
(void)sa; /* prevent compiler warning */
|
||||||
sa.sin_family = addr->ai_family;
|
if( bind(sockfd, addr->ai_addr, addr->ai_addrlen) >= 0) {
|
||||||
|
/* we succeeded to bind */
|
||||||
|
struct sockaddr_in6 add;
|
||||||
|
|
||||||
|
size = sizeof(add);
|
||||||
|
if(getsockname(sockfd, (struct sockaddr *) &add,
|
||||||
|
(socklen_t *)&size)<0) {
|
||||||
|
failf(data, "getsockname() failed");
|
||||||
|
return CURLE_HTTP_PORT_FAILED;
|
||||||
|
}
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
|
memset((char *)&sa, 0, sizeof(sa));
|
||||||
memcpy((char *)&sa.sin_addr, addr->h_addr, addr->h_length);
|
memcpy((char *)&sa.sin_addr, addr->h_addr, addr->h_length);
|
||||||
sa.sin_family = AF_INET;
|
sa.sin_family = AF_INET;
|
||||||
#endif
|
|
||||||
sa.sin_addr.s_addr = in;
|
sa.sin_addr.s_addr = in;
|
||||||
sa.sin_port = 0; /* get any port */
|
sa.sin_port = 0; /* get any port */
|
||||||
|
|
||||||
@@ -274,6 +286,7 @@ static CURLcode bindlocal(struct connectdata *conn,
|
|||||||
return CURLE_HTTP_PORT_FAILED;
|
return CURLE_HTTP_PORT_FAILED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
else {
|
else {
|
||||||
switch(errno) {
|
switch(errno) {
|
||||||
case EBADF:
|
case EBADF:
|
||||||
@@ -337,7 +350,7 @@ int socketerror(int sockfd)
|
|||||||
|
|
||||||
if( -1 == getsockopt(sockfd, SOL_SOCKET, SO_ERROR,
|
if( -1 == getsockopt(sockfd, SOL_SOCKET, SO_ERROR,
|
||||||
(void *)&err, &errSize))
|
(void *)&err, &errSize))
|
||||||
err = geterrno();
|
err = ourerrno();
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@@ -380,6 +393,11 @@ CURLcode Curl_is_connected(struct connectdata *conn,
|
|||||||
return CURLE_OPERATION_TIMEOUTED;
|
return CURLE_OPERATION_TIMEOUTED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(conn->bits.tcpconnect) {
|
||||||
|
/* we are connected already! */
|
||||||
|
*connected = TRUE;
|
||||||
|
return CURLE_OK;
|
||||||
|
}
|
||||||
|
|
||||||
/* check for connect without timeout as we want to return immediately */
|
/* check for connect without timeout as we want to return immediately */
|
||||||
rc = waitconnect(sockfd, 0);
|
rc = waitconnect(sockfd, 0);
|
||||||
@@ -392,10 +410,15 @@ CURLcode Curl_is_connected(struct connectdata *conn,
|
|||||||
return CURLE_OK;
|
return CURLE_OK;
|
||||||
}
|
}
|
||||||
/* nope, not connected for real */
|
/* nope, not connected for real */
|
||||||
if(err)
|
failf(data, "Connection failed, socket error: %d", err);
|
||||||
|
return CURLE_COULDNT_CONNECT;
|
||||||
|
}
|
||||||
|
else if(1 != rc) {
|
||||||
|
int error = ourerrno();
|
||||||
|
failf(data, "Failed connect to %s:%d, errno: %d",
|
||||||
|
conn->hostname, conn->port, error);
|
||||||
return CURLE_COULDNT_CONNECT;
|
return CURLE_COULDNT_CONNECT;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If the connection phase is "done" here, we should attempt to connect
|
* If the connection phase is "done" here, we should attempt to connect
|
||||||
* to the "next address" in the Curl_hostaddr structure that we resolved
|
* to the "next address" in the Curl_hostaddr structure that we resolved
|
||||||
@@ -503,7 +526,7 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */
|
|||||||
rc = connect(sockfd, ai->ai_addr, ai->ai_addrlen);
|
rc = connect(sockfd, ai->ai_addr, ai->ai_addrlen);
|
||||||
|
|
||||||
if(-1 == rc) {
|
if(-1 == rc) {
|
||||||
int error=geterrno();
|
int error=ourerrno();
|
||||||
|
|
||||||
switch (error) {
|
switch (error) {
|
||||||
case EINPROGRESS:
|
case EINPROGRESS:
|
||||||
@@ -544,6 +567,9 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */
|
|||||||
failf(data, "socket error: %d", err);
|
failf(data, "socket error: %d", err);
|
||||||
/* we are _not_ connected, it was a false alert, continue please */
|
/* we are _not_ connected, it was a false alert, continue please */
|
||||||
}
|
}
|
||||||
|
else if(2 == rc)
|
||||||
|
/* waitconnect() returned error */
|
||||||
|
;
|
||||||
else if(data->state.used_interface == Curl_if_multi) {
|
else if(data->state.used_interface == Curl_if_multi) {
|
||||||
/* When running the multi interface, we bail out here */
|
/* When running the multi interface, we bail out here */
|
||||||
rc = 0;
|
rc = 0;
|
||||||
@@ -619,7 +645,7 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */
|
|||||||
sizeof(serv_addr));
|
sizeof(serv_addr));
|
||||||
|
|
||||||
if(-1 == rc) {
|
if(-1 == rc) {
|
||||||
int error=geterrno();
|
int error=ourerrno();
|
||||||
|
|
||||||
switch (error) {
|
switch (error) {
|
||||||
case EINPROGRESS:
|
case EINPROGRESS:
|
||||||
@@ -646,6 +672,15 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* The '1 == rc' comes from the waitconnect(), and not from connect().
|
||||||
|
We can be sure of this since connect() cannot return 1. */
|
||||||
|
if((1 == rc) && (data->state.used_interface == Curl_if_multi)) {
|
||||||
|
/* Timeout when running the multi interface, we return here with a
|
||||||
|
CURLE_OK return code. */
|
||||||
|
rc = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if(0 == rc) {
|
if(0 == rc) {
|
||||||
int err = socketerror(sockfd);
|
int err = socketerror(sockfd);
|
||||||
if ((0 == err) || (EISCONN == err)) {
|
if ((0 == err) || (EISCONN == err)) {
|
||||||
@@ -658,12 +693,6 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(0 != rc) {
|
if(0 != rc) {
|
||||||
if(data->state.used_interface == Curl_if_multi) {
|
|
||||||
/* When running the multi interface, we bail out here */
|
|
||||||
rc = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* get a new timeout for next attempt */
|
/* get a new timeout for next attempt */
|
||||||
after = Curl_tvnow();
|
after = Curl_tvnow();
|
||||||
timeout_ms -= Curl_tvdiff(after, before);
|
timeout_ms -= Curl_tvdiff(after, before);
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -112,11 +112,3 @@ Curl_unencode_deflate_write(struct SessionHandle *data,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* HAVE_LIBZ */
|
#endif /* HAVE_LIBZ */
|
||||||
|
|
||||||
/*
|
|
||||||
* local variables:
|
|
||||||
* eval: (load-file "../curl-mode.el")
|
|
||||||
* end:
|
|
||||||
* vim600: fdm=marker
|
|
||||||
* vim: et sw=2 ts=2 sts=2 tw=78
|
|
||||||
*/
|
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -24,11 +24,3 @@
|
|||||||
CURLcode Curl_unencode_deflate_write(struct SessionHandle *data,
|
CURLcode Curl_unencode_deflate_write(struct SessionHandle *data,
|
||||||
struct Curl_transfer_keeper *k,
|
struct Curl_transfer_keeper *k,
|
||||||
ssize_t nread);
|
ssize_t nread);
|
||||||
|
|
||||||
/*
|
|
||||||
* local variables:
|
|
||||||
* eval: (load-file "../curl-mode.el")
|
|
||||||
* end:
|
|
||||||
* vim600: fdm=marker
|
|
||||||
* vim: et sw=2 ts=2 sts=2 tw=78
|
|
||||||
*/
|
|
||||||
|
11
lib/cookie.c
11
lib/cookie.c
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -77,6 +77,7 @@ Example set of cookies:
|
|||||||
13-Jun-1988 03:04:55 GMT; domain=.fidelity.com; path=/; secure
|
13-Jun-1988 03:04:55 GMT; domain=.fidelity.com; path=/; secure
|
||||||
****/
|
****/
|
||||||
|
|
||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
|
|
||||||
#ifndef CURL_DISABLE_HTTP
|
#ifndef CURL_DISABLE_HTTP
|
||||||
@@ -768,11 +769,3 @@ int main(int argc, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* CURL_DISABLE_HTTP */
|
#endif /* CURL_DISABLE_HTTP */
|
||||||
|
|
||||||
/*
|
|
||||||
* local variables:
|
|
||||||
* eval: (load-file "../curl-mode.el")
|
|
||||||
* end:
|
|
||||||
* vim600: fdm=marker
|
|
||||||
* vim: et sw=2 ts=2 sts=2 tw=78
|
|
||||||
*/
|
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
|
@@ -31,19 +31,19 @@ RSC=rc.exe
|
|||||||
|
|
||||||
!IF "$(CFG)" == "curllib - Win32 Release"
|
!IF "$(CFG)" == "curllib - Win32 Release"
|
||||||
|
|
||||||
# PROP BASE Use_MFC 6
|
# PROP BASE Use_MFC 0
|
||||||
# PROP BASE Use_Debug_Libraries 0
|
# PROP BASE Use_Debug_Libraries 0
|
||||||
# PROP BASE Output_Dir "Release"
|
# PROP BASE Output_Dir "Release"
|
||||||
# PROP BASE Intermediate_Dir "Release"
|
# PROP BASE Intermediate_Dir "Release"
|
||||||
# PROP BASE Target_Dir ""
|
# PROP BASE Target_Dir ""
|
||||||
# PROP Use_MFC 6
|
# PROP Use_MFC 0
|
||||||
# PROP Use_Debug_Libraries 0
|
# PROP Use_Debug_Libraries 0
|
||||||
# PROP Output_Dir "Release"
|
# PROP Output_Dir "Release"
|
||||||
# PROP Intermediate_Dir "Release"
|
# PROP Intermediate_Dir "Release"
|
||||||
# PROP Ignore_Export_Lib 0
|
# PROP Ignore_Export_Lib 0
|
||||||
# PROP Target_Dir ""
|
# PROP Target_Dir ""
|
||||||
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CURLLIB_EXPORTS" /YX /FD /c
|
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CURLLIB_EXPORTS" /YX /FD /c
|
||||||
# ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CURLLIB_EXPORTS" /FR /FD /c
|
# ADD CPP /nologo /MT /W3 /GX /Zi /O2 /I "..\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CURLLIB_EXPORTS" /D "_WINDLL" /FR /FD /c
|
||||||
# SUBTRACT CPP /YX
|
# SUBTRACT CPP /YX
|
||||||
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||||
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||||
@@ -70,7 +70,7 @@ LINK32=link.exe
|
|||||||
# PROP Ignore_Export_Lib 0
|
# PROP Ignore_Export_Lib 0
|
||||||
# PROP Target_Dir ""
|
# PROP Target_Dir ""
|
||||||
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CURLLIB_EXPORTS" /YX /FD /GZ /c
|
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CURLLIB_EXPORTS" /YX /FD /GZ /c
|
||||||
# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CURLLIB_EXPORTS" /FR /FD /GZ /c
|
# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CURLLIB_EXPORTS" /FR /FD /GZ /c
|
||||||
# SUBTRACT CPP /WX /YX
|
# SUBTRACT CPP /WX /YX
|
||||||
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||||
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||||
|
10
lib/dict.c
10
lib/dict.c
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -231,11 +231,3 @@ CURLcode Curl_dict(struct connectdata *conn)
|
|||||||
|
|
||||||
return CURLE_OK;
|
return CURLE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* local variables:
|
|
||||||
* eval: (load-file "../curl-mode.el")
|
|
||||||
* end:
|
|
||||||
* vim600: fdm=marker
|
|
||||||
* vim: et sw=2 ts=2 sts=2 tw=78
|
|
||||||
*/
|
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
|
22
lib/easy.c
22
lib/easy.c
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -233,13 +233,15 @@ CURLcode curl_easy_perform(CURL *curl)
|
|||||||
{
|
{
|
||||||
struct SessionHandle *data = (struct SessionHandle *)curl;
|
struct SessionHandle *data = (struct SessionHandle *)curl;
|
||||||
|
|
||||||
if (!data->hostcache) {
|
if (Curl_global_host_cache_use(data) && data->hostcache != Curl_global_host_cache_get()) {
|
||||||
if (Curl_global_host_cache_use(data)) {
|
if (data->hostcache) {
|
||||||
|
Curl_hash_destroy(data->hostcache);
|
||||||
|
}
|
||||||
data->hostcache = Curl_global_host_cache_get();
|
data->hostcache = Curl_global_host_cache_get();
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
data->hostcache = Curl_hash_alloc(7, Curl_freeaddrinfo);
|
if (!data->hostcache) {
|
||||||
}
|
data->hostcache = Curl_hash_alloc(7, Curl_freednsinfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Curl_perform(data);
|
return Curl_perform(data);
|
||||||
@@ -331,11 +333,3 @@ CURL *curl_easy_duphandle(CURL *incurl)
|
|||||||
|
|
||||||
return outcurl;
|
return outcurl;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* local variables:
|
|
||||||
* eval: (load-file "../curl-mode.el")
|
|
||||||
* end:
|
|
||||||
* vim600: fdm=marker
|
|
||||||
* vim: et sw=2 ts=2 sts=2 tw=78
|
|
||||||
*/
|
|
||||||
|
25
lib/escape.c
25
lib/escape.c
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -41,6 +41,7 @@ char *curl_escape(const char *string, int length)
|
|||||||
{
|
{
|
||||||
int alloc = (length?length:(int)strlen(string))+1;
|
int alloc = (length?length:(int)strlen(string))+1;
|
||||||
char *ns = malloc(alloc);
|
char *ns = malloc(alloc);
|
||||||
|
char *testing_ptr = NULL;
|
||||||
unsigned char in;
|
unsigned char in;
|
||||||
int newlen = alloc;
|
int newlen = alloc;
|
||||||
int index=0;
|
int index=0;
|
||||||
@@ -55,10 +56,15 @@ char *curl_escape(const char *string, int length)
|
|||||||
newlen += 2; /* the size grows with two, since this'll become a %XX */
|
newlen += 2; /* the size grows with two, since this'll become a %XX */
|
||||||
if(newlen > alloc) {
|
if(newlen > alloc) {
|
||||||
alloc *= 2;
|
alloc *= 2;
|
||||||
ns = realloc(ns, alloc);
|
testing_ptr = realloc(ns, alloc);
|
||||||
if(!ns)
|
if(!testing_ptr) {
|
||||||
|
free( ns );
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
ns = testing_ptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
sprintf(&ns[index], "%%%02X", in);
|
sprintf(&ns[index], "%%%02X", in);
|
||||||
|
|
||||||
index+=3;
|
index+=3;
|
||||||
@@ -81,6 +87,10 @@ char *curl_unescape(const char *string, int length)
|
|||||||
int index=0;
|
int index=0;
|
||||||
unsigned int hex;
|
unsigned int hex;
|
||||||
|
|
||||||
|
if( !ns ) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
while(--alloc > 0) {
|
while(--alloc > 0) {
|
||||||
in = *string;
|
in = *string;
|
||||||
if('%' == in) {
|
if('%' == in) {
|
||||||
@@ -97,18 +107,9 @@ char *curl_unescape(const char *string, int length)
|
|||||||
}
|
}
|
||||||
ns[index]=0; /* terminate it */
|
ns[index]=0; /* terminate it */
|
||||||
return ns;
|
return ns;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void curl_free(void *p)
|
void curl_free(void *p)
|
||||||
{
|
{
|
||||||
free(p);
|
free(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* local variables:
|
|
||||||
* eval: (load-file "../curl-mode.el")
|
|
||||||
* end:
|
|
||||||
* vim600: fdm=marker
|
|
||||||
* vim: et sw=2 ts=2 sts=2 tw=78
|
|
||||||
*/
|
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
|
10
lib/file.c
10
lib/file.c
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -211,12 +211,4 @@ CURLcode Curl_file(struct connectdata *conn)
|
|||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* local variables:
|
|
||||||
* eval: (load-file "../curl-mode.el")
|
|
||||||
* end:
|
|
||||||
* vim600: fdm=marker
|
|
||||||
* vim: et sw=2 ts=2 sts=2 tw=78
|
|
||||||
*/
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -1319,7 +1319,7 @@ int Curl_FormReader(char *buffer,
|
|||||||
wantedsize = size * nitems;
|
wantedsize = size * nitems;
|
||||||
|
|
||||||
if(!form->data)
|
if(!form->data)
|
||||||
return -1; /* nothing, error, empty */
|
return 0; /* nothing, error, empty */
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
|
||||||
@@ -1596,11 +1596,3 @@ int main(int argc, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* CURL_DISABLE_HTTP */
|
#endif /* CURL_DISABLE_HTTP */
|
||||||
|
|
||||||
/*
|
|
||||||
* local variables:
|
|
||||||
* eval: (load-file "../curl-mode.el")
|
|
||||||
* end:
|
|
||||||
* vim600: fdm=marker
|
|
||||||
* vim: et sw=2 ts=2 sts=2 tw=78
|
|
||||||
*/
|
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
|
246
lib/ftp.c
246
lib/ftp.c
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -173,9 +173,9 @@ static CURLcode AllowServerConnect(struct SessionHandle *data,
|
|||||||
* response and extract the relevant return code for the invoking function.
|
* response and extract the relevant return code for the invoking function.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int Curl_GetFTPResponse(char *buf,
|
CURLcode Curl_GetFTPResponse(ssize_t *nreadp, /* return number of bytes read */
|
||||||
struct connectdata *conn,
|
struct connectdata *conn,
|
||||||
int *ftpcode)
|
int *ftpcode) /* return the ftp-code */
|
||||||
{
|
{
|
||||||
/* Brand new implementation.
|
/* Brand new implementation.
|
||||||
* We cannot read just one byte per read() and then go back to select()
|
* We cannot read just one byte per read() and then go back to select()
|
||||||
@@ -185,28 +185,21 @@ int Curl_GetFTPResponse(char *buf,
|
|||||||
* line in a response or continue reading. */
|
* line in a response or continue reading. */
|
||||||
|
|
||||||
int sockfd = conn->firstsocket;
|
int sockfd = conn->firstsocket;
|
||||||
int nread; /* total size read */
|
|
||||||
int perline; /* count bytes per line */
|
int perline; /* count bytes per line */
|
||||||
bool keepon=TRUE;
|
bool keepon=TRUE;
|
||||||
ssize_t gotbytes;
|
ssize_t gotbytes;
|
||||||
char *ptr;
|
char *ptr;
|
||||||
int timeout = 3600; /* default timeout in seconds */
|
int timeout; /* timeout in seconds */
|
||||||
struct timeval interval;
|
struct timeval interval;
|
||||||
fd_set rkeepfd;
|
fd_set rkeepfd;
|
||||||
fd_set readfd;
|
fd_set readfd;
|
||||||
struct SessionHandle *data = conn->data;
|
struct SessionHandle *data = conn->data;
|
||||||
char *line_start;
|
char *line_start;
|
||||||
int code=0; /* default "error code" to return */
|
int code=0; /* default ftp "error code" to return */
|
||||||
|
char *buf = data->state.buffer;
|
||||||
#define SELECT_OK 0
|
CURLcode result = CURLE_OK;
|
||||||
#define SELECT_ERROR 1 /* select() problems */
|
|
||||||
#define SELECT_TIMEOUT 2 /* took too long */
|
|
||||||
#define SELECT_MEMORY 3 /* no available memory */
|
|
||||||
#define SELECT_CALLBACK 4 /* aborted by callback */
|
|
||||||
|
|
||||||
int error = SELECT_OK;
|
|
||||||
|
|
||||||
struct FTP *ftp = conn->proto.ftp;
|
struct FTP *ftp = conn->proto.ftp;
|
||||||
|
struct timeval now = Curl_tvnow();
|
||||||
|
|
||||||
if (ftpcode)
|
if (ftpcode)
|
||||||
*ftpcode = 0; /* 0 for errors */
|
*ftpcode = 0; /* 0 for errors */
|
||||||
@@ -221,20 +214,25 @@ int Curl_GetFTPResponse(char *buf,
|
|||||||
ptr=buf;
|
ptr=buf;
|
||||||
line_start = buf;
|
line_start = buf;
|
||||||
|
|
||||||
nread=0;
|
*nreadp=0;
|
||||||
perline=0;
|
perline=0;
|
||||||
keepon=TRUE;
|
keepon=TRUE;
|
||||||
|
|
||||||
while((nread<BUFSIZE) && (keepon && !error)) {
|
while((*nreadp<BUFSIZE) && (keepon && !result)) {
|
||||||
/* check and reset timeout value every lap */
|
/* check and reset timeout value every lap */
|
||||||
if(data->set.timeout) {
|
if(data->set.timeout)
|
||||||
/* if timeout is requested, find out how much remaining time we have */
|
/* if timeout is requested, find out how much remaining time we have */
|
||||||
timeout = data->set.timeout - /* timeout time */
|
timeout = data->set.timeout - /* timeout time */
|
||||||
Curl_tvdiff(Curl_tvnow(), conn->now)/1000; /* spent time */
|
Curl_tvdiff(Curl_tvnow(), conn->now)/1000; /* spent time */
|
||||||
|
else
|
||||||
|
/* Even without a requested timeout, we only wait response_time
|
||||||
|
seconds for the full response to arrive before we bail out */
|
||||||
|
timeout = ftp->response_time -
|
||||||
|
Curl_tvdiff(Curl_tvnow(), now)/1000; /* spent time */
|
||||||
|
|
||||||
if(timeout <=0 ) {
|
if(timeout <=0 ) {
|
||||||
failf(data, "Transfer aborted due to timeout");
|
failf(data, "Transfer aborted due to timeout");
|
||||||
return -SELECT_TIMEOUT; /* already too little time */
|
return CURLE_OPERATION_TIMEDOUT; /* already too little time */
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!ftp->cache) {
|
if(!ftp->cache) {
|
||||||
@@ -244,19 +242,18 @@ int Curl_GetFTPResponse(char *buf,
|
|||||||
|
|
||||||
switch (select (sockfd+1, &readfd, NULL, NULL, &interval)) {
|
switch (select (sockfd+1, &readfd, NULL, NULL, &interval)) {
|
||||||
case -1: /* select() error, stop reading */
|
case -1: /* select() error, stop reading */
|
||||||
error = SELECT_ERROR;
|
result = CURLE_RECV_ERROR;
|
||||||
failf(data, "Transfer aborted due to select() error");
|
failf(data, "Transfer aborted due to select() error: %d", errno);
|
||||||
break;
|
break;
|
||||||
case 0: /* timeout */
|
case 0: /* timeout */
|
||||||
error = SELECT_TIMEOUT;
|
result = CURLE_OPERATION_TIMEDOUT;
|
||||||
failf(data, "Transfer aborted due to timeout");
|
failf(data, "Transfer aborted due to timeout");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
error = SELECT_OK;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(SELECT_OK == error) {
|
if(CURLE_OK == result) {
|
||||||
/*
|
/*
|
||||||
* This code previously didn't use the kerberos sec_read() code
|
* This code previously didn't use the kerberos sec_read() code
|
||||||
* to read, but when we use Curl_read() it may do so. Do confirm
|
* to read, but when we use Curl_read() it may do so. Do confirm
|
||||||
@@ -272,8 +269,7 @@ int Curl_GetFTPResponse(char *buf,
|
|||||||
ftp->cache_size = 0; /* zero the size just in case */
|
ftp->cache_size = 0; /* zero the size just in case */
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
int res = Curl_read(conn, sockfd, ptr,
|
int res = Curl_read(conn, sockfd, ptr, BUFSIZE-*nreadp, &gotbytes);
|
||||||
BUFSIZE-nread, &gotbytes);
|
|
||||||
if(res < 0)
|
if(res < 0)
|
||||||
/* EWOULDBLOCK */
|
/* EWOULDBLOCK */
|
||||||
continue; /* go looping again */
|
continue; /* go looping again */
|
||||||
@@ -286,7 +282,7 @@ int Curl_GetFTPResponse(char *buf,
|
|||||||
;
|
;
|
||||||
else if(gotbytes <= 0) {
|
else if(gotbytes <= 0) {
|
||||||
keepon = FALSE;
|
keepon = FALSE;
|
||||||
error = SELECT_ERROR;
|
result = CURLE_RECV_ERROR;
|
||||||
failf(data, "Connection aborted");
|
failf(data, "Connection aborted");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -295,7 +291,7 @@ int Curl_GetFTPResponse(char *buf,
|
|||||||
* line */
|
* line */
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
nread += gotbytes;
|
*nreadp += gotbytes;
|
||||||
for(i = 0; i < gotbytes; ptr++, i++) {
|
for(i = 0; i < gotbytes; ptr++, i++) {
|
||||||
perline++;
|
perline++;
|
||||||
if(*ptr=='\n') {
|
if(*ptr=='\n') {
|
||||||
@@ -315,7 +311,7 @@ int Curl_GetFTPResponse(char *buf,
|
|||||||
result = Curl_client_write(data, CLIENTWRITE_HEADER,
|
result = Curl_client_write(data, CLIENTWRITE_HEADER,
|
||||||
line_start, perline);
|
line_start, perline);
|
||||||
if(result)
|
if(result)
|
||||||
return -SELECT_CALLBACK;
|
return result;
|
||||||
|
|
||||||
#define lastline(line) (isdigit((int)line[0]) && isdigit((int)line[1]) && \
|
#define lastline(line) (isdigit((int)line[0]) && isdigit((int)line[1]) && \
|
||||||
isdigit((int)line[2]) && (' ' == line[3]))
|
isdigit((int)line[2]) && (' ' == line[3]))
|
||||||
@@ -350,13 +346,13 @@ int Curl_GetFTPResponse(char *buf,
|
|||||||
if(ftp->cache)
|
if(ftp->cache)
|
||||||
memcpy(ftp->cache, line_start, ftp->cache_size);
|
memcpy(ftp->cache, line_start, ftp->cache_size);
|
||||||
else
|
else
|
||||||
return -SELECT_MEMORY; /**BANG**/
|
return CURLE_OUT_OF_MEMORY; /**BANG**/
|
||||||
}
|
}
|
||||||
} /* there was data */
|
} /* there was data */
|
||||||
} /* if(no error) */
|
} /* if(no error) */
|
||||||
} /* while there's buffer left and loop is requested */
|
} /* while there's buffer left and loop is requested */
|
||||||
|
|
||||||
if(!error)
|
if(!result)
|
||||||
code = atoi(buf);
|
code = atoi(buf);
|
||||||
|
|
||||||
#ifdef KRB4
|
#ifdef KRB4
|
||||||
@@ -378,13 +374,10 @@ int Curl_GetFTPResponse(char *buf,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if(error)
|
|
||||||
return -error;
|
|
||||||
|
|
||||||
if(ftpcode)
|
if(ftpcode)
|
||||||
*ftpcode=code; /* return the initial number like this */
|
*ftpcode=code; /* return the initial number like this */
|
||||||
|
|
||||||
return nread; /* total amount of bytes read */
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -394,7 +387,7 @@ int Curl_GetFTPResponse(char *buf,
|
|||||||
CURLcode Curl_ftp_connect(struct connectdata *conn)
|
CURLcode Curl_ftp_connect(struct connectdata *conn)
|
||||||
{
|
{
|
||||||
/* this is FTP and no proxy */
|
/* this is FTP and no proxy */
|
||||||
int nread;
|
ssize_t nread;
|
||||||
struct SessionHandle *data=conn->data;
|
struct SessionHandle *data=conn->data;
|
||||||
char *buf = data->state.buffer; /* this is our buffer */
|
char *buf = data->state.buffer; /* this is our buffer */
|
||||||
struct FTP *ftp;
|
struct FTP *ftp;
|
||||||
@@ -417,6 +410,7 @@ CURLcode Curl_ftp_connect(struct connectdata *conn)
|
|||||||
/* no need to duplicate them, the data struct won't change */
|
/* no need to duplicate them, the data struct won't change */
|
||||||
ftp->user = data->state.user;
|
ftp->user = data->state.user;
|
||||||
ftp->passwd = data->state.passwd;
|
ftp->passwd = data->state.passwd;
|
||||||
|
ftp->response_time = 3600; /* set default response time-out */
|
||||||
|
|
||||||
if (data->set.tunnel_thru_httpproxy) {
|
if (data->set.tunnel_thru_httpproxy) {
|
||||||
/* We want "seamless" FTP operations through HTTP proxy tunnel */
|
/* We want "seamless" FTP operations through HTTP proxy tunnel */
|
||||||
@@ -436,9 +430,9 @@ CURLcode Curl_ftp_connect(struct connectdata *conn)
|
|||||||
|
|
||||||
|
|
||||||
/* The first thing we do is wait for the "220*" line: */
|
/* The first thing we do is wait for the "220*" line: */
|
||||||
nread = Curl_GetFTPResponse(buf, conn, &ftpcode);
|
result = Curl_GetFTPResponse(&nread, conn, &ftpcode);
|
||||||
if(nread < 0)
|
if(result)
|
||||||
return CURLE_OPERATION_TIMEOUTED;
|
return result;
|
||||||
|
|
||||||
if(ftpcode != 220) {
|
if(ftpcode != 220) {
|
||||||
failf(data, "This doesn't seem like a nice ftp-server response");
|
failf(data, "This doesn't seem like a nice ftp-server response");
|
||||||
@@ -467,9 +461,9 @@ CURLcode Curl_ftp_connect(struct connectdata *conn)
|
|||||||
FTPSENDF(conn, "USER %s", ftp->user);
|
FTPSENDF(conn, "USER %s", ftp->user);
|
||||||
|
|
||||||
/* wait for feedback */
|
/* wait for feedback */
|
||||||
nread = Curl_GetFTPResponse(buf, conn, &ftpcode);
|
result = Curl_GetFTPResponse(&nread, conn, &ftpcode);
|
||||||
if(nread < 0)
|
if(result)
|
||||||
return CURLE_OPERATION_TIMEOUTED;
|
return result;
|
||||||
|
|
||||||
if(ftpcode == 530) {
|
if(ftpcode == 530) {
|
||||||
/* 530 User ... access denied
|
/* 530 User ... access denied
|
||||||
@@ -481,9 +475,9 @@ CURLcode Curl_ftp_connect(struct connectdata *conn)
|
|||||||
/* 331 Password required for ...
|
/* 331 Password required for ...
|
||||||
(the server requires to send the user's password too) */
|
(the server requires to send the user's password too) */
|
||||||
FTPSENDF(conn, "PASS %s", ftp->passwd);
|
FTPSENDF(conn, "PASS %s", ftp->passwd);
|
||||||
nread = Curl_GetFTPResponse(buf, conn, &ftpcode);
|
result = Curl_GetFTPResponse(&nread, conn, &ftpcode);
|
||||||
if(nread < 0)
|
if(result)
|
||||||
return CURLE_OPERATION_TIMEOUTED;
|
return result;
|
||||||
|
|
||||||
if(ftpcode == 530) {
|
if(ftpcode == 530) {
|
||||||
/* 530 Login incorrect.
|
/* 530 Login incorrect.
|
||||||
@@ -516,8 +510,11 @@ CURLcode Curl_ftp_connect(struct connectdata *conn)
|
|||||||
/* we may need to issue a KAUTH here to have access to the files
|
/* we may need to issue a KAUTH here to have access to the files
|
||||||
* do it if user supplied a password
|
* do it if user supplied a password
|
||||||
*/
|
*/
|
||||||
if(data->state.passwd && *data->state.passwd)
|
if(data->state.passwd && *data->state.passwd) {
|
||||||
Curl_krb_kauth(conn);
|
result = Curl_krb_kauth(conn);
|
||||||
|
if(result)
|
||||||
|
return result;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -529,9 +526,9 @@ CURLcode Curl_ftp_connect(struct connectdata *conn)
|
|||||||
FTPSENDF(conn, "PWD", NULL);
|
FTPSENDF(conn, "PWD", NULL);
|
||||||
|
|
||||||
/* wait for feedback */
|
/* wait for feedback */
|
||||||
nread = Curl_GetFTPResponse(buf, conn, &ftpcode);
|
result = Curl_GetFTPResponse(&nread, conn, &ftpcode);
|
||||||
if(nread < 0)
|
if(result)
|
||||||
return CURLE_OPERATION_TIMEOUTED;
|
return result;
|
||||||
|
|
||||||
if(ftpcode == 257) {
|
if(ftpcode == 257) {
|
||||||
char *dir = (char *)malloc(nread+1);
|
char *dir = (char *)malloc(nread+1);
|
||||||
@@ -544,7 +541,7 @@ CURLcode Curl_ftp_connect(struct connectdata *conn)
|
|||||||
The directory name can contain any character; embedded double-quotes
|
The directory name can contain any character; embedded double-quotes
|
||||||
should be escaped by double-quotes (the "quote-doubling" convention).
|
should be escaped by double-quotes (the "quote-doubling" convention).
|
||||||
*/
|
*/
|
||||||
if('\"' == *ptr) {
|
if(dir && ('\"' == *ptr)) {
|
||||||
/* it started good */
|
/* it started good */
|
||||||
ptr++;
|
ptr++;
|
||||||
while(ptr && *ptr) {
|
while(ptr && *ptr) {
|
||||||
@@ -570,6 +567,8 @@ CURLcode Curl_ftp_connect(struct connectdata *conn)
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* couldn't get the path */
|
/* couldn't get the path */
|
||||||
|
free(dir);
|
||||||
|
infof(data, "Failed to figure out path\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -594,7 +593,6 @@ CURLcode Curl_ftp_done(struct connectdata *conn)
|
|||||||
struct SessionHandle *data = conn->data;
|
struct SessionHandle *data = conn->data;
|
||||||
struct FTP *ftp = conn->proto.ftp;
|
struct FTP *ftp = conn->proto.ftp;
|
||||||
ssize_t nread;
|
ssize_t nread;
|
||||||
char *buf = data->state.buffer; /* this is our buffer */
|
|
||||||
int ftpcode;
|
int ftpcode;
|
||||||
CURLcode result=CURLE_OK;
|
CURLcode result=CURLE_OK;
|
||||||
|
|
||||||
@@ -633,11 +631,24 @@ CURLcode Curl_ftp_done(struct connectdata *conn)
|
|||||||
conn->secondarysocket = -1;
|
conn->secondarysocket = -1;
|
||||||
|
|
||||||
if(!ftp->no_transfer) {
|
if(!ftp->no_transfer) {
|
||||||
/* now let's see what the server says about the transfer we just
|
/* Let's see what the server says about the transfer we just performed,
|
||||||
performed: */
|
but lower the timeout as sometimes this connection has died while
|
||||||
nread = Curl_GetFTPResponse(buf, conn, &ftpcode);
|
the data has been transfered. This happens when doing through NATs
|
||||||
if(nread < 0)
|
etc that abandon old silent connections.
|
||||||
return CURLE_OPERATION_TIMEOUTED;
|
*/
|
||||||
|
ftp->response_time = 60; /* give it only a minute for now */
|
||||||
|
|
||||||
|
result = Curl_GetFTPResponse(&nread, conn, &ftpcode);
|
||||||
|
|
||||||
|
ftp->response_time = 3600; /* set this back to one hour waits */
|
||||||
|
|
||||||
|
if(!nread && (CURLE_OPERATION_TIMEDOUT == result)) {
|
||||||
|
failf(data, "control connection looks dead");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(result)
|
||||||
|
return result;
|
||||||
|
|
||||||
if(!ftp->dont_check) {
|
if(!ftp->dont_check) {
|
||||||
/* 226 Transfer complete, 250 Requested file action okay, completed. */
|
/* 226 Transfer complete, 250 Requested file action okay, completed. */
|
||||||
@@ -680,9 +691,9 @@ CURLcode ftp_sendquote(struct connectdata *conn, struct curl_slist *quote)
|
|||||||
if (item->data) {
|
if (item->data) {
|
||||||
FTPSENDF(conn, "%s", item->data);
|
FTPSENDF(conn, "%s", item->data);
|
||||||
|
|
||||||
nread = Curl_GetFTPResponse(conn->data->state.buffer, conn, &ftpcode);
|
result = Curl_GetFTPResponse(&nread, conn, &ftpcode);
|
||||||
if (nread < 0)
|
if (result)
|
||||||
return CURLE_OPERATION_TIMEOUTED;
|
return result;
|
||||||
|
|
||||||
if (ftpcode >= 400) {
|
if (ftpcode >= 400) {
|
||||||
failf(conn->data, "QUOT string not accepted: %s", item->data);
|
failf(conn->data, "QUOT string not accepted: %s", item->data);
|
||||||
@@ -711,9 +722,9 @@ CURLcode ftp_cwd(struct connectdata *conn, char *path)
|
|||||||
CURLcode result;
|
CURLcode result;
|
||||||
|
|
||||||
FTPSENDF(conn, "CWD %s", path);
|
FTPSENDF(conn, "CWD %s", path);
|
||||||
nread = Curl_GetFTPResponse(conn->data->state.buffer, conn, &ftpcode);
|
result = Curl_GetFTPResponse(&nread, conn, &ftpcode);
|
||||||
if (nread < 0)
|
if (result)
|
||||||
return CURLE_OPERATION_TIMEOUTED;
|
return result;
|
||||||
|
|
||||||
if (ftpcode != 250) {
|
if (ftpcode != 250) {
|
||||||
failf(conn->data, "Couldn't cd to %s", path);
|
failf(conn->data, "Couldn't cd to %s", path);
|
||||||
@@ -741,11 +752,13 @@ CURLcode ftp_getfiletime(struct connectdata *conn, char *file)
|
|||||||
again a grey area as the MDTM is not kosher RFC959 */
|
again a grey area as the MDTM is not kosher RFC959 */
|
||||||
FTPSENDF(conn, "MDTM %s", file);
|
FTPSENDF(conn, "MDTM %s", file);
|
||||||
|
|
||||||
nread = Curl_GetFTPResponse(buf, conn, &ftpcode);
|
result = Curl_GetFTPResponse(&nread, conn, &ftpcode);
|
||||||
if(nread < 0)
|
if(result)
|
||||||
return CURLE_OPERATION_TIMEOUTED;
|
return result;
|
||||||
|
|
||||||
if(ftpcode == 213) {
|
switch(ftpcode) {
|
||||||
|
case 213:
|
||||||
|
{
|
||||||
/* we got a time. Format should be: "YYYYMMDDHHMMSS[.sss]" where the
|
/* we got a time. Format should be: "YYYYMMDDHHMMSS[.sss]" where the
|
||||||
last .sss part is optional and means fractions of a second */
|
last .sss part is optional and means fractions of a second */
|
||||||
int year, month, day, hour, minute, second;
|
int year, month, day, hour, minute, second;
|
||||||
@@ -758,9 +771,15 @@ CURLcode ftp_getfiletime(struct connectdata *conn, char *file)
|
|||||||
/* now, convert this into a time() value: */
|
/* now, convert this into a time() value: */
|
||||||
conn->data->info.filetime = curl_getdate(buf, &secs);
|
conn->data->info.filetime = curl_getdate(buf, &secs);
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
infof(conn->data, "unsupported MDTM reply format\n");
|
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
infof(conn->data, "unsupported MDTM reply format\n");
|
||||||
|
break;
|
||||||
|
case 550: /* "No such file or directory" */
|
||||||
|
failf(conn->data, "Given file does not exist");
|
||||||
|
result = CURLE_FTP_COULDNT_RETR_FILE;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -778,14 +797,13 @@ static CURLcode ftp_transfertype(struct connectdata *conn,
|
|||||||
struct SessionHandle *data = conn->data;
|
struct SessionHandle *data = conn->data;
|
||||||
int ftpcode;
|
int ftpcode;
|
||||||
ssize_t nread;
|
ssize_t nread;
|
||||||
char *buf=data->state.buffer;
|
|
||||||
CURLcode result;
|
CURLcode result;
|
||||||
|
|
||||||
FTPSENDF(conn, "TYPE %s", ascii?"A":"I");
|
FTPSENDF(conn, "TYPE %s", ascii?"A":"I");
|
||||||
|
|
||||||
nread = Curl_GetFTPResponse(buf, conn, &ftpcode);
|
result = Curl_GetFTPResponse(&nread, conn, &ftpcode);
|
||||||
if(nread < 0)
|
if(result)
|
||||||
return CURLE_OPERATION_TIMEOUTED;
|
return result;
|
||||||
|
|
||||||
if(ftpcode != 200) {
|
if(ftpcode != 200) {
|
||||||
failf(data, "Couldn't set %s mode",
|
failf(data, "Couldn't set %s mode",
|
||||||
@@ -814,9 +832,9 @@ CURLcode ftp_getsize(struct connectdata *conn, char *file,
|
|||||||
CURLcode result;
|
CURLcode result;
|
||||||
|
|
||||||
FTPSENDF(conn, "SIZE %s", file);
|
FTPSENDF(conn, "SIZE %s", file);
|
||||||
nread = Curl_GetFTPResponse(buf, conn, &ftpcode);
|
result = Curl_GetFTPResponse(&nread, conn, &ftpcode);
|
||||||
if(nread < 0)
|
if(result)
|
||||||
return CURLE_OPERATION_TIMEOUTED;
|
return result;
|
||||||
|
|
||||||
if(ftpcode == 213) {
|
if(ftpcode == 213) {
|
||||||
/* get the size from the ascii string: */
|
/* get the size from the ascii string: */
|
||||||
@@ -975,7 +993,6 @@ CURLcode ftp_use_port(struct connectdata *conn)
|
|||||||
struct SessionHandle *data=conn->data;
|
struct SessionHandle *data=conn->data;
|
||||||
int portsock=-1;
|
int portsock=-1;
|
||||||
ssize_t nread;
|
ssize_t nread;
|
||||||
char *buf = data->state.buffer; /* this is our buffer */
|
|
||||||
int ftpcode; /* receive FTP response codes in this */
|
int ftpcode; /* receive FTP response codes in this */
|
||||||
CURLcode result;
|
CURLcode result;
|
||||||
|
|
||||||
@@ -1155,9 +1172,9 @@ CURLcode ftp_use_port(struct connectdata *conn)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
nread = Curl_GetFTPResponse(buf, conn, &ftpcode);
|
result = Curl_GetFTPResponse(&nread, conn, &ftpcode);
|
||||||
if(nread < 0)
|
if(result)
|
||||||
return CURLE_OPERATION_TIMEOUTED;
|
return result;
|
||||||
|
|
||||||
if (ftpcode != 200) {
|
if (ftpcode != 200) {
|
||||||
failf(data, "Server does not grok %s", *modep);
|
failf(data, "Server does not grok %s", *modep);
|
||||||
@@ -1216,7 +1233,7 @@ CURLcode ftp_use_port(struct connectdata *conn)
|
|||||||
|
|
||||||
if(h)
|
if(h)
|
||||||
/* when we return from here, we can forget about this */
|
/* when we return from here, we can forget about this */
|
||||||
Curl_resolv_unlock(h);
|
Curl_resolv_unlock(data, h);
|
||||||
|
|
||||||
if ( h || sa_filled_in) {
|
if ( h || sa_filled_in) {
|
||||||
if( (portsock = socket(AF_INET, SOCK_STREAM, 0)) >= 0 ) {
|
if( (portsock = socket(AF_INET, SOCK_STREAM, 0)) >= 0 ) {
|
||||||
@@ -1301,9 +1318,9 @@ CURLcode ftp_use_port(struct connectdata *conn)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
nread = Curl_GetFTPResponse(buf, conn, &ftpcode);
|
result = Curl_GetFTPResponse(&nread, conn, &ftpcode);
|
||||||
if(nread < 0)
|
if(result)
|
||||||
return CURLE_OPERATION_TIMEOUTED;
|
return result;
|
||||||
|
|
||||||
if(ftpcode != 200) {
|
if(ftpcode != 200) {
|
||||||
failf(data, "Server does not grok PORT, try without it!");
|
failf(data, "Server does not grok PORT, try without it!");
|
||||||
@@ -1375,9 +1392,9 @@ CURLcode ftp_use_pasv(struct connectdata *conn,
|
|||||||
result = Curl_ftpsendf(conn, "%s", mode[modeoff]);
|
result = Curl_ftpsendf(conn, "%s", mode[modeoff]);
|
||||||
if(result)
|
if(result)
|
||||||
return result;
|
return result;
|
||||||
nread = Curl_GetFTPResponse(buf, conn, &ftpcode);
|
result = Curl_GetFTPResponse(&nread, conn, &ftpcode);
|
||||||
if(nread < 0)
|
if(result)
|
||||||
return CURLE_OPERATION_TIMEOUTED;
|
return result;
|
||||||
if (ftpcode == results[modeoff])
|
if (ftpcode == results[modeoff])
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1480,7 +1497,7 @@ CURLcode ftp_use_pasv(struct connectdata *conn,
|
|||||||
&conninfo,
|
&conninfo,
|
||||||
connected);
|
connected);
|
||||||
|
|
||||||
Curl_resolv_unlock(addr); /* we're done using this address */
|
Curl_resolv_unlock(data, addr); /* we're done using this address */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* When this is used from the multi interface, this might've returned with
|
* When this is used from the multi interface, this might've returned with
|
||||||
@@ -1522,7 +1539,7 @@ CURLcode Curl_ftp_nextconnect(struct connectdata *conn)
|
|||||||
ssize_t nread;
|
ssize_t nread;
|
||||||
int ftpcode; /* for ftp status */
|
int ftpcode; /* for ftp status */
|
||||||
|
|
||||||
/* the ftp struct is already inited in ftp_connect() */
|
/* the ftp struct is already inited in Curl_ftp_connect() */
|
||||||
struct FTP *ftp = conn->proto.ftp;
|
struct FTP *ftp = conn->proto.ftp;
|
||||||
long *bytecountp = ftp->bytecountp;
|
long *bytecountp = ftp->bytecountp;
|
||||||
|
|
||||||
@@ -1582,8 +1599,8 @@ CURLcode Curl_ftp_nextconnect(struct connectdata *conn)
|
|||||||
readthisamountnow = BUFSIZE;
|
readthisamountnow = BUFSIZE;
|
||||||
|
|
||||||
actuallyread =
|
actuallyread =
|
||||||
data->set.fread(data->state.buffer, 1, readthisamountnow,
|
conn->fread(data->state.buffer, 1, readthisamountnow,
|
||||||
data->set.in);
|
conn->fread_in);
|
||||||
|
|
||||||
passed += actuallyread;
|
passed += actuallyread;
|
||||||
if(actuallyread != readthisamountnow) {
|
if(actuallyread != readthisamountnow) {
|
||||||
@@ -1614,7 +1631,7 @@ CURLcode Curl_ftp_nextconnect(struct connectdata *conn)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Send everything on data->set.in to the socket */
|
/* Send everything on data->state.in to the socket */
|
||||||
if(data->set.ftp_append) {
|
if(data->set.ftp_append) {
|
||||||
/* we append onto the file instead of rewriting it */
|
/* we append onto the file instead of rewriting it */
|
||||||
FTPSENDF(conn, "APPE %s", ftp->file);
|
FTPSENDF(conn, "APPE %s", ftp->file);
|
||||||
@@ -1623,9 +1640,9 @@ CURLcode Curl_ftp_nextconnect(struct connectdata *conn)
|
|||||||
FTPSENDF(conn, "STOR %s", ftp->file);
|
FTPSENDF(conn, "STOR %s", ftp->file);
|
||||||
}
|
}
|
||||||
|
|
||||||
nread = Curl_GetFTPResponse(buf, conn, &ftpcode);
|
result = Curl_GetFTPResponse(&nread, conn, &ftpcode);
|
||||||
if(nread < 0)
|
if(result)
|
||||||
return CURLE_OPERATION_TIMEOUTED;
|
return result;
|
||||||
|
|
||||||
if(ftpcode>=400) {
|
if(ftpcode>=400) {
|
||||||
failf(data, "Failed FTP upload:%s", buf+3);
|
failf(data, "Failed FTP upload:%s", buf+3);
|
||||||
@@ -1799,9 +1816,9 @@ CURLcode Curl_ftp_nextconnect(struct connectdata *conn)
|
|||||||
|
|
||||||
FTPSENDF(conn, "REST %d", conn->resume_from);
|
FTPSENDF(conn, "REST %d", conn->resume_from);
|
||||||
|
|
||||||
nread = Curl_GetFTPResponse(buf, conn, &ftpcode);
|
result = Curl_GetFTPResponse(&nread, conn, &ftpcode);
|
||||||
if(nread < 0)
|
if(result)
|
||||||
return CURLE_OPERATION_TIMEOUTED;
|
return result;
|
||||||
|
|
||||||
if(ftpcode != 350) {
|
if(ftpcode != 350) {
|
||||||
failf(data, "Couldn't use REST: %s", buf+4);
|
failf(data, "Couldn't use REST: %s", buf+4);
|
||||||
@@ -1812,9 +1829,9 @@ CURLcode Curl_ftp_nextconnect(struct connectdata *conn)
|
|||||||
FTPSENDF(conn, "RETR %s", ftp->file);
|
FTPSENDF(conn, "RETR %s", ftp->file);
|
||||||
}
|
}
|
||||||
|
|
||||||
nread = Curl_GetFTPResponse(buf, conn, &ftpcode);
|
result = Curl_GetFTPResponse(&nread, conn, &ftpcode);
|
||||||
if(nread < 0)
|
if(result)
|
||||||
return CURLE_OPERATION_TIMEOUTED;
|
return result;
|
||||||
|
|
||||||
if((ftpcode == 150) || (ftpcode == 125)) {
|
if((ftpcode == 150) || (ftpcode == 125)) {
|
||||||
|
|
||||||
@@ -1837,9 +1854,19 @@ CURLcode Curl_ftp_nextconnect(struct connectdata *conn)
|
|||||||
|
|
||||||
int size=-1; /* default unknown size */
|
int size=-1; /* default unknown size */
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* It appears that there are FTP-servers that return size 0 for files
|
||||||
|
* when SIZE is used on the file while being in BINARY mode. To work
|
||||||
|
* around that (stupid) behavior, we attempt to parse the RETR response
|
||||||
|
* even if the SIZE returned size zero.
|
||||||
|
*
|
||||||
|
* Debugging help from Salvatore Sorrentino on February 26, 2003.
|
||||||
|
*/
|
||||||
|
|
||||||
if(!dirlist &&
|
if(!dirlist &&
|
||||||
!data->set.ftp_ascii &&
|
!data->set.ftp_ascii &&
|
||||||
(-1 == downloadsize)) {
|
(downloadsize < 1)) {
|
||||||
/*
|
/*
|
||||||
* It seems directory listings either don't show the size or very
|
* It seems directory listings either don't show the size or very
|
||||||
* often uses size 0 anyway. ASCII transfers may very well turn out
|
* often uses size 0 anyway. ASCII transfers may very well turn out
|
||||||
@@ -1919,7 +1946,7 @@ CURLcode ftp_perform(struct connectdata *conn,
|
|||||||
struct SessionHandle *data=conn->data;
|
struct SessionHandle *data=conn->data;
|
||||||
char *buf = data->state.buffer; /* this is our buffer */
|
char *buf = data->state.buffer; /* this is our buffer */
|
||||||
|
|
||||||
/* the ftp struct is already inited in ftp_connect() */
|
/* the ftp struct is already inited in Curl_ftp_connect() */
|
||||||
struct FTP *ftp = conn->proto.ftp;
|
struct FTP *ftp = conn->proto.ftp;
|
||||||
|
|
||||||
/* Send any QUOTE strings? */
|
/* Send any QUOTE strings? */
|
||||||
@@ -1980,7 +2007,7 @@ CURLcode ftp_perform(struct connectdata *conn,
|
|||||||
well, we "emulate" a HTTP-style header in our output. */
|
well, we "emulate" a HTTP-style header in our output. */
|
||||||
|
|
||||||
#ifdef HAVE_STRFTIME
|
#ifdef HAVE_STRFTIME
|
||||||
if(data->set.get_filetime && data->info.filetime) {
|
if(data->set.get_filetime && (data->info.filetime>=0) ) {
|
||||||
struct tm *tm;
|
struct tm *tm;
|
||||||
#ifdef HAVE_LOCALTIME_R
|
#ifdef HAVE_LOCALTIME_R
|
||||||
struct tm buffer;
|
struct tm buffer;
|
||||||
@@ -2043,6 +2070,7 @@ CURLcode Curl_ftp(struct connectdata *conn)
|
|||||||
|
|
||||||
/* the ftp struct is already inited in ftp_connect() */
|
/* the ftp struct is already inited in ftp_connect() */
|
||||||
ftp = conn->proto.ftp;
|
ftp = conn->proto.ftp;
|
||||||
|
conn->size = -1; /* make sure this is unknown at this point */
|
||||||
|
|
||||||
/* We split the path into dir and file parts *before* we URLdecode
|
/* We split the path into dir and file parts *before* we URLdecode
|
||||||
it */
|
it */
|
||||||
@@ -2171,12 +2199,4 @@ CURLcode Curl_ftp_disconnect(struct connectdata *conn)
|
|||||||
return CURLE_OK;
|
return CURLE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* local variables:
|
|
||||||
* eval: (load-file "../curl-mode.el")
|
|
||||||
* end:
|
|
||||||
* vim600: fdm=marker
|
|
||||||
* vim: et sw=2 ts=2 sts=2 tw=78
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* CURL_DISABLE_FTP */
|
#endif /* CURL_DISABLE_FTP */
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -29,7 +29,7 @@ CURLcode Curl_ftp_done(struct connectdata *conn);
|
|||||||
CURLcode Curl_ftp_connect(struct connectdata *conn);
|
CURLcode Curl_ftp_connect(struct connectdata *conn);
|
||||||
CURLcode Curl_ftp_disconnect(struct connectdata *conn);
|
CURLcode Curl_ftp_disconnect(struct connectdata *conn);
|
||||||
CURLcode Curl_ftpsendf(struct connectdata *, const char *fmt, ...);
|
CURLcode Curl_ftpsendf(struct connectdata *, const char *fmt, ...);
|
||||||
int Curl_GetFTPResponse(char *buf, struct connectdata *conn,
|
CURLcode Curl_GetFTPResponse(ssize_t *nread, struct connectdata *conn,
|
||||||
int *ftpcode);
|
int *ftpcode);
|
||||||
CURLcode Curl_ftp_nextconnect(struct connectdata *conn);
|
CURLcode Curl_ftp_nextconnect(struct connectdata *conn);
|
||||||
#endif
|
#endif
|
||||||
|
@@ -195,7 +195,7 @@ typedef enum _MERIDIAN {
|
|||||||
} MERIDIAN;
|
} MERIDIAN;
|
||||||
|
|
||||||
/* parse results and input string */
|
/* parse results and input string */
|
||||||
typedef struct _CONTEXT {
|
typedef struct _CURL_CONTEXT {
|
||||||
const char *yyInput;
|
const char *yyInput;
|
||||||
int yyDayOrdinal;
|
int yyDayOrdinal;
|
||||||
int yyDayNumber;
|
int yyDayNumber;
|
||||||
@@ -218,14 +218,14 @@ typedef struct _CONTEXT {
|
|||||||
int yyRelMonth;
|
int yyRelMonth;
|
||||||
int yyRelSeconds;
|
int yyRelSeconds;
|
||||||
int yyRelYear;
|
int yyRelYear;
|
||||||
} CONTEXT;
|
} CURL_CONTEXT;
|
||||||
|
|
||||||
/* enable use of extra argument to yyparse and yylex which can be used to pass
|
/* enable use of extra argument to yyparse and yylex which can be used to pass
|
||||||
** in a user defined value (CONTEXT struct in our case)
|
** in a user defined value (CURL_CONTEXT struct in our case)
|
||||||
*/
|
*/
|
||||||
#define YYPARSE_PARAM cookie
|
#define YYPARSE_PARAM cookie
|
||||||
#define YYLEX_PARAM cookie
|
#define YYLEX_PARAM cookie
|
||||||
#define context ((CONTEXT *) cookie)
|
#define context ((CURL_CONTEXT *) cookie)
|
||||||
|
|
||||||
#line 215 "getdate.y"
|
#line 215 "getdate.y"
|
||||||
typedef union {
|
typedef union {
|
||||||
@@ -397,7 +397,7 @@ static const short yycheck[] = { 0,
|
|||||||
#define YYPURE 1
|
#define YYPURE 1
|
||||||
|
|
||||||
/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
|
/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
|
||||||
#line 3 "/usr/local/share/bison.simple"
|
#line 3 "/usr/lib/bison.simple"
|
||||||
/* This file comes from bison-1.28. */
|
/* This file comes from bison-1.28. */
|
||||||
|
|
||||||
/* Skeleton output parser for bison,
|
/* Skeleton output parser for bison,
|
||||||
@@ -611,7 +611,7 @@ __yy_memcpy (char *to, char *from, unsigned int count)
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#line 217 "/usr/local/share/bison.simple"
|
#line 217 "/usr/lib/bison.simple"
|
||||||
|
|
||||||
/* The user can define YYPARSE_PARAM as the name of an argument to be passed
|
/* The user can define YYPARSE_PARAM as the name of an argument to be passed
|
||||||
into yyparse. The argument should have type void *.
|
into yyparse. The argument should have type void *.
|
||||||
@@ -1303,7 +1303,7 @@ case 50:
|
|||||||
break;}
|
break;}
|
||||||
}
|
}
|
||||||
/* the action file gets copied in in place of this dollarsign */
|
/* the action file gets copied in in place of this dollarsign */
|
||||||
#line 543 "/usr/local/share/bison.simple"
|
#line 543 "/usr/lib/bison.simple"
|
||||||
|
|
||||||
yyvsp -= yylen;
|
yyvsp -= yylen;
|
||||||
yyssp -= yylen;
|
yyssp -= yylen;
|
||||||
@@ -1988,7 +1988,7 @@ curl_getdate (const char *p, const time_t *now)
|
|||||||
{
|
{
|
||||||
struct tm tm, tm0, *tmp;
|
struct tm tm, tm0, *tmp;
|
||||||
time_t Start;
|
time_t Start;
|
||||||
CONTEXT cookie;
|
CURL_CONTEXT cookie;
|
||||||
#ifdef HAVE_LOCALTIME_R
|
#ifdef HAVE_LOCALTIME_R
|
||||||
struct tm keeptime;
|
struct tm keeptime;
|
||||||
#endif
|
#endif
|
@@ -171,7 +171,7 @@ typedef enum _MERIDIAN {
|
|||||||
} MERIDIAN;
|
} MERIDIAN;
|
||||||
|
|
||||||
/* parse results and input string */
|
/* parse results and input string */
|
||||||
typedef struct _CONTEXT {
|
typedef struct _CURL_CONTEXT {
|
||||||
const char *yyInput;
|
const char *yyInput;
|
||||||
int yyDayOrdinal;
|
int yyDayOrdinal;
|
||||||
int yyDayNumber;
|
int yyDayNumber;
|
||||||
@@ -194,14 +194,14 @@ typedef struct _CONTEXT {
|
|||||||
int yyRelMonth;
|
int yyRelMonth;
|
||||||
int yyRelSeconds;
|
int yyRelSeconds;
|
||||||
int yyRelYear;
|
int yyRelYear;
|
||||||
} CONTEXT;
|
} CURL_CONTEXT;
|
||||||
|
|
||||||
/* enable use of extra argument to yyparse and yylex which can be used to pass
|
/* enable use of extra argument to yyparse and yylex which can be used to pass
|
||||||
** in a user defined value (CONTEXT struct in our case)
|
** in a user defined value (CURL_CONTEXT struct in our case)
|
||||||
*/
|
*/
|
||||||
#define YYPARSE_PARAM cookie
|
#define YYPARSE_PARAM cookie
|
||||||
#define YYLEX_PARAM cookie
|
#define YYLEX_PARAM cookie
|
||||||
#define context ((CONTEXT *) cookie)
|
#define context ((CURL_CONTEXT *) cookie)
|
||||||
%}
|
%}
|
||||||
|
|
||||||
/* This grammar has 13 shift/reduce conflicts. */
|
/* This grammar has 13 shift/reduce conflicts. */
|
||||||
@@ -944,7 +944,7 @@ curl_getdate (const char *p, const time_t *now)
|
|||||||
{
|
{
|
||||||
struct tm tm, tm0, *tmp;
|
struct tm tm, tm0, *tmp;
|
||||||
time_t Start;
|
time_t Start;
|
||||||
CONTEXT cookie;
|
CURL_CONTEXT cookie;
|
||||||
#ifdef HAVE_LOCALTIME_R
|
#ifdef HAVE_LOCALTIME_R
|
||||||
struct tm keeptime;
|
struct tm keeptime;
|
||||||
#endif
|
#endif
|
||||||
|
10
lib/getenv.c
10
lib/getenv.c
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -67,11 +67,3 @@ char *curl_getenv(const char *v)
|
|||||||
{
|
{
|
||||||
return GetEnv(v);
|
return GetEnv(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* local variables:
|
|
||||||
* eval: (load-file "../curl-mode.el")
|
|
||||||
* end:
|
|
||||||
* vim600: fdm=marker
|
|
||||||
* vim: et sw=2 ts=2 sts=2 tw=78
|
|
||||||
*/
|
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -158,16 +158,11 @@ CURLcode Curl_getinfo(struct SessionHandle *data, CURLINFO info, ...)
|
|||||||
case CURLINFO_CONTENT_TYPE:
|
case CURLINFO_CONTENT_TYPE:
|
||||||
*param_charp = data->info.contenttype;
|
*param_charp = data->info.contenttype;
|
||||||
break;
|
break;
|
||||||
|
case CURLINFO_PRIVATE:
|
||||||
|
*param_charp = data->set.private;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return CURLE_BAD_FUNCTION_ARGUMENT;
|
return CURLE_BAD_FUNCTION_ARGUMENT;
|
||||||
}
|
}
|
||||||
return CURLE_OK;
|
return CURLE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* local variables:
|
|
||||||
* eval: (load-file "../curl-mode.el")
|
|
||||||
* end:
|
|
||||||
* vim600: fdm=marker
|
|
||||||
* vim: et sw=2 ts=2 sts=2 tw=78
|
|
||||||
*/
|
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
|
@@ -224,11 +224,3 @@ char *getpass(const char *prompt)
|
|||||||
return getpass_r(prompt, buf, sizeof(buf));
|
return getpass_r(prompt, buf, sizeof(buf));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
|
||||||
* local variables:
|
|
||||||
* eval: (load-file "../curl-mode.el")
|
|
||||||
* end:
|
|
||||||
* vim600: fdm=marker
|
|
||||||
* vim: et sw=2 ts=2 sts=2 tw=78
|
|
||||||
*/
|
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
|
55
lib/hash.c
55
lib/hash.c
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -35,8 +35,6 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* {{{ static unsigned long _hash_str (const char *, size_t)
|
|
||||||
*/
|
|
||||||
static unsigned long
|
static unsigned long
|
||||||
_hash_str (const char *key, size_t key_length)
|
_hash_str (const char *key, size_t key_length)
|
||||||
{
|
{
|
||||||
@@ -50,10 +48,7 @@ _hash_str (const char *key, size_t key_length)
|
|||||||
|
|
||||||
return h;
|
return h;
|
||||||
}
|
}
|
||||||
/* }}} */
|
|
||||||
|
|
||||||
/* {{{ static void _hash_element_dtor (void *, void *)
|
|
||||||
*/
|
|
||||||
static void
|
static void
|
||||||
_hash_element_dtor (void *user, void *element)
|
_hash_element_dtor (void *user, void *element)
|
||||||
{
|
{
|
||||||
@@ -68,10 +63,7 @@ _hash_element_dtor (void *user, void *element)
|
|||||||
|
|
||||||
free(e);
|
free(e);
|
||||||
}
|
}
|
||||||
/* }}} */
|
|
||||||
|
|
||||||
/* {{{ void curl_hash_init (curl_hash *, int, curl_hash_dtor)
|
|
||||||
*/
|
|
||||||
void
|
void
|
||||||
Curl_hash_init (curl_hash *h, int slots, curl_hash_dtor dtor)
|
Curl_hash_init (curl_hash *h, int slots, curl_hash_dtor dtor)
|
||||||
{
|
{
|
||||||
@@ -86,10 +78,7 @@ Curl_hash_init (curl_hash *h, int slots, curl_hash_dtor dtor)
|
|||||||
h->table[i] = Curl_llist_alloc((curl_llist_dtor) _hash_element_dtor);
|
h->table[i] = Curl_llist_alloc((curl_llist_dtor) _hash_element_dtor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* }}} */
|
|
||||||
|
|
||||||
/* {{{ curl_hash *curl_hash_alloc (int, curl_hash_dtor)
|
|
||||||
*/
|
|
||||||
curl_hash *
|
curl_hash *
|
||||||
Curl_hash_alloc (int slots, curl_hash_dtor dtor)
|
Curl_hash_alloc (int slots, curl_hash_dtor dtor)
|
||||||
{
|
{
|
||||||
@@ -103,10 +92,7 @@ Curl_hash_alloc (int slots, curl_hash_dtor dtor)
|
|||||||
|
|
||||||
return h;
|
return h;
|
||||||
}
|
}
|
||||||
/* }}} */
|
|
||||||
|
|
||||||
/* {{{ static int _hash_key_compare (char *, size_t, char *, size_t)
|
|
||||||
*/
|
|
||||||
static int
|
static int
|
||||||
_hash_key_compare (char *key1, size_t key1_len, char *key2, size_t key2_len)
|
_hash_key_compare (char *key1, size_t key1_len, char *key2, size_t key2_len)
|
||||||
{
|
{
|
||||||
@@ -118,12 +104,10 @@ _hash_key_compare (char *key1, size_t key1_len, char *key2, size_t key2_len)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/* }}} */
|
|
||||||
|
|
||||||
/* {{{ static int _mk_hash_element (curl_hash_element **, char *, size_t, const void *)
|
|
||||||
*/
|
|
||||||
static int
|
static int
|
||||||
_mk_hash_element (curl_hash_element **e, char *key, size_t key_len, const void *p)
|
_mk_hash_element (curl_hash_element **e, char *key, size_t key_len,
|
||||||
|
const void *p)
|
||||||
{
|
{
|
||||||
*e = (curl_hash_element *) malloc(sizeof(curl_hash_element));
|
*e = (curl_hash_element *) malloc(sizeof(curl_hash_element));
|
||||||
(*e)->key = strdup(key);
|
(*e)->key = strdup(key);
|
||||||
@@ -131,16 +115,12 @@ _mk_hash_element (curl_hash_element **e, char *key, size_t key_len, const void *
|
|||||||
(*e)->ptr = (void *) p;
|
(*e)->ptr = (void *) p;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/* }}} */
|
|
||||||
|
|
||||||
#define find_slot(__h, __k, __k_len) (_hash_str(__k, __k_len) % (__h)->slots)
|
#define find_slot(__h, __k, __k_len) (_hash_str(__k, __k_len) % (__h)->slots)
|
||||||
|
|
||||||
#define FETCH_LIST \
|
#define FETCH_LIST \
|
||||||
curl_llist *l = h->table[find_slot(h, key, key_len)]
|
curl_llist *l = h->table[find_slot(h, key, key_len)]
|
||||||
|
|
||||||
|
|
||||||
/* {{{ int curl_hash_add (curl_hash *, char *, size_t, const void *)
|
|
||||||
*/
|
|
||||||
int
|
int
|
||||||
Curl_hash_add (curl_hash *h, char *key, size_t key_len, const void *p)
|
Curl_hash_add (curl_hash *h, char *key, size_t key_len, const void *p)
|
||||||
{
|
{
|
||||||
@@ -169,10 +149,7 @@ Curl_hash_add (curl_hash *h, char *key, size_t key_len, const void *p)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/* }}} */
|
|
||||||
|
|
||||||
/* {{{ int curl_hash_delete (curl_hash *, char *, size_t)
|
|
||||||
*/
|
|
||||||
int
|
int
|
||||||
Curl_hash_delete(curl_hash *h, char *key, size_t key_len)
|
Curl_hash_delete(curl_hash *h, char *key, size_t key_len)
|
||||||
{
|
{
|
||||||
@@ -193,10 +170,7 @@ Curl_hash_delete(curl_hash *h, char *key, size_t key_len)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/* }}} */
|
|
||||||
|
|
||||||
/* {{{ int curl_hash_pick (curl_hash *, char *, size_t, void **)
|
|
||||||
*/
|
|
||||||
void *
|
void *
|
||||||
Curl_hash_pick(curl_hash *h, char *key, size_t key_len)
|
Curl_hash_pick(curl_hash *h, char *key, size_t key_len)
|
||||||
{
|
{
|
||||||
@@ -215,10 +189,7 @@ Curl_hash_pick(curl_hash *h, char *key, size_t key_len)
|
|||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
/* }}} */
|
|
||||||
|
|
||||||
/* {{{ void curl_hash_apply (curl_hash *, void *, void (*)(void *, curl_hash_element *))
|
|
||||||
*/
|
|
||||||
void
|
void
|
||||||
Curl_hash_apply(curl_hash *h, void *user,
|
Curl_hash_apply(curl_hash *h, void *user,
|
||||||
void (*cb)(void *user, void *ptr))
|
void (*cb)(void *user, void *ptr))
|
||||||
@@ -235,10 +206,7 @@ Curl_hash_apply(curl_hash *h, void *user,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* }}} */
|
|
||||||
|
|
||||||
/* {{{ void curl_hash_clean (curl_hash *)
|
|
||||||
*/
|
|
||||||
void
|
void
|
||||||
Curl_hash_clean(curl_hash *h)
|
Curl_hash_clean(curl_hash *h)
|
||||||
{
|
{
|
||||||
@@ -250,11 +218,7 @@ Curl_hash_clean(curl_hash *h)
|
|||||||
|
|
||||||
free(h->table);
|
free(h->table);
|
||||||
}
|
}
|
||||||
/* }}} */
|
|
||||||
|
|
||||||
/* {{{ void curl_hash_clean_with_criterium (curl_hash *, void *,
|
|
||||||
int (*)(void *, void *))
|
|
||||||
*/
|
|
||||||
void
|
void
|
||||||
Curl_hash_clean_with_criterium(curl_hash *h, void *user,
|
Curl_hash_clean_with_criterium(curl_hash *h, void *user,
|
||||||
int (*comp)(void *, void *))
|
int (*comp)(void *, void *))
|
||||||
@@ -277,17 +241,12 @@ Curl_hash_clean_with_criterium(curl_hash *h, void *user,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* {{{ int curl_hash_count (curl_hash *)
|
|
||||||
*/
|
|
||||||
int
|
int
|
||||||
Curl_hash_count(curl_hash *h)
|
Curl_hash_count(curl_hash *h)
|
||||||
{
|
{
|
||||||
return h->size;
|
return h->size;
|
||||||
}
|
}
|
||||||
/* }}} */
|
|
||||||
|
|
||||||
/* {{{ void curl_hash_destroy (curl_hash *)
|
|
||||||
*/
|
|
||||||
void
|
void
|
||||||
Curl_hash_destroy(curl_hash *h)
|
Curl_hash_destroy(curl_hash *h)
|
||||||
{
|
{
|
||||||
@@ -297,12 +256,4 @@ Curl_hash_destroy(curl_hash *h)
|
|||||||
Curl_hash_clean(h);
|
Curl_hash_clean(h);
|
||||||
free(h);
|
free(h);
|
||||||
}
|
}
|
||||||
/* }}} */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* local variables:
|
|
||||||
* eval: (load-file "../curl-mode.el")
|
|
||||||
* end:
|
|
||||||
* vim600: fdm=marker
|
|
||||||
* vim: et sw=2 ts=2 sts=2 tw=78
|
|
||||||
*/
|
|
||||||
|
10
lib/hash.h
10
lib/hash.h
@@ -7,7 +7,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -58,11 +58,3 @@ void Curl_hash_clean_with_criterium(curl_hash *h, void *user, int (*comp)(void *
|
|||||||
void Curl_hash_destroy(curl_hash *h);
|
void Curl_hash_destroy(curl_hash *h);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
|
||||||
* local variables:
|
|
||||||
* eval: (load-file "../curl-mode.el")
|
|
||||||
* end:
|
|
||||||
* vim600: fdm=marker
|
|
||||||
* vim: et sw=2 ts=2 sts=2 tw=78
|
|
||||||
*/
|
|
||||||
|
98
lib/hostip.c
98
lib/hostip.c
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -64,6 +64,7 @@
|
|||||||
#include "sendf.h"
|
#include "sendf.h"
|
||||||
#include "hostip.h"
|
#include "hostip.h"
|
||||||
#include "hash.h"
|
#include "hash.h"
|
||||||
|
#include "share.h"
|
||||||
|
|
||||||
#define _MPRINTF_REPLACE /* use our functions only */
|
#define _MPRINTF_REPLACE /* use our functions only */
|
||||||
#include <curl/mprintf.h>
|
#include <curl/mprintf.h>
|
||||||
@@ -88,7 +89,7 @@ static Curl_addrinfo *my_getaddrinfo(struct SessionHandle *data,
|
|||||||
void Curl_global_host_cache_init(void)
|
void Curl_global_host_cache_init(void)
|
||||||
{
|
{
|
||||||
if (!host_cache_initialized) {
|
if (!host_cache_initialized) {
|
||||||
Curl_hash_init(&hostname_cache, 7, Curl_freeaddrinfo);
|
Curl_hash_init(&hostname_cache, 7, Curl_freednsinfo);
|
||||||
host_cache_initialized = 1;
|
host_cache_initialized = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -211,6 +212,10 @@ void Curl_scan_cache_used(void *user, void *ptr)
|
|||||||
#define HOSTCACHE_RETURN(dns) \
|
#define HOSTCACHE_RETURN(dns) \
|
||||||
{ \
|
{ \
|
||||||
free(entry_id); \
|
free(entry_id); \
|
||||||
|
if(data->share) \
|
||||||
|
{ \
|
||||||
|
Curl_share_unlock(data, CURL_LOCK_DATA_DNS); \
|
||||||
|
} \
|
||||||
return dns; \
|
return dns; \
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -246,6 +251,11 @@ struct Curl_dns_entry *Curl_resolv(struct SessionHandle *data,
|
|||||||
if (!entry_id)
|
if (!entry_id)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
if(data->share)
|
||||||
|
{
|
||||||
|
Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);
|
||||||
|
}
|
||||||
|
|
||||||
/* See if its already in our dns cache */
|
/* See if its already in our dns cache */
|
||||||
dns = Curl_hash_pick(data->hostcache, entry_id, entry_len+1);
|
dns = Curl_hash_pick(data->hostcache, entry_id, entry_len+1);
|
||||||
|
|
||||||
@@ -284,20 +294,41 @@ struct Curl_dns_entry *Curl_resolv(struct SessionHandle *data,
|
|||||||
HOSTCACHE_RETURN(dns);
|
HOSTCACHE_RETURN(dns);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Curl_resolv_unlock(struct SessionHandle *data, struct Curl_dns_entry *dns)
|
||||||
|
{
|
||||||
|
if(data->share)
|
||||||
|
{
|
||||||
|
Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);
|
||||||
|
}
|
||||||
|
dns->inuse--;
|
||||||
|
if(data->share)
|
||||||
|
{
|
||||||
|
Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is a wrapper function for freeing name information in a protocol
|
* This is a wrapper function for freeing name information in a protocol
|
||||||
* independent way. This takes care of using the appropriate underlaying
|
* independent way. This takes care of using the appropriate underlaying
|
||||||
* proper function.
|
* function.
|
||||||
*/
|
*/
|
||||||
void Curl_freeaddrinfo(void *freethis)
|
void Curl_freeaddrinfo(Curl_addrinfo *p)
|
||||||
|
{
|
||||||
|
#ifdef ENABLE_IPV6
|
||||||
|
freeaddrinfo(p);
|
||||||
|
#else
|
||||||
|
free(p);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Free a cache dns entry.
|
||||||
|
*/
|
||||||
|
void Curl_freednsinfo(void *freethis)
|
||||||
{
|
{
|
||||||
struct Curl_dns_entry *p = (struct Curl_dns_entry *) freethis;
|
struct Curl_dns_entry *p = (struct Curl_dns_entry *) freethis;
|
||||||
|
|
||||||
#ifdef ENABLE_IPV6
|
Curl_freeaddrinfo(p->addr);
|
||||||
freeaddrinfo(p->addr);
|
|
||||||
#else
|
|
||||||
free(p->addr);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
free(p);
|
free(p);
|
||||||
}
|
}
|
||||||
@@ -480,7 +511,7 @@ static struct hostent* pack_hostent(char** buf, struct hostent* orig)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static char *MakeIP(unsigned long num,char *addr, int addr_len)
|
static char *MakeIP(unsigned long num, char *addr, int addr_len)
|
||||||
{
|
{
|
||||||
#if defined(HAVE_INET_NTOA) || defined(HAVE_INET_NTOA_R)
|
#if defined(HAVE_INET_NTOA) || defined(HAVE_INET_NTOA_R)
|
||||||
struct in_addr in;
|
struct in_addr in;
|
||||||
@@ -563,7 +594,7 @@ static Curl_addrinfo *my_getaddrinfo(struct SessionHandle *data,
|
|||||||
h->h_addrtype = AF_INET;
|
h->h_addrtype = AF_INET;
|
||||||
h->h_length = sizeof(*addrentry);
|
h->h_length = sizeof(*addrentry);
|
||||||
h->h_name = &buf->h_name[0];
|
h->h_name = &buf->h_name[0];
|
||||||
MakeIP(ntohl(in), h->h_name, sizeof(buf->h_name));
|
MakeIP(ntohl(in), (char *)h->h_name, sizeof(buf->h_name));
|
||||||
}
|
}
|
||||||
#if defined(HAVE_GETHOSTBYNAME_R)
|
#if defined(HAVE_GETHOSTBYNAME_R)
|
||||||
else {
|
else {
|
||||||
@@ -623,16 +654,28 @@ static Curl_addrinfo *my_getaddrinfo(struct SessionHandle *data,
|
|||||||
&h, /* DIFFERENCE */
|
&h, /* DIFFERENCE */
|
||||||
&h_errnop);
|
&h_errnop);
|
||||||
/* Redhat 8, using glibc 2.2.93 changed the behavior. Now all of a
|
/* Redhat 8, using glibc 2.2.93 changed the behavior. Now all of a
|
||||||
sudden this function seems to be setting EAGAIN if the given buffer
|
sudden this function returns EAGAIN if the given buffer size is too
|
||||||
size is too small. Previous versions are known to return ERANGE for
|
small. Previous versions are known to return ERANGE for the same
|
||||||
the same. */
|
problem.
|
||||||
|
|
||||||
|
This wouldn't be such a big problem if older versions wouldn't
|
||||||
|
sometimes return EAGAIN on a common failure case. Alas, we can't
|
||||||
|
assume that EAGAIN *or* ERANGE means ERANGE for any given version of
|
||||||
|
glibc.
|
||||||
|
|
||||||
|
For now, we do that and thus we may call the function repeatedly and
|
||||||
|
fail for older glibc versions that return EAGAIN, until we run out
|
||||||
|
of buffer size (step_size grows beyond CURL_NAMELOOKUP_SIZE).
|
||||||
|
|
||||||
|
If anyone has a better fix, please tell us!
|
||||||
|
*/
|
||||||
|
|
||||||
if((ERANGE == res) || (EAGAIN == res)) {
|
if((ERANGE == res) || (EAGAIN == res)) {
|
||||||
step_size+=200;
|
step_size+=200;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
} while(1);
|
} while(step_size <= CURL_NAMELOOKUP_SIZE);
|
||||||
|
|
||||||
if(!h) /* failure */
|
if(!h) /* failure */
|
||||||
res=1;
|
res=1;
|
||||||
@@ -653,6 +696,19 @@ static Curl_addrinfo *my_getaddrinfo(struct SessionHandle *data,
|
|||||||
#ifdef HAVE_GETHOSTBYNAME_R_3
|
#ifdef HAVE_GETHOSTBYNAME_R_3
|
||||||
/* AIX, Digital Unix, HPUX 10, more? */
|
/* AIX, Digital Unix, HPUX 10, more? */
|
||||||
|
|
||||||
|
/* For AIX 4.3 or later, we don't use gethostbyname_r() at all, because of
|
||||||
|
the plain fact that it does not return unique full buffers on each
|
||||||
|
call, but instead several of the pointers in the hostent structs will
|
||||||
|
point to the same actual data! This have the unfortunate down-side that
|
||||||
|
our caching system breaks down horribly. Luckily for us though, AIX 4.3
|
||||||
|
and more recent versions have a completely thread-safe libc where all
|
||||||
|
the data is stored in thread-specific memory areas making calls to the
|
||||||
|
plain old gethostbyname() work fine even for multi-threaded programs.
|
||||||
|
|
||||||
|
This AIX 4.3 or later detection is all made in the configure script.
|
||||||
|
|
||||||
|
Troels Walsted Hansen helped us work this out on March 3rd, 2003. */
|
||||||
|
|
||||||
if(CURL_NAMELOOKUP_SIZE >=
|
if(CURL_NAMELOOKUP_SIZE >=
|
||||||
(sizeof(struct hostent)+sizeof(struct hostent_data)))
|
(sizeof(struct hostent)+sizeof(struct hostent_data)))
|
||||||
|
|
||||||
@@ -662,7 +718,8 @@ static Curl_addrinfo *my_getaddrinfo(struct SessionHandle *data,
|
|||||||
|
|
||||||
ret = gethostbyname_r(hostname,
|
ret = gethostbyname_r(hostname,
|
||||||
(struct hostent *)buf,
|
(struct hostent *)buf,
|
||||||
(struct hostent_data *)((char *)buf + sizeof(struct hostent)));
|
(struct hostent_data *)((char *)buf +
|
||||||
|
sizeof(struct hostent)));
|
||||||
else
|
else
|
||||||
ret = -1; /* failure, too smallish buffer size */
|
ret = -1; /* failure, too smallish buffer size */
|
||||||
|
|
||||||
@@ -698,12 +755,3 @@ static Curl_addrinfo *my_getaddrinfo(struct SessionHandle *data,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endif /* end of IPv4-specific code */
|
#endif /* end of IPv4-specific code */
|
||||||
|
|
||||||
/*
|
|
||||||
* local variables:
|
|
||||||
* eval: (load-file "../curl-mode.el")
|
|
||||||
* end:
|
|
||||||
* vim600: fdm=marker
|
|
||||||
* vim: et sw=2 ts=2 sts=2 tw=78
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -59,13 +59,16 @@ struct Curl_dns_entry *Curl_resolv(struct SessionHandle *data,
|
|||||||
int port);
|
int port);
|
||||||
|
|
||||||
/* unlock a previously resolved dns entry */
|
/* unlock a previously resolved dns entry */
|
||||||
#define Curl_resolv_unlock(dns) dns->inuse--
|
void Curl_resolv_unlock(struct SessionHandle *data, struct Curl_dns_entry *dns);
|
||||||
|
|
||||||
/* for debugging purposes only: */
|
/* for debugging purposes only: */
|
||||||
void Curl_scan_cache_used(void *user, void *ptr);
|
void Curl_scan_cache_used(void *user, void *ptr);
|
||||||
|
|
||||||
/* free name info */
|
/* free name info */
|
||||||
void Curl_freeaddrinfo(void *freethis);
|
void Curl_freeaddrinfo(Curl_addrinfo *freeaddr);
|
||||||
|
|
||||||
|
/* free cached name info */
|
||||||
|
void Curl_freednsinfo(void *freethis);
|
||||||
|
|
||||||
#ifdef MALLOCDEBUG
|
#ifdef MALLOCDEBUG
|
||||||
void curl_freeaddrinfo(struct addrinfo *freethis,
|
void curl_freeaddrinfo(struct addrinfo *freethis,
|
||||||
|
298
lib/http.c
298
lib/http.c
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -98,12 +98,65 @@
|
|||||||
#include "memdebug.h"
|
#include "memdebug.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* fread() emulation to provide POST and/or request data */
|
||||||
|
static int readmoredata(char *buffer,
|
||||||
|
size_t size,
|
||||||
|
size_t nitems,
|
||||||
|
void *userp)
|
||||||
|
{
|
||||||
|
struct connectdata *conn = (struct connectdata *)userp;
|
||||||
|
struct HTTP *http = conn->proto.http;
|
||||||
|
int fullsize = size * nitems;
|
||||||
|
|
||||||
|
if(0 == http->postsize)
|
||||||
|
/* nothing to return */
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* make sure that a HTTP request is never sent away chunked! */
|
||||||
|
conn->bits.forbidchunk= (http->sending == HTTPSEND_REQUEST)?TRUE:FALSE;
|
||||||
|
|
||||||
|
if(http->postsize <= fullsize) {
|
||||||
|
memcpy(buffer, http->postdata, http->postsize);
|
||||||
|
fullsize = http->postsize;
|
||||||
|
|
||||||
|
if(http->backup.postsize) {
|
||||||
|
/* move backup data into focus and continue on that */
|
||||||
|
http->postdata = http->backup.postdata;
|
||||||
|
http->postsize = http->backup.postsize;
|
||||||
|
conn->fread = http->backup.fread;
|
||||||
|
conn->fread_in = http->backup.fread_in;
|
||||||
|
|
||||||
|
http->sending++; /* move one step up */
|
||||||
|
|
||||||
|
http->backup.postsize=0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
http->postsize = 0;
|
||||||
|
|
||||||
|
return fullsize;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(buffer, http->postdata, fullsize);
|
||||||
|
http->postdata += fullsize;
|
||||||
|
http->postsize -= fullsize;
|
||||||
|
|
||||||
|
return fullsize;
|
||||||
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------- */
|
/* ------------------------------------------------------------------------- */
|
||||||
/*
|
/*
|
||||||
* The add_buffer series of functions are used to build one large memory chunk
|
* The add_buffer series of functions are used to build one large memory chunk
|
||||||
* from repeated function invokes. Used so that the entire HTTP request can
|
* from repeated function invokes. Used so that the entire HTTP request can
|
||||||
* be sent in one go.
|
* be sent in one go.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
struct send_buffer {
|
||||||
|
char *buffer;
|
||||||
|
size_t size_max;
|
||||||
|
size_t size_used;
|
||||||
|
};
|
||||||
|
typedef struct send_buffer send_buffer;
|
||||||
|
|
||||||
static CURLcode
|
static CURLcode
|
||||||
add_buffer(send_buffer *in, const void *inptr, size_t size);
|
add_buffer(send_buffer *in, const void *inptr, size_t size);
|
||||||
|
|
||||||
@@ -126,44 +179,66 @@ send_buffer *add_buffer_init(void)
|
|||||||
* add_buffer_send() sends a buffer and frees all associated memory.
|
* add_buffer_send() sends a buffer and frees all associated memory.
|
||||||
*/
|
*/
|
||||||
static
|
static
|
||||||
CURLcode add_buffer_send(int sockfd, struct connectdata *conn, send_buffer *in,
|
CURLcode add_buffer_send(send_buffer *in,
|
||||||
long *bytes_written)
|
int sockfd,
|
||||||
|
struct connectdata *conn,
|
||||||
|
long *bytes_written) /* add the number of sent
|
||||||
|
bytes to this counter */
|
||||||
{
|
{
|
||||||
ssize_t amount;
|
ssize_t amount;
|
||||||
CURLcode res;
|
CURLcode res;
|
||||||
char *ptr;
|
char *ptr;
|
||||||
int size;
|
int size;
|
||||||
|
struct HTTP *http = conn->proto.http;
|
||||||
|
|
||||||
/* The looping below is required since we use non-blocking sockets, but due
|
/* The looping below is required since we use non-blocking sockets, but due
|
||||||
to the circumstances we will just loop and try again and again etc */
|
to the circumstances we will just loop and try again and again etc */
|
||||||
|
|
||||||
ptr = in->buffer;
|
ptr = in->buffer;
|
||||||
size = in->size_used;
|
size = in->size_used;
|
||||||
do {
|
|
||||||
res = Curl_write(conn, sockfd, ptr, size, &amount);
|
res = Curl_write(conn, sockfd, ptr, size, &amount);
|
||||||
|
|
||||||
if(CURLE_OK != res)
|
if(CURLE_OK == res) {
|
||||||
break;
|
|
||||||
|
|
||||||
if(conn->data->set.verbose)
|
if(conn->data->set.verbose)
|
||||||
/* this data _may_ contain binary stuff */
|
/* this data _may_ contain binary stuff */
|
||||||
Curl_debug(conn->data, CURLINFO_HEADER_OUT, ptr, amount);
|
Curl_debug(conn->data, CURLINFO_HEADER_OUT, ptr, amount);
|
||||||
|
|
||||||
|
*bytes_written += amount;
|
||||||
|
|
||||||
if(amount != size) {
|
if(amount != size) {
|
||||||
|
/* The whole request could not be sent in one system call. We must queue
|
||||||
|
it up and send it later when we get the chance. We must not loop here
|
||||||
|
and wait until it might work again. */
|
||||||
|
|
||||||
size -= amount;
|
size -= amount;
|
||||||
ptr += amount;
|
ptr += amount;
|
||||||
|
|
||||||
|
/* backup the currently set pointers */
|
||||||
|
http->backup.fread = conn->fread;
|
||||||
|
http->backup.fread_in = conn->fread_in;
|
||||||
|
http->backup.postdata = http->postdata;
|
||||||
|
http->backup.postsize = http->postsize;
|
||||||
|
|
||||||
|
/* set the new pointers for the request-sending */
|
||||||
|
conn->fread = (curl_read_callback)readmoredata;
|
||||||
|
conn->fread_in = (void *)conn;
|
||||||
|
http->postdata = ptr;
|
||||||
|
http->postsize = size;
|
||||||
|
|
||||||
|
http->send_buffer = in;
|
||||||
|
http->sending = HTTPSEND_REQUEST;
|
||||||
|
|
||||||
|
return CURLE_OK;
|
||||||
|
}
|
||||||
|
http->sending = HTTPSEND_BODY;
|
||||||
|
/* the full buffer was sent, clean up and return */
|
||||||
}
|
}
|
||||||
else
|
|
||||||
break;
|
|
||||||
|
|
||||||
} while(1);
|
|
||||||
|
|
||||||
if(in->buffer)
|
if(in->buffer)
|
||||||
free(in->buffer);
|
free(in->buffer);
|
||||||
free(in);
|
free(in);
|
||||||
|
|
||||||
*bytes_written += amount;
|
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -223,21 +298,75 @@ CURLcode add_buffer(send_buffer *in, const void *inptr, size_t size)
|
|||||||
/* end of the add_buffer functions */
|
/* end of the add_buffer functions */
|
||||||
/* ------------------------------------------------------------------------- */
|
/* ------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Curl_compareheader()
|
||||||
|
*
|
||||||
|
* Returns TRUE if 'headerline' contains the 'header' with given 'content'.
|
||||||
|
* Pass headers WITH the colon.
|
||||||
|
*/
|
||||||
|
bool
|
||||||
|
Curl_compareheader(char *headerline, /* line to check */
|
||||||
|
const char *header, /* header keyword _with_ colon */
|
||||||
|
const char *content) /* content string to find */
|
||||||
|
{
|
||||||
|
/* RFC2616, section 4.2 says: "Each header field consists of a name followed
|
||||||
|
* by a colon (":") and the field value. Field names are case-insensitive.
|
||||||
|
* The field value MAY be preceded by any amount of LWS, though a single SP
|
||||||
|
* is preferred." */
|
||||||
|
|
||||||
|
size_t hlen = strlen(header);
|
||||||
|
size_t clen;
|
||||||
|
size_t len;
|
||||||
|
char *start;
|
||||||
|
char *end;
|
||||||
|
|
||||||
|
if(!strnequal(headerline, header, hlen))
|
||||||
|
return FALSE; /* doesn't start with header */
|
||||||
|
|
||||||
|
/* pass the header */
|
||||||
|
start = &headerline[hlen];
|
||||||
|
|
||||||
|
/* pass all white spaces */
|
||||||
|
while(*start && isspace((int)*start))
|
||||||
|
start++;
|
||||||
|
|
||||||
|
/* find the end of the header line */
|
||||||
|
end = strchr(start, '\r'); /* lines end with CRLF */
|
||||||
|
if(!end) {
|
||||||
|
/* in case there's a non-standard compliant line here */
|
||||||
|
end = strchr(start, '\n');
|
||||||
|
|
||||||
|
if(!end)
|
||||||
|
/* hm, there's no line ending here, use the zero byte! */
|
||||||
|
end = strchr(start, '\0');
|
||||||
|
}
|
||||||
|
|
||||||
|
len = end-start; /* length of the content part of the input line */
|
||||||
|
clen = strlen(content); /* length of the word to find */
|
||||||
|
|
||||||
|
/* find the content string in the rest of the line */
|
||||||
|
for(;len>=clen;len--, start++) {
|
||||||
|
if(strnequal(start, content, clen))
|
||||||
|
return TRUE; /* match! */
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE; /* no match */
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This function checks the linked list of custom HTTP headers for a particular
|
* This function checks the linked list of custom HTTP headers for a particular
|
||||||
* header (prefix).
|
* header (prefix).
|
||||||
*/
|
*/
|
||||||
static bool checkheaders(struct SessionHandle *data, const char *thisheader)
|
static char *checkheaders(struct SessionHandle *data, const char *thisheader)
|
||||||
{
|
{
|
||||||
struct curl_slist *head;
|
struct curl_slist *head;
|
||||||
size_t thislen = strlen(thisheader);
|
size_t thislen = strlen(thisheader);
|
||||||
|
|
||||||
for(head = data->set.headers; head; head=head->next) {
|
for(head = data->set.headers; head; head=head->next) {
|
||||||
if(strnequal(head->data, thisheader, thislen)) {
|
if(strnequal(head->data, thisheader, thislen))
|
||||||
return TRUE;
|
return head->data;
|
||||||
}
|
}
|
||||||
}
|
return NULL;
|
||||||
return FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -440,6 +569,10 @@ CURLcode Curl_http_connect(struct connectdata *conn)
|
|||||||
if(conn->bits.user_passwd && !data->state.this_is_a_follow) {
|
if(conn->bits.user_passwd && !data->state.this_is_a_follow) {
|
||||||
/* Authorization: is requested, this is not a followed location, get the
|
/* Authorization: is requested, this is not a followed location, get the
|
||||||
original host name */
|
original host name */
|
||||||
|
if (data->state.auth_host)
|
||||||
|
/* Free to avoid leaking memory on multiple requests*/
|
||||||
|
free(data->state.auth_host);
|
||||||
|
|
||||||
data->state.auth_host = strdup(conn->hostname);
|
data->state.auth_host = strdup(conn->hostname);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -454,13 +587,21 @@ CURLcode Curl_http_done(struct connectdata *conn)
|
|||||||
data=conn->data;
|
data=conn->data;
|
||||||
http=conn->proto.http;
|
http=conn->proto.http;
|
||||||
|
|
||||||
|
/* set the proper values (possibly modified on POST) */
|
||||||
|
conn->fread = data->set.fread; /* restore */
|
||||||
|
conn->fread_in = data->set.in; /* restore */
|
||||||
|
|
||||||
|
if(http->send_buffer) {
|
||||||
|
send_buffer *buff = http->send_buffer;
|
||||||
|
|
||||||
|
free(buff->buffer);
|
||||||
|
free(buff);
|
||||||
|
}
|
||||||
|
|
||||||
if(HTTPREQ_POST_FORM == data->set.httpreq) {
|
if(HTTPREQ_POST_FORM == data->set.httpreq) {
|
||||||
conn->bytecount = http->readbytecount + http->writebytecount;
|
conn->bytecount = http->readbytecount + http->writebytecount;
|
||||||
|
|
||||||
Curl_formclean(http->sendit); /* Now free that whole lot */
|
Curl_formclean(http->sendit); /* Now free that whole lot */
|
||||||
|
|
||||||
data->set.fread = http->storefread; /* restore */
|
|
||||||
data->set.in = http->in; /* restore */
|
|
||||||
}
|
}
|
||||||
else if(HTTPREQ_PUT == data->set.httpreq)
|
else if(HTTPREQ_PUT == data->set.httpreq)
|
||||||
conn->bytecount = http->readbytecount + http->writebytecount;
|
conn->bytecount = http->readbytecount + http->writebytecount;
|
||||||
@@ -475,7 +616,6 @@ CURLcode Curl_http_done(struct connectdata *conn)
|
|||||||
return CURLE_OK;
|
return CURLE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
CURLcode Curl_http(struct connectdata *conn)
|
CURLcode Curl_http(struct connectdata *conn)
|
||||||
{
|
{
|
||||||
struct SessionHandle *data=conn->data;
|
struct SessionHandle *data=conn->data;
|
||||||
@@ -523,7 +663,8 @@ CURLcode Curl_http(struct connectdata *conn)
|
|||||||
host due to a location-follow, we do some weirdo checks here */
|
host due to a location-follow, we do some weirdo checks here */
|
||||||
if(!data->state.this_is_a_follow ||
|
if(!data->state.this_is_a_follow ||
|
||||||
!data->state.auth_host ||
|
!data->state.auth_host ||
|
||||||
strequal(data->state.auth_host, conn->hostname)) {
|
curl_strequal(data->state.auth_host, conn->hostname) ||
|
||||||
|
data->set.http_disable_hostname_check_before_authentication) {
|
||||||
sprintf(data->state.buffer, "%s:%s",
|
sprintf(data->state.buffer, "%s:%s",
|
||||||
data->state.user, data->state.passwd);
|
data->state.user, data->state.passwd);
|
||||||
if(Curl_base64_encode(data->state.buffer, strlen(data->state.buffer),
|
if(Curl_base64_encode(data->state.buffer, strlen(data->state.buffer),
|
||||||
@@ -547,18 +688,36 @@ CURLcode Curl_http(struct connectdata *conn)
|
|||||||
conn->allocptr.cookie = aprintf("Cookie: %s\015\012", data->set.cookie);
|
conn->allocptr.cookie = aprintf("Cookie: %s\015\012", data->set.cookie);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!conn->bits.upload_chunky && (data->set.httpreq != HTTPREQ_GET)) {
|
||||||
|
/* not a chunky transfer but data is to be sent */
|
||||||
|
char *ptr = checkheaders(data, "Transfer-Encoding:");
|
||||||
|
if(ptr) {
|
||||||
|
/* Some kind of TE is requested, check if 'chunked' is chosen */
|
||||||
|
if(Curl_compareheader(ptr, "Transfer-Encoding:", "chunked"))
|
||||||
|
/* we have been told explicitly to upload chunky so deal with it! */
|
||||||
|
conn->bits.upload_chunky = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(conn->bits.upload_chunky) {
|
if(conn->bits.upload_chunky) {
|
||||||
|
/* RFC2616 section 4.4:
|
||||||
|
Messages MUST NOT include both a Content-Length header field and a
|
||||||
|
non-identity transfer-coding. If the message does include a non-
|
||||||
|
identity transfer-coding, the Content-Length MUST be ignored. */
|
||||||
|
|
||||||
if(!checkheaders(data, "Transfer-Encoding:")) {
|
if(!checkheaders(data, "Transfer-Encoding:")) {
|
||||||
te = "Transfer-Encoding: chunked\r\n";
|
te = "Transfer-Encoding: chunked\r\n";
|
||||||
}
|
}
|
||||||
/* else
|
else {
|
||||||
our header was already added, what to do now? */
|
/* The "Transfer-Encoding:" header was already added. */
|
||||||
|
te = "";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(data->cookies) {
|
if(data->cookies) {
|
||||||
co = Curl_cookie_getlist(data->cookies,
|
co = Curl_cookie_getlist(data->cookies,
|
||||||
host, ppath,
|
host, ppath,
|
||||||
(conn->protocol&PROT_HTTPS?TRUE:FALSE));
|
(bool)(conn->protocol&PROT_HTTPS?TRUE:FALSE));
|
||||||
}
|
}
|
||||||
if (data->change.proxy && *data->change.proxy &&
|
if (data->change.proxy && *data->change.proxy &&
|
||||||
!data->set.tunnel_thru_httpproxy &&
|
!data->set.tunnel_thru_httpproxy &&
|
||||||
@@ -839,6 +998,9 @@ CURLcode Curl_http(struct connectdata *conn)
|
|||||||
headers = headers->next;
|
headers = headers->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
http->postdata = NULL; /* nothing to post at this point */
|
||||||
|
Curl_pgrsSetUploadSize(data, 0); /* upload size is 0 atm */
|
||||||
|
|
||||||
switch(data->set.httpreq) {
|
switch(data->set.httpreq) {
|
||||||
|
|
||||||
case HTTPREQ_POST_FORM:
|
case HTTPREQ_POST_FORM:
|
||||||
@@ -847,14 +1009,14 @@ CURLcode Curl_http(struct connectdata *conn)
|
|||||||
return CURLE_HTTP_POST_ERROR;
|
return CURLE_HTTP_POST_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
http->storefread = data->set.fread; /* backup */
|
/* set the read function to read from the generated form data */
|
||||||
http->in = data->set.in; /* backup */
|
conn->fread = (curl_read_callback)Curl_FormReader;
|
||||||
|
conn->fread_in = &http->form;
|
||||||
|
|
||||||
data->set.fread = (curl_read_callback)
|
http->sending = HTTPSEND_BODY;
|
||||||
Curl_FormReader; /* set the read function to read from the
|
|
||||||
generated form data */
|
|
||||||
data->set.in = (FILE *)&http->form;
|
|
||||||
|
|
||||||
|
if(!conn->bits.upload_chunky)
|
||||||
|
/* only add Content-Length if not uploading chunked */
|
||||||
add_bufferf(req_buffer,
|
add_bufferf(req_buffer,
|
||||||
"Content-Length: %d\r\n", http->postsize);
|
"Content-Length: %d\r\n", http->postsize);
|
||||||
|
|
||||||
@@ -896,7 +1058,7 @@ CURLcode Curl_http(struct connectdata *conn)
|
|||||||
Curl_pgrsSetUploadSize(data, http->postsize);
|
Curl_pgrsSetUploadSize(data, http->postsize);
|
||||||
|
|
||||||
/* fire away the whole request to the server */
|
/* fire away the whole request to the server */
|
||||||
result = add_buffer_send(conn->firstsocket, conn, req_buffer,
|
result = add_buffer_send(req_buffer, conn->firstsocket, conn,
|
||||||
&data->info.request_size);
|
&data->info.request_size);
|
||||||
if(result)
|
if(result)
|
||||||
failf(data, "Failed sending POST request");
|
failf(data, "Failed sending POST request");
|
||||||
@@ -914,22 +1076,22 @@ CURLcode Curl_http(struct connectdata *conn)
|
|||||||
|
|
||||||
case HTTPREQ_PUT: /* Let's PUT the data to the server! */
|
case HTTPREQ_PUT: /* Let's PUT the data to the server! */
|
||||||
|
|
||||||
if(data->set.infilesize>0) {
|
if((data->set.infilesize>0) && !conn->bits.upload_chunky)
|
||||||
|
/* only add Content-Length if not uploading chunked */
|
||||||
add_bufferf(req_buffer,
|
add_bufferf(req_buffer,
|
||||||
"Content-Length: %d\r\n\r\n", /* file size */
|
"Content-Length: %d\r\n", /* file size */
|
||||||
data->set.infilesize );
|
data->set.infilesize );
|
||||||
}
|
|
||||||
else
|
add_bufferf(req_buffer, "\r\n");
|
||||||
add_bufferf(req_buffer, "\015\012");
|
|
||||||
|
|
||||||
/* set the upload size to the progress meter */
|
/* set the upload size to the progress meter */
|
||||||
Curl_pgrsSetUploadSize(data, data->set.infilesize);
|
Curl_pgrsSetUploadSize(data, data->set.infilesize);
|
||||||
|
|
||||||
/* this sends the buffer and frees all the buffer resources */
|
/* this sends the buffer and frees all the buffer resources */
|
||||||
result = add_buffer_send(conn->firstsocket, conn, req_buffer,
|
result = add_buffer_send(req_buffer, conn->firstsocket, conn,
|
||||||
&data->info.request_size);
|
&data->info.request_size);
|
||||||
if(result)
|
if(result)
|
||||||
failf(data, "Faied sending POST request");
|
failf(data, "Failed sending POST request");
|
||||||
else
|
else
|
||||||
/* prepare for transfer */
|
/* prepare for transfer */
|
||||||
result = Curl_Transfer(conn, conn->firstsocket, -1, TRUE,
|
result = Curl_Transfer(conn, conn->firstsocket, -1, TRUE,
|
||||||
@@ -943,6 +1105,11 @@ CURLcode Curl_http(struct connectdata *conn)
|
|||||||
case HTTPREQ_POST:
|
case HTTPREQ_POST:
|
||||||
/* this is the simple POST, using x-www-form-urlencoded style */
|
/* this is the simple POST, using x-www-form-urlencoded style */
|
||||||
|
|
||||||
|
if(!conn->bits.upload_chunky) {
|
||||||
|
/* We only set Content-Length and allow a custom Content-Length if
|
||||||
|
we don't upload data chunked, as RFC2616 forbids us to set both
|
||||||
|
kinds of headers (Transfer-Encoding: chunked and Content-Length) */
|
||||||
|
|
||||||
if(!checkheaders(data, "Content-Length:"))
|
if(!checkheaders(data, "Content-Length:"))
|
||||||
/* we allow replacing this header, although it isn't very wise to
|
/* we allow replacing this header, although it isn't very wise to
|
||||||
actually set your own */
|
actually set your own */
|
||||||
@@ -951,6 +1118,7 @@ CURLcode Curl_http(struct connectdata *conn)
|
|||||||
data->set.postfieldsize?
|
data->set.postfieldsize?
|
||||||
data->set.postfieldsize:
|
data->set.postfieldsize:
|
||||||
(data->set.postfields?strlen(data->set.postfields):0) );
|
(data->set.postfields?strlen(data->set.postfields):0) );
|
||||||
|
}
|
||||||
|
|
||||||
if(!checkheaders(data, "Content-Type:"))
|
if(!checkheaders(data, "Content-Type:"))
|
||||||
add_bufferf(req_buffer,
|
add_bufferf(req_buffer,
|
||||||
@@ -958,18 +1126,28 @@ CURLcode Curl_http(struct connectdata *conn)
|
|||||||
|
|
||||||
add_buffer(req_buffer, "\r\n", 2);
|
add_buffer(req_buffer, "\r\n", 2);
|
||||||
|
|
||||||
/* and here comes the actual data */
|
/* and here we setup the pointers to the actual data */
|
||||||
if(data->set.postfieldsize && data->set.postfields) {
|
if(data->set.postfields) {
|
||||||
add_buffer(req_buffer, data->set.postfields,
|
if(data->set.postfieldsize)
|
||||||
data->set.postfieldsize);
|
http->postsize = data->set.postfieldsize;
|
||||||
}
|
else
|
||||||
else if(data->set.postfields)
|
http->postsize = strlen(data->set.postfields);
|
||||||
add_bufferf(req_buffer,
|
http->postdata = data->set.postfields;
|
||||||
"%s",
|
|
||||||
data->set.postfields );
|
|
||||||
|
|
||||||
/* issue the request */
|
http->sending = HTTPSEND_BODY;
|
||||||
result = add_buffer_send(conn->firstsocket, conn, req_buffer,
|
|
||||||
|
conn->fread = (curl_read_callback)readmoredata;
|
||||||
|
conn->fread_in = (void *)conn;
|
||||||
|
|
||||||
|
/* set the upload size to the progress meter */
|
||||||
|
Curl_pgrsSetUploadSize(data, http->postsize);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
/* set the upload size to the progress meter */
|
||||||
|
Curl_pgrsSetUploadSize(data, data->set.infilesize);
|
||||||
|
|
||||||
|
/* issue the request, headers-only */
|
||||||
|
result = add_buffer_send(req_buffer, conn->firstsocket, conn,
|
||||||
&data->info.request_size);
|
&data->info.request_size);
|
||||||
|
|
||||||
if(result)
|
if(result)
|
||||||
@@ -978,15 +1156,15 @@ CURLcode Curl_http(struct connectdata *conn)
|
|||||||
result =
|
result =
|
||||||
Curl_Transfer(conn, conn->firstsocket, -1, TRUE,
|
Curl_Transfer(conn, conn->firstsocket, -1, TRUE,
|
||||||
&http->readbytecount,
|
&http->readbytecount,
|
||||||
data->set.postfields?-1:conn->firstsocket,
|
conn->firstsocket,
|
||||||
data->set.postfields?NULL:&http->writebytecount);
|
&http->writebytecount);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
add_buffer(req_buffer, "\r\n", 2);
|
add_buffer(req_buffer, "\r\n", 2);
|
||||||
|
|
||||||
/* issue the request */
|
/* issue the request */
|
||||||
result = add_buffer_send(conn->firstsocket, conn, req_buffer,
|
result = add_buffer_send(req_buffer, conn->firstsocket, conn,
|
||||||
&data->info.request_size);
|
&data->info.request_size);
|
||||||
|
|
||||||
if(result)
|
if(result)
|
||||||
@@ -995,7 +1173,8 @@ CURLcode Curl_http(struct connectdata *conn)
|
|||||||
/* HTTP GET/HEAD download: */
|
/* HTTP GET/HEAD download: */
|
||||||
result = Curl_Transfer(conn, conn->firstsocket, -1, TRUE,
|
result = Curl_Transfer(conn, conn->firstsocket, -1, TRUE,
|
||||||
&http->readbytecount,
|
&http->readbytecount,
|
||||||
-1, NULL); /* nothing to upload */
|
http->postdata?conn->firstsocket:-1,
|
||||||
|
http->postdata?&http->writebytecount:NULL);
|
||||||
}
|
}
|
||||||
if(result)
|
if(result)
|
||||||
return result;
|
return result;
|
||||||
@@ -1004,13 +1183,4 @@ CURLcode Curl_http(struct connectdata *conn)
|
|||||||
|
|
||||||
return CURLE_OK;
|
return CURLE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* local variables:
|
|
||||||
* eval: (load-file "../curl-mode.el")
|
|
||||||
* end:
|
|
||||||
* vim600: fdm=marker
|
|
||||||
* vim: et sw=2 ts=2 sts=2 tw=78
|
|
||||||
*/
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -24,6 +24,10 @@
|
|||||||
* $Id$
|
* $Id$
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
#ifndef CURL_DISABLE_HTTP
|
#ifndef CURL_DISABLE_HTTP
|
||||||
|
bool Curl_compareheader(char *headerline, /* line to check */
|
||||||
|
const char *header, /* header keyword _with_ colon */
|
||||||
|
const char *content); /* content string to find */
|
||||||
|
|
||||||
/* ftp can use this as well */
|
/* ftp can use this as well */
|
||||||
CURLcode Curl_ConnectHTTPProxyTunnel(struct connectdata *conn,
|
CURLcode Curl_ConnectHTTPProxyTunnel(struct connectdata *conn,
|
||||||
int tunnelsocket,
|
int tunnelsocket,
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -248,12 +248,4 @@ CHUNKcode Curl_httpchunk_read(struct connectdata *conn,
|
|||||||
}
|
}
|
||||||
return CHUNKE_OK;
|
return CHUNKE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* local variables:
|
|
||||||
* eval: (load-file "../curl-mode.el")
|
|
||||||
* end:
|
|
||||||
* vim600: fdm=marker
|
|
||||||
* vim: et sw=2 ts=2 sts=2 tw=78
|
|
||||||
*/
|
|
||||||
#endif /* CURL_DISABLE_HTTP */
|
#endif /* CURL_DISABLE_HTTP */
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
|
13
lib/if2ip.c
13
lib/if2ip.c
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -32,7 +32,8 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ! defined(WIN32) && ! defined(__BEOS__) && !defined(__CYGWIN32__)
|
#if ! defined(WIN32) && ! defined(__BEOS__) && !defined(__CYGWIN32__) && \
|
||||||
|
! defined(__riscos__)
|
||||||
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
@@ -124,11 +125,3 @@ char *Curl_if2ip(char *interface, char *buf, int buf_size)
|
|||||||
#else
|
#else
|
||||||
#define if2ip(x) NULL
|
#define if2ip(x) NULL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
|
||||||
* local variables:
|
|
||||||
* eval: (load-file "../curl-mode.el")
|
|
||||||
* end:
|
|
||||||
* vim600: fdm=marker
|
|
||||||
* vim: et sw=2 ts=2 sts=2 tw=78
|
|
||||||
*/
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user