diff options
author | miau <miaukatzemiau@priveasy.de> | 2011-12-02 08:50:03 (GMT) |
---|---|---|
committer | miau <miaukatzemiau@priveasy.de> | 2011-12-02 08:50:03 (GMT) |
commit | db56c18a6188dd77f40eda1eba782770f7ef733e (patch) | |
tree | b605322a28fab14b141c18e3f00dd6c7f1ebcc54 | |
parent | 6c242e521d822366238b45dae0eabdfc8f7b93f6 (diff) |
add ERP error macro to catch all those errors that will never happen
-rw-r--r-- | src/broadcaster.c | 17 | ||||
-rw-r--r-- | src/common.h | 6 | ||||
-rw-r--r-- | src/listener.c | 30 |
3 files changed, 22 insertions, 31 deletions
diff --git a/src/broadcaster.c b/src/broadcaster.c index 2f0e194..bd80a5c 100644 --- a/src/broadcaster.c +++ b/src/broadcaster.c @@ -29,10 +29,7 @@ int main(int argc, char **argv) while ((MAXBUFLEN-total_len > 0) && ((i = read(0, &(buf[total_len]), MAXBUFLEN-total_len)) > 0)) total_len += i; - if (i < 0) { - perror("read(stdin)"); - exit(1); - } + ENP(i, "read(stdin)"); }else{ /* use cmd line for payload */ total_len += strlen(message); @@ -45,11 +42,7 @@ int main(int argc, char **argv) } /* setup socket */ - if ((fd = socket(AF_INET6, SOCK_DGRAM, 0)) == -1) { - perror("socket"); - exit(1); - } - + ENP((fd = socket(AF_INET6, SOCK_DGRAM, 0)), "socket"); addr.sin6_family = AF_INET6; addr.sin6_port = htons(SERVERPORT); addr.sin6_flowinfo = 0; @@ -60,10 +53,8 @@ int main(int argc, char **argv) } /* send packet */ - if (sendto(fd, buf, total_len, 0, (struct sockaddr *)&addr, sizeof addr) == -1) { - perror("sendto"); - exit(1); - } + ENP(sendto(fd, buf, total_len, 0, (struct sockaddr *) &addr, sizeof addr), + "sendto"); return 0; } diff --git a/src/common.h b/src/common.h index 0274856..5f24e57 100644 --- a/src/common.h +++ b/src/common.h @@ -14,4 +14,10 @@ #define SERVERPORT_S "4950" #define MAXBUFLEN 100 +#define ENP(Cmd, Msg) \ + if ((Cmd) == -1) { \ + perror(Msg); \ + exit(1); \ + } + #endif // UDP_BROADCAST_COMMON diff --git a/src/listener.c b/src/listener.c index 020b90e..eb2950e 100644 --- a/src/listener.c +++ b/src/listener.c @@ -19,10 +19,7 @@ int main(int argc, char **argv, char **envp) { fprintf(stderr, "usage: %s [interface]\n", argv[0]); exit(1); } - if ((fd = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP)) == -1) { - perror("listener: socket"); - exit(1); - } + ENP((fd = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP)), "listener: socket"); if (argc == 2) { inet_pton(AF_INET6, "ff02::1", &(ba.sin6_addr)); if ((ba.sin6_scope_id = if_nametoindex(argv[1])) == 0) { @@ -36,17 +33,14 @@ int main(int argc, char **argv, char **envp) { ba.sin6_family = AF_INET6; ba.sin6_port = htons(SERVERPORT); ba.sin6_flowinfo = 0; - if (bind(fd, (struct sockaddr*) &ba, sizeof ba) != 0) { - perror("listener: bind"); - exit(1); - } + ENP(bind(fd, (struct sockaddr*) &ba, sizeof ba), "listener: bind"); } /* daemonize */ #ifndef DEBUG switch (fork()) { case 0: - setsid(); + ENP(setsid(), "setsid"); umask(0); break; case -1: @@ -76,10 +70,10 @@ int main(int argc, char **argv, char **envp) { switch (fork()) { case 0: /* redirect payload to stdio, leave stdout/err, close the rest */ - dup(fd_payload[0], 1); - close(fd_payload[0]); - close(fd_payload[1]); - close(fd); + ENP(dup(fd_payload[0], 1), "dup"); + ENP(close(fd_payload[0]), "close"); + ENP(close(fd_payload[1]), "close"); + ENP(close(fd), "close"); /* run our task task */ execve(task, cl_argv, envp); @@ -89,18 +83,18 @@ int main(int argc, char **argv, char **envp) { perror("fork"); exit(1); default: - wait(); + ENP(wait(), "wait"); } - /* write payload to child process */ + /* write payload to child process; the return value of write is + intentionally ignored */ int tasklen = strlen(task); if (tasklen < numbytes) write(fd_payload[1], buf + tasklen + 1, numbytes - tasklen - 1); - close(fd_payload[1]); - close(fd_payload[0]); + ENP(close(fd_payload[1]), "close"); + ENP(close(fd_payload[0]), "close"); } perror("recvfrom"); - return 1; } |