summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormiau <miaukatzemiau@priveasy.de>2011-12-02 08:50:03 (GMT)
committermiau <miaukatzemiau@priveasy.de>2011-12-02 08:50:03 (GMT)
commitdb56c18a6188dd77f40eda1eba782770f7ef733e (patch)
treeb605322a28fab14b141c18e3f00dd6c7f1ebcc54
parent6c242e521d822366238b45dae0eabdfc8f7b93f6 (diff)
add ERP error macro to catch all those errors that will never happen
-rw-r--r--src/broadcaster.c17
-rw-r--r--src/common.h6
-rw-r--r--src/listener.c30
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;
}
contact: Jan Huwald // Impressum