-static int init_udevd_socket(struct udev *udev)
-{
- struct sockaddr_un saddr;
- socklen_t addrlen;
- const int feature_on = 1;
- int retval;
-
- memset(&saddr, 0x00, sizeof(saddr));
- saddr.sun_family = AF_LOCAL;
- strcpy(saddr.sun_path, UDEVD_CTRL_SOCK_PATH);
- addrlen = offsetof(struct sockaddr_un, sun_path) + strlen(saddr.sun_path);
- /* translate leading '@' to abstract namespace */
- if (saddr.sun_path[0] == '@')
- saddr.sun_path[0] = '\0';
-
- udevd_sock = socket(AF_LOCAL, SOCK_DGRAM, 0);
- if (udevd_sock == -1) {
- err(udev, "error getting socket: %s\n", strerror(errno));
- return -1;
- }
-
- /* the bind takes care of ensuring only one copy running */
- retval = bind(udevd_sock, (struct sockaddr *) &saddr, addrlen);
- if (retval < 0) {
- err(udev, "bind failed: %s\n", strerror(errno));
- close(udevd_sock);
- udevd_sock = -1;
- return -1;
- }
-
- /* enable receiving of the sender credentials */
- setsockopt(udevd_sock, SOL_SOCKET, SO_PASSCRED, &feature_on, sizeof(feature_on));
-
- return 0;
-}
-