version 1.45, 2004/02/19 21:15:04 |
version 1.46, 2004/06/21 17:36:31 |
|
|
} |
} |
|
|
static void |
static void |
send_status(u_int32_t id, u_int32_t error) |
send_status(u_int32_t id, u_int32_t status) |
{ |
{ |
Buffer msg; |
Buffer msg; |
const char *status_messages[] = { |
const char *status_messages[] = { |
|
|
"Unknown error" /* Others */ |
"Unknown error" /* Others */ |
}; |
}; |
|
|
TRACE("sent status id %u error %u", id, error); |
TRACE("sent status id %u error %u", id, status); |
buffer_init(&msg); |
buffer_init(&msg); |
buffer_put_char(&msg, SSH2_FXP_STATUS); |
buffer_put_char(&msg, SSH2_FXP_STATUS); |
buffer_put_int(&msg, id); |
buffer_put_int(&msg, id); |
buffer_put_int(&msg, error); |
buffer_put_int(&msg, status); |
if (version >= 3) { |
if (version >= 3) { |
buffer_put_cstring(&msg, |
buffer_put_cstring(&msg, |
status_messages[MIN(error,SSH2_FX_MAX)]); |
status_messages[MIN(status,SSH2_FX_MAX)]); |
buffer_put_cstring(&msg, ""); |
buffer_put_cstring(&msg, ""); |
} |
} |
send_msg(&msg); |
send_msg(&msg); |
|
|
{ |
{ |
u_int32_t id; |
u_int32_t id; |
int len; |
int len; |
char link[MAXPATHLEN]; |
char buf[MAXPATHLEN]; |
char *path; |
char *path; |
|
|
id = get_int(); |
id = get_int(); |
path = get_string(NULL); |
path = get_string(NULL); |
TRACE("readlink id %u path %s", id, path); |
TRACE("readlink id %u path %s", id, path); |
if ((len = readlink(path, link, sizeof(link) - 1)) == -1) |
if ((len = readlink(path, buf, sizeof(buf) - 1)) == -1) |
send_status(id, errno_to_portable(errno)); |
send_status(id, errno_to_portable(errno)); |
else { |
else { |
Stat s; |
Stat s; |
|
|
link[len] = '\0'; |
buf[len] = '\0'; |
attrib_clear(&s.attrib); |
attrib_clear(&s.attrib); |
s.name = s.long_name = link; |
s.name = s.long_name = buf; |
send_names(id, 1, &s); |
send_names(id, 1, &s); |
} |
} |
xfree(path); |
xfree(path); |