changeset 1167:9726c78a91f3

Allow '~' (HOME directory) in config options
author Mikael Berthe <mikael@lilotux.net>
date Sun, 18 Feb 2007 11:03:49 +0100
parents c4da23bf8958
children eb05f960613f
files mcabber/mcabberrc.example mcabber/src/histolog.c mcabber/src/hooks.c mcabber/src/main.c mcabber/src/utils.c mcabber/src/utils.h
diffstat 6 files changed, 43 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- 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);