aboutsummaryrefslogtreecommitdiff
path: root/tests/libtest/lib576.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/libtest/lib576.c')
-rw-r--r--tests/libtest/lib576.c107
1 files changed, 107 insertions, 0 deletions
diff --git a/tests/libtest/lib576.c b/tests/libtest/lib576.c
new file mode 100644
index 000000000..7f2c7ae37
--- /dev/null
+++ b/tests/libtest/lib576.c
@@ -0,0 +1,107 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+#include "testutil.h"
+#include "memdebug.h"
+
+typedef struct {
+ int remains;
+ int print_content;
+} chunk_data_t;
+
+long chunk_bgn(const struct curl_fileinfo *finfo, void *ptr, int remains);
+long chunk_end(void *ptr);
+
+long chunk_bgn(const struct curl_fileinfo *finfo, void *ptr, int remains)
+{
+ chunk_data_t *ch_d = ptr;
+ ch_d->remains = remains;
+
+ printf("=============================================================\n");
+ printf("Remains: %d\n", remains);
+ printf("Filename: %s\n", finfo->filename);
+ if(finfo->strings.perm) {
+ printf("Permissions: %s", finfo->strings.perm);
+ if(finfo->flags & CURLFINFOFLAG_KNOWN_PERM)
+ printf(" (parsed => %o)", finfo->perm);
+ printf("\n");
+ }
+ printf("Size: %lldB\n", (long long int)finfo->size);
+ if(finfo->strings.user)
+ printf("User: %s\n", finfo->strings.user);
+ if(finfo->strings.group)
+ printf("Group: %s\n", finfo->strings.group);
+ if(finfo->strings.time)
+ printf("Time: %s\n", finfo->strings.time);
+ printf("Filetype: ");
+ switch(finfo->filetype) {
+ case CURLFILETYPE_FILE:
+ printf("regular file\n");
+ break;
+ case CURLFILETYPE_DIRECTORY:
+ printf("directory\n");
+ break;
+ case CURLFILETYPE_SYMLINK:
+ printf("symlink\n");
+ printf("Target: %s\n", finfo->strings.target);
+ break;
+ default:
+ printf("other type\n");
+ break;
+ }
+ if(finfo->filetype == CURLFILETYPE_FILE) {
+ ch_d->print_content = 1;
+ printf("Content:\n-------------------------------------------------------------\n");
+ }
+ if(strcmp(finfo->filename, "someothertext.txt") == 0) {
+ printf("# THIS CONTENT WAS SKIPPED IN CHUNK_BGN CALLBACK #\n");
+ return CURL_CHUNK_BGN_FUNC_SKIP;
+ }
+ return CURL_CHUNK_BGN_FUNC_OK;
+}
+
+long chunk_end(void *ptr)
+{
+ chunk_data_t *ch_d = ptr;
+ if(ch_d->print_content) {
+ ch_d->print_content = 0;
+ printf("-------------------------------------------------------------\n");
+ }
+ if(ch_d->remains == 1)
+ printf("=============================================================\n");
+ return CURL_CHUNK_END_FUNC_OK;
+}
+
+int test(char *URL)
+{
+ CURL *handle = NULL;
+ CURLcode res = 0;
+ chunk_data_t chunk_data = {0,0};
+ curl_global_init(CURL_GLOBAL_ALL);
+ handle = curl_easy_init();
+ if(!handle) {
+ res = CURLE_OUT_OF_MEMORY;
+ goto test_cleanup;
+ }
+
+ test_setopt(handle, CURLOPT_URL, URL);
+ test_setopt(handle, CURLOPT_WILDCARDMATCH, 1L);
+ test_setopt(handle, CURLOPT_CHUNK_BGN_FUNCTION, chunk_bgn);
+ test_setopt(handle, CURLOPT_CHUNK_END_FUNCTION, chunk_end);
+ test_setopt(handle, CURLOPT_CHUNK_DATA, &chunk_data);
+
+ res = curl_easy_perform(handle);
+
+test_cleanup:
+ if(handle)
+ curl_easy_cleanup(handle);
+ curl_global_cleanup();
+ return res;
+}