aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2009-08-24 10:57:17 +0000
committerDaniel Stenberg <daniel@haxx.se>2009-08-24 10:57:17 +0000
commit95c2b205a4e33eab9ea331428565109bde99c8a5 (patch)
treeb52ed9087f9a1ecf5a4dcdd6ddebf8afc7ba6eb1
parent6ede4ce79d740e9ea9430bba7654aa8d92c6926a (diff)
- Eric Wong introduced support for the new option -T. (dot) that makes curl
read stdin in a non-blocking fashion. This also brings back -T- (minus) to the previous blocking behavior since it could break stuff for people at times.
-rw-r--r--CHANGES6
-rw-r--r--RELEASE-NOTES6
-rw-r--r--docs/curl.13
-rw-r--r--src/main.c15
4 files changed, 24 insertions, 6 deletions
diff --git a/CHANGES b/CHANGES
index 2731c818f..0a901c31e 100644
--- a/CHANGES
+++ b/CHANGES
@@ -6,6 +6,12 @@
Changelog
+Daniel Stenberg (24 Aug 2009)
+- Eric Wong introduced support for the new option -T. (dot) that makes curl
+ read stdin in a non-blocking fashion. This also brings back -T- (minus) to
+ the previous blocking behavior since it could break stuff for people at
+ times.
+
Michal Marek (21 Aug 2009)
- With CURLOPT_PROXY_TRANSFER_MODE, avoid sending invalid URLs like
ftp://example.com;type=i if the user specified ftp://example.com without the
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index 77401bbe5..5ba3746df 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -9,7 +9,7 @@ Curl and libcurl 7.19.7
This release includes the following changes:
- o
+ o -T. is now for non-blocking uploading from stdin
This release includes the following bugfixes:
@@ -19,6 +19,7 @@ This release includes the following bugfixes:
o data corruption issue with re-connected transfers
o use after free if we're completed but easy_conn not NULL (pipelined)
o missing strdup() return code check
+ o CURLOPT_PROXY_TRANSFER_MODE could pass along wrong syntax
This release includes the following known bugs:
@@ -27,6 +28,7 @@ This release includes the following known bugs:
This release would not have looked like this without help, code, reports and
advice from friends like these:
- Karl Moerder, Kamil Dudka, Krister Johansen, Andre Guibert de Bruet
+ Karl Moerder, Kamil Dudka, Krister Johansen, Andre Guibert de Bruet,
+ Michal Marek, Eric Wong
Thanks! (and sorry if I forgot to mention someone)
diff --git a/docs/curl.1 b/docs/curl.1
index fcda7120b..563bbc4f5 100644
--- a/docs/curl.1
+++ b/docs/curl.1
@@ -1183,6 +1183,9 @@ file name to use. That will most likely cause the upload operation to fail. If
this is used on a HTTP(S) server, the PUT command will be used.
Use the file name "-" (a single dash) to use stdin instead of a given file.
+Alternately, the file name "." (a single period) may be specified instead
+of "-" to use stdin in non-blocking mode to allow reading server output
+while stdin is being uploaded.
You can specify one -T for each URL on the command line. Each -T + URL pair
specifies what to upload and to where. curl also supports "globbing" of the -T
diff --git a/src/main.c b/src/main.c
index 2dc1a6686..d1152f9d8 100644
--- a/src/main.c
+++ b/src/main.c
@@ -3953,6 +3953,10 @@ static void dumpeasycode(struct Configurable *config)
curl_slist_free_all(easycode);
}
+static bool stdin_upload(const char *uploadfile)
+{
+ return curlx_strequal(uploadfile, "-") || curlx_strequal(uploadfile, ".");
+}
static int
operate(struct Configurable *config, int argc, argv_item_t argv[])
@@ -4417,7 +4421,7 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
}
}
infdopen=FALSE;
- if(uploadfile && !curlx_strequal(uploadfile, "-")) {
+ if(uploadfile && !stdin_upload(uploadfile)) {
/*
* We have specified a file to upload and it isn't "-".
*/
@@ -4511,11 +4515,14 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
uploadfilesize=fileinfo.st_size;
}
- else if(uploadfile && curlx_strequal(uploadfile, "-")) {
+ else if(uploadfile && stdin_upload(uploadfile)) {
SET_BINMODE(stdin);
infd = STDIN_FILENO;
- if (curlx_nonblock((curl_socket_t)infd, TRUE) < 0)
- warnf(config, "fcntl failed on fd=%d: %s\n", infd, strerror(errno));
+ if (curlx_strequal(uploadfile, ".")) {
+ if (curlx_nonblock((curl_socket_t)infd, TRUE) < 0)
+ warnf(config,
+ "fcntl failed on fd=%d: %s\n", infd, strerror(errno));
+ }
}
if(uploadfile && config->resume_from_current)