mirror of
https://github.com/containers/fuse-overlayfs.git
synced 2025-09-10 07:44:54 -04:00
main, readdir: use only st_mode and st_ino
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
This commit is contained in:
parent
551638090f
commit
1237d05c1a
31
main.c
31
main.c
@ -1870,20 +1870,14 @@ ovl_do_readdir (fuse_req_t req, fuse_ino_t ino, size_t size,
|
|||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
size_t entsize;
|
size_t entsize;
|
||||||
struct stat st;
|
|
||||||
const char *name;
|
const char *name;
|
||||||
struct ovl_node *node = d->tbl[offset];
|
struct ovl_node *node = d->tbl[offset];
|
||||||
|
struct fuse_entry_param e;
|
||||||
|
struct stat *st = &e.attr;
|
||||||
|
|
||||||
if (node == NULL || node->whiteout || node->hidden)
|
if (node == NULL || node->whiteout || node->hidden)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
ret = rpl_stat (req, node, -1, NULL, NULL, &st);
|
|
||||||
if (ret < 0)
|
|
||||||
{
|
|
||||||
fuse_reply_err (req, errno);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (offset == 0)
|
if (offset == 0)
|
||||||
name = ".";
|
name = ".";
|
||||||
else if (offset == 1)
|
else if (offset == 1)
|
||||||
@ -1896,17 +1890,28 @@ ovl_do_readdir (fuse_req_t req, fuse_ino_t ino, size_t size,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!plus)
|
if (!plus)
|
||||||
entsize = fuse_add_direntry (req, p, remaining, name, &st, offset + 1);
|
{
|
||||||
|
/* From the 'stbuf' argument the st_ino field and bits 12-15 of the
|
||||||
|
* st_mode field are used. The other fields are ignored.
|
||||||
|
*/
|
||||||
|
st->st_ino = node->ino;
|
||||||
|
st->st_mode = node->mode;
|
||||||
|
|
||||||
|
entsize = fuse_add_direntry (req, p, remaining, name, st, offset + 1);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
struct fuse_entry_param e;
|
|
||||||
|
|
||||||
memset (&e, 0, sizeof (e));
|
memset (&e, 0, sizeof (e));
|
||||||
|
ret = rpl_stat (req, node, -1, NULL, NULL, st);
|
||||||
|
if (ret < 0)
|
||||||
|
{
|
||||||
|
fuse_reply_err (req, errno);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
e.attr_timeout = get_timeout (lo);
|
e.attr_timeout = get_timeout (lo);
|
||||||
e.entry_timeout = get_timeout (lo);
|
e.entry_timeout = get_timeout (lo);
|
||||||
e.ino = NODE_TO_INODE (node);
|
e.ino = NODE_TO_INODE (node);
|
||||||
memcpy (&e.attr, &st, sizeof (st));
|
|
||||||
|
|
||||||
entsize = fuse_add_direntry_plus (req, p, remaining, name, &e, offset + 1);
|
entsize = fuse_add_direntry_plus (req, p, remaining, name, &e, offset + 1);
|
||||||
if (entsize <= remaining)
|
if (entsize <= remaining)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user