#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
+#include <stddef.h>
#include <string.h>
#include <unistd.h>
#include <time.h>
struct timespec tspec;
int sock;
struct sockaddr_un saddr;
+ socklen_t addrlen;
+#ifdef DEBUG
init_logging("udevsend");
+#endif
subsystem = argv[1];
if (subsystem == NULL) {
}
seqnum = get_seqnum();
- if (seqnum == NULL) {
- dbg("no seqnum");
- goto exit;
- }
- seq = atoi(seqnum);
+ if (seqnum == NULL)
+ seq = 0;
+ else
+ seq = atoi(seqnum);
sock = socket(AF_LOCAL, SOCK_STREAM, 0);
if (sock == -1) {
memset(&saddr, 0x00, sizeof(saddr));
saddr.sun_family = AF_LOCAL;
- strcpy(saddr.sun_path, UDEVD_SOCK);
+ /* use abstract namespace for socket path */
+ strcpy(&saddr.sun_path[1], UDEVD_SOCK_PATH);
+ addrlen = offsetof(struct sockaddr_un, sun_path) + strlen(saddr.sun_path+1) + 1;
/* try to connect, if it fails start daemon */
- retval = connect(sock, (struct sockaddr *) &saddr, sizeof(saddr));
+ retval = connect(sock, (struct sockaddr *) &saddr, addrlen);
if (retval != -1) {
goto send;
} else {