changeset 1107:1db3d045e95c

Fix 2 hooks bugs - do not write to file descriptor if mkstemp() fails; - remove bogus mkcmdstr("me ").
author Mikael Berthe <mikael@lilotux.net>
date Thu, 14 Dec 2006 20:39:18 +0100
parents 8e12137fab20
children a0e9eaa9f5b4
files mcabber/src/hooks.c
diffstat 1 files changed, 18 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/mcabber/src/hooks.c	Thu Dec 14 19:17:50 2006 +0100
+++ b/mcabber/src/hooks.c	Thu Dec 14 20:39:18 2006 +0100
@@ -33,6 +33,8 @@
 
 static char *extcmd;
 
+static const char *COMMAND_ME = "/me ";
+
 inline void hk_message_in(const char *bjid, const char *resname,
                           time_t timestamp, const char *msg, const char *type,
                           guint encrypted)
@@ -56,15 +58,14 @@
     if (!resname) {
       message_flags = HBB_PREFIX_INFO | HBB_PREFIX_NOFLAG;
       resname = "";
-      bmsg = g_strdup_printf("~ %s", msg);
+      wmsg = bmsg = g_strdup_printf("~ %s", msg);
     } else {
-      bmsg = g_strdup_printf("<%s> %s", resname, msg);
+      wmsg = bmsg = g_strdup_printf("<%s> %s", resname, msg);
+      if (!strncmp(msg, COMMAND_ME, strlen(COMMAND_ME)))
+        wmsg = mmsg = g_strdup_printf("*%s %s", resname, msg+4);
     }
-    wmsg = bmsg;
-    if (!strncmp(msg, mkcmdstr("me "), strlen(mkcmdstr("me "))))
-      wmsg = mmsg = g_strdup_printf("*%s %s", resname, msg+4);
   } else {
-    if (!strncmp(msg, mkcmdstr("me "), strlen(mkcmdstr("me "))))
+    if (!strncmp(msg, COMMAND_ME, strlen(COMMAND_ME)))
       wmsg = mmsg = g_strdup_printf("*%s %s", bjid, msg+4);
     else
       wmsg = (char*) msg;
@@ -96,7 +97,7 @@
         wmsg = bmsg = g_strdup(msg);
       } else {
         wmsg = bmsg = g_strdup_printf("PRIV#<%s> %s", resname, msg);
-        if (!strncmp(msg, mkcmdstr("me "), strlen(mkcmdstr("me "))))
+        if (!strncmp(msg, COMMAND_ME, strlen(COMMAND_ME)))
           wmsg = mmsg = g_strdup_printf("PRIV#*%s %s", resname, msg+4);
       }
     } else {
@@ -175,9 +176,11 @@
 
   if (nick) {
     wmsg = bmsg = g_strdup_printf("PRIV#<%s> %s", nick, msg);
+    if (!strncmp(msg, COMMAND_ME, strlen(COMMAND_ME)))
+      wmsg = mmsg = g_strdup_printf("PRIV#*%s %s", nick, msg+4);
   } else {
     wmsg = (char*)msg;
-    if (!strncmp(msg, mkcmdstr("me "), strlen(mkcmdstr("me ")))) {
+    if (!strncmp(msg, COMMAND_ME, strlen(COMMAND_ME))) {
       const char *myid = settings_opt_get("username");
       if (myid)
         wmsg = mmsg = g_strdup_printf("*%s %s", settings_opt_get("username"),
@@ -191,7 +194,8 @@
   scr_WriteOutgoingMessage(bjid, wmsg, (encrypted ? HBB_PREFIX_PGPCRYPT : 0));
 
   // We don't log private messages
-  if (!nick) hlog_write_message(bjid, timestamp, TRUE, msg);
+  if (!nick)
+    hlog_write_message(bjid, timestamp, TRUE, msg);
 
   // External command
   hk_ext_cmd(bjid, 'M', 'S', NULL);
@@ -344,11 +348,12 @@
       datafname = NULL;
       scr_LogPrint(LPRINT_LOGNORM,
                    "Unable to create temp file for external command.");
+    } else {
+      write(fd, data_locale, strlen(data_locale));
+      write(fd, "\n", 1);
+      close(fd);
+      arg_data = datafname;
     }
-    write(fd, data_locale, strlen(data_locale));
-    write(fd, "\n", 1);
-    close(fd);
-    arg_data = datafname;
     g_free(data_locale);
   }