From 59feea2ff244026cc63a49e038868fffe8286dad Mon Sep 17 00:00:00 2001 From: Jeremy Kerr Date: Mon, 6 May 2013 14:23:17 +0800 Subject: pb-event: move send code to a separate function Signed-off-by: Jeremy Kerr --- utils/pb-event.c | 66 ++++++++++++++++++++++++++++++-------------------------- 1 file changed, 36 insertions(+), 30 deletions(-) diff --git a/utils/pb-event.c b/utils/pb-event.c index 3649c9f..4a16719 100644 --- a/utils/pb-event.c +++ b/utils/pb-event.c @@ -22,6 +22,7 @@ #define _GNU_SOURCE #include +#include #include #include #include @@ -121,26 +122,50 @@ static ssize_t parse_event_file(FILE *filp, char *buf, size_t max_len) return len; } -int main(int argc, char *argv[]) +static int send_event(char *buf, ssize_t len) { struct sockaddr_un addr; + int sd, i; + + sd = socket(PF_UNIX, SOCK_DGRAM, 0); + if (sd < 0) + err(EXIT_FAILURE, "socket"); + + memset(&addr, 0, sizeof(addr)); + addr.sun_family = AF_UNIX; + strcpy(addr.sun_path, PBOOT_USER_EVENT_SOCKET); + + for (i = 10; i; i--) { + ssize_t sent = sendto(sd, buf, len, 0, + (struct sockaddr *)&addr, SUN_LEN(&addr)); + + if (sent == len) + break; + + DBG("pb-event: waiting for server %d\n", i); + sleep(1); + } + + close(sd); + + if (!i) + err(EXIT_FAILURE, "send"); + + DBG("pb-event: wrote %zu bytes\n", len); + + return 0; +} + +int main(int argc, char *argv[]) +{ char buf[PBOOT_USER_EVENT_SIZE]; ssize_t len; - int s; - int i; if (argc >= 2 && !strcmp(argv[1], "-h")) { print_usage(); return EXIT_SUCCESS; } - s = socket(PF_UNIX, SOCK_DGRAM, 0); - - if (s < 0) { - fprintf(stderr, "pb-event: socket: %s\n", strerror(errno)); - return EXIT_FAILURE; - } - if (argc > 1) { len = parse_event_args(argc - 1, argv + 1, buf, sizeof(buf)); @@ -151,26 +176,7 @@ int main(int argc, char *argv[]) if (len < 0) return EXIT_FAILURE; - memset(&addr, 0, sizeof(addr)); - addr.sun_family = AF_UNIX; - strcpy(addr.sun_path, PBOOT_USER_EVENT_SOCKET); - - for (i = 10; i; i--) { - ssize_t sent = sendto(s, buf, len, 0, (struct sockaddr *)&addr, - SUN_LEN(&addr)); - - if (sent == len) - break; - - DBG("pb-event: waiting for server %d\n", i); - sleep(1); - } - - if (!i) { - fprintf(stderr, "pb-event: send: %s\n", strerror(errno)); - return EXIT_FAILURE; - } + send_event(buf, len); - DBG("pb-event: wrote %u bytes\n", (unsigned int)len); return EXIT_SUCCESS; } -- cgit v1.2.1