- int num_prefs;
- int i;
- char buf[SIZ];
- char thiskey[SIZ];
- char *newprefs = NULL;
- size_t newprefs_len = 0;
-
- newprefs_len = strlen(key) + strlen(value) + 10;
- if (WC->preferences != NULL) newprefs_len += strlen(WC->preferences);
- newprefs = malloc(newprefs_len);
- if (newprefs == NULL) return;
- strcpy(newprefs, "");
-
- num_prefs = num_tokens(WC->preferences, '\n');
- for (i=0; i<num_prefs; ++i) {
- extract_token(buf, WC->preferences, i, '\n', sizeof buf);
- if (num_tokens(buf, '|') == 2) {
- extract_token(thiskey, buf, 0, '|', sizeof thiskey);
- if (strcasecmp(thiskey, key)) {
- strcat(newprefs, buf);
- strcat(newprefs, "\n");
- }
- }
- }
-
- sprintf(&newprefs[strlen(newprefs)], "%s|%s\n", key, value);
- free(WC->preferences);
- WC->preferences = newprefs;