/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2007 Hiroyuki Yamamoto and the Claws Mail team
+ * Copyright (C) 1999-2012 Hiroyuki Yamamoto and the Claws Mail team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#ifdef HAVE_CONFIG_H
# include "config.h"
+#include "claws-features.h"
#endif
#define _GNU_SOURCE
#include "utils.h"
#include "gtkutils.h"
#include "passcrypt.h"
-#include "base64.h"
#include "codeconv.h"
#define CL(x) (((gulong) (x) >> (gulong) 8) & 0xFFUL)
static gboolean prefs_read_config_from_cache(PrefParam *param, const gchar *label,
const gchar *rcfile);
+static void prefs_config_parse_one_line(PrefParam *param,
+ const gchar *buf);
+
void prefs_read_config(PrefParam *param, const gchar *label,
const gchar *rcfile, const gchar *encoding)
{
gchar buf[PREFSBUFSIZE];
gchar *block_label;
- g_return_if_fail(param != NULL);
- g_return_if_fail(label != NULL);
- g_return_if_fail(rcfile != NULL);
+ cm_return_if_fail(param != NULL);
+ cm_return_if_fail(label != NULL);
+ cm_return_if_fail(rcfile != NULL);
if (encoding != NULL)
g_warning("Encoding is ignored\n");
fclose(fp);
}
-void prefs_config_parse_one_line(PrefParam *param, const gchar *buf)
+static void prefs_config_parse_one_line(PrefParam *param, const gchar *buf)
{
gint i;
gint name_len;
(gushort)atoi(value);
break;
case P_COLOR:
- if (gdk_color_parse(value, &color))
+ if (gdk_color_parse(value, &color)) {
*((gulong *)param[i].data) = RGB_FROM_GDK_COLOR(color);
+ }
else
/* be compatible and accept ints */
*((gulong *)param[i].data) = strtoul(value, 0, 10);
case P_PASSWORD:
g_free(*((gchar **)param[i].data));
if (value[0] == '!') {
- gchar tmp[1024];
- gint len;
+ gchar *tmp;
+ gsize len;
- len = base64_decode(tmp, &value[1], strlen(value) - 1);
+ tmp = g_base64_decode_zero(&value[1], &len);
passcrypt_decrypt(tmp, len);
- tmp[len] = '\0';
+
*((gchar **)param[i].data) =
*tmp ? g_strdup(tmp) : NULL;
+ g_free(tmp);
} else {
*((gchar **)param[i].data) =
*value ? g_strdup(value) : NULL;
gchar *block_label = NULL;
gboolean block_matched = FALSE;
- g_return_if_fail(param != NULL);
- g_return_if_fail(label != NULL);
- g_return_if_fail(rcfile != NULL);
+ cm_return_if_fail(param != NULL);
+ cm_return_if_fail(label != NULL);
+ cm_return_if_fail(rcfile != NULL);
rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, rcfile, NULL);
if ((orig_fp = g_fopen(rcpath, "rb")) == NULL) {
break;
case P_PASSWORD:
{
- gchar *tmp = NULL, tmp2[1024] = {0};
+ gchar *tmp = NULL, *tmp2 = NULL;
tmp = *((gchar **)param[i].data);
if (tmp) {
tmp = g_strdup(tmp);
len = strlen(tmp);
passcrypt_encrypt(tmp, len);
- base64_encode(tmp2, tmp, len);
+ tmp2 = g_base64_encode(tmp, len);
g_free(tmp);
tmp = tmp2;
}
g_snprintf(buf, sizeof(buf), "%s=!%s\n", param[i].name,
tmp ?
tmp : "");
+ g_free(tmp);
}
break;
default:
gint i;
GdkColor color;
- g_return_if_fail(param != NULL);
+ cm_return_if_fail(param != NULL);
for (i = 0; param[i].name != NULL; i++) {
if (!param[i].data) continue;
g_strconcat(get_home_dir(),
param[i].defval + 1,
NULL);
- else if (param[i].defval[0] != '\0')
+ else
*((gchar **)param[i].data) =
g_strdup(param[i].defval);
- else
- *((gchar **)param[i].data) = NULL;
} else
*((gchar **)param[i].data) = NULL;
break;
{
gint i;
- g_return_if_fail(param != NULL);
+ cm_return_if_fail(param != NULL);
for (i = 0; param[i].name != NULL; i++) {
if (!param[i].data) continue;
}
}
-void prefs_dialog_create(PrefsDialog *dialog)
-{
- GtkWidget *window;
- GtkWidget *vbox;
- GtkWidget *notebook;
-
- GtkWidget *confirm_area;
- GtkWidget *ok_btn;
- GtkWidget *cancel_btn;
- GtkWidget *apply_btn;
-
- g_return_if_fail(dialog != NULL);
-
- window = gtkut_window_new(GTK_WINDOW_TOPLEVEL, "prefs_gtk");
- gtk_container_set_border_width (GTK_CONTAINER (window), 8);
- gtk_window_set_position (GTK_WINDOW(window), GTK_WIN_POS_CENTER);
- gtk_window_set_modal (GTK_WINDOW (window), TRUE);
- gtk_window_set_resizable(GTK_WINDOW(window), TRUE);
-
- vbox = gtk_vbox_new (FALSE, 6);
- gtk_widget_show(vbox);
- gtk_container_add (GTK_CONTAINER (window), vbox);
-
- notebook = gtk_notebook_new ();
- gtk_widget_show(notebook);
- gtk_box_pack_start (GTK_BOX (vbox), notebook, TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (notebook), 2);
- /* GTK_WIDGET_UNSET_FLAGS (notebook, GTK_CAN_FOCUS); */
- gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook), TRUE);
-
- gtk_notebook_popup_enable (GTK_NOTEBOOK (notebook));
-
- gtkut_stock_button_set_create(&confirm_area,
- &ok_btn, GTK_STOCK_OK,
- &cancel_btn, GTK_STOCK_CANCEL,
- &apply_btn, GTK_STOCK_APPLY);
- gtk_widget_show(confirm_area);
- gtk_box_pack_end (GTK_BOX(vbox), confirm_area, FALSE, FALSE, 0);
- gtk_widget_grab_default(ok_btn);
-
- dialog->window = window;
- dialog->notebook = notebook;
- dialog->ok_btn = ok_btn;
- dialog->cancel_btn = cancel_btn;
- dialog->apply_btn = apply_btn;
-}
-
-void prefs_dialog_destroy(PrefsDialog *dialog)
-{
- gtk_widget_destroy(dialog->window);
- dialog->window = NULL;
- dialog->notebook = NULL;
- dialog->ok_btn = NULL;
- dialog->cancel_btn = NULL;
- dialog->apply_btn = NULL;
-}
-
void prefs_button_toggled(GtkToggleButton *toggle_btn, GtkWidget *widget)
{
gboolean is_active;
gchar **str;
const gchar *entry_str;
- g_return_if_fail(*pparam->widget != NULL);
+ cm_return_if_fail(*pparam->widget != NULL);
entry_str = gtk_entry_get_text(GTK_ENTRY(*pparam->widget));
{
gchar **str;
- g_return_if_fail(*pparam->widget != NULL);
+ cm_return_if_fail(*pparam->widget != NULL);
switch (pparam->type) {
case P_STRING:
{
gchar **str;
- g_return_if_fail(*pparam->widget != NULL);
+ cm_return_if_fail(*pparam->widget != NULL);
switch (pparam->type) {
case P_STRING:
{
gchar **str;
- g_return_if_fail(*pparam->widget != NULL);
+ cm_return_if_fail(*pparam->widget != NULL);
switch (pparam->type) {
case P_STRING:
gchar *text = NULL, *tp = NULL;
gchar *tmp, *tmpp;
- g_return_if_fail(*pparam->widget != NULL);
+ cm_return_if_fail(*pparam->widget != NULL);
switch (pparam->type) {
case P_STRING:
tp = text = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
}
- g_return_if_fail (tp && text);
+ cm_return_if_fail (tp && text);
if (text[0] == '\0') {
*str = NULL;
{
gchar **str;
- g_return_if_fail(*pparam->widget != NULL);
+ cm_return_if_fail(*pparam->widget != NULL);
switch (pparam->type) {
case P_STRING:
GtkTextBuffer *buffer;
GtkTextIter iter;
- g_return_if_fail(*pparam->widget != NULL);
+ cm_return_if_fail(*pparam->widget != NULL);
switch (pparam->type) {
case P_STRING:
{
gchar **str;
- g_return_if_fail(*pparam->widget != NULL);
+ cm_return_if_fail(*pparam->widget != NULL);
switch (pparam->type) {
case P_STRING:
void prefs_set_data_from_toggle(PrefParam *pparam)
{
- g_return_if_fail(pparam->type == P_BOOL);
- g_return_if_fail(*pparam->widget != NULL);
+ cm_return_if_fail(pparam->type == P_BOOL);
+ cm_return_if_fail(*pparam->widget != NULL);
*((gboolean *)pparam->data) =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(*pparam->widget));
void prefs_set_toggle(PrefParam *pparam)
{
- g_return_if_fail(pparam->type == P_BOOL);
- g_return_if_fail(*pparam->widget != NULL);
+ cm_return_if_fail(pparam->type == P_BOOL);
+ cm_return_if_fail(*pparam->widget != NULL);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(*pparam->widget),
*((gboolean *)pparam->data));
void prefs_set_data_from_spinbtn(PrefParam *pparam)
{
- g_return_if_fail(*pparam->widget != NULL);
+ cm_return_if_fail(*pparam->widget != NULL);
switch (pparam->type) {
case P_INT:
void prefs_set_spinbtn(PrefParam *pparam)
{
- g_return_if_fail(*pparam->widget != NULL);
+ cm_return_if_fail(*pparam->widget != NULL);
switch (pparam->type) {
case P_INT:
void prefs_gtk_open(void)
{
prefswindow_open(_("Preferences"), prefs_pages, NULL,
- &prefs_common.prefswin_width, &prefs_common.prefswin_height);
+ &prefs_common.prefswin_width, &prefs_common.prefswin_height,
+ NULL, NULL);
}
void prefs_gtk_register_page(PrefsPage *page)
static int prefs_cache_sections(GHashTable *file_cache, const gchar *rcfile)
{
- FILE *fp = g_fopen(rcfile, "rb");
+ FILE *fp = NULL;
gchar buf[PREFSBUFSIZE];
GHashTable *section_cache = NULL;
+ if (rcfile)
+ fp = g_fopen(rcfile, "rb");
if (!fp) {
- debug_print("cache: %s: %s", rcfile, strerror(errno));
+ debug_print("cache: %s: %s\n", rcfile?rcfile:"(null)", strerror(errno));
return -1;
}
GHashTable *file_cache = g_hash_table_new_full(g_str_hash, g_str_equal,
g_free, prefs_destroy_file_cache);
- debug_print("new file '%s'\n", rcfile);
+ debug_print("new file '%s'\n", rcfile?rcfile:"(null)");
g_hash_table_insert(whole_cache, g_strdup(rcfile), file_cache);
return prefs_cache_sections(file_cache, rcfile);
sections_table = g_hash_table_lookup(whole_cache, rcfile);
if (sections_table == NULL) {
- g_warning("Can't find %s in the whole cache\n", rcfile);
+ g_warning("Can't find %s in the whole cache\n", rcfile?rcfile:"(null)");
return FALSE;
}
values_table = g_hash_table_lookup(sections_table, label);
if (values_table == NULL) {
- debug_print("no '%s' section in '%s' cache\n", label, rcfile);
+ debug_print("no '%s' section in '%s' cache\n", label?label:"(null)", rcfile?rcfile:"(null)");
return TRUE;
}
g_hash_table_foreach(values_table, prefs_parse_cache, param);