X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=udevsend.c;h=246a097f260d30c90b61456ff782479ac29abe59;hb=1dadabd79b28a4cd72382abf746e9cf4c0589617;hp=6af9df77040a386c39a93ddf1245235efd517eda;hpb=95a6f4c8acafe7031087667aa556a50a6a091c93;p=elogind.git diff --git a/udevsend.c b/udevsend.c index 6af9df770..246a097f2 100644 --- a/udevsend.c +++ b/udevsend.c @@ -23,17 +23,16 @@ */ #include -#include -#include +#include +#include +#include #include #include #include +#include #include #include #include -#include -#include -#include #include "udev.h" #include "udev_version.h" @@ -126,8 +125,11 @@ int main(int argc, char* argv[]) struct timespec tspec; int sock; struct sockaddr_un saddr; + socklen_t addrlen; +#ifdef DEBUG init_logging("udevsend"); +#endif subsystem = argv[1]; if (subsystem == NULL) { @@ -148,11 +150,10 @@ int main(int argc, char* argv[]) } 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) { @@ -162,10 +163,12 @@ int main(int argc, char* argv[]) 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, &saddr, sizeof(saddr)); + retval = connect(sock, (struct sockaddr *) &saddr, addrlen); if (retval != -1) { goto send; } else { @@ -184,7 +187,7 @@ int main(int argc, char* argv[]) tspec.tv_nsec = 100000000; /* 100 millisec */ loop = UDEVSEND_CONNECT_RETRY; while (loop--) { - retval = connect(sock, &saddr, sizeof(saddr)); + retval = connect(sock, (struct sockaddr *) &saddr, sizeof(saddr)); if (retval != -1) goto send; else