Document fuse_fsync_in.fsync_flags and remove magic numbers (#375)
authorAlan Somers <asomers@gmail.com>
Fri, 8 Mar 2019 21:24:50 +0000 (14:24 -0700)
committerNikolaus Rath <Nikolaus@rath.org>
Fri, 8 Mar 2019 21:24:50 +0000 (21:24 +0000)
example/hello_ll.c
example/notify_inval_inode.c
example/notify_store_retrieve.c
example/poll.c
include/fuse_kernel.h
lib/fuse_lowlevel.c
test/test_syscalls.c

index 97f3c506aa28e990b137cedc91c76ed459c2493f..51b452c989e55b20a9ed2594649c826aeef2952f 100644 (file)
@@ -138,7 +138,7 @@ static void hello_ll_open(fuse_req_t req, fuse_ino_t ino,
 {
        if (ino != 2)
                fuse_reply_err(req, EISDIR);
-       else if ((fi->flags & 3) != O_RDONLY)
+       else if ((fi->flags & O_ACCMODE) != O_RDONLY)
                fuse_reply_err(req, EACCES);
        else
                fuse_reply_open(req, fi);
index 0cee6e647e04f510c083e902ffb09073debaddb4..cdea82dd02abb5a12012aa79c501d892c332f04a 100644 (file)
    timeout, so we just send a big value */
 #define NO_TIMEOUT 500000
 
-/* We cannot check directly if e.g. O_RDONLY is set, since this is not
- * an individual bit (cf. open(2)) */
-#define ACCESS_MASK (O_RDONLY | O_WRONLY | O_RDWR)
-
 #define MAX_STR_LEN 128
 #define FILE_INO 2
 #define FILE_NAME "current_time"
@@ -224,7 +220,7 @@ static void tfs_open(fuse_req_t req, fuse_ino_t ino,
 
     if (ino == FUSE_ROOT_ID)
         fuse_reply_err(req, EISDIR);
-    else if ((fi->flags & ACCESS_MASK) != O_RDONLY)
+    else if ((fi->flags & O_ACCMODE) != O_RDONLY)
         fuse_reply_err(req, EACCES);
     else if (ino == FILE_INO)
         fuse_reply_open(req, fi);
index 8fd81ff2e60358b67aa0dbf180537799020a4ef0..56cb8b7c95f7d0f3c21d8edfef59b6d5f685d9c0 100644 (file)
    timeout, so we just send a big value */
 #define NO_TIMEOUT 500000
 
-/* We cannot check directly if e.g. O_RDONLY is set, since this is not
- * an individual bit (cf. open(2)) */
-#define ACCESS_MASK (O_RDONLY | O_WRONLY | O_RDWR)
-
 #define MAX_STR_LEN 128
 #define FILE_INO 2
 #define FILE_NAME "current_time"
@@ -227,7 +223,7 @@ static void tfs_open(fuse_req_t req, fuse_ino_t ino,
 
     if (ino == FUSE_ROOT_ID)
         fuse_reply_err(req, EISDIR);
-    else if ((fi->flags & ACCESS_MASK) != O_RDONLY)
+    else if ((fi->flags & O_ACCMODE) != O_RDONLY)
         fuse_reply_err(req, EACCES);
     else if (ino == FILE_INO)
         fuse_reply_open(req, fi);
index 8abca0784af4c41e9f54acac5298d4fca6fec149..64917cc7a8bccebede3358a6f329fcf24034772e 100644 (file)
@@ -115,7 +115,7 @@ static int fsel_open(const char *path, struct fuse_file_info *fi)
 
        if (idx < 0)
                return -ENOENT;
-       if ((fi->flags & 3) != O_RDONLY)
+       if ((fi->flags & O_ACCMODE) != O_RDONLY)
                return -EACCES;
        if (fsel_open_mask & (1 << idx))
                return -EBUSY;
index c806a17beaef816352b34902b3c0e778112bb62b..6079b7f23b48b3989f94d419e7663770ed415bad 100644 (file)
@@ -339,6 +339,13 @@ struct fuse_file_lock {
  */
 #define FUSE_POLL_SCHEDULE_NOTIFY (1 << 0)
 
+/**
+ * Fsync flags
+ *
+ * FUSE_FSYNC_FDATASYNC: Sync data only, not metadata
+ */
+#define FUSE_FSYNC_FDATASYNC   (1 << 0)
+
 enum fuse_opcode {
        FUSE_LOOKUP             = 1,
        FUSE_FORGET             = 2,  /* no reply */
index cd59ec073a8df111c035d293027afbb4c54f4d9e..f5542ccb4ffb2644f31f8756e154c63690e77bee 100644 (file)
@@ -284,7 +284,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 = (stbuf->st_mode & 0170000) >> 12;
+       dirent->type = (stbuf->st_mode & S_IFMT) >> 12;
        strncpy(dirent->name, name, namelen);
        memset(dirent->name + namelen, 0, entlen_padded - entlen);
 
@@ -377,7 +377,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 = (e->attr.st_mode & 0170000) >> 12;
+       dirent->type = (e->attr.st_mode & S_IFMT) >> 12;
        strncpy(dirent->name, name, namelen);
        memset(dirent->name + namelen, 0, entlen_padded - entlen);
 
@@ -1315,7 +1315,7 @@ static void do_write(fuse_req_t req, fuse_ino_t nodeid, const void *inarg)
 
        memset(&fi, 0, sizeof(fi));
        fi.fh = arg->fh;
-       fi.writepage = (arg->write_flags & 1) != 0;
+       fi.writepage = (arg->write_flags & FUSE_WRITE_CACHE) != 0;
 
        if (req->se->conn.proto_minor < 9) {
                param = ((char *) arg) + FUSE_COMPAT_WRITE_IN_SIZE;
@@ -1345,7 +1345,7 @@ static void do_write_buf(fuse_req_t req, fuse_ino_t nodeid, const void *inarg,
 
        memset(&fi, 0, sizeof(fi));
        fi.fh = arg->fh;
-       fi.writepage = arg->write_flags & 1;
+       fi.writepage = arg->write_flags & FUSE_WRITE_CACHE;
 
        if (se->conn.proto_minor < 9) {
                bufv.buf[0].mem = ((char *) arg) + FUSE_COMPAT_WRITE_IN_SIZE;
@@ -1420,12 +1420,13 @@ static void do_fsync(fuse_req_t req, fuse_ino_t nodeid, const void *inarg)
 {
        struct fuse_fsync_in *arg = (struct fuse_fsync_in *) inarg;
        struct fuse_file_info fi;
+       int datasync = arg->fsync_flags & FUSE_FSYNC_FDATASYNC;
 
        memset(&fi, 0, sizeof(fi));
        fi.fh = arg->fh;
 
        if (req->se->op.fsync)
-               req->se->op.fsync(req, nodeid, arg->fsync_flags & 1, &fi);
+               req->se->op.fsync(req, nodeid, datasync, &fi);
        else
                fuse_reply_err(req, ENOSYS);
 }
@@ -1491,12 +1492,13 @@ static void do_fsyncdir(fuse_req_t req, fuse_ino_t nodeid, const void *inarg)
 {
        struct fuse_fsync_in *arg = (struct fuse_fsync_in *) inarg;
        struct fuse_file_info fi;
+       int datasync = arg->fsync_flags & FUSE_FSYNC_FDATASYNC;
 
        memset(&fi, 0, sizeof(fi));
        fi.fh = arg->fh;
 
        if (req->se->op.fsyncdir)
-               req->se->op.fsyncdir(req, nodeid, arg->fsync_flags & 1, &fi);
+               req->se->op.fsyncdir(req, nodeid, datasync, &fi);
        else
                fuse_reply_err(req, ENOSYS);
 }
index a281ae35018f3d08f6d4467062ca38dce2588b97..cdf17d73018fc27c5d52a043e3da27235f6dc460 100644 (file)
@@ -163,8 +163,9 @@ static int check_mode(const char *path, mode_t mode)
                PERROR("lstat");
                return -1;
        }
-       if ((stbuf.st_mode & 07777) != mode) {
-               ERROR("mode 0%o instead of 0%o", stbuf.st_mode & 07777, mode);
+       if ((stbuf.st_mode & ALLPERMS) != mode) {
+               ERROR("mode 0%o instead of 0%o", stbuf.st_mode & ALLPERMS,
+                     mode);
                return -1;
        }
        return 0;
@@ -178,8 +179,9 @@ static int fcheck_mode(int fd, mode_t mode)
                PERROR("fstat");
                return -1;
        }
-       if ((stbuf.st_mode & 07777) != mode) {
-               ERROR("mode 0%o instead of 0%o", stbuf.st_mode & 07777, mode);
+       if ((stbuf.st_mode & ALLPERMS) != mode) {
+               ERROR("mode 0%o instead of 0%o", stbuf.st_mode & ALLPERMS,
+                     mode);
                return -1;
        }
        return 0;
@@ -1040,7 +1042,7 @@ static int do_test_open(int exist, int flags, const char *flags_str, int mode)
                err += check_mode(testfile, mode);
        err += check_nlink(testfile, 1);
        err += check_size(testfile, currlen);
-       if (exist && !(flags & O_TRUNC) && (mode & 0400))
+       if (exist && !(flags & O_TRUNC) && (mode & S_IRUSR))
                err += check_data(testfile, testdata2, 0, testdata2len);
 
        res = write(fd, data, datalen);
@@ -1057,7 +1059,7 @@ static int do_test_open(int exist, int flags, const char *flags_str, int mode)
 
                        err += check_size(testfile, currlen);
 
-                       if (mode & 0400) {
+                       if (mode & S_IRUSR) {
                                err += check_data(testfile, data, 0, datalen);
                                if (exist && !(flags & O_TRUNC) &&
                                    testdata2len > datalen)