mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-12-24 21:34:08 +03:00
util: implement fd_nonbloc()/fd_cloexec()
This commit is contained in:
parent
7418040c3a
commit
3a0ecb08f4
39
util.c
39
util.c
@ -32,6 +32,7 @@
|
||||
#include <linux/sched.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#include "macro.h"
|
||||
#include "util.h"
|
||||
@ -1084,6 +1085,44 @@ bool ignore_file(const char *filename) {
|
||||
endswith(filename, ".swp");
|
||||
}
|
||||
|
||||
int fd_nonblock(int fd, bool nonblock) {
|
||||
int flags;
|
||||
|
||||
assert(fd >= 0);
|
||||
|
||||
if ((flags = fcntl(fd, F_GETFL, 0)) < 0)
|
||||
return -errno;
|
||||
|
||||
if (nonblock)
|
||||
flags |= O_NONBLOCK;
|
||||
else
|
||||
flags &= ~O_NONBLOCK;
|
||||
|
||||
if (fcntl(fd, F_SETFL, flags) < 0)
|
||||
return -errno;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int fd_cloexec(int fd, bool cloexec) {
|
||||
int flags;
|
||||
|
||||
assert(fd >= 0);
|
||||
|
||||
if ((flags = fcntl(fd, F_GETFD, 0)) < 0)
|
||||
return -errno;
|
||||
|
||||
if (cloexec)
|
||||
flags |= FD_CLOEXEC;
|
||||
else
|
||||
flags &= ~FD_CLOEXEC;
|
||||
|
||||
if (fcntl(fd, F_SETFD, flags) < 0)
|
||||
return -errno;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const char *const ioprio_class_table[] = {
|
||||
[IOPRIO_CLASS_NONE] = "none",
|
||||
[IOPRIO_CLASS_RT] = "realtime",
|
||||
|
Loading…
Reference in New Issue
Block a user