1
1
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@228 7dcaeef0-15fb-0310-b436-a5af3365683c
Этот коммит содержится в:
Aris Adamantiadis 2009-02-03 18:07:26 +00:00
родитель 903e22cd11
Коммит ac3d66ac69
4 изменённых файлов: 18 добавлений и 1 удалений

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

@ -253,6 +253,7 @@ int channel_is_closed(CHANNEL *channel);
int channel_select(CHANNEL **readchans, CHANNEL **writechans, CHANNEL **exceptchans, struct
timeval * timeout);
SSH_SESSION *channel_get_session(CHANNEL *channel);
int channel_get_exit_status(CHANNEL *channel);
/* in options.c */
/**

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

@ -284,6 +284,7 @@ struct channel_struct {
void *userarg;
int version;
int blocking;
int exit_status;
};
struct agent_struct {

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

@ -57,6 +57,7 @@ CHANNEL *channel_new(SSH_SESSION *session){
channel->prev=session->channels->prev;
channel->next->prev=channel;
channel->prev->next=channel;
channel->exit_status=-1;
return channel;
}
@ -299,6 +300,7 @@ static void channel_rcv_request(SSH_SESSION *session){
ssh_log(session,SSH_LOG_PACKET,"received exit-status");
buffer_get_u32(session->in_buffer,&status);
status=ntohl(status);
channel->exit_status=status;
/* TODO do something with status, we might need it */
free(request_s);
free(request);
@ -955,6 +957,16 @@ SSH_SESSION *channel_get_session(CHANNEL *channel){
return channel->session;
}
/** \brief get the exit status of the channel (error code from the executed instruction).
* \param channel channel
* \return -1 no exit status was returned.
* \return other values : exit status
*/
int channel_get_exit_status(CHANNEL *channel){
return channel->exit_status;
}
/* This function acts as a meta select. */
/* first, channels are analyzed to seek potential can-write or can-read ones. */
/* Then, if no channel has been elected, it goes in a loop with the posix select(2) */

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

@ -180,7 +180,9 @@ void select_loop(SSH_SESSION *session,CHANNEL *channel){
return;
}
if(lus==0){
ssh_say(1,"EOF received\n");
ssh_log(session,SSH_LOG_RARE,"EOF received\n");
ssh_log(session,SSH_LOG_RARE,"exit-status : %d\n",channel_get_exit_status(channel));
channel_free(channel);
channel=channels[0]=NULL;
} else
@ -194,6 +196,7 @@ void select_loop(SSH_SESSION *session,CHANNEL *channel){
}
if(lus==0){
ssh_log(session,SSH_LOG_RARE,"EOF received\n");
ssh_log(session,SSH_LOG_RARE,"exit-status : %d\n",channel_get_exit_status(channel));
channel_free(channel);
channel=channels[0]=NULL;
} else