--- a/mcabber/mcabberrc.example Sat Feb 17 15:14:39 2007 +0100
+++ b/mcabber/mcabberrc.example Sun Feb 18 11:03:49 2007 +0100
@@ -104,7 +104,7 @@
# are used at startup time.
#set logging = 1
#set load_logs = 1
-#set logging_dir = /home/mikael/.mcabber/histo/
+#set logging_dir = ~/.mcabber/histo/
#set logging_ignore_status = 1
# Set log_muc_conf to 1 to enable MUC chatrooms logging (default = 0)
@@ -153,12 +153,12 @@
# $events_command MSG MUC room_id [file] (when receiving a MUC message)
# $events_command STATUS X jabber@id (new buddy status is X)
# See sample script in contrib/ directory.
-#set events_command = /home/mikael/.mcabber/eventcmd
+#set events_command = ~/.mcabber/eventcmd
#
#set events_ignore_active_window = 0
#
#set event_log_files = 0
-#set event_log_dir = /home/mikael/.mcabber/event_files
+#set event_log_dir = ~/.mcabber/event_files
# External command status check
# You can request mcabber to inspect exit status value after each
@@ -173,7 +173,7 @@
# lvl 2: debug logging (XML, etc.)
# Default is level 0, no trace logging
#set tracelog_level = 1
-#set tracelog_file = /home/mikael/mcabber.log
+#set tracelog_file = ~/.mcabber/mcabber.log
# Set the auto-away timeout, in seconds. If set to a value >0,
# mcabber will change your status to away if no real activity is detected
--- a/mcabber/src/histolog.c Sat Feb 17 15:14:39 2007 +0100
+++ b/mcabber/src/histolog.c Sun Feb 18 11:03:49 2007 +0100
@@ -309,17 +309,21 @@
if (enable || loadfiles) {
if (root_dir) {
+ char *xp_root_dir;
int l = strlen(root_dir);
if (l < 1) {
scr_LogPrint(LPRINT_LOGNORM, "Error: logging dir name too short");
UseFileLogging = FileLoadLogs = FALSE;
return;
}
+ xp_root_dir = expand_filename(root_dir);
// RootDir must be slash-terminated
- if (root_dir[l-1] == '/')
- RootDir = g_strdup(root_dir);
- else
- RootDir = g_strdup_printf("%s/", root_dir);
+ if (root_dir[l-1] == '/') {
+ RootDir = xp_root_dir;
+ } else {
+ RootDir = g_strdup_printf("%s/", xp_root_dir);
+ g_free(xp_root_dir);
+ }
} else {
char *home = getenv("HOME");
const char *dir = "/.mcabber/histo/";
--- a/mcabber/src/hooks.c Sat Feb 17 15:14:39 2007 +0100
+++ b/mcabber/src/hooks.c Sun Feb 18 11:03:49 2007 +0100
@@ -305,7 +305,7 @@
extcmd = NULL;
}
if (command)
- extcmd = g_strdup(command);
+ extcmd = expand_filename(command);
}
// hk_ext_cmd()
@@ -352,13 +352,17 @@
if (strchr("MG", type) && data && settings_opt_get_int("event_log_files")) {
int fd;
const char *prefix;
+ char *prefix_xp = NULL;
char *data_locale;
data_locale = from_utf8(data);
prefix = settings_opt_get("event_log_dir");
- if (!prefix)
+ if (prefix)
+ prefix = prefix_xp = expand_filename(prefix);
+ else
prefix = ut_get_tmpdir();
datafname = g_strdup_printf("%s/mcabber-%d.XXXXXX", prefix, getpid());
+ g_free(prefix_xp);
// XXX Some old systems may require us to set umask first.
fd = mkstemp(datafname);
--- a/mcabber/src/main.c Sat Feb 17 15:14:39 2007 +0100
+++ b/mcabber/src/main.c Sun Feb 18 11:03:49 2007 +0100
@@ -71,6 +71,7 @@
int ssl;
int sslverify = -1;
const char *sslvopt = NULL, *cafile = NULL, *capath = NULL, *ciphers = NULL;
+ char *cafile_xp = NULL, *capath_xp = NULL;
unsigned int port;
servername = settings_opt_get("server");
@@ -112,7 +113,11 @@
cafile = capath = ciphers = NULL;
}
#endif
- cw_set_ssl_options(sslverify, cafile, capath, ciphers, servername);
+ if (cafile) cafile_xp = expand_filename(cafile);
+ if (capath) capath_xp = expand_filename(capath);
+ cw_set_ssl_options(sslverify, cafile_xp, capath_xp, ciphers, servername);
+ g_free(cafile_xp);
+ g_free(capath_xp);
/* Connect to server */
scr_LogPrint(LPRINT_NORMAL|LPRINT_DEBUG, "Connecting to server: %s",
--- a/mcabber/src/utils.c Sat Feb 17 15:14:39 2007 +0100
+++ b/mcabber/src/utils.c Sun Feb 18 11:03:49 2007 +0100
@@ -45,6 +45,19 @@
static int DebugEnabled;
static char *FName;
+// expand_filename(filename)
+// Expand "~/" with the $HOME env. variable in a file name.
+// The caller must free the string after use.
+char *expand_filename(const char *fname)
+{
+ if (!strncmp(fname, "~/", 2)) {
+ char *homedir = getenv("HOME");
+ if (homedir)
+ return g_strdup_printf("%s%s", homedir, fname+1);
+ }
+ return g_strdup(fname);
+}
+
void ut_InitDebug(int level, const char *filename)
{
FILE *fp;
@@ -58,16 +71,13 @@
}
if (filename)
- FName = g_strdup(filename);
+ FName = expand_filename(filename);
else {
FName = getenv("HOME");
if (!FName)
- FName = "/tmp/mcabberlog";
+ FName = g_strdup("/tmp/mcabberlog");
else {
- char *tmpname = g_new(char, strlen(FName) + 12);
- strcpy(tmpname, FName);
- strcat(tmpname, "/mcabberlog");
- FName = tmpname;
+ FName = g_strdup_printf("%s/mcabberlog", FName);
}
}
@@ -412,7 +422,7 @@
// Split the string arg into a maximum of n pieces, taking care of
// double quotes.
// Return a null-terminated array of strings. This array should be freed
-// be the caller after use, for example with free_arg_lst().
+// by the caller after use, for example with free_arg_lst().
// If dontstriplast is true, the Nth argument isn't stripped (i.e. no
// processing of quote chars)
char **split_arg(const char *arg, unsigned int n, int dontstriplast)
--- a/mcabber/src/utils.h Sat Feb 17 15:14:39 2007 +0100
+++ b/mcabber/src/utils.h Sun Feb 18 11:03:49 2007 +0100
@@ -17,6 +17,8 @@
void ut_InitDebug(int level, const char *file);
void ut_WriteLog(unsigned int flag, const char *data);
+char *expand_filename(const char *fname);
+
int checkset_perm(const char *name, unsigned int setmode);
const char *ut_get_tmpdir(void);