X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=libudev%2Flibudev-ctrl.c;h=63bf53919738ae0757ea02381e70e3b9390ccd97;hp=e47b2b66dc6eb02910e1bad1e26243b4c86a74d8;hb=fc1de713f5b754fb38876b5b797e18f812727f0a;hpb=48a9b173e88738ff4eefb3519f1d27711b417c8d diff --git a/libudev/libudev-ctrl.c b/libudev/libudev-ctrl.c index e47b2b66d..63bf53919 100644 --- a/libudev/libudev-ctrl.c +++ b/libudev/libudev-ctrl.c @@ -32,8 +32,7 @@ enum udev_ctrl_msg_type { UDEV_CTRL_START_EXEC_QUEUE, UDEV_CTRL_RELOAD_RULES, UDEV_CTRL_SET_ENV, - UDEV_CTRL_SET_MAX_CHILDS, - UDEV_CTRL_SET_MAX_CHILDS_RUNNING, + UDEV_CTRL_SET_CHILDREN_MAX, UDEV_CTRL_SETTLE, }; @@ -62,7 +61,7 @@ struct udev_ctrl { socklen_t addrlen; }; -struct udev_ctrl *udev_ctrl_new_from_socket(struct udev *udev, const char *socket_path) +static struct udev_ctrl *udev_ctrl_new(struct udev *udev) { struct udev_ctrl *uctrl; @@ -71,6 +70,16 @@ struct udev_ctrl *udev_ctrl_new_from_socket(struct udev *udev, const char *socke return NULL; uctrl->refcount = 1; uctrl->udev = udev; + return uctrl; +} + +struct udev_ctrl *udev_ctrl_new_from_socket(struct udev *udev, const char *socket_path) +{ + struct udev_ctrl *uctrl; + + uctrl = udev_ctrl_new(udev); + if (uctrl == NULL) + return NULL; uctrl->sock = socket(AF_LOCAL, SOCK_DGRAM, 0); if (uctrl->sock < 0) { @@ -85,6 +94,17 @@ struct udev_ctrl *udev_ctrl_new_from_socket(struct udev *udev, const char *socke /* translate leading '@' to abstract namespace */ if (uctrl->saddr.sun_path[0] == '@') uctrl->saddr.sun_path[0] = '\0'; + return uctrl; +} + +struct udev_ctrl *udev_ctrl_new_from_fd(struct udev *udev, int fd) +{ + struct udev_ctrl *uctrl; + + uctrl = udev_ctrl_new(udev); + if (uctrl == NULL) + return NULL; + uctrl->sock = fd; return uctrl; } @@ -92,16 +112,18 @@ struct udev_ctrl *udev_ctrl_new_from_socket(struct udev *udev, const char *socke int udev_ctrl_enable_receiving(struct udev_ctrl *uctrl) { int err; - const int feature_on = 1; - - err= bind(uctrl->sock, (struct sockaddr *)&uctrl->saddr, uctrl->addrlen); - if (err < 0) { - err(uctrl->udev, "bind failed: %m\n"); - return err; + const int on = 1; + + if (uctrl->addrlen > 0) { + err = bind(uctrl->sock, (struct sockaddr *)&uctrl->saddr, uctrl->addrlen); + if (err < 0) { + err(uctrl->udev, "bind failed: %m\n"); + return err; + } } /* enable receiving of the sender credentials */ - setsockopt(uctrl->sock, SOL_SOCKET, SO_PASSCRED, &feature_on, sizeof(feature_on)); + setsockopt(uctrl->sock, SOL_SOCKET, SO_PASSCRED, &on, sizeof(on)); return 0; } @@ -185,9 +207,9 @@ int udev_ctrl_send_set_env(struct udev_ctrl *uctrl, const char *key) return ctrl_send(uctrl, UDEV_CTRL_SET_ENV, 0, key); } -int udev_ctrl_send_set_max_childs(struct udev_ctrl *uctrl, int count) +int udev_ctrl_send_set_children_max(struct udev_ctrl *uctrl, int count) { - return ctrl_send(uctrl, UDEV_CTRL_SET_MAX_CHILDS, count, NULL); + return ctrl_send(uctrl, UDEV_CTRL_SET_CHILDREN_MAX, count, NULL); } int udev_ctrl_send_settle(struct udev_ctrl *uctrl) @@ -306,9 +328,9 @@ const char *udev_ctrl_get_set_env(struct udev_ctrl_msg *ctrl_msg) return NULL; } -int udev_ctrl_get_set_max_childs(struct udev_ctrl_msg *ctrl_msg) +int udev_ctrl_get_set_children_max(struct udev_ctrl_msg *ctrl_msg) { - if (ctrl_msg->ctrl_msg_wire.type == UDEV_CTRL_SET_MAX_CHILDS) + if (ctrl_msg->ctrl_msg_wire.type == UDEV_CTRL_SET_CHILDREN_MAX) return ctrl_msg->ctrl_msg_wire.intval; return -1; }