1
1

callbacks: Add support for MSVC

__typeof__ is GCC specific

Signed-off-by: Andreas Schneider <asn@cryptomilk.org>
Этот коммит содержится в:
Andreas Schneider 2016-11-05 20:00:02 +01:00
родитель 422271bd40
Коммит 5437deed1b
4 изменённых файлов: 22 добавлений и 15 удалений

Просмотреть файл

@ -487,14 +487,12 @@ typedef struct ssh_socket_callbacks_struct *ssh_socket_callbacks;
do { \ do { \
struct ssh_iterator *_cb_i = ssh_list_get_iterator(_cb_list); \ struct ssh_iterator *_cb_i = ssh_list_get_iterator(_cb_list); \
_cb_type _cb; \ _cb_type _cb; \
__typeof__(_cb->_cb_name) _cb_p; \
for (; _cb_i != NULL; _cb_i = _cb_i->next) { \ for (; _cb_i != NULL; _cb_i = _cb_i->next) { \
_cb = ssh_iterator_value(_cb_type, _cb_i); \ _cb = ssh_iterator_value(_cb_type, _cb_i); \
if (ssh_callbacks_exists(_cb, _cb_name) && \ if (ssh_callbacks_exists(_cb, _cb_name))
(_cb_p = _cb->_cb_name))
#define ssh_callbacks_iterate_exec(...) \ #define ssh_callbacks_iterate_exec(_cb_name, ...) \
_cb_p(__VA_ARGS__, _cb->userdata) _cb->_cb_name(__VA_ARGS__, _cb->userdata)
#define ssh_callbacks_iterate_end() \ #define ssh_callbacks_iterate_end() \
} \ } \

Просмотреть файл

@ -550,7 +550,8 @@ SSH_PACKET_CALLBACK(channel_rcv_data){
if (ssh_buffer_get(buf) == 0) { if (ssh_buffer_get(buf) == 0) {
break; break;
} }
rest = ssh_callbacks_iterate_exec(channel->session, rest = ssh_callbacks_iterate_exec(channel_data_function,
channel->session,
channel, channel,
ssh_buffer_get(buf), ssh_buffer_get(buf),
ssh_buffer_get_len(buf), ssh_buffer_get_len(buf),

Просмотреть файл

@ -170,7 +170,8 @@ static int ssh_execute_server_request(ssh_session session, ssh_message msg)
ssh_callbacks_iterate(channel->callbacks, ssh_callbacks_iterate(channel->callbacks,
ssh_channel_callbacks, ssh_channel_callbacks,
channel_pty_request_function) { channel_pty_request_function) {
rc = ssh_callbacks_iterate_exec(session, rc = ssh_callbacks_iterate_exec(channel_pty_request_function,
session,
channel, channel,
msg->channel_request.TERM, msg->channel_request.TERM,
msg->channel_request.width, 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_callbacks_iterate(channel->callbacks,
ssh_channel_callbacks, ssh_channel_callbacks,
channel_shell_request_function) { 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) { if (rc == 0) {
ssh_message_channel_request_reply_success(msg); ssh_message_channel_request_reply_success(msg);
} else { } else {
@ -202,7 +205,8 @@ static int ssh_execute_server_request(ssh_session session, ssh_message msg)
ssh_callbacks_iterate(channel->callbacks, ssh_callbacks_iterate(channel->callbacks,
ssh_channel_callbacks, ssh_channel_callbacks,
channel_x11_req_function) { channel_x11_req_function) {
ssh_callbacks_iterate_exec(session, ssh_callbacks_iterate_exec(channel_x11_req_function,
session,
channel, channel,
msg->channel_request.x11_single_connection, msg->channel_request.x11_single_connection,
msg->channel_request.x11_auth_protocol, 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_callbacks_iterate(channel->callbacks,
ssh_channel_callbacks, ssh_channel_callbacks,
channel_pty_window_change_function) { channel_pty_window_change_function) {
rc = ssh_callbacks_iterate_exec(session, rc = ssh_callbacks_iterate_exec(channel_pty_window_change_function,
session,
channel, channel,
msg->channel_request.width, msg->channel_request.width,
msg->channel_request.height, 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_callbacks_iterate(channel->callbacks,
ssh_channel_callbacks, ssh_channel_callbacks,
channel_exec_request_function) { channel_exec_request_function) {
rc = ssh_callbacks_iterate_exec(session, rc = ssh_callbacks_iterate_exec(channel_exec_request_function,
session,
channel, channel,
msg->channel_request.command); msg->channel_request.command);
if (rc == 0) { 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_callbacks_iterate(channel->callbacks,
ssh_channel_callbacks, ssh_channel_callbacks,
channel_env_request_function) { channel_env_request_function) {
rc = ssh_callbacks_iterate_exec(session, rc = ssh_callbacks_iterate_exec(channel_env_request_function,
session,
channel, channel,
msg->channel_request.var_name, msg->channel_request.var_name,
msg->channel_request.var_value); 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_callbacks_iterate(channel->callbacks,
ssh_channel_callbacks, ssh_channel_callbacks,
channel_subsystem_request_function) { channel_subsystem_request_function) {
rc = ssh_callbacks_iterate_exec(session, rc = ssh_callbacks_iterate_exec(channel_subsystem_request_function,
session,
channel, channel,
msg->channel_request.subsystem); msg->channel_request.subsystem);
if (rc == 0) { if (rc == 0) {

Просмотреть файл

@ -218,7 +218,7 @@ static void torture_callbacks_iterate(void **state){
ssh_list_append(list, &c2); ssh_list_append(list, &c2);
ssh_callbacks_iterate(list, ssh_channel_callbacks, channel_eof_function){ 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(); ssh_callbacks_iterate_end();
@ -226,7 +226,7 @@ static void torture_callbacks_iterate(void **state){
v = 0; v = 0;
ssh_callbacks_iterate(list, ssh_channel_callbacks, channel_shell_request_function){ 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) { if (w) {
break; break;
} }