chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
shared/capabilities: simplify assertions about bits
[elogind.git]
/
src
/
shared
/
btrfs-util.c
diff --git
a/src/shared/btrfs-util.c
b/src/shared/btrfs-util.c
index 254483c31a3ce5649fc0d722456c448a5461d450..b34ac8b15a80260c13cef09701bf1673d79d84df 100644
(file)
--- a/
src/shared/btrfs-util.c
+++ b/
src/shared/btrfs-util.c
@@
-228,14
+228,18
@@
int btrfs_subvol_remove(const char *path) {
return 0;
}
return 0;
}
-int btrfs_subvol_set_read_only(const char *path, bool b) {
- _cleanup_close_ int fd = -1;
+int btrfs_subvol_set_read_only_fd(int fd, bool b) {
uint64_t flags, nflags;
uint64_t flags, nflags;
+ struct stat st;
- fd = open(path, O_RDONLY|O_NOCTTY|O_CLOEXEC);
- if (fd < 0)
+ assert(fd >= 0);
+
+ if (fstat(fd, &st) < 0)
return -errno;
return -errno;
+ if (!S_ISDIR(st.st_mode) || st.st_ino != 256)
+ return -EINVAL;
+
if (ioctl(fd, BTRFS_IOC_SUBVOL_GETFLAGS, &flags) < 0)
return -errno;
if (ioctl(fd, BTRFS_IOC_SUBVOL_GETFLAGS, &flags) < 0)
return -errno;
@@
-253,6
+257,16
@@
int btrfs_subvol_set_read_only(const char *path, bool b) {
return 0;
}
return 0;
}
+int btrfs_subvol_set_read_only(const char *path, bool b) {
+ _cleanup_close_ int fd = -1;
+
+ fd = open(path, O_RDONLY|O_NOCTTY|O_CLOEXEC|O_DIRECTORY);
+ if (fd < 0)
+ return -errno;
+
+ return btrfs_subvol_set_read_only_fd(fd, b);
+}
+
int btrfs_subvol_get_read_only_fd(int fd) {
uint64_t flags;
int btrfs_subvol_get_read_only_fd(int fd) {
uint64_t flags;