diff options
author | Joern Engel <joern@logfs.org> | 2011-12-23 13:45:38 -0800 |
---|---|---|
committer | Joern Engel <joern@logfs.org> | 2011-12-23 13:45:38 -0800 |
commit | e0bbe42647f27da852cf629eb2ad7d0bd8d3055f (patch) | |
tree | fb07ea5ccb10ca4c9936835a90fe75a82a00ece0 | |
parent | 4ef015343068951dcaee0cd8c50a83841710f84f (diff) | |
download | cancd-e0bbe42647f27da852cf629eb2ad7d0bd8d3055f.tar.gz |
Prepend date string to each line
Make this look more like syslog.
Signed-off-by: Joern Engel <joern@logfs.org>
-rw-r--r-- | cancd.c | 33 |
1 files changed, 31 insertions, 2 deletions
@@ -22,6 +22,9 @@ * Boston, MA 021110-1307, USA. */ +#define _GNU_SOURCE +#include <features.h> + #include <arpa/inet.h> #include <errno.h> #include <fcntl.h> @@ -294,7 +297,33 @@ static int do_write(int fd, const void *buf, size_t count) return 0; } -static void do_output(const char *buf, int len, struct sockaddr_in *addr, socklen_t socklen) +static int write_formated(int fd, char *buf, size_t count) +{ + const char *format = "%b %d %H:%M:%S "; + char *end; + char timestr[200]; + size_t n, len, err; + time_t now = time(NULL); + struct tm *tm = localtime(&now); + + while (count) { + end = strchrnul(buf, 0xa); + *end = 0xa; + len = end - buf + 1; + n = strftime(timestr, sizeof(timestr), format, tm); + err = do_write(fd, timestr, n); + if (err) + return err; + err = do_write(fd, buf, len); + if (err) + return err; + buf += len; + count -= len; + } + return 0; +} + +static void do_output(char *buf, int len, struct sockaddr_in *addr, socklen_t socklen) { int fd, rc; char *name, *tmp, *dir; @@ -320,7 +349,7 @@ static void do_output(const char *buf, int len, struct sockaddr_in *addr, sockle if (fd < 0) syslog(LOG_ERR, "Unable to open \"%s\": %s", name, strerror(errno)); else { - do_write(fd, buf, len); + write_formated(fd, buf, len); close(fd); } free(name); |