diff options
authorAndrew Ilijic <ilijic.andrew@gmail.com>2019-10-17 11:03:19 -0400
committerRob Landley <rob@landley.net>2019-10-17 16:03:18 -0500
commit0b34a5637d91428ef5d87769a4c2698d7a1c2b0f (patch)
parent84f5ee5efa546eb6919033195a36561e5b0e667b (diff)
ls: Ensure file names are separated by 2 spaces
We need two spaces between filenames because that is the convention followed by other implementations. More importantly, if we do not have two spaces, certain Unicode file names cause filenames to run together. In Unicode, combining characters come before the character they modify. If a filename ends in a combining character, the combining character attaches to the space that follows it, causing the space not to be visible. Having a two-space gap stops the above issue from happening. For context and a bit more information, see mailing list link below. https://www.mail-archive.com/toybox@lists.landley.net/msg05986.html
1 files changed, 2 insertions, 1 deletions
diff --git a/toys/posix/ls.c b/toys/posix/ls.c
index 0956902f..d4c0211a 100644
--- a/toys/posix/ls.c
+++ b/toys/posix/ls.c
@@ -384,7 +384,8 @@ static void listfiles(int dirfd, struct dirtree *indir)
memset(colsizes, 0, columns*sizeof(unsigned));
for (ul=0; ul<dtlen; ul++) {
entrylen(sort[next_column(ul, dtlen, columns, &c)], len);
- *len += totpad+1;
+ // Add `2` to `totpad` to ensure two spaces between filenames
+ *len += totpad+2;
if (c == columns) break;
// Expand this column if necessary, break if that puts us over budget
if (*len > colsizes[c]) {