128 lines
2.3 KiB
C
128 lines
2.3 KiB
C
/*****************************************************************************
|
|
* _ _ ____ _
|
|
* 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 */
|
|
}
|