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 { \
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() \
} \

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

@ -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),

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

@ -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) {

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

@ -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;
}