ftpd: optimize writes of LIST results a bit
function old new delta handle_dir_common 201 207 +6 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
2a870d091e
commit
0b0ccd4570
@ -709,6 +709,7 @@ handle_dir_common(int opts)
|
|||||||
* which can be problematic in chroot */
|
* which can be problematic in chroot */
|
||||||
ls_fd = popen_ls((opts & LONG_LISTING) ? "-l" : "-1");
|
ls_fd = popen_ls((opts & LONG_LISTING) ? "-l" : "-1");
|
||||||
ls_fp = xfdopen_for_read(ls_fd);
|
ls_fp = xfdopen_for_read(ls_fd);
|
||||||
|
/* FIXME: filenames with embedded newlines are mishandled */
|
||||||
|
|
||||||
if (opts & USE_CTRL_CONN) {
|
if (opts & USE_CTRL_CONN) {
|
||||||
/* STAT <filename> */
|
/* STAT <filename> */
|
||||||
@ -729,16 +730,20 @@ handle_dir_common(int opts)
|
|||||||
int remote_fd = get_remote_transfer_fd(" Directory listing");
|
int remote_fd = get_remote_transfer_fd(" Directory listing");
|
||||||
if (remote_fd >= 0) {
|
if (remote_fd >= 0) {
|
||||||
while (1) {
|
while (1) {
|
||||||
line = xmalloc_fgetline(ls_fp);
|
unsigned len;
|
||||||
|
|
||||||
|
line = xmalloc_fgets(ls_fp);
|
||||||
if (!line)
|
if (!line)
|
||||||
break;
|
break;
|
||||||
/* I've seen clients complaining when they
|
/* I've seen clients complaining when they
|
||||||
* are fed with ls output with bare '\n'.
|
* are fed with ls output with bare '\n'.
|
||||||
* Pity... that would be much simpler.
|
* Replace trailing "\n\0" with "\r\n".
|
||||||
*/
|
*/
|
||||||
/* TODO: need to s/LF/NUL/g here */
|
len = strlen(line);
|
||||||
xwrite_str(remote_fd, line);
|
if (len != 0) /* paranoia check */
|
||||||
xwrite(remote_fd, "\r\n", 2);
|
line[len - 1] = '\r';
|
||||||
|
line[len] = '\n';
|
||||||
|
xwrite(remote_fd, line, len + 1);
|
||||||
free(line);
|
free(line);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user