[systemd-devel] [PATCH 1/4] Add change_attr_fd()
From: Goffredo Baroncelli kreij...@inwind.it Add change_attr_fd() function to modify the file/directory attribute. --- src/shared/util.c | 22 ++ src/shared/util.h | 1 + 2 files changed, 23 insertions(+) diff --git a/src/shared/util.c b/src/shared/util.c index ba035ca..56097ec 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -7832,6 +7832,28 @@ int chattr_path(const char *p, bool b, unsigned mask) { return chattr_fd(fd, b, mask); } +int change_attr_fd(int fd, unsigned value, unsigned mask) { +unsigned old_attr, new_attr; + +assert(fd = 0); + +if (mask == 0) +return 0; + +if (ioctl(fd, FS_IOC_GETFLAGS, old_attr) 0) +return -errno; + +new_attr = (old_attr ~mask) |(value mask); + +if (new_attr == old_attr) +return 0; + +if (ioctl(fd, FS_IOC_SETFLAGS, new_attr) 0) +return -errno; + +return 0; +} + int read_attr_fd(int fd, unsigned *ret) { assert(fd = 0); diff --git a/src/shared/util.h b/src/shared/util.h index a83b588..a0bc883 100644 --- a/src/shared/util.h +++ b/src/shared/util.h @@ -1052,6 +1052,7 @@ int same_fd(int a, int b); int chattr_fd(int fd, bool b, unsigned mask); int chattr_path(const char *p, bool b, unsigned mask); +int change_attr_fd(int fd, unsigned value, unsigned mask); int read_attr_fd(int fd, unsigned *ret); int read_attr_path(const char *p, unsigned *ret); -- 2.1.4 ___ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel
[systemd-devel] [PATCH 1/4] Add change_attr_fd()
Add change_attr_fd() function to modify the file/directory attribute. --- src/shared/util.c | 22 ++ src/shared/util.h | 1 + 2 files changed, 23 insertions(+) diff --git a/src/shared/util.c b/src/shared/util.c index ba035ca..56097ec 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -7832,6 +7832,28 @@ int chattr_path(const char *p, bool b, unsigned mask) { return chattr_fd(fd, b, mask); } +int change_attr_fd(int fd, unsigned value, unsigned mask) { +unsigned old_attr, new_attr; + +assert(fd = 0); + +if (mask == 0) +return 0; + +if (ioctl(fd, FS_IOC_GETFLAGS, old_attr) 0) +return -errno; + +new_attr = (old_attr ~mask) |(value mask); + +if (new_attr == old_attr) +return 0; + +if (ioctl(fd, FS_IOC_SETFLAGS, new_attr) 0) +return -errno; + +return 0; +} + int read_attr_fd(int fd, unsigned *ret) { assert(fd = 0); diff --git a/src/shared/util.h b/src/shared/util.h index a83b588..a0bc883 100644 --- a/src/shared/util.h +++ b/src/shared/util.h @@ -1052,6 +1052,7 @@ int same_fd(int a, int b); int chattr_fd(int fd, bool b, unsigned mask); int chattr_path(const char *p, bool b, unsigned mask); +int change_attr_fd(int fd, unsigned value, unsigned mask); int read_attr_fd(int fd, unsigned *ret); int read_attr_path(const char *p, unsigned *ret); -- 2.1.4 ___ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel
[systemd-devel] [PATCH 1/4] Add change_attr_fd()
Add change_attr_fd() function to modify the file/directory attribute. --- src/shared/util.c | 22 ++ src/shared/util.h | 1 + 2 files changed, 23 insertions(+) diff --git a/src/shared/util.c b/src/shared/util.c index ba035ca..56097ec 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -7832,6 +7832,28 @@ int chattr_path(const char *p, bool b, unsigned mask) { return chattr_fd(fd, b, mask); } +int change_attr_fd(int fd, unsigned value, unsigned mask) { +unsigned old_attr, new_attr; + +assert(fd = 0); + +if (mask == 0) +return 0; + +if (ioctl(fd, FS_IOC_GETFLAGS, old_attr) 0) +return -errno; + +new_attr = (old_attr ~mask) |(value mask); + +if (new_attr == old_attr) +return 0; + +if (ioctl(fd, FS_IOC_SETFLAGS, new_attr) 0) +return -errno; + +return 0; +} + int read_attr_fd(int fd, unsigned *ret) { assert(fd = 0); diff --git a/src/shared/util.h b/src/shared/util.h index a83b588..a0bc883 100644 --- a/src/shared/util.h +++ b/src/shared/util.h @@ -1052,6 +1052,7 @@ int same_fd(int a, int b); int chattr_fd(int fd, bool b, unsigned mask); int chattr_path(const char *p, bool b, unsigned mask); +int change_attr_fd(int fd, unsigned value, unsigned mask); int read_attr_fd(int fd, unsigned *ret); int read_attr_path(const char *p, unsigned *ret); -- 2.1.4 ___ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel