1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <unistd.h>
5
6 #define LEN 90
7
8 struct basket {
9 char name[LEN];
10 struct item *item;
11 };
12
13 struct item {
14 struct item *next;
15 char name[LEN];
16 };
17
18 void init_basket( struct basket *b ) {
19 strncpy( b->name, "Basket", LEN );
20 b->item = NULL;
21 }
22
23 void init_basket_item( struct item *i ) {
24 strncpy( i->name, "", LEN );
25 i->next = NULL;
26 }
27
28 struct item *last_item( struct basket *b ) {
29 struct item *ptr = NULL;
30 struct item *p = NULL;
31 ptr = b->item;
32 if( ptr == NULL ) {
33 printf( "Returning null\n" );
34 return( ptr );
35 }
36
37 while( ptr != NULL ) {
38 p = ptr;
39 ptr = ptr->next;
40
41 }
42 return( p );
43 }
44
45 struct item *add_item( struct basket *b ) {
46 struct item *ptr,*p;
47 ptr = last_item( b );
48 p = malloc( sizeof( struct item ) );
49 init_basket_item( p );
50 strncpy( p->name, "Created", LEN );
51
52 /* is this the first item */
53 if( ptr == NULL ) {
54 printf( "Setting b->item\n" );
55 b->item = p;
56 }
57 else {
58 ptr->next = p;
59 }
60 return( p );
61 }
62
63 int main( int argc, char *argv[] ) {
64 struct basket *b = malloc( sizeof( struct basket ) );
65 struct item *ii;// = malloc( sizeof( struct item ) );
66 struct item *iii;// = malloc( sizeof( struct item ) );
67 init_basket( b );
68
69 ii = add_item( b );
70 iii = add_item( b );
71 strncpy( ii->name, "C", LEN );
72
73 printf( "Basket name: %s\n", b->name );
74 printf( "Item name: %s\n", b->item->name );
75 printf( "Item name: %s\n", b->item->next->name );
76
77 free( b );
78 return(0);
79 }
80