diff options
Diffstat (limited to 'tests/libtest')
-rw-r--r-- | tests/libtest/Makefile.am | 4 | ||||
-rw-r--r-- | tests/libtest/lib558.c | 127 |
2 files changed, 130 insertions, 1 deletions
diff --git a/tests/libtest/Makefile.am b/tests/libtest/Makefile.am index 94774c310..0801b4ef9 100644 --- a/tests/libtest/Makefile.am +++ b/tests/libtest/Makefile.am @@ -53,7 +53,7 @@ noinst_PROGRAMS = lib500 lib501 lib502 lib503 lib504 lib505 lib506 \ lib517 lib518 lib519 lib520 lib521 lib523 lib524 lib525 lib526 lib527 \ lib529 lib530 lib532 lib533 lib536 lib537 lib540 lib541 lib542 lib543 \ lib544 lib545 lib547 lib548 lib549 lib552 lib553 lib554 lib555 lib556 \ - lib539 lib557 + lib539 lib557 lib558 # Dependencies (may need to be overriden) LDADD = $(LIBDIR)/libcurl.la @@ -162,3 +162,5 @@ lib554_SOURCES = lib554.c $(SUPPORTFILES) lib556_SOURCES = lib556.c $(SUPPORTFILES) lib557_SOURCES = lib557.c $(SUPPORTFILES) + +lib558_SOURCES = lib558.c $(SUPPORTFILES) diff --git a/tests/libtest/lib558.c b/tests/libtest/lib558.c new file mode 100644 index 000000000..d5d1d146a --- /dev/null +++ b/tests/libtest/lib558.c @@ -0,0 +1,127 @@ +/***************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * $Id$ + */ + + + +#include "test.h" + +#include "memdebug.h" + +#define TABLE_SIZE 10 + + +struct element_st { + int idx; + int dummy; +}; + + +struct root_st { + struct element_st **table; + int size; +}; + + +static +struct root_st * new_root(void) +{ + struct root_st *r; + + r = malloc(sizeof(struct root_st)); + if(r != NULL) + printf("malloc of root struct OK\n"); + else { + printf("malloc of root struct failed\n"); + return NULL; + } + + r->size = TABLE_SIZE; + r->table = malloc(r->size * sizeof(struct element_st *)); + if(r->table != NULL) + printf("malloc of pointer table OK\n"); + else { + printf("malloc of pointer table failed\n"); + free(r); + return NULL; + } + + return r; +} + + +static +struct element_st * new_element(int idx) +{ + struct element_st *e; + + e = malloc(sizeof(struct element_st)); + if(e != NULL) + printf("malloc of pointed element (idx %d) OK\n", idx); + else { + printf("malloc of pointed element (idx %d) failed\n", idx); + return NULL; + } + + e->idx = e->dummy = idx; + + return e; +} + + +int test(char *URL) +{ + struct root_st *root; + int error; + int i; + (void)URL; /* not used */ + + root = new_root(); + if(!root) + return TEST_ERR_MAJOR_BAD; + + printf("initializing table...\n"); + for (i = 0; i < root->size; ++i) { + root->table[i] = NULL; + } + printf("table initialized OK\n"); + + printf("filling pointer table...\n"); + error = 0; + for (i = 0; i < root->size; ++i) { + root->table[i] = new_element(i); + if(!root->table[i]) { + error = 1; + break; + } + } + if(error) { + printf("pointer table filling failed\n"); + return TEST_ERR_MAJOR_BAD; + } + else + printf("pointer table filling OK\n"); + + printf("freeing pointers in table...\n"); + for (i = 0; i < root->size; ++i) { + if(root->table[i]) + free(root->table[i]); + } + printf("freeing pointers in table OK\n"); + + printf("freeing table...\n"); + free(root->table); + printf("freeing table OK\n"); + + printf("freeing root struct...\n"); + free(root); + printf("freeing root struct OK\n"); + + return 0; /* OK */ +} |