version 1.101.2.1, 2013/11/08 01:33:56 |
version 1.102, 2013/08/08 05:04:03 |
|
|
|
|
if (dir) { |
if (dir) { |
ents = 0; |
ents = 0; |
*dir = xcalloc(1, sizeof(**dir)); |
*dir = xmalloc(sizeof(**dir)); |
(*dir)[0] = NULL; |
(*dir)[0] = NULL; |
} |
} |
|
|
|
|
|
|
if (dir) { |
if (dir) { |
*dir = xrealloc(*dir, ents + 2, sizeof(**dir)); |
*dir = xrealloc(*dir, ents + 2, sizeof(**dir)); |
(*dir)[ents] = xcalloc(1, sizeof(***dir)); |
(*dir)[ents] = xmalloc(sizeof(***dir)); |
(*dir)[ents]->filename = xstrdup(filename); |
(*dir)[ents]->filename = xstrdup(filename); |
(*dir)[ents]->longname = xstrdup(longname); |
(*dir)[ents]->longname = xstrdup(longname); |
memcpy(&(*dir)[ents]->a, a, sizeof(*a)); |
memcpy(&(*dir)[ents]->a, a, sizeof(*a)); |
|
|
/* Don't return partial matches on interrupt */ |
/* Don't return partial matches on interrupt */ |
if (interrupted && dir != NULL && *dir != NULL) { |
if (interrupted && dir != NULL && *dir != NULL) { |
free_sftp_dirents(*dir); |
free_sftp_dirents(*dir); |
*dir = xcalloc(1, sizeof(**dir)); |
*dir = xmalloc(sizeof(**dir)); |
**dir = NULL; |
**dir = NULL; |
} |
} |
|
|
|
|
} |
} |
|
|
int |
int |
do_rename(struct sftp_conn *conn, char *oldpath, char *newpath) |
do_rename(struct sftp_conn *conn, char *oldpath, char *newpath, |
|
int force_legacy) |
{ |
{ |
Buffer msg; |
Buffer msg; |
u_int status, id; |
u_int status, id; |
|
int use_ext = (conn->exts & SFTP_EXT_POSIX_RENAME) && !force_legacy; |
|
|
buffer_init(&msg); |
buffer_init(&msg); |
|
|
/* Send rename request */ |
/* Send rename request */ |
id = conn->msg_id++; |
id = conn->msg_id++; |
if ((conn->exts & SFTP_EXT_POSIX_RENAME)) { |
if (use_ext) { |
buffer_put_char(&msg, SSH2_FXP_EXTENDED); |
buffer_put_char(&msg, SSH2_FXP_EXTENDED); |
buffer_put_int(&msg, id); |
buffer_put_int(&msg, id); |
buffer_put_cstring(&msg, "posix-rename@openssh.com"); |
buffer_put_cstring(&msg, "posix-rename@openssh.com"); |
|
|
buffer_put_cstring(&msg, newpath); |
buffer_put_cstring(&msg, newpath); |
send_msg(conn, &msg); |
send_msg(conn, &msg); |
debug3("Sent message %s \"%s\" -> \"%s\"", |
debug3("Sent message %s \"%s\" -> \"%s\"", |
(conn->exts & SFTP_EXT_POSIX_RENAME) ? "posix-rename@openssh.com" : |
use_ext ? "posix-rename@openssh.com" : "SSH2_FXP_RENAME", |
"SSH2_FXP_RENAME", oldpath, newpath); |
oldpath, newpath); |
buffer_free(&msg); |
buffer_free(&msg); |
|
|
status = get_status(conn, id); |
status = get_status(conn, id); |
|
|
(unsigned long long)offset, |
(unsigned long long)offset, |
(unsigned long long)offset + buflen - 1, |
(unsigned long long)offset + buflen - 1, |
num_req, max_req); |
num_req, max_req); |
req = xcalloc(1, sizeof(*req)); |
req = xmalloc(sizeof(*req)); |
req->id = conn->msg_id++; |
req->id = conn->msg_id++; |
req->len = buflen; |
req->len = buflen; |
req->offset = offset; |
req->offset = offset; |
|
|
strerror(errno)); |
strerror(errno)); |
|
|
if (len != 0) { |
if (len != 0) { |
ack = xcalloc(1, sizeof(*ack)); |
ack = xmalloc(sizeof(*ack)); |
ack->id = ++id; |
ack->id = ++id; |
ack->offset = offset; |
ack->offset = offset; |
ack->len = len; |
ack->len = len; |