summaryrefslogtreecommitdiff
path: root/src/udev/udev-ctrl.c
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2019-01-24 15:09:40 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2019-02-20 06:17:42 +0900
commit53bba2fb1da3ca26b1cf96c461598d53df2040cc (patch)
tree538a8753e70edaf07954cfd0651ae16b831fe6ea /src/udev/udev-ctrl.c
parent100bc5bf98ed051e94667c9581f7098856527ee9 (diff)
downloadsystemd-53bba2fb1da3ca26b1cf96c461598d53df2040cc.tar.gz
udev-ctrl: refactor udev_ctrl_enable_receiving()
Diffstat (limited to 'src/udev/udev-ctrl.c')
-rw-r--r--src/udev/udev-ctrl.c33
1 files changed, 18 insertions, 15 deletions
diff --git a/src/udev/udev-ctrl.c b/src/udev/udev-ctrl.c
index 0ed59c0c70..7d8ff6d1ce 100644
--- a/src/udev/udev-ctrl.c
+++ b/src/udev/udev-ctrl.c
@@ -116,25 +116,28 @@ int udev_ctrl_new_from_fd(struct udev_ctrl **ret, int fd) {
}
int udev_ctrl_enable_receiving(struct udev_ctrl *uctrl) {
- int err;
-
- if (!uctrl->bound) {
- err = bind(uctrl->sock, &uctrl->saddr.sa, uctrl->addrlen);
- if (err < 0 && errno == EADDRINUSE) {
- (void) sockaddr_un_unlink(&uctrl->saddr.un);
- err = bind(uctrl->sock, &uctrl->saddr.sa, uctrl->addrlen);
- }
+ int r;
- if (err < 0)
- return log_error_errno(errno, "Failed to bind socket: %m");
+ assert(uctrl);
- err = listen(uctrl->sock, 0);
- if (err < 0)
- return log_error_errno(errno, "Failed to listen: %m");
+ if (uctrl->bound)
+ return 0;
- uctrl->bound = true;
- uctrl->cleanup_socket = true;
+ r = bind(uctrl->sock, &uctrl->saddr.sa, uctrl->addrlen);
+ if (r < 0 && errno == EADDRINUSE) {
+ (void) sockaddr_un_unlink(&uctrl->saddr.un);
+ r = bind(uctrl->sock, &uctrl->saddr.sa, uctrl->addrlen);
}
+
+ if (r < 0)
+ return log_error_errno(errno, "Failed to bind udev control socket: %m");
+
+ if (listen(uctrl->sock, 0) < 0)
+ return log_error_errno(errno, "Failed to listen udev control socket: %m");
+
+ uctrl->bound = true;
+ uctrl->cleanup_socket = true;
+
return 0;
}