# HG changeset patch # User Mikael Berthe # Date 1171793029 -3600 # Node ID 9726c78a91f38aeaf86463d0d9c04901b6860957 # Parent c4da23bf8958a586586ced9cbdf770c9fcc02ad1 Allow '~' (HOME directory) in config options diff -r c4da23bf8958 -r 9726c78a91f3 mcabber/mcabberrc.example --- 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 diff -r c4da23bf8958 -r 9726c78a91f3 mcabber/src/histolog.c --- 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/"; diff -r c4da23bf8958 -r 9726c78a91f3 mcabber/src/hooks.c --- 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); diff -r c4da23bf8958 -r 9726c78a91f3 mcabber/src/main.c --- 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", diff -r c4da23bf8958 -r 9726c78a91f3 mcabber/src/utils.c --- 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) diff -r c4da23bf8958 -r 9726c78a91f3 mcabber/src/utils.h --- 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);