Introduction
Introduction Statistics Contact Development Disclaimer Help
add eprintf(), weprintf() - sdhcp - simple dhcp client
git clone git://git.codemadness.org/sdhcp
Log
Files
Refs
LICENSE
---
commit 19e0ab7cc747ad5f6f239e484531a5fec0626e14
parent 8559ac1f08e7592d9f9b142e11125e210d6e7f5b
Author: Hiltjo Posthuma <[email protected]>
Date: Fri, 25 Apr 2014 21:50:25 +0200
add eprintf(), weprintf()
use it instead of die()
Signed-off-by: Hiltjo Posthuma <[email protected]>
Diffstat:
M Makefile | 5 +++--
M sdhcp.c | 20 ++++++++++++--------
M util.h | 4 ++++
A util/eprintf.c | 67 +++++++++++++++++++++++++++++…
4 files changed, 86 insertions(+), 10 deletions(-)
---
diff --git a/Makefile b/Makefile
@@ -3,9 +3,10 @@ include config.mk
.POSIX:
.SUFFIXES: .c .o
-HDR = util.h
+HDR = util.h arg.h
LIB = \
- util/strlcpy.o
+ util/strlcpy.o \
+ util/eprintf.o
SRC = sdhcp.c
diff --git a/sdhcp.c b/sdhcp.c
@@ -194,8 +194,10 @@ static void
setdns(unsigned char dns[4])
{
char buf[128], *bp = buf;
- int fd = creat("/etc/resolv.conf", 0644);
+ int fd;
+ if((fd = creat("/etca/resolv.conf", 0644)) == -1)
+ weprintf("can't change /etc/resolv.conf:");
cat(fd, "/etc/resolv.conf.head");
memcpy(buf, "\nnameserver ", 12), bp+=11;
*(bp = itoa(bp+1, dns[0])) = '.';
@@ -441,20 +443,22 @@ main(int argc, char *argv[])
signal(SIGTERM, cleanexit);
if((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
- die("socket");
+ eprintf("socket:");
if(setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &bcast, sizeof bcast) ==…
- die("setsockopt");
+ eprintf("setsockopt:");
strlcpy(ifreq.ifr_name, ifname, IF_NAMESIZE);
ioctl(sock, SIOCGIFINDEX, &ifreq);
if(setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, &ifreq, sizeof ifreq)…
- die("setsockopt");
- addr = iptoaddr(IP(255,255,255,255), 68);
- if(bind(sock, (void*)&addr, sizeof addr)!=0)
- die("bind");
+ eprintf("setsockopt:");
+ addr = iptoaddr(IP(255, 255, 255, 255), 68);
+ if(bind(sock, (void*)&addr, sizeof addr) != 0)
+ eprintf("bind:");
ioctl(sock, SIOCGIFHWADDR, &ifreq);
memcpy(hwaddr, ifreq.ifr_hwaddr.sa_data, sizeof ifreq.ifr_hwaddr.sa_da…
- rnd = open("/dev/urandom", O_RDONLY);
+
+ if((rnd = open("/dev/urandom", O_RDONLY) == -1))
+ eprintf("can't open /dev/urandom to generate unique transactio…
read(rnd, xid, sizeof xid);
close(rnd);
diff --git a/util.h b/util.h
@@ -3,3 +3,7 @@
#undef strlcpy
size_t strlcpy(char *, const char *, size_t);
+
+void weprintf(const char *, ...);
+void eprintf(const char *, ...);
+void enprintf(int, const char *, ...);
diff --git a/util/eprintf.c b/util/eprintf.c
@@ -0,0 +1,67 @@
+/* See LICENSE file for copyright and license details. */
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "../util.h"
+
+char *argv0;
+
+static void venprintf(int, const char *, va_list);
+
+void
+eprintf(const char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ venprintf(EXIT_FAILURE, fmt, ap);
+ va_end(ap);
+}
+
+void
+enprintf(int status, const char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ venprintf(status, fmt, ap);
+ va_end(ap);
+}
+
+void
+venprintf(int status, const char *fmt, va_list ap)
+{
+#ifdef DEBUG
+ fprintf(stderr, "%s: ", argv0);
+#endif
+
+ vfprintf(stderr, fmt, ap);
+
+ if(fmt[0] && fmt[strlen(fmt)-1] == ':') {
+ fputc(' ', stderr);
+ perror(NULL);
+ }
+
+ exit(status);
+}
+
+void
+weprintf(const char *fmt, ...)
+{
+ va_list ap;
+
+#ifdef DEBUG
+ fprintf(stderr, "%s: ", argv0);
+#endif
+
+ va_start(ap, fmt);
+ vfprintf(stderr, fmt, ap);
+ va_end(ap);
+
+ if (fmt[0] && fmt[strlen(fmt)-1] == ':') {
+ fputc(' ', stderr);
+ perror(NULL);
+ }
+}
You are viewing proxied material from codemadness.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.