/* client_data.c Creates and destroys a client's data structures. These are mainly its name, screen list, and menu list. */ #include #include #include #include "../shared/debug.h" #include "client_data.h" #include "screen.h" #include "screenlist.h" int client_data_init (client_data * d) { if (!d) return -1; d->ack = 0; d->name = NULL; d->screenlist = LL_new (); if (!d->screenlist) { fprintf (stderr, "client_data_init: Error allocating screenlist\n"); return -1; } /* TODO: this section... (client menus) d->menulist = LL_new(); if(!d->menulist) { fprintf(stderr, "client_data_init: Error allocating menulist\n"); return -1; } */ return 0; } int client_data_destroy (client_data * d) { screen *s; debug ("client_data_destroy\n"); if (!d) return -1; d->ack = 0; // Clean up the name... if (d->name) free (d->name); // Clean up the screenlist... debug ("client_data_destroy: Cleaning screenlist\n"); LL_Rewind (d->screenlist); do { s = (screen *) LL_Get (d->screenlist); if (s) { debug ("client_data_destroy: removing screen %s\n", s->id); // FIXME? This shouldn't be handled here... // Now, remove it from the screenlist... if (screenlist_remove_all (s) < 0) { // Not a serious error.. fprintf (stderr, "client_data_destroy: Error dequeueing screen\n"); return 0; } // Free its memory... screen_destroy (s); } } while (LL_Next (d->screenlist) == 0); LL_Destroy (d->screenlist); // TODO: clean up the rest of the data... return 0; }