-#define COMMAND_REPLY_ERROR cmd->client->internal->ops-> \
- command_reply(cmd->client, cmd->sock->user_data, cmd->payload, \
- FALSE, silc_command_get(cmd->payload), cmd->status)
+#define COMMAND_REPLY_ERROR(error) \
+do { \
+ if (cmd->status == SILC_STATUS_OK) { \
+ cmd->client->internal->ops-> \
+ command_reply(cmd->client, cmd->sock->user_data, cmd->payload, \
+ FALSE, silc_command_get(cmd->payload), error); \
+ } else { \
+ void *arg1 = NULL, *arg2 = NULL; \
+ silc_status_get_args(cmd->status, cmd->args, &arg1, &arg2); \
+ cmd->client->internal->ops-> \
+ command_reply(cmd->client, cmd->sock->user_data, cmd->payload, \
+ FALSE, silc_command_get(cmd->payload), cmd->status, \
+ arg1, arg2); \
+ silc_free(arg1); \
+ silc_free(arg2); \
+ } \
+} while(0)