Updated comments and removed "libssh2_" prefixes from static functions
Этот коммит содержится в:
родитель
1e1ba6219e
Коммит
2e548c1ca0
148
src/sftp.c
148
src/sftp.c
@ -276,9 +276,7 @@ sftp_packet_ask(LIBSSH2_SFTP * sftp, unsigned char packet_type,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* }}} */
|
/* sftp_packet_require
|
||||||
|
|
||||||
/* {{{ sftp_packet_require
|
|
||||||
* A la libssh2_packet_require
|
* A la libssh2_packet_require
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
@ -320,8 +318,7 @@ sftp_packet_require(LIBSSH2_SFTP * sftp, unsigned char packet_type,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* sftp_packet_requirev
|
||||||
/* {{{ sftp_packet_requirev
|
|
||||||
* Require one of N possible reponses
|
* Require one of N possible reponses
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
@ -378,13 +375,11 @@ sftp_packet_requirev(LIBSSH2_SFTP * sftp, int num_valid_responses,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* }}} */
|
/* sftp_attrsize
|
||||||
|
|
||||||
/* {{{ libssh2_sftp_attrsize
|
|
||||||
* Size that attr will occupy when turned into a bin struct
|
* Size that attr will occupy when turned into a bin struct
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
libssh2_sftp_attrsize(const LIBSSH2_SFTP_ATTRIBUTES * attrs)
|
sftp_attrsize(const LIBSSH2_SFTP_ATTRIBUTES * attrs)
|
||||||
{
|
{
|
||||||
int attrsize = 4; /* flags(4) */
|
int attrsize = 4; /* flags(4) */
|
||||||
|
|
||||||
@ -404,20 +399,19 @@ libssh2_sftp_attrsize(const LIBSSH2_SFTP_ATTRIBUTES * attrs)
|
|||||||
return attrsize;
|
return attrsize;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* }}} */
|
/* sftp_attr2bin
|
||||||
|
|
||||||
/* {{{ libssh2_sftp_attr2bin
|
|
||||||
* Populate attributes into an SFTP block
|
* Populate attributes into an SFTP block
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
libssh2_sftp_attr2bin(unsigned char *p, const LIBSSH2_SFTP_ATTRIBUTES * attrs)
|
sftp_attr2bin(unsigned char *p, const LIBSSH2_SFTP_ATTRIBUTES * attrs)
|
||||||
{
|
{
|
||||||
unsigned char *s = p;
|
unsigned char *s = p;
|
||||||
unsigned long flag_mask =
|
unsigned long flag_mask =
|
||||||
LIBSSH2_SFTP_ATTR_SIZE | LIBSSH2_SFTP_ATTR_UIDGID |
|
LIBSSH2_SFTP_ATTR_SIZE | LIBSSH2_SFTP_ATTR_UIDGID |
|
||||||
LIBSSH2_SFTP_ATTR_PERMISSIONS | LIBSSH2_SFTP_ATTR_ACMODTIME;
|
LIBSSH2_SFTP_ATTR_PERMISSIONS | LIBSSH2_SFTP_ATTR_ACMODTIME;
|
||||||
|
|
||||||
/* TODO: When we add SFTP4+ functionality flag_mask can get additional bits */
|
/* TODO: When we add SFTP4+ functionality flag_mask can get additional
|
||||||
|
bits */
|
||||||
|
|
||||||
if (!attrs) {
|
if (!attrs) {
|
||||||
_libssh2_htonu32(s, 0);
|
_libssh2_htonu32(s, 0);
|
||||||
@ -454,12 +448,10 @@ libssh2_sftp_attr2bin(unsigned char *p, const LIBSSH2_SFTP_ATTRIBUTES * attrs)
|
|||||||
return (s - p);
|
return (s - p);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* }}} */
|
/* sftp_bin2attr
|
||||||
|
|
||||||
/* {{{ libssh2_sftp_bin2attr
|
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
libssh2_sftp_bin2attr(LIBSSH2_SFTP_ATTRIBUTES * attrs, const unsigned char *p)
|
sftp_bin2attr(LIBSSH2_SFTP_ATTRIBUTES * attrs, const unsigned char *p)
|
||||||
{
|
{
|
||||||
const unsigned char *s = p;
|
const unsigned char *s = p;
|
||||||
|
|
||||||
@ -494,15 +486,13 @@ libssh2_sftp_bin2attr(LIBSSH2_SFTP_ATTRIBUTES * attrs, const unsigned char *p)
|
|||||||
return (s - p);
|
return (s - p);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* }}} */
|
|
||||||
|
|
||||||
/* ************
|
/* ************
|
||||||
* SFTP API *
|
* SFTP API *
|
||||||
************ */
|
************ */
|
||||||
|
|
||||||
LIBSSH2_CHANNEL_CLOSE_FUNC(libssh2_sftp_dtor);
|
LIBSSH2_CHANNEL_CLOSE_FUNC(libssh2_sftp_dtor);
|
||||||
|
|
||||||
/* {{{ libssh2_sftp_dtor
|
/* libssh2_sftp_dtor
|
||||||
* Shutdown an SFTP stream when the channel closes
|
* Shutdown an SFTP stream when the channel closes
|
||||||
*/
|
*/
|
||||||
LIBSSH2_CHANNEL_CLOSE_FUNC(libssh2_sftp_dtor)
|
LIBSSH2_CHANNEL_CLOSE_FUNC(libssh2_sftp_dtor)
|
||||||
@ -534,10 +524,6 @@ LIBSSH2_CHANNEL_CLOSE_FUNC(libssh2_sftp_dtor)
|
|||||||
* libssh2_sftp_init
|
* libssh2_sftp_init
|
||||||
*
|
*
|
||||||
* Startup an SFTP session
|
* Startup an SFTP session
|
||||||
*
|
|
||||||
* NOTE: Will block in a busy loop on error. This has to be done,
|
|
||||||
* otherwise the blocking error code would erase the true
|
|
||||||
* cause of the error.
|
|
||||||
*/
|
*/
|
||||||
LIBSSH2_API LIBSSH2_SFTP *
|
LIBSSH2_API LIBSSH2_SFTP *
|
||||||
libssh2_sftp_init(LIBSSH2_SESSION * session)
|
libssh2_sftp_init(LIBSSH2_SESSION * session)
|
||||||
@ -641,7 +627,6 @@ libssh2_sftp_init(LIBSSH2_SESSION * session)
|
|||||||
session->sftpInit_state = libssh2_NB_state_sent3;
|
session->sftpInit_state = libssh2_NB_state_sent3;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* For initiallization we are requiring blocking, probably reasonable */
|
|
||||||
rc = sftp_packet_require(session->sftpInit_sftp, SSH_FXP_VERSION,
|
rc = sftp_packet_require(session->sftpInit_sftp, SSH_FXP_VERSION,
|
||||||
0, &data, &data_len);
|
0, &data, &data_len);
|
||||||
if (rc == PACKET_EAGAIN) {
|
if (rc == PACKET_EAGAIN) {
|
||||||
@ -708,9 +693,7 @@ libssh2_sftp_init(LIBSSH2_SESSION * session)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* }}} */
|
/* libssh2_sftp_shutdown
|
||||||
|
|
||||||
/* {{{ libssh2_sftp_shutdown
|
|
||||||
* Shutsdown the SFTP subsystem
|
* Shutsdown the SFTP subsystem
|
||||||
*/
|
*/
|
||||||
LIBSSH2_API int
|
LIBSSH2_API int
|
||||||
@ -767,13 +750,11 @@ libssh2_sftp_shutdown(LIBSSH2_SFTP * sftp)
|
|||||||
return libssh2_channel_free(sftp->channel);
|
return libssh2_channel_free(sftp->channel);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* }}} */
|
|
||||||
|
|
||||||
/* *******************************
|
/* *******************************
|
||||||
* SFTP File and Directory Ops *
|
* SFTP File and Directory Ops *
|
||||||
******************************* */
|
******************************* */
|
||||||
|
|
||||||
/* {{{ libssh2_sftp_open_ex
|
/* libssh2_sftp_open_ex
|
||||||
*/
|
*/
|
||||||
LIBSSH2_API LIBSSH2_SFTP_HANDLE *
|
LIBSSH2_API LIBSSH2_SFTP_HANDLE *
|
||||||
libssh2_sftp_open_ex(LIBSSH2_SFTP * sftp, const char *filename,
|
libssh2_sftp_open_ex(LIBSSH2_SFTP * sftp, const char *filename,
|
||||||
@ -797,8 +778,7 @@ libssh2_sftp_open_ex(LIBSSH2_SFTP * sftp, const char *filename,
|
|||||||
flags(4) */
|
flags(4) */
|
||||||
sftp->open_packet_len = filename_len + 13 +
|
sftp->open_packet_len = filename_len + 13 +
|
||||||
((open_type ==
|
((open_type ==
|
||||||
LIBSSH2_SFTP_OPENFILE) ? (4 +
|
LIBSSH2_SFTP_OPENFILE) ? (4 + sftp_attrsize(&attrs)) : 0);
|
||||||
libssh2_sftp_attrsize(&attrs)) : 0);
|
|
||||||
|
|
||||||
s = sftp->open_packet = LIBSSH2_ALLOC(session, sftp->open_packet_len);
|
s = sftp->open_packet = LIBSSH2_ALLOC(session, sftp->open_packet_len);
|
||||||
if (!sftp->open_packet) {
|
if (!sftp->open_packet) {
|
||||||
@ -828,8 +808,7 @@ libssh2_sftp_open_ex(LIBSSH2_SFTP * sftp, const char *filename,
|
|||||||
s += filename_len;
|
s += filename_len;
|
||||||
if (open_type == LIBSSH2_SFTP_OPENFILE) {
|
if (open_type == LIBSSH2_SFTP_OPENFILE) {
|
||||||
_libssh2_htonu32(s, flags);
|
_libssh2_htonu32(s, flags);
|
||||||
s += 4;
|
s += 4 + sftp_attr2bin(s, &attrs);
|
||||||
s += libssh2_sftp_attr2bin(s, &attrs);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_libssh2_debug(session, LIBSSH2_DBG_SFTP, "Sending %s open request",
|
_libssh2_debug(session, LIBSSH2_DBG_SFTP, "Sending %s open request",
|
||||||
@ -953,9 +932,7 @@ libssh2_sftp_open_ex(LIBSSH2_SFTP * sftp, const char *filename,
|
|||||||
return fp;
|
return fp;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* }}} */
|
/* libssh2_sftp_read
|
||||||
|
|
||||||
/* {{{ libssh2_sftp_read
|
|
||||||
* Read from an SFTP file handle
|
* Read from an SFTP file handle
|
||||||
*/
|
*/
|
||||||
LIBSSH2_API ssize_t
|
LIBSSH2_API ssize_t
|
||||||
@ -1131,9 +1108,7 @@ libssh2_sftp_read(LIBSSH2_SFTP_HANDLE * handle, char *buffer,
|
|||||||
return total_read;
|
return total_read;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* }}} */
|
/* libssh2_sftp_readdir
|
||||||
|
|
||||||
/* {{{ libssh2_sftp_readdir
|
|
||||||
* Read from an SFTP directory handle
|
* Read from an SFTP directory handle
|
||||||
*/
|
*/
|
||||||
LIBSSH2_API int
|
LIBSSH2_API int
|
||||||
@ -1198,7 +1173,7 @@ libssh2_sftp_readdir_ex(LIBSSH2_SFTP_HANDLE * handle, char *buffer,
|
|||||||
if (attrs) {
|
if (attrs) {
|
||||||
memset(attrs, 0, sizeof(LIBSSH2_SFTP_ATTRIBUTES));
|
memset(attrs, 0, sizeof(LIBSSH2_SFTP_ATTRIBUTES));
|
||||||
}
|
}
|
||||||
s += libssh2_sftp_bin2attr(attrs ? attrs : &attrs_dummy, s);
|
s += sftp_bin2attr(attrs ? attrs : &attrs_dummy, s);
|
||||||
|
|
||||||
handle->u.dir.next_name = (char *) s;
|
handle->u.dir.next_name = (char *) s;
|
||||||
if ((--handle->u.dir.names_left) == 0) {
|
if ((--handle->u.dir.names_left) == 0) {
|
||||||
@ -1314,10 +1289,9 @@ libssh2_sftp_readdir_ex(LIBSSH2_SFTP_HANDLE * handle, char *buffer,
|
|||||||
|
|
||||||
if (attrs) {
|
if (attrs) {
|
||||||
memset(attrs, 0, sizeof(LIBSSH2_SFTP_ATTRIBUTES));
|
memset(attrs, 0, sizeof(LIBSSH2_SFTP_ATTRIBUTES));
|
||||||
libssh2_sftp_bin2attr(attrs, data + 13 + real_filename_len +
|
sftp_bin2attr(attrs, data + 13 + real_filename_len +
|
||||||
(4 +
|
(4 + _libssh2_ntohu32(data + 13 +
|
||||||
_libssh2_ntohu32(data + 13 +
|
real_filename_len)));
|
||||||
real_filename_len)));
|
|
||||||
}
|
}
|
||||||
LIBSSH2_FREE(session, data);
|
LIBSSH2_FREE(session, data);
|
||||||
|
|
||||||
@ -1331,14 +1305,13 @@ libssh2_sftp_readdir_ex(LIBSSH2_SFTP_HANDLE * handle, char *buffer,
|
|||||||
|
|
||||||
sftp->readdir_state = libssh2_NB_state_idle;
|
sftp->readdir_state = libssh2_NB_state_idle;
|
||||||
|
|
||||||
/* Be lazy, just use the name popping mechanism from the start of the function */
|
/* Be lazy, just use the name popping mechanism from the start of the
|
||||||
|
function */
|
||||||
return libssh2_sftp_readdir_ex(handle, buffer, buffer_maxlen, longentry,
|
return libssh2_sftp_readdir_ex(handle, buffer, buffer_maxlen, longentry,
|
||||||
longentry_maxlen, attrs);
|
longentry_maxlen, attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* }}} */
|
/* libssh2_sftp_write
|
||||||
|
|
||||||
/* {{{ libssh2_sftp_write
|
|
||||||
* Write data to a file handle
|
* Write data to a file handle
|
||||||
*/
|
*/
|
||||||
LIBSSH2_API ssize_t
|
LIBSSH2_API ssize_t
|
||||||
@ -1432,9 +1405,7 @@ libssh2_sftp_write(LIBSSH2_SFTP_HANDLE * handle, const char *buffer,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* }}} */
|
/* libssh2_sftp_fstat_ex
|
||||||
|
|
||||||
/* {{{ libssh2_sftp_fstat_ex
|
|
||||||
* Get or Set stat on a file
|
* Get or Set stat on a file
|
||||||
*/
|
*/
|
||||||
LIBSSH2_API int
|
LIBSSH2_API int
|
||||||
@ -1447,7 +1418,7 @@ libssh2_sftp_fstat_ex(LIBSSH2_SFTP_HANDLE * handle,
|
|||||||
unsigned long data_len;
|
unsigned long data_len;
|
||||||
/* 13 = packet_len(4) + packet_type(1) + request_id(4) + handle_len(4) */
|
/* 13 = packet_len(4) + packet_type(1) + request_id(4) + handle_len(4) */
|
||||||
ssize_t packet_len =
|
ssize_t packet_len =
|
||||||
handle->handle_len + 13 + (setstat ? libssh2_sftp_attrsize(attrs) : 0);
|
handle->handle_len + 13 + (setstat ? sftp_attrsize(attrs) : 0);
|
||||||
unsigned char *s, *data;
|
unsigned char *s, *data;
|
||||||
static const unsigned char fstat_responses[2] =
|
static const unsigned char fstat_responses[2] =
|
||||||
{ SSH_FXP_ATTRS, SSH_FXP_STATUS };
|
{ SSH_FXP_ATTRS, SSH_FXP_STATUS };
|
||||||
@ -1475,7 +1446,7 @@ libssh2_sftp_fstat_ex(LIBSSH2_SFTP_HANDLE * handle,
|
|||||||
memcpy(s, handle->handle, handle->handle_len);
|
memcpy(s, handle->handle, handle->handle_len);
|
||||||
s += handle->handle_len;
|
s += handle->handle_len;
|
||||||
if (setstat) {
|
if (setstat) {
|
||||||
s += libssh2_sftp_attr2bin(s, attrs);
|
s += sftp_attr2bin(s, attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
sftp->fstat_state = libssh2_NB_state_created;
|
sftp->fstat_state = libssh2_NB_state_created;
|
||||||
@ -1530,14 +1501,12 @@ libssh2_sftp_fstat_ex(LIBSSH2_SFTP_HANDLE * handle,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
libssh2_sftp_bin2attr(attrs, data + 5);
|
sftp_bin2attr(attrs, data + 5);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* }}} */
|
/* libssh2_sftp_seek
|
||||||
|
|
||||||
/* {{{ libssh2_sftp_seek
|
|
||||||
* Set the read/write pointer to an arbitrary position within the file
|
* Set the read/write pointer to an arbitrary position within the file
|
||||||
*/
|
*/
|
||||||
LIBSSH2_API void
|
LIBSSH2_API void
|
||||||
@ -1546,9 +1515,7 @@ libssh2_sftp_seek(LIBSSH2_SFTP_HANDLE * handle, size_t offset)
|
|||||||
handle->u.file.offset = offset;
|
handle->u.file.offset = offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* }}} */
|
/* libssh2_sftp_seek64
|
||||||
|
|
||||||
/* {{{ libssh2_sftp_seek64
|
|
||||||
* Set the read/write pointer to an arbitrary position within the file
|
* Set the read/write pointer to an arbitrary position within the file
|
||||||
*/
|
*/
|
||||||
LIBSSH2_API void
|
LIBSSH2_API void
|
||||||
@ -1557,9 +1524,7 @@ libssh2_sftp_seek64(LIBSSH2_SFTP_HANDLE * handle, libssh2_uint64_t offset)
|
|||||||
handle->u.file.offset = offset;
|
handle->u.file.offset = offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* }}} */
|
/* libssh2_sftp_tell
|
||||||
|
|
||||||
/* {{{ libssh2_sftp_tell
|
|
||||||
* Return the current read/write pointer's offset
|
* Return the current read/write pointer's offset
|
||||||
*/
|
*/
|
||||||
LIBSSH2_API size_t
|
LIBSSH2_API size_t
|
||||||
@ -1568,7 +1533,7 @@ libssh2_sftp_tell(LIBSSH2_SFTP_HANDLE * handle)
|
|||||||
return handle->u.file.offset;
|
return handle->u.file.offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* {{{ libssh2_sftp_tell64
|
/* libssh2_sftp_tell64
|
||||||
* Return the current read/write pointer's offset
|
* Return the current read/write pointer's offset
|
||||||
*/
|
*/
|
||||||
LIBSSH2_API libssh2_uint64_t
|
LIBSSH2_API libssh2_uint64_t
|
||||||
@ -1577,10 +1542,7 @@ libssh2_sftp_tell64(LIBSSH2_SFTP_HANDLE * handle)
|
|||||||
return handle->u.file.offset;
|
return handle->u.file.offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* }}} */
|
/* libssh2_sftp_close_handle
|
||||||
|
|
||||||
|
|
||||||
/* {{{ libssh2_sftp_close_handle
|
|
||||||
* Close a file or directory handle
|
* Close a file or directory handle
|
||||||
* Also frees handle resource and unlinks it from the SFTP structure
|
* Also frees handle resource and unlinks it from the SFTP structure
|
||||||
*/
|
*/
|
||||||
@ -1685,13 +1647,11 @@ libssh2_sftp_close_handle(LIBSSH2_SFTP_HANDLE * handle)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* }}} */
|
|
||||||
|
|
||||||
/* **********************
|
/* **********************
|
||||||
* SFTP Miscellaneous *
|
* SFTP Miscellaneous *
|
||||||
********************** */
|
********************** */
|
||||||
|
|
||||||
/* {{{ libssh2_sftp_unlink_ex
|
/* libssh2_sftp_unlink_ex
|
||||||
* Delete a file from the remote server
|
* Delete a file from the remote server
|
||||||
*/
|
*/
|
||||||
/* libssh2_sftp_unlink_ex - NB-UNSAFE?? */
|
/* libssh2_sftp_unlink_ex - NB-UNSAFE?? */
|
||||||
@ -1778,9 +1738,7 @@ libssh2_sftp_unlink_ex(LIBSSH2_SFTP * sftp, const char *filename,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* }}} */
|
/* libssh2_sftp_rename_ex
|
||||||
|
|
||||||
/* {{{ libssh2_sftp_rename_ex
|
|
||||||
* Rename a file on the remote server
|
* Rename a file on the remote server
|
||||||
*/
|
*/
|
||||||
LIBSSH2_API int
|
LIBSSH2_API int
|
||||||
@ -1907,9 +1865,7 @@ libssh2_sftp_rename_ex(LIBSSH2_SFTP * sftp, const char *source_filename,
|
|||||||
return retcode;
|
return retcode;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* }}} */
|
/* libssh2_sftp_mkdir_ex
|
||||||
|
|
||||||
/* {{{ libssh2_sftp_mkdir_ex
|
|
||||||
* Create an SFTP directory
|
* Create an SFTP directory
|
||||||
*/
|
*/
|
||||||
LIBSSH2_API int
|
LIBSSH2_API int
|
||||||
@ -1923,7 +1879,7 @@ libssh2_sftp_mkdir_ex(LIBSSH2_SFTP * sftp, const char *path,
|
|||||||
};
|
};
|
||||||
unsigned long data_len, retcode;
|
unsigned long data_len, retcode;
|
||||||
/* 13 = packet_len(4) + packet_type(1) + request_id(4) + path_len(4) */
|
/* 13 = packet_len(4) + packet_type(1) + request_id(4) + path_len(4) */
|
||||||
ssize_t packet_len = path_len + 13 + libssh2_sftp_attrsize(&attrs);
|
ssize_t packet_len = path_len + 13 + sftp_attrsize(&attrs);
|
||||||
unsigned char *packet, *s, *data;
|
unsigned char *packet, *s, *data;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
@ -1948,11 +1904,11 @@ libssh2_sftp_mkdir_ex(LIBSSH2_SFTP * sftp, const char *path,
|
|||||||
_libssh2_htonu32(s, path_len);
|
_libssh2_htonu32(s, path_len);
|
||||||
s += 4;
|
s += 4;
|
||||||
memcpy(s, path, path_len);
|
memcpy(s, path, path_len);
|
||||||
s += path_len;
|
s += path_len + sftp_attr2bin(s, &attrs);
|
||||||
s += libssh2_sftp_attr2bin(s, &attrs);
|
|
||||||
|
|
||||||
sftp->mkdir_state = libssh2_NB_state_created;
|
sftp->mkdir_state = libssh2_NB_state_created;
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
packet = sftp->mkdir_packet;
|
packet = sftp->mkdir_packet;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2001,9 +1957,7 @@ libssh2_sftp_mkdir_ex(LIBSSH2_SFTP * sftp, const char *path,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* }}} */
|
/* libssh2_sftp_rmdir_ex
|
||||||
|
|
||||||
/* {{{ libssh2_sftp_rmdir_ex
|
|
||||||
* Remove a directory
|
* Remove a directory
|
||||||
*/
|
*/
|
||||||
/* libssh2_sftp_rmdir_ex - NB-UNSAFE?? */
|
/* libssh2_sftp_rmdir_ex - NB-UNSAFE?? */
|
||||||
@ -2088,9 +2042,7 @@ libssh2_sftp_rmdir_ex(LIBSSH2_SFTP * sftp, const char *path,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* }}} */
|
/* libssh2_sftp_stat_ex
|
||||||
|
|
||||||
/* {{{ libssh2_sftp_stat_ex
|
|
||||||
* Stat a file or symbolic link
|
* Stat a file or symbolic link
|
||||||
*/
|
*/
|
||||||
/* libssh2_sftp_stat_ex - NB-UNSAFE?? */
|
/* libssh2_sftp_stat_ex - NB-UNSAFE?? */
|
||||||
@ -2106,7 +2058,7 @@ libssh2_sftp_stat_ex(LIBSSH2_SFTP * sftp, const char *path,
|
|||||||
ssize_t packet_len =
|
ssize_t packet_len =
|
||||||
path_len + 13 +
|
path_len + 13 +
|
||||||
((stat_type ==
|
((stat_type ==
|
||||||
LIBSSH2_SFTP_SETSTAT) ? libssh2_sftp_attrsize(attrs) : 0);
|
LIBSSH2_SFTP_SETSTAT) ? sftp_attrsize(attrs) : 0);
|
||||||
unsigned char *s, *data;
|
unsigned char *s, *data;
|
||||||
static const unsigned char stat_responses[2] =
|
static const unsigned char stat_responses[2] =
|
||||||
{ SSH_FXP_ATTRS, SSH_FXP_STATUS };
|
{ SSH_FXP_ATTRS, SSH_FXP_STATUS };
|
||||||
@ -2147,7 +2099,7 @@ libssh2_sftp_stat_ex(LIBSSH2_SFTP * sftp, const char *path,
|
|||||||
memcpy(s, path, path_len);
|
memcpy(s, path, path_len);
|
||||||
s += path_len;
|
s += path_len;
|
||||||
if (stat_type == LIBSSH2_SFTP_SETSTAT) {
|
if (stat_type == LIBSSH2_SFTP_SETSTAT) {
|
||||||
s += libssh2_sftp_attr2bin(s, attrs);
|
s += sftp_attr2bin(s, attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
sftp->stat_state = libssh2_NB_state_created;
|
sftp->stat_state = libssh2_NB_state_created;
|
||||||
@ -2201,15 +2153,13 @@ libssh2_sftp_stat_ex(LIBSSH2_SFTP * sftp, const char *path,
|
|||||||
}
|
}
|
||||||
|
|
||||||
memset(attrs, 0, sizeof(LIBSSH2_SFTP_ATTRIBUTES));
|
memset(attrs, 0, sizeof(LIBSSH2_SFTP_ATTRIBUTES));
|
||||||
libssh2_sftp_bin2attr(attrs, data + 5);
|
sftp_bin2attr(attrs, data + 5);
|
||||||
LIBSSH2_FREE(session, data);
|
LIBSSH2_FREE(session, data);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* }}} */
|
/* libssh2_sftp_symlink_ex
|
||||||
|
|
||||||
/* {{{ libssh2_sftp_symlink_ex
|
|
||||||
* Read or set a symlink
|
* Read or set a symlink
|
||||||
*/
|
*/
|
||||||
LIBSSH2_API int
|
LIBSSH2_API int
|
||||||
@ -2351,9 +2301,7 @@ libssh2_sftp_symlink_ex(LIBSSH2_SFTP * sftp, const char *path,
|
|||||||
return link_len;
|
return link_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* }}} */
|
/* libssh2_sftp_last_error
|
||||||
|
|
||||||
/* {{{ libssh2_sftp_last_error
|
|
||||||
* Returns the last error code reported by SFTP
|
* Returns the last error code reported by SFTP
|
||||||
*/
|
*/
|
||||||
LIBSSH2_API unsigned long
|
LIBSSH2_API unsigned long
|
||||||
@ -2362,4 +2310,4 @@ libssh2_sftp_last_error(LIBSSH2_SFTP * sftp)
|
|||||||
return sftp->last_errno;
|
return sftp->last_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* }}} */
|
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user