From 1aa4caf318005cd4f22902fbe2fa208af50c22f9 Mon Sep 17 00:00:00 2001 From: Wayne Davison Date: Sat, 31 Jan 2004 22:40:55 +0000 Subject: [PATCH] One more improvement to the 0-flag-byte avoidance algorithm. --- flist.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/flist.c b/flist.c index 245a7ef9..c9ec0804 100644 --- a/flist.c +++ b/flist.c @@ -441,18 +441,22 @@ void send_file_entry(struct file_struct *file, int f, unsigned short base_flags) if (l2 > 255) flags |= XMIT_LONG_NAME; - /* We must make sure we don't send a zero flag-byte or - * the other end will terminate the flist transfer. */ - if (!(flags & 0xFF) && !S_ISDIR(mode)) - flags |= XMIT_TOP_DIR; /* NOTE: no meaning for non-dir */ + /* We must make sure we don't send a zero flag byte or the + * other end will terminate the flist transfer. Note that + * the use of XMIT_TOP_DIR on a non-dir has no meaning, so + * it's harmless way to add a bit to the first flag byte. */ if (protocol_version >= 28) { - if ((flags & 0xFF00) || !(flags & 0xFF)) { + if (!flags && !S_ISDIR(mode)) + flags |= XMIT_TOP_DIR; + if ((flags & 0xFF00) || !flags) { flags |= XMIT_EXTENDED_FLAGS; write_byte(f, flags); write_byte(f, flags >> 8); } else write_byte(f, flags); } else { + if (!(flags & 0xFF) && !S_ISDIR(mode)) + flags |= XMIT_TOP_DIR; if (!(flags & 0xFF)) flags |= XMIT_LONG_NAME; write_byte(f, flags); -- 2.34.1