Mercurial > ~mikael > mcabber > hg
comparison mcabber/mcabber/settings.c @ 2253:5a107c907e71
Read $HOME/.mcabberrc if there is no mcabber configuration directory
This was broken by ccd4ffa41a1b.
This patch should fix issue #146.
author | Mikael Berthe <mikael@lilotux.net> |
---|---|
date | Sat, 27 Feb 2016 11:28:24 +0100 |
parents | ccd4ffa41a1b |
children | f5402d705f67 |
comparison
equal
deleted
inserted
replaced
2252:2c7cca6dec6a | 2253:5a107c907e71 |
---|---|
93 // The directory is looked up for only once (and the string is never freed, | 93 // The directory is looked up for only once (and the string is never freed, |
94 // but we might change this later). | 94 // but we might change this later). |
95 const gchar *settings_get_mcabber_config_dir(void) | 95 const gchar *settings_get_mcabber_config_dir(void) |
96 { | 96 { |
97 static char *config_dir; | 97 static char *config_dir; |
98 char *home_dir; | 98 const char *home_dir; |
99 GString *sfilename; | 99 GString *sfilename; |
100 FILE *fp; | 100 FILE *fp; |
101 | 101 |
102 if (config_dir) | 102 if (config_dir) |
103 return config_dir; | 103 return config_dir; |
148 } | 148 } |
149 g_free(xdg_config_dir); | 149 g_free(xdg_config_dir); |
150 } | 150 } |
151 } | 151 } |
152 | 152 |
153 // Last guess: home directory itself... | 153 if (!config_dir) |
154 if (!config_dir) { | 154 scr_log_print(LPRINT_NORMAL, "Cannot find configuration directory!\n"); |
155 g_string_printf(sfilename, "%s/.mcabberrc", home_dir); | |
156 if ((fp = fopen(sfilename->str, "r")) != NULL) { | |
157 fclose(fp); | |
158 config_dir = g_strdup(home_dir); | |
159 } else { | |
160 scr_log_print(LPRINT_NORMAL, "Cannot find/open any configuration file!\n"); | |
161 } | |
162 } | |
163 | 155 |
164 g_string_free(sfilename, TRUE); | 156 g_string_free(sfilename, TRUE); |
165 return config_dir; | 157 return config_dir; |
166 } | 158 } |
167 | 159 |
189 scr_LogPrint(LPRINT_LOGNORM, "No file name provided"); | 181 scr_LogPrint(LPRINT_LOGNORM, "No file name provided"); |
190 return -1; | 182 return -1; |
191 } | 183 } |
192 | 184 |
193 mcabber_conf_dir = settings_get_mcabber_config_dir(); | 185 mcabber_conf_dir = settings_get_mcabber_config_dir(); |
194 if (!mcabber_conf_dir) | 186 if (!mcabber_conf_dir) { |
195 return -1; | 187 // Try home directory |
196 | 188 const char *home_dir = getenv("HOME"); |
197 def_filename = g_strdup_printf("%s/mcabberrc", mcabber_conf_dir); | 189 if (!home_dir) { |
190 scr_log_print(LPRINT_NORMAL, "Cannot find any configuration file!\n"); | |
191 err = -1; | |
192 goto cfg_read_file_return; | |
193 } | |
194 def_filename = g_strdup_printf("%s/.mcabberrc", home_dir); | |
195 } else { | |
196 def_filename = g_strdup_printf("%s/mcabberrc", mcabber_conf_dir); | |
197 } | |
198 | |
198 if ((fp = fopen(def_filename, "r")) == NULL) { | 199 if ((fp = fopen(def_filename, "r")) == NULL) { |
199 fprintf(stderr, "Cannot open config file!\n"); | 200 fprintf(stderr, "Cannot open config file!\n"); |
200 g_free(def_filename); | 201 g_free(def_filename); |
201 err = -1; | 202 err = -1; |
202 goto cfg_read_file_return; | 203 goto cfg_read_file_return; |
203 } | 204 } |
204 // Check configuration file permissions | 205 // Check configuration file permissions |
205 // As it could contain sensitive data, we make it user-readable only. | 206 // As it could contain sensitive data, we make it user-readable only. |
206 checkset_perm(def_filename, TRUE); | 207 checkset_perm(def_filename, TRUE); |
207 scr_log_print(LPRINT_LOGNORM, "Reading %s", def_filename); | 208 scr_log_print(LPRINT_LOGNORM, "Reading %s", def_filename); |
208 // Check mcabber dir. Here we just warn, we don't change the modes. | 209 |
209 checkset_perm(mcabber_conf_dir, FALSE); | 210 // Check mcabber directory permissions. |
211 // Here we just warn, we don't change the mode. | |
212 if (mcabber_conf_dir) | |
213 checkset_perm(mcabber_conf_dir, FALSE); | |
214 | |
210 g_free(def_filename); | 215 g_free(def_filename); |
211 } else { | 216 } else { |
212 // filename was specified | 217 // filename was specified |
213 if ((fp = fopen(filename, "r")) == NULL) { | 218 if ((fp = fopen(filename, "r")) == NULL) { |
214 const char *msg = "Cannot open configuration file"; | 219 const char *msg = "Cannot open configuration file"; |