error code cleanup
Этот коммит содержится в:
родитель
fba3877ed8
Коммит
f64a84a909
34
src/sftp.c
34
src/sftp.c
@ -124,7 +124,7 @@ sftp_packet_add(LIBSSH2_SFTP *sftp, unsigned char *data,
|
|||||||
if (!packet) {
|
if (!packet) {
|
||||||
libssh2_error(session, LIBSSH2_ERROR_ALLOC,
|
libssh2_error(session, LIBSSH2_ERROR_ALLOC,
|
||||||
"Unable to allocate datablock for SFTP packet", 0);
|
"Unable to allocate datablock for SFTP packet", 0);
|
||||||
return -1;
|
return LIBSSH2_ERROR_ALLOC;
|
||||||
}
|
}
|
||||||
memset(packet, 0, sizeof(LIBSSH2_PACKET));
|
memset(packet, 0, sizeof(LIBSSH2_PACKET));
|
||||||
|
|
||||||
@ -175,9 +175,9 @@ sftp_packet_read(LIBSSH2_SFTP *sftp)
|
|||||||
/* TODO: this is stupid since we can in fact get 1-3 bytes in a
|
/* TODO: this is stupid since we can in fact get 1-3 bytes in a
|
||||||
legitimate working case as well if the connection happens to be
|
legitimate working case as well if the connection happens to be
|
||||||
super slow or something */
|
super slow or something */
|
||||||
libssh2_error(session, LIBSSH2_ERROR_SOCKET_TIMEOUT,
|
libssh2_error(session, LIBSSH2_ERROR_CHANNEL_FAILURE,
|
||||||
"Timeout waiting for FXP packet", 0);
|
"Read part of packet", 0);
|
||||||
return -1;
|
return LIBSSH2_ERROR_CHANNEL_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
packet_len = _libssh2_ntohu32(buffer);
|
packet_len = _libssh2_ntohu32(buffer);
|
||||||
@ -186,14 +186,14 @@ sftp_packet_read(LIBSSH2_SFTP *sftp)
|
|||||||
if (packet_len > LIBSSH2_SFTP_PACKET_MAXLEN) {
|
if (packet_len > LIBSSH2_SFTP_PACKET_MAXLEN) {
|
||||||
libssh2_error(session, LIBSSH2_ERROR_CHANNEL_PACKET_EXCEEDED,
|
libssh2_error(session, LIBSSH2_ERROR_CHANNEL_PACKET_EXCEEDED,
|
||||||
"SFTP packet too large", 0);
|
"SFTP packet too large", 0);
|
||||||
return -1;
|
return LIBSSH2_ERROR_CHANNEL_PACKET_EXCEEDED;
|
||||||
}
|
}
|
||||||
|
|
||||||
packet = LIBSSH2_ALLOC(session, packet_len);
|
packet = LIBSSH2_ALLOC(session, packet_len);
|
||||||
if (!packet) {
|
if (!packet) {
|
||||||
libssh2_error(session, LIBSSH2_ERROR_ALLOC,
|
libssh2_error(session, LIBSSH2_ERROR_ALLOC,
|
||||||
"Unable to allocate SFTP packet", 0);
|
"Unable to allocate SFTP packet", 0);
|
||||||
return -1;
|
return LIBSSH2_ERROR_ALLOC;
|
||||||
}
|
}
|
||||||
|
|
||||||
packet_received = 0;
|
packet_received = 0;
|
||||||
@ -222,14 +222,15 @@ sftp_packet_read(LIBSSH2_SFTP *sftp)
|
|||||||
libssh2_error(session, LIBSSH2_ERROR_SOCKET_TIMEOUT,
|
libssh2_error(session, LIBSSH2_ERROR_SOCKET_TIMEOUT,
|
||||||
"Receive error waiting for SFTP packet", 0);
|
"Receive error waiting for SFTP packet", 0);
|
||||||
LIBSSH2_FREE(session, packet);
|
LIBSSH2_FREE(session, packet);
|
||||||
return -1;
|
return bytes_received;
|
||||||
}
|
}
|
||||||
packet_received += bytes_received;
|
packet_received += bytes_received;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sftp_packet_add(sftp, packet, packet_len)) {
|
rc = sftp_packet_add(sftp, packet, packet_len);
|
||||||
|
if (rc) {
|
||||||
LIBSSH2_FREE(session, packet);
|
LIBSSH2_FREE(session, packet);
|
||||||
return -1;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
return packet[0];
|
return packet[0];
|
||||||
@ -320,7 +321,7 @@ sftp_packet_require(LIBSSH2_SFTP *sftp, unsigned char packet_type,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Only reached if the socket died */
|
/* Only reached if the socket died */
|
||||||
return -1;
|
return LIBSSH2_ERROR_SOCKET_DISCONNECT;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* sftp_packet_requirev
|
/* sftp_packet_requirev
|
||||||
@ -907,7 +908,7 @@ sftp_open(LIBSSH2_SFTP *sftp, const char *filename,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
else if (rc) {
|
else if (rc) {
|
||||||
libssh2_error(session, LIBSSH2_ERROR_SOCKET_TIMEOUT,
|
libssh2_error(session, rc,
|
||||||
"Timeout waiting for status message", 0);
|
"Timeout waiting for status message", 0);
|
||||||
sftp->open_state = libssh2_NB_state_idle;
|
sftp->open_state = libssh2_NB_state_idle;
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -1112,9 +1113,11 @@ static ssize_t sftp_read(LIBSSH2_SFTP_HANDLE * handle, char *buffer,
|
|||||||
sftp_packet_requirev(sftp, 2, read_responses,
|
sftp_packet_requirev(sftp, 2, read_responses,
|
||||||
request_id, &data, &data_len);
|
request_id, &data, &data_len);
|
||||||
if (retcode == PACKET_EAGAIN) {
|
if (retcode == PACKET_EAGAIN) {
|
||||||
|
libssh2_error(session, LIBSSH2_ERROR_EAGAIN,
|
||||||
|
"Would block waiting for status message", 0);
|
||||||
return PACKET_EAGAIN;
|
return PACKET_EAGAIN;
|
||||||
} else if (retcode) {
|
} else if (retcode) {
|
||||||
libssh2_error(session, LIBSSH2_ERROR_SOCKET_TIMEOUT,
|
libssh2_error(session, retcode,
|
||||||
"Timeout waiting for status message", 0);
|
"Timeout waiting for status message", 0);
|
||||||
sftp->read_packet = NULL;
|
sftp->read_packet = NULL;
|
||||||
sftp->read_state = libssh2_NB_state_idle;
|
sftp->read_state = libssh2_NB_state_idle;
|
||||||
@ -1460,11 +1463,8 @@ static ssize_t sftp_write(LIBSSH2_SFTP_HANDLE *handle, const char *buffer,
|
|||||||
if (sftp->write_state == libssh2_NB_state_created) {
|
if (sftp->write_state == libssh2_NB_state_created) {
|
||||||
rc = _libssh2_channel_write(channel, 0, (char *)sftp->write_packet,
|
rc = _libssh2_channel_write(channel, 0, (char *)sftp->write_packet,
|
||||||
packet_len);
|
packet_len);
|
||||||
if (rc == PACKET_EAGAIN) {
|
if(rc < 0) {
|
||||||
return PACKET_EAGAIN;
|
/* error */
|
||||||
}
|
|
||||||
else if(rc < 0) {
|
|
||||||
/* an actual error */
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
else if(0 == rc) {
|
else if(0 == rc) {
|
||||||
|
Загрузка…
Ссылка в новой задаче
Block a user