diff options
| author | Daniel Stenberg <daniel@haxx.se> | 2006-04-09 08:39:08 +0000 | 
|---|---|---|
| committer | Daniel Stenberg <daniel@haxx.se> | 2006-04-09 08:39:08 +0000 | 
| commit | 655331a91b2d68106c0afb63c1bdf6245a6cc30c (patch) | |
| tree | bc0e5d2f1c672edd9dd42beb8027a3259f2e5380 /docs/examples | |
| parent | 09e569f83d440a6901ee9a4ae1cce39b48d8a545 (diff) | |
new little example using the new conversion callbacks added in 7.15.4
Diffstat (limited to 'docs/examples')
| -rw-r--r-- | docs/examples/Makefile.am | 2 | ||||
| -rw-r--r-- | docs/examples/sampleconv.c | 95 | 
2 files changed, 96 insertions, 1 deletions
diff --git a/docs/examples/Makefile.am b/docs/examples/Makefile.am index 0adb01ebb..c09183b64 100644 --- a/docs/examples/Makefile.am +++ b/docs/examples/Makefile.am @@ -11,7 +11,7 @@ EXTRA_DIST = README curlgtk.c sepheaders.c simple.c postit2.c		\   multi-post.c fopen.c simplepost.c makefile.dj curlx.c https.c		\   multi-debugcallback.c fileupload.c getinfo.c ftp3rdparty.c debug.c	\   anyauthput.c htmltitle.cc htmltidy.c opensslthreadlock.c		\ - cookie_interface.c cacertinmem.c synctime.c + cookie_interface.c cacertinmem.c synctime.c sampleconv.c  all:  	@echo "done" diff --git a/docs/examples/sampleconv.c b/docs/examples/sampleconv.c new file mode 100644 index 000000000..89cfb933e --- /dev/null +++ b/docs/examples/sampleconv.c @@ -0,0 +1,95 @@ +/***************************************************************************** + *                                  _   _ ____  _ + *  Project                     ___| | | |  _ \| | + *                             / __| | | | |_) | | + *                            | (__| |_| |  _ <| |___ + *                             \___|\___/|_| \_\_____| + * + * $Id$ + */ +/* +   This is a simple example showing how a program on a non-ASCII platform +   would invoke callbacks to do its own codeset conversions instead of  +   using the built-in iconv functions in libcurl. + +   The IBM-1047 EBCDIC codeset is used for this example but the code +   would be similar for other non-ASCII codesets. + +   Three callback functions are created below: +        my_conv_from_ascii_to_ebcdic, +        my_conv_from_ebcdic_to_ascii, and +        my_conv_from_utf8_to_ebcdic + +   The "platform_xxx" calls represent platform-specific conversion routines. + + */ + +#include <stdio.h> +#include <curl/curl.h> + +CURLcode my_conv_from_ascii_to_ebcdic(char *buffer, size_t length) +{ +    char *tempptrin, *tempptrout; +    size_t bytes = length; +    int rc; +    tempptrin = tempptrout = buffer; +    rc = platform_a2e(&tempptrin, &bytes, &tempptrout, &bytes); +    if (rc == PLATFORM_CONV_OK) { +      return(CURLE_OK); +    } else { +      return(CURLE_CONV_FAILED); +    } +} + +CURLcode my_conv_from_ebcdic_to_ascii(char *buffer, size_t length) +{ +    char *tempptrin, *tempptrout; +    size_t bytes = length; +    int rc; +    tempptrin = tempptrout = buffer; +    rc = platform_e2a(&tempptrin, &bytes, &tempptrout, &bytes); +    if (rc == PLATFORM_CONV_OK) { +      return(CURLE_OK); +    } else { +      return(CURLE_CONV_FAILED); +    } +} + +CURLcode my_conv_from_utf8_to_ebcdic(char *buffer, size_t length) +{ +    char *tempptrin, *tempptrout; +    size_t bytes = length; +    int rc; +    tempptrin = tempptrout = buffer; +    rc = platform_u2e(&tempptrin, &bytes, &tempptrout, &bytes); +    if (rc == PLATFORM_CONV_OK) { +      return(CURLE_OK); +    } else { +      return(CURLE_CONV_FAILED); +    } +} + +int main(void) +{ +  CURL *curl; +  CURLcode res; + +  curl = curl_easy_init(); +  if(curl) { +    curl_easy_setopt(curl, CURLOPT_URL, "curl.haxx.se"); + +    /* use platform-specific functions for codeset conversions */ +    curl_easy_setopt(curl, CURLOPT_CONV_FROM_NETWORK_FUNCTION, +                     my_conv_from_ascii_to_ebcdic); +    curl_easy_setopt(curl, CURLOPT_CONV_TO_NETWORK_FUNCTION, +                     my_conv_from_ebcdic_to_ascii); +    curl_easy_setopt(curl, CURLOPT_CONV_FROM_UTF8_FUNCTION, +                     my_conv_from_utf8_to_ebcdic); + +    res = curl_easy_perform(curl); + +    /* always cleanup */ +    curl_easy_cleanup(curl); +  } +  return 0; +}  | 
