aboutsummaryrefslogtreecommitdiff
path: root/perl/Curl_easy
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2001-04-18 13:41:04 +0000
committerDaniel Stenberg <daniel@haxx.se>2001-04-18 13:41:04 +0000
commit8e9f0a73d051f430b7aa9ac7b2f5e57610e20067 (patch)
treed2292d3bf5aeeb1cb445ab084f8127540fa60073 /perl/Curl_easy
parent80fbcdf2f2ac3404874d0b306c457c1111494dc4 (diff)
Georg Horn's updates, this is _also_ called 1.1.3 ! ;-)
Diffstat (limited to 'perl/Curl_easy')
-rw-r--r--perl/Curl_easy/Changes6
-rw-r--r--perl/Curl_easy/MANIFEST1
-rw-r--r--perl/Curl_easy/README18
-rw-r--r--perl/Curl_easy/easy.xs105
4 files changed, 62 insertions, 68 deletions
diff --git a/perl/Curl_easy/Changes b/perl/Curl_easy/Changes
index 647017c54..11d45e5af 100644
--- a/perl/Curl_easy/Changes
+++ b/perl/Curl_easy/Changes
@@ -2,9 +2,9 @@ Revision history for Perl extension Curl::easy.
Check out the file README for more info.
1.1.3 Wed Apr 18 2001: - Cris Bailiff <c.bailiff@devsecure.com>
- - Change/shorten module function names:
- Curl::easy::curl_easy_setopt becomes Curl::easy::setopt etc.
- This requires minor changes to existing scripts....
+ - Change/shorten module function names: Curl::easy::curl_easy_setopt
+ becomes Curl::easy::setopt etc. This requires minor changes to existing
+ scripts....
- Added callback function support to pass arbitrary SV * (including
FILE globs) from perl through libcurl to the perl callback.
- Make callbacks still work with existing scripts which use STDIO
diff --git a/perl/Curl_easy/MANIFEST b/perl/Curl_easy/MANIFEST
index b106c934b..d60043d7a 100644
--- a/perl/Curl_easy/MANIFEST
+++ b/perl/Curl_easy/MANIFEST
@@ -1,6 +1,7 @@
Changes
MANIFEST
Makefile.PL
+README
easy.pm
easy.xs
test.pl
diff --git a/perl/Curl_easy/README b/perl/Curl_easy/README
index 2eee408a0..619fd7d77 100644
--- a/perl/Curl_easy/README
+++ b/perl/Curl_easy/README
@@ -12,16 +12,16 @@ installed. You then may install this module via the usual way:
make install
The module provides the same functionality as libcurl provides to C programs,
-please refer to the documentation of libcurl.
+please refer to the documentation of libcurl. Some examples may be found in
+test.pl.
-A short example how to use the module may be found in test.pl.
+This software is distributed AS IS, WITHOUT WARRANTY OF ANY KIND, either
+express or implied. Send praise, patches, money, beer and pizza to the author.
+Send complaints to /dev/null. ;-)
-This Software is distributed AS IS, WITHOUT WARRANTY OF ANY KIND,
-either express or implied. Send praise, patches, money, beer and
-pizza to the author. Send complaints to /dev/null. ;-)
+The author of this software is Georg Horn <horn@koblenz-net.de>
+Parts of the callback support have been added by Cris Bailiff
+<c.bailiff@awayweb.com> and Forrest Cahoon <forrest.cahoon@merrillcorp.com>
-The author of this module is Georg Horn <horn@koblenz-net.de>
-
-The latest version of this module can be dowloaded from
-http://koblenz-net.de/~horn/export/
+The latest version can be downloaded from http://koblenz-net.de/~horn/export/
diff --git a/perl/Curl_easy/easy.xs b/perl/Curl_easy/easy.xs
index 4fff2b332..50b70280b 100644
--- a/perl/Curl_easy/easy.xs
+++ b/perl/Curl_easy/easy.xs
@@ -29,8 +29,8 @@ static char *errbufvarname = NULL;
static SV *read_callback = NULL, *write_callback = NULL,
*progress_callback = NULL, *passwd_callback = NULL,
- *header_callback = NULL;
- /* *closepolicy_callback = NULL; */
+ *header_callback = NULL;
+ /* *closepolicy_callback = NULL; */
/* For storing the content */
@@ -87,58 +87,58 @@ fwrite_wrapper (const void *ptr,
void *stream,
void *call_function)
{
- dSP ;
- int count,status;
+ dSP;
+ int count, status;
SV *sv;
if (call_function) {
- /* then we are doing a callback to perl */
+ /* then we are doing a callback to perl */
- ENTER ;
- SAVETMPS ;
-
- PUSHMARK(SP) ;
+ ENTER;
+ SAVETMPS;
- if (stream == stdout) {
- sv = newSViv(0); /* FIXME: should cast stdout to GLOB somehow? */
- } else { /* its already an SV */
- sv = stream;
- }
-
- if (ptr != NULL) {
- XPUSHs(sv_2mortal(newSVpvn(ptr, size * nmemb)));
+ PUSHMARK(SP);
+
+ if (stream == stdout) {
+ sv = newSViv(0); /* FIXME: should cast stdout to GLOB somehow? */
+ } else { /* its already an SV */
+ sv = stream;
+ }
+
+ if (ptr != NULL) {
+ XPUSHs(sv_2mortal(newSVpvn(ptr, size * nmemb)));
} else {
- XPUSHs(sv_2mortal(newSVpv("",0)));
- }
- XPUSHs(sv_2mortal(newSVsv(sv))); /* CURLOPT_FILE SV* */
- PUTBACK ;
+ XPUSHs(sv_2mortal(newSVpv("", 0)));
+ }
+ XPUSHs(sv_2mortal(newSVsv(sv))); /* CURLOPT_FILE SV* */
+ PUTBACK;
- count = call_sv((SV *)call_function, G_SCALAR);
-
- SPAGAIN;
- if (count != 1)
- croak("Big trouble, perl_call_sv(write_callback) didn't return status\n");
+ count = perl_call_sv((SV *) call_function, G_SCALAR);
- status = POPi;
+ SPAGAIN;
+ if (count != 1)
+ croak("Big trouble, perl_call_sv(write_callback) didn't return status\n");
- PUTBACK ;
-
- FREETMPS ;
- LEAVE ;
- return status;
+ status = POPi;
- } else {
- /* default to a normal 'fwrite' */
- /* stream could be a FILE * or an SV * */
- FILE *f;
-
- if (stream == stdout) { /* the only possible FILE ? Think so*/
- f = stream;
- } else { /* its a GLOB */
- f = IoIFP(sv_2io(stream)); /* may barf if not a GLOB */
- }
+ PUTBACK;
+
+ FREETMPS;
+ LEAVE;
+ return status;
+
+ } else {
+ /* default to a normal 'fwrite' */
+ /* stream could be a FILE * or an SV * */
+ FILE *f;
+
+ if (stream == stdout) { /* the only possible FILE ? Think so */
+ f = stream;
+ } else { /* its a GLOB */
+ f = IoIFP(sv_2io(stream)); /* may barf if not a GLOB */
+ }
- return fwrite(ptr,size,nmemb,f);
+ return fwrite(ptr, size, nmemb, f);
}
}
@@ -192,7 +192,7 @@ read_callback_func( void *ptr, size_t size,
XPUSHs(sv_2mortal(newSVsv(sv))); /* CURLOPT_INFILE SV* */
PUTBACK ;
- count = call_sv(read_callback, G_SCALAR);
+ count = perl_call_sv(read_callback, G_SCALAR);
SPAGAIN;
if (count != 1)
@@ -209,7 +209,6 @@ read_callback_func( void *ptr, size_t size,
FREETMPS ;
LEAVE ;
return (size_t) (mylen/size);
-
} else {
/* default to a normal 'fread' */
/* stream could be a FILE * or an SV * */
@@ -284,7 +283,7 @@ static int passwd_callback_func(void *clientp, char *prompt, char *buffer,
count = perl_call_sv(passwd_callback, G_ARRAY);
SPAGAIN;
if (count != 2)
- croak("Big trouble, perl_call_sv(passwd_callback) didn't return status + data\n");
+ croak("Big trouble, perl_call_sv(passwd_callback) didn't return status + data\n");
sv = POPs;
count = POPi;
@@ -294,7 +293,7 @@ static int passwd_callback_func(void *clientp, char *prompt, char *buffer,
/* only allowed to return the number of bytes asked for */
mylen = len<(buflen-1) ? len : (buflen-1);
memcpy(buffer,p,mylen);
- buffer[buflen]=0; /* ensure C string terminates */
+ buffer[buflen]=0; /* ensure C string terminates */
PUTBACK;
FREETMPS;
@@ -318,12 +317,11 @@ closepolicy_callback_func(void *clientp)
PUSHMARK(SP);
PUTBACK;
- argc = call_sv(closepolicy_callback, G_SCALAR);
+ argc = perl_call_sv(closepolicy_callback, G_SCALAR);
SPAGAIN;
if (argc != 1) {
- croak
- ("Unexpected number of arguments returned from closefunction callback\n");
+ croak("Unexpected number of arguments returned from closefunction callback\n");
}
pl_status = POPs;
status = SvTRUE(pl_status) ? 0 : 1;
@@ -560,22 +558,18 @@ int option
SV * value
CODE:
if (option < CURLOPTTYPE_OBJECTPOINT) {
-
/* This is an option specifying an integer value: */
RETVAL = curl_easy_setopt(curl, option, (long)SvIV(value));
-
} else if (option == CURLOPT_FILE || option == CURLOPT_INFILE ||
option == CURLOPT_WRITEHEADER || option == CURLOPT_PROGRESSDATA ||
- option == CURLOPT_PASSWDDATA) {
+ option == CURLOPT_PASSWDDATA) {
/* This is an option specifying an SV * value: */
RETVAL = curl_easy_setopt(curl, option, newSVsv(ST(2)));
-
} else if (option == CURLOPT_ERRORBUFFER) {
/* Pass in variable name for storing error messages... */
RETVAL = curl_easy_setopt(curl, option, errbuf);
if (errbufvarname) free(errbufvarname);
errbufvarname = strdup((char *)SvPV(value, PL_na));
-
} else if (option == CURLOPT_WRITEFUNCTION || option ==
CURLOPT_READFUNCTION || option == CURLOPT_PROGRESSFUNCTION ||
option == CURLOPT_PASSWDFUNCTION || option == CURLOPT_HEADERFUNCTION) {
@@ -608,7 +602,6 @@ CODE:
*/
}
RETVAL = -1;
-
} else if (option == CURLOPT_HTTPHEADER || option == CURLOPT_QUOTE ||
option == CURLOPT_POSTQUOTE) {
/* This is an option specifying a list of curl_slist structs: */