readonly configuration files
authorHoà Viêt Dinh <dinh.viet.hoa@free.fr>
Tue, 5 Jun 2001 22:56:48 +0000 (22:56 +0000)
committerHoà Viêt Dinh <dinh.viet.hoa@free.fr>
Tue, 5 Jun 2001 22:56:48 +0000 (22:56 +0000)
12 files changed:
ChangeLog.claws
src/compose.c
src/prefs.c
src/prefs.h
src/prefs_account.c
src/prefs_common.c
src/prefs_customheader.c
src/prefs_display_header.c
src/prefs_filter.c
src/prefs_filtering.c
src/prefs_scoring.c
src/quote_fmt_parse.h [new file with mode: 0644]

index 3fd43f0..0b94cf3 100644 (file)
@@ -1,3 +1,22 @@
+2001-06-06 [hoa]
+
+       * added src/quote_fmt_parse.h
+       * src/compose.c
+               removed warnings
+
+       * src/prefs.[ch]
+               don't modify readonly configuration files
+
+       * src/prefs_account.c
+       * src/prefs_common.c
+       * src/prefs_customheader.c
+       * src/prefs_display_header.c
+       * src/prefs_filter.c
+       * src/prefs_filtering.c
+       * src/prefs_scoring.c
+               don't open dialog box when configuration files
+               are readonly
+
 2001-06-05 [sergey]
 
        * configure.in: added AM_PROG_LEX and AC_PROG_YACC.
index 7f133f7..c78da09 100644 (file)
 #  include "rfc2015.h"
 #endif
 
-/* #include "quote_fmt_parse.h" */
+#include "quote_fmt_parse.h"
 
 typedef enum
 {
index 1bc0153..21da865 100644 (file)
@@ -267,6 +267,11 @@ PrefFile *prefs_write_open(const gchar *path)
 
        g_return_val_if_fail(path != NULL, NULL);
 
+       if (prefs_is_readonly(path)) {
+               g_warning(_("no permission - %s\n"), path);
+               return NULL;
+       }
+
        tmppath = g_strconcat(path, ".tmp", NULL);
        if ((fp = fopen(tmppath, "w")) == NULL) {
                FILE_OP_ERROR(tmppath, "fopen");
@@ -768,3 +773,26 @@ void prefs_set_spinbtn(PrefParam *pparam)
                          pparam->type);
        }
 }
+
+gboolean prefs_is_readonly(const gchar * path)
+{
+       if (path == NULL)
+               return TRUE;
+
+       return (access(path, W_OK) != 0 && access(path, F_OK) == 0);
+}
+
+gboolean prefs_rc_is_readonly(const gchar * rcfile)
+{
+       gboolean result;
+       gchar * rcpath;
+
+       if (rcfile == NULL)
+               return TRUE;
+
+       rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, rcfile, NULL);
+       result = prefs_is_readonly(rcpath);
+       g_free(rcpath);
+
+       return result;
+}
index 3a7ed5a..a114795 100644 (file)
@@ -150,5 +150,7 @@ void prefs_set_data_from_toggle     (PrefParam      *pparam);
 void prefs_set_toggle          (PrefParam      *pparam);
 void prefs_set_data_from_spinbtn(PrefParam     *pparam);
 void prefs_set_spinbtn         (PrefParam      *pparam);
+gboolean prefs_is_readonly(const gchar * path);
+gboolean prefs_rc_is_readonly(const gchar * rcfile);
 
 #endif /* __PREFS_H__ */
index 8fcccd9..f9083f5 100644 (file)
@@ -427,6 +427,9 @@ PrefsAccount *prefs_account_open(PrefsAccount *ac_prefs)
 {
        gboolean new_account = FALSE;
 
+       if (prefs_rc_is_readonly(ACCOUNT_RC))
+               return ac_prefs;
+
        debug_print(_("Opening account preferences window...\n"));
 
        inc_autocheck_timer_remove();
index 2d161b5..026b6fc 100644 (file)
@@ -638,6 +638,9 @@ void prefs_common_save_config(void)
 
 void prefs_common_open(void)
 {
+       if (prefs_rc_is_readonly(COMMON_RC))
+               return;
+
        inc_autocheck_timer_remove();
 
        if (!dialog.window) {
index 15fa611..d6ee3db 100644 (file)
@@ -99,6 +99,9 @@ static PrefsAccount *cur_ac = NULL;
 
 void prefs_custom_header_open(PrefsAccount *ac)
 {
+       if (prefs_rc_is_readonly(CUSTOM_HEADER_RC))
+               return;
+
        if (!customhdr.window) {
                prefs_custom_header_create();
        }
index 820a0c5..99beec2 100644 (file)
@@ -140,6 +140,9 @@ static void prefs_display_header_set_default(void)
 
 void prefs_display_header_open(void)
 {
+       if (prefs_rc_is_readonly(DISPLAY_HEADER_RC))
+               return;
+
        if (!dispheader.window) {
                prefs_display_header_create();
        }
index 14f8e6c..24438db 100644 (file)
@@ -119,6 +119,9 @@ static void prefs_filter_ok         (void);
 
 void prefs_filter_open(void)
 {
+       if (prefs_rc_is_readonly(FILTER_RC))
+               return;
+
        inc_autocheck_timer_remove();
 
        if (!filter.window) {
index 3edaf6d..cf111e9 100644 (file)
@@ -202,6 +202,9 @@ gchar * action_text [] = {
 
 void prefs_filtering_open(void)
 {
+       if (prefs_rc_is_readonly(FILTERING_RC))
+               return;
+
        inc_autocheck_timer_remove();
 
        if (!filtering.window) {
index b91be23..7eeddbb 100644 (file)
@@ -111,6 +111,9 @@ static gint cur_kill_score;
 
 void prefs_scoring_open(FolderItem * item)
 {
+       if (prefs_rc_is_readonly(SCORING_RC))
+               return;
+
        inc_autocheck_timer_remove();
 
        if (!scoring.window) {
diff --git a/src/quote_fmt_parse.h b/src/quote_fmt_parse.h
new file mode 100644 (file)
index 0000000..8ac5689
--- /dev/null
@@ -0,0 +1,9 @@
+#ifndef QUOTE_FMT_PARSE_H
+
+#define QUOTE_FMT_PARSE_H
+
+gchar * quote_fmt_get_buffer();
+void quote_fmt_init(MsgInfo * info, gchar * my_quote_str);
+int quote_fmtparse(void);
+
+#endif