>From 8b209620abfbd8147a2c771cb0126dcca528e34f Mon Sep 17 00:00:00 2001 From: Igor Ostapenko <[email protected]> Date: Sat, 18 Dec 2021 04:30:17 +0200 Subject: erofs-utils: fix consistency + add NUL after root path
Signed-off-by: Igor Ostapenko <[email protected]> --- fsck/main.c | 2 +- lib/dir.c | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/fsck/main.c b/fsck/main.c index df4845d..30d0a1b 100644 --- a/fsck/main.c +++ b/fsck/main.c @@ -400,7 +400,7 @@ static int erofsfsck_check_inode(erofs_nid_t pnid, erofs_nid_t nid) goto out; /* XXXX: the dir depth should be restricted in order to avoid loops */ - if ((inode.i_mode & S_IFMT) == S_IFDIR) { + if (S_ISDIR(inode.i_mode)) { struct erofs_dir_context ctx = { .flags = EROFS_READDIR_VALID_PNID, .pnid = pnid, diff --git a/lib/dir.c b/lib/dir.c index 340dce6..d5b8096 100644 --- a/lib/dir.c +++ b/lib/dir.c @@ -127,7 +127,7 @@ int erofs_iterate_dir(struct erofs_dir_context *ctx, bool fsck) erofs_off_t pos; char buf[EROFS_BLKSIZ]; - if ((dir->i_mode & S_IFMT) != S_IFDIR) + if (!S_ISDIR(dir->i_mode)) return -ENOTDIR; ctx->flags &= ~EROFS_READDIR_ALL_SPECIAL_FOUND; @@ -244,13 +244,14 @@ int erofs_get_pathname(erofs_nid_t nid, char *buf, size_t size) }; if (nid == root.nid) { - if (size == 0) { - erofs_err("get_pathname buffer not large enough: len 1, size %zd", + if (size < 2) { + erofs_err("get_pathname buffer not large enough: len 2, size %zd", size); return -ENOMEM; } buf[0] = '/'; + buf[1] = '\0'; return 0; } -- 2.30.2
