getpwnam_error:
* getpwnam allocates memory for the struct and there is no way to free it.
* it seems to be a bug in the library function.
committer: Markus Bröker <mbroeker@largo.homelinux.org>
/**
* test/demos/tree.c
* Copyright (C) 2008 Markus Broeker
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define GETRANDOM(max) (1+(int)((float)max*rand()/RAND_MAX+1.0))
struct T {
int data;
struct T *next;
};
typedef struct T T;
T *make_list (int elements, int rand_max)
{
int i;
T *t;
T *actual;
T *first = NULL;
srand (time (NULL));
if ((t = malloc (sizeof (T) + 1)) == NULL) {
perror ("MALLOC");
return first;
}
t->data = GETRANDOM (rand_max);
t->next = NULL;
first = t;
for (i = 1; i < elements; i++) {
if ((actual = malloc (sizeof (T) + 1)) == NULL)
break;
actual->data = GETRANDOM (rand_max);
actual->next = NULL;
t->next = actual;
t = actual;
}
return first;
}
int main (int argc, char **argv)
{
T *t, *actual;
if (argc != 3) {
printf ("Usage: %s elements rand_max\n", argv[0]);
return EXIT_SUCCESS;
}
t = make_list (atoi (argv[1]), atoi (argv[2]));
while (t) {
printf ("%d\n", t->data);
actual = t->next;
free (t);
t = actual;
};
return EXIT_SUCCESS;
}