From: Nikolaus Rath Date: Thu, 25 May 2017 20:12:06 +0000 (-0700) Subject: Document RENAME_EXCHANGE and RENAME_NOREPLACE flags. X-Git-Tag: fuse-3.1.0~25 X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=6ac254c00fc6026fd462b7b93aaa9dc4aa676f69;p=qemu-gpiodev%2Flibfuse.git Document RENAME_EXCHANGE and RENAME_NOREPLACE flags. --- diff --git a/ChangeLog.rst b/ChangeLog.rst index 3bf56b7..560ad98 100644 --- a/ChangeLog.rst +++ b/ChangeLog.rst @@ -3,6 +3,10 @@ Unreleased Changes * `fuse_main()` / `fuse_remove_signal_handlers()`: do not reset `SIGPIPE` handler to `SIG_DFL` it was not set by us. +* Documented the `RENAME_EXCHANGE` and `RENAME_NOREPLACE` flags that + may be passed to the `rename` handler of both the high- and + low-level API. Filesystem authors are strongly encouraged to check + that these flags are handled correctly. libfuse 3.0.2 (2017-05-24) ========================== diff --git a/include/fuse.h b/include/fuse.h index 754303f..0c5741f 100644 --- a/include/fuse.h +++ b/include/fuse.h @@ -339,8 +339,16 @@ struct fuse_operations { /** Create a symbolic link */ int (*symlink) (const char *, const char *); - /** Rename a file */ - int (*rename) (const char *, const char *, unsigned int); + /** Rename a file + * + * *flags* may be `RENAME_EXCHANGE` or `RENAME_NOREPLACE`. If + * RENAME_NOREPLACE is specified, the filesystem must not + * overwrite *newname* if it exists and return an error + * instead. If `RENAME_EXCHANGE` is specified, the filesystem + * must atomically exchange the two files, i.e. both must + * exist and neither may be deleted. + */ + int (*rename) (const char *, const char *, unsigned int flags); /** Create a hard link to a file */ int (*link) (const char *, const char *); diff --git a/include/fuse_lowlevel.h b/include/fuse_lowlevel.h index 987b24d..fd8bc1a 100644 --- a/include/fuse_lowlevel.h +++ b/include/fuse_lowlevel.h @@ -408,6 +408,13 @@ struct fuse_lowlevel_ops { * future bmap requests will fail with EINVAL without being * send to the filesystem process. * + * *flags* may be `RENAME_EXCHANGE` or `RENAME_NOREPLACE`. If + * RENAME_NOREPLACE is specified, the filesystem must not + * overwrite *newname* if it exists and return an error + * instead. If `RENAME_EXCHANGE` is specified, the filesystem + * must atomically exchange the two files, i.e. both must + * exist and neither may be deleted. + * * Valid replies: * fuse_reply_err *