/*
- * preferences.c
+ * $Id$
*
* Manage user preferences with a little help from the Citadel server.
*
- * $Id$
*/
#include <ctype.h>
char buf[SIZ];
long msgnum = 0L;
- lprintf(9, "entering load_preferences()\n");
-
- serv_printf("GOTO My Citadel Config");
+ serv_printf("GOTO %s", USERCONFIGROOM);
serv_gets(buf);
if (buf[0] != '2') return;
/* Go back to the room we're supposed to be in */
serv_printf("GOTO %s", WC->wc_roomname);
serv_gets(buf);
- lprintf(9, "exiting load_preferences()\n");
}
-void save_preferences(void) {
+/*
+ * Goto the user's configuration room, creating it if necessary.
+ * Returns 0 on success or nonzero upon failure.
+ */
+int goto_config_room(void) {
char buf[SIZ];
- long msgnum = 0L;
- lprintf(9, "entering save_preferences()\n");
- serv_printf("GOTO My Citadel Config");
+ serv_printf("GOTO %s", USERCONFIGROOM);
serv_gets(buf);
if (buf[0] != '2') { /* try to create the config room if not there */
- serv_printf("CRE8 1|My Citadel Config|4|0");
+ serv_printf("CRE8 1|%s|4|0", USERCONFIGROOM);
serv_gets(buf);
- serv_printf("GOTO My Citadel Config");
+ serv_printf("GOTO %s", USERCONFIGROOM);
serv_gets(buf);
- if (buf[0] != '2') return; /* oh well. */
+ if (buf[0] != '2') return(1);
}
+ return(0);
+}
+
+
+void save_preferences(void) {
+ char buf[SIZ];
+ long msgnum = 0L;
+ if (goto_config_room() != 0) return; /* oh well. */
serv_puts("MSGS ALL|0|1");
serv_gets(buf);
if (buf[0] == '8') {
/* Go back to the room we're supposed to be in */
serv_printf("GOTO %s", WC->wc_roomname);
serv_gets(buf);
- lprintf(9, "exiting save_preferences()\n");
}
-void get_preference(char *key, char *value) {
+void get_preference(char *key, char *value, size_t value_len) {
int num_prefs;
int i;
char buf[SIZ];
char thiskey[SIZ];
- lprintf(9, "entering get_preference(%s)\n", key);
strcpy(value, "");
num_prefs = num_tokens(WC->preferences, '\n');
for (i=0; i<num_prefs; ++i) {
- extract_token(buf, WC->preferences, i, '\n');
- extract_token(thiskey, buf, 0, '|');
+ extract_token(buf, WC->preferences, i, '\n', sizeof buf);
+ extract_token(thiskey, buf, 0, '|', sizeof thiskey);
if (!strcasecmp(thiskey, key)) {
- extract_token(value, buf, 1, '|');
+ extract_token(value, buf, 1, '|', value_len);
}
}
- lprintf(9, "exiting get_preference() = %s\n", value);
}
void set_preference(char *key, char *value) {
char thiskey[SIZ];
char *newprefs = NULL;
- lprintf(9, "entering set_preference(%s, %s)\n", key, value);
num_prefs = num_tokens(WC->preferences, '\n');
for (i=0; i<num_prefs; ++i) {
- extract_token(buf, WC->preferences, i, '\n');
+ extract_token(buf, WC->preferences, i, '\n', sizeof buf);
if (num_tokens(buf, '|') == 2) {
- extract_token(thiskey, buf, 0, '|');
+ extract_token(thiskey, buf, 0, '|', sizeof thiskey);
if (strcasecmp(thiskey, key)) {
if (newprefs == NULL) newprefs = strdup("");
newprefs = realloc(newprefs,
WC->preferences = newprefs;
save_preferences();
- lprintf(9, "exiting set_preference()\n");
}