From 1e962ef0797bdc56e8fca0f0d3f83658b40ea0d6 Mon Sep 17 00:00:00 2001 From: Nedko Arnaudov Date: Sun, 7 Aug 2011 04:21:58 +0300 Subject: [PATCH] Move session command reply array creation to JackSessionNotifyResult This eliminates code duplication in JackWinNamedPipeClientChannel and JackSocketClientChannel. --- common/JackRequest.h | 21 +++++++++++++++++++++ posix/JackSocketClientChannel.cpp | 19 +------------------ windows/JackWinNamedPipeClientChannel.cpp | 19 +------------------ 3 files changed, 23 insertions(+), 36 deletions(-) diff --git a/common/JackRequest.h b/common/JackRequest.h index 07ec219c..95a1b7e7 100644 --- a/common/JackRequest.h +++ b/common/JackRequest.h @@ -26,6 +26,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "types.h" #include #include +#include #include namespace Jack @@ -1188,6 +1189,26 @@ struct JackSessionNotifyResult : public JackResult return 0; } + jack_session_command_t* GetCommands() + { + jack_session_command_t* session_command = (jack_session_command_t *)malloc(sizeof(jack_session_command_t) * (fCommandList.size() + 1)); + int i = 0; + + for (std::list::iterator ci = fCommandList.begin(); ci != fCommandList.end(); ci++) { + session_command[i].uuid = strdup(ci->fUUID); + session_command[i].client_name = strdup(ci->fClientName); + session_command[i].command = strdup(ci->fCommand); + session_command[i].flags = ci->fFlags; + i += 1; + } + + session_command[i].uuid = NULL; + session_command[i].client_name = NULL; + session_command[i].command = NULL; + session_command[i].flags = (jack_session_flags_t)0; + + return session_command; + } }; /*! diff --git a/posix/JackSocketClientChannel.cpp b/posix/JackSocketClientChannel.cpp index f40ae39a..0dd580a0 100644 --- a/posix/JackSocketClientChannel.cpp +++ b/posix/JackSocketClientChannel.cpp @@ -259,24 +259,7 @@ void JackSocketClientChannel::SessionNotify(int refnum, const char* target, jack JackSessionNotifyResult res; int intresult; ServerSyncCall(&req, &res, &intresult); - - jack_session_command_t* session_command = (jack_session_command_t *)malloc(sizeof(jack_session_command_t) * (res.fCommandList.size() + 1)); - int i = 0; - - for (std::list::iterator ci = res.fCommandList.begin(); ci != res.fCommandList.end(); ci++) { - session_command[i].uuid = strdup(ci->fUUID); - session_command[i].client_name = strdup(ci->fClientName); - session_command[i].command = strdup(ci->fCommand); - session_command[i].flags = ci->fFlags; - i += 1; - } - - session_command[i].uuid = NULL; - session_command[i].client_name = NULL; - session_command[i].command = NULL; - session_command[i].flags = (jack_session_flags_t)0; - - *result = session_command; + *result = res.GetCommands(); } void JackSocketClientChannel::SessionReply(int refnum, int* result) diff --git a/windows/JackWinNamedPipeClientChannel.cpp b/windows/JackWinNamedPipeClientChannel.cpp index 9bf5d0b9..56481531 100644 --- a/windows/JackWinNamedPipeClientChannel.cpp +++ b/windows/JackWinNamedPipeClientChannel.cpp @@ -263,24 +263,7 @@ void JackWinNamedPipeClientChannel::SessionNotify(int refnum, const char* target JackSessionNotifyResult res; int intresult; ServerSyncCall(&req, &res, &intresult); - - jack_session_command_t* session_command = (jack_session_command_t *)malloc(sizeof(jack_session_command_t) * (res.fCommandList.size() + 1)); - int i = 0; - - for (std::list::iterator ci = res.fCommandList.begin(); ci != res.fCommandList.end(); ci++) { - session_command[i].uuid = strdup(ci->fUUID); - session_command[i].client_name = strdup(ci->fClientName); - session_command[i].command = strdup(ci->fCommand); - session_command[i].flags = ci->fFlags; - i += 1; - } - - session_command[i].uuid = NULL; - session_command[i].client_name = NULL; - session_command[i].command = NULL; - session_command[i].flags = (jack_session_flags_t)0; - - *result = session_command; + *result = res.GetCommands(); } void JackWinNamedPipeClientChannel::SessionReply(int refnum, int* result)