aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorNikolaus Rath <Nikolaus@rath.org>2016-06-05 10:45:35 -0400
committerNikolaus Rath <Nikolaus@rath.org>2016-06-05 12:25:44 -0400
commit738c7eb5f8ba1c45262c4fc8df4f2eb0a59a665c (patch)
treed11c17093863ef7737910e762f41d3e465d20741 /lib
parent7bb2bd7ed4ca0412b7a8409b49a031d388b92216 (diff)
downloadlibfuse-738c7eb5f8ba1c45262c4fc8df4f2eb0a59a665c.tar.gz
Don't use IFTODT macro.
IFTODT is provided by libc to convert from mode_t (as included in e.g. struct fstat) to d_type (unsigned char element of struct dirent, as returned by e.g. readdir). However, fuse actually uses a different struct fuse_dirent with a "type" field of type uint32. In other words, the semantics of (struct fuse_dirent).type are not necessarily the same as those of (struct dirent).d_type.
Diffstat (limited to 'lib')
-rwxr-xr-xlib/fuse_lowlevel.c9
1 files changed, 2 insertions, 7 deletions
diff --git a/lib/fuse_lowlevel.c b/lib/fuse_lowlevel.c
index 64f9c60..a7444a7 100755
--- a/lib/fuse_lowlevel.c
+++ b/lib/fuse_lowlevel.c
@@ -266,11 +266,6 @@ int fuse_reply_iov(fuse_req_t req, const struct iovec *iov, int count)
return res;
}
-#ifndef IFTODT
-# define IFTODT(mode) (((mode) & 0170000) >> 12)
-#endif
-
-
static void calculate_dirent_size(const char *name,
size_t *namelen,
size_t *entlen,
@@ -311,7 +306,7 @@ size_t fuse_add_direntry(fuse_req_t req, char *buf, size_t bufsize,
dirent->ino = stbuf->st_ino;
dirent->off = off;
dirent->namelen = namelen;
- dirent->type = IFTODT(stbuf->st_mode);
+ dirent->type = (stbuf->st_mode & 0170000) >> 12;
strncpy(dirent->name, name, namelen);
memset(dirent->name + namelen, 0, entlen_padded - entlen);
@@ -402,7 +397,7 @@ size_t fuse_add_direntry_plus(fuse_req_t req, char *buf, size_t bufsize,
dirent->ino = e->attr.st_ino;
dirent->off = off;
dirent->namelen = namelen;
- dirent->type = IFTODT(e->attr.st_mode);
+ dirent->type = (e->attr.st_mode & 0170000) >> 12;
strncpy(dirent->name, name, namelen);
memset(dirent->name + namelen, 0, entlen_padded - entlen);