Files
lcdproc/server/client_data.c
T

103 lines
2.1 KiB
C
Raw Normal View History

1999-12-09 23:15:14 +00:00
/*
* client_data.c
* This file is part of LCDd, the lcdproc server.
*
* This file is released under the GNU General Public License. Refer to the
* COPYING file distributed with this package.
*
* Copyright (c) 1999, William Ferrell, Scott Scriven
*
*
* Creates and destroys a client's data structures. These are mainly
* its name, screen list, and menu list.
*
1999-12-09 23:15:14 +00:00
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
2001-11-29 14:09:13 +00:00
#include "shared/report.h"
1999-12-09 23:15:14 +00:00
#include "client_data.h"
#include "screen.h"
#include "screenlist.h"
#define ResetScreenList(a) LL_Rewind(a)
#define NewScreen LL_new
#define NextScreen(a) (screen *)LL_Get(a)
#define MoreScreens(a) (LL_Next(a) == 0)
#define DestroyScreenList(a) LL_Destroy(a)
int
client_data_init (client_data * d)
1999-12-09 23:15:14 +00:00
{
2000-04-03 22:13:57 +00:00
if (!d)
return -1;
1999-12-09 23:15:14 +00:00
2000-04-03 22:13:57 +00:00
d->ack = 0;
d->name = NULL;
d->client_keys = NULL;
1999-12-09 23:15:14 +00:00
d->screenlist = NewScreen();
2000-04-03 22:13:57 +00:00
if (!d->screenlist) {
2001-11-29 14:09:13 +00:00
report( RPT_ERR, "client_data_init: Error allocating screenlist");
2000-04-03 22:13:57 +00:00
return -1;
}
/* TODO: this section... (client menus)
d->menulist = LL_new();
if(!d->menulist)
{
2001-11-29 14:09:13 +00:00
report( RPT_ERR, "client_data_init: Error allocating menulist");
2000-04-03 22:13:57 +00:00
return -1;
}
*/
return 0;
1999-12-09 23:15:14 +00:00
}
int
client_data_destroy (client_data * d)
1999-12-09 23:15:14 +00:00
{
2000-04-03 22:13:57 +00:00
screen *s;
1999-12-09 23:15:14 +00:00
2001-11-29 14:09:13 +00:00
report( RPT_INFO, "client_data_destroy");
2000-04-03 22:13:57 +00:00
if (!d)
return -1;
1999-12-09 23:15:14 +00:00
2000-04-03 22:13:57 +00:00
d->ack = 0;
1999-12-09 23:15:14 +00:00
2001-12-30 00:15:25 +00:00
/* Clean up the name...*/
2000-04-03 22:13:57 +00:00
if (d->name)
free (d->name);
1999-12-09 23:15:14 +00:00
2001-12-30 00:15:25 +00:00
/* Clean up the key list...*/
if (d->client_keys)
free (d->client_keys);
2001-12-30 00:15:25 +00:00
/* Clean up the screenlist...*/
2001-11-29 14:09:13 +00:00
debug( RPT_DEBUG, "client_data_destroy: Cleaning screenlist");
ResetScreenList (d->screenlist);
2000-04-03 22:13:57 +00:00
do {
s = NextScreen(d->screenlist);
2000-04-03 22:13:57 +00:00
if (s) {
2001-11-29 14:09:13 +00:00
debug( RPT_DEBUG, "client_data_destroy: removing screen %s", s->id);
1999-12-09 23:15:14 +00:00
2001-12-30 00:15:25 +00:00
/* FIXME? This shouldn't be handled here...
* Now, remove it from the screenlist...*/
2000-04-03 22:13:57 +00:00
if (screenlist_remove_all (s) < 0) {
2001-12-30 00:15:25 +00:00
/* Not a serious error..*/
2001-11-29 14:09:13 +00:00
report( RPT_ERR, "client_data_destroy: Error dequeueing screen");
2000-04-03 22:13:57 +00:00
return 0;
}
2001-12-30 00:15:25 +00:00
/* Free its memory...*/
2000-04-03 22:13:57 +00:00
screen_destroy (s);
}
} while (MoreScreens(d->screenlist));
DestroyScreenList(d->screenlist);
2001-12-30 00:15:25 +00:00
/* TODO: clean up the rest of the data...*/
1999-12-09 23:15:14 +00:00
2000-04-03 22:13:57 +00:00
return 0;
1999-12-09 23:15:14 +00:00
}