Mon Jun 18 22:21:37 CEST 2007 Jochen Eisinger <coffee@silcnet.org>
[silc.git] / lib / silcclient / command_reply.c
index 37384977c1e04cf8245669a25f5630a38baff8ba..13fab10a168ad506500ec3996b8be031ef4c3ccd 100644 (file)
@@ -32,7 +32,7 @@
  * received but ID entry does not exist, NULL is sent.
  */
 
-#include "silc.h"
+#include "silcincludes.h"
 #include "silcclient.h"
 #include "client_internal.h"
 
@@ -131,7 +131,7 @@ void silc_client_command_reply_process(SilcClient client,
       /* No specific identifier for command reply, call first one found */
       (*reply)(ctx, NULL);
     else
-      silc_free(ctx);
+      silc_client_command_reply_free(ctx);
   }
 }
 
@@ -155,6 +155,8 @@ void silc_client_command_reply_free(SilcClientCommandReplyContext cmd)
   SILC_LOG_DEBUG(("Command reply context %p refcnt %d->%d", cmd,
                  cmd->users + 1, cmd->users));
   if (cmd->users < 1) {
+    if (cmd->callbacks)
+      silc_free(cmd->callbacks);
     silc_command_payload_free(cmd->payload);
     silc_free(cmd);
   }
@@ -163,7 +165,7 @@ void silc_client_command_reply_free(SilcClientCommandReplyContext cmd)
 void
 silc_client_command_reply_whois_save(SilcClientCommandReplyContext cmd,
                                     SilcStatus status,
-                                    SilcBool notify)
+                                    bool notify)
 {
   SilcClientConnection conn = (SilcClientConnection)cmd->sock->user_data;
   SilcClientID *client_id;
@@ -174,7 +176,7 @@ silc_client_command_reply_whois_save(SilcClientCommandReplyContext cmd,
   char *realname = NULL;
   SilcUInt32 idle = 0, mode = 0;
   SilcBufferStruct channels, ch_user_modes;
-  SilcBool has_channels = FALSE, has_user_modes = FALSE;
+  bool has_channels = FALSE, has_user_modes = FALSE;
   unsigned char *fingerprint;
   SilcUInt32 fingerprint_len;
 
@@ -371,7 +373,7 @@ SILC_CLIENT_CMD_REPLY_FUNC(whowas)
 static void
 silc_client_command_reply_identify_save(SilcClientCommandReplyContext cmd,
                                        SilcStatus status,
-                                       SilcBool notify)
+                                       bool notify)
 {
   SilcClientConnection conn = (SilcClientConnection)cmd->sock->user_data;
   SilcClient client = cmd->client;
@@ -934,7 +936,7 @@ SILC_CLIENT_CMD_REPLY_FUNC(ping)
 {
   SilcClientCommandReplyContext cmd = (SilcClientCommandReplyContext)context;
   SilcClientConnection conn = (SilcClientConnection)cmd->sock->user_data;
-  void *id;
+  void *id = NULL;
   int i;
   time_t diff, curtime;
 
@@ -972,12 +974,12 @@ SILC_CLIENT_CMD_REPLY_FUNC(ping)
     }
   }
 
-  silc_free(id);
-
   /* Notify application */
   COMMAND_REPLY((SILC_ARGS));
 
  out:
+  if (id)
+    silc_free(id);
   SILC_CLIENT_PENDING_EXEC(cmd, SILC_COMMAND_PING);
   silc_client_command_reply_free(cmd);
 }
@@ -1737,8 +1739,8 @@ static void silc_client_command_reply_users_cb(SilcClient client,
 static int
 silc_client_command_reply_users_save(SilcClientCommandReplyContext cmd,
                                     SilcStatus status,
-                                    SilcBool notify,
-                                    SilcBool resolve,
+                                    bool notify,
+                                    bool resolve,
                                     SilcGetChannelCallback get_channel,
                                     SilcCommandCb get_clients)
 {
@@ -1753,7 +1755,7 @@ silc_client_command_reply_users_save(SilcClientCommandReplyContext cmd,
   int i;
   unsigned char **res_argv = NULL;
   SilcUInt32 *res_argv_lens = NULL, *res_argv_types = NULL, res_argc = 0;
-  SilcBool wait_res = FALSE;
+  bool wait_res = FALSE;
 
   SILC_LOG_DEBUG(("Start"));