diff --git a/include/libssh/callbacks.h b/include/libssh/callbacks.h index c273cb0b..4e71b3b9 100644 --- a/include/libssh/callbacks.h +++ b/include/libssh/callbacks.h @@ -487,14 +487,12 @@ typedef struct ssh_socket_callbacks_struct *ssh_socket_callbacks; do { \ struct ssh_iterator *_cb_i = ssh_list_get_iterator(_cb_list); \ _cb_type _cb; \ - __typeof__(_cb->_cb_name) _cb_p; \ for (; _cb_i != NULL; _cb_i = _cb_i->next) { \ _cb = ssh_iterator_value(_cb_type, _cb_i); \ - if (ssh_callbacks_exists(_cb, _cb_name) && \ - (_cb_p = _cb->_cb_name)) + if (ssh_callbacks_exists(_cb, _cb_name)) -#define ssh_callbacks_iterate_exec(...) \ - _cb_p(__VA_ARGS__, _cb->userdata) +#define ssh_callbacks_iterate_exec(_cb_name, ...) \ + _cb->_cb_name(__VA_ARGS__, _cb->userdata) #define ssh_callbacks_iterate_end() \ } \ diff --git a/src/channels.c b/src/channels.c index f7cc086e..d32f0d7a 100644 --- a/src/channels.c +++ b/src/channels.c @@ -550,7 +550,8 @@ SSH_PACKET_CALLBACK(channel_rcv_data){ if (ssh_buffer_get(buf) == 0) { break; } - rest = ssh_callbacks_iterate_exec(channel->session, + rest = ssh_callbacks_iterate_exec(channel_data_function, + channel->session, channel, ssh_buffer_get(buf), ssh_buffer_get_len(buf), diff --git a/src/messages.c b/src/messages.c index 2b139fbc..7165d7cd 100644 --- a/src/messages.c +++ b/src/messages.c @@ -170,7 +170,8 @@ static int ssh_execute_server_request(ssh_session session, ssh_message msg) ssh_callbacks_iterate(channel->callbacks, ssh_channel_callbacks, channel_pty_request_function) { - rc = ssh_callbacks_iterate_exec(session, + rc = ssh_callbacks_iterate_exec(channel_pty_request_function, + session, channel, msg->channel_request.TERM, msg->channel_request.width, @@ -189,7 +190,9 @@ static int ssh_execute_server_request(ssh_session session, ssh_message msg) ssh_callbacks_iterate(channel->callbacks, ssh_channel_callbacks, channel_shell_request_function) { - rc = ssh_callbacks_iterate_exec(session, channel); + rc = ssh_callbacks_iterate_exec(channel_shell_request_function, + session, + channel); if (rc == 0) { ssh_message_channel_request_reply_success(msg); } else { @@ -202,7 +205,8 @@ static int ssh_execute_server_request(ssh_session session, ssh_message msg) ssh_callbacks_iterate(channel->callbacks, ssh_channel_callbacks, channel_x11_req_function) { - ssh_callbacks_iterate_exec(session, + ssh_callbacks_iterate_exec(channel_x11_req_function, + session, channel, msg->channel_request.x11_single_connection, msg->channel_request.x11_auth_protocol, @@ -216,7 +220,8 @@ static int ssh_execute_server_request(ssh_session session, ssh_message msg) ssh_callbacks_iterate(channel->callbacks, ssh_channel_callbacks, channel_pty_window_change_function) { - rc = ssh_callbacks_iterate_exec(session, + rc = ssh_callbacks_iterate_exec(channel_pty_window_change_function, + session, channel, msg->channel_request.width, msg->channel_request.height, @@ -229,7 +234,8 @@ static int ssh_execute_server_request(ssh_session session, ssh_message msg) ssh_callbacks_iterate(channel->callbacks, ssh_channel_callbacks, channel_exec_request_function) { - rc = ssh_callbacks_iterate_exec(session, + rc = ssh_callbacks_iterate_exec(channel_exec_request_function, + session, channel, msg->channel_request.command); if (rc == 0) { @@ -245,7 +251,8 @@ static int ssh_execute_server_request(ssh_session session, ssh_message msg) ssh_callbacks_iterate(channel->callbacks, ssh_channel_callbacks, channel_env_request_function) { - rc = ssh_callbacks_iterate_exec(session, + rc = ssh_callbacks_iterate_exec(channel_env_request_function, + session, channel, msg->channel_request.var_name, msg->channel_request.var_value); @@ -261,7 +268,8 @@ static int ssh_execute_server_request(ssh_session session, ssh_message msg) ssh_callbacks_iterate(channel->callbacks, ssh_channel_callbacks, channel_subsystem_request_function) { - rc = ssh_callbacks_iterate_exec(session, + rc = ssh_callbacks_iterate_exec(channel_subsystem_request_function, + session, channel, msg->channel_request.subsystem); if (rc == 0) { diff --git a/tests/unittests/torture_callbacks.c b/tests/unittests/torture_callbacks.c index 775a83c1..e0b7882e 100644 --- a/tests/unittests/torture_callbacks.c +++ b/tests/unittests/torture_callbacks.c @@ -218,7 +218,7 @@ static void torture_callbacks_iterate(void **state){ ssh_list_append(list, &c2); ssh_callbacks_iterate(list, ssh_channel_callbacks, channel_eof_function){ - ssh_callbacks_iterate_exec(NULL, NULL); + ssh_callbacks_iterate_exec(channel_eof_function, NULL, NULL); } ssh_callbacks_iterate_end(); @@ -226,7 +226,7 @@ static void torture_callbacks_iterate(void **state){ v = 0; ssh_callbacks_iterate(list, ssh_channel_callbacks, channel_shell_request_function){ - w = ssh_callbacks_iterate_exec(NULL, NULL); + w = ssh_callbacks_iterate_exec(channel_shell_request_function, NULL, NULL); if (w) { break; }