cleaned up stuff, added dht lib
[netyack.git] / src / write_or_die.c
blob9b27e8682420838d06d13651cc93a6c458ac784d
1 /*
2 * netyack
3 * By Daniel Borkmann <daniel@netyack.org>
4 * Copyright 2009, 2010 Daniel Borkmann.
5 * Subject to the GPL.
6 */
8 #include <stdio.h>
9 #include <stdlib.h>
10 #include <unistd.h>
11 #include <string.h>
12 #include <errno.h>
13 #include <sys/types.h>
14 #include <sys/stat.h>
15 #include <fcntl.h>
17 #include "write_or_die.h"
18 #include "error_and_die.h"
20 void fsync_or_die(int fd, const char *msg)
22 if (fsync(fd) < 0)
23 puke_and_die(EXIT_FAILURE, "%s: fsync error", msg);
26 int open_or_die(const char *file, int flags)
28 int ret = open(file, flags);
29 if (ret < 0)
30 puke_and_die(EXIT_FAILURE, "Open error");
32 return ret;
36 ssize_t read_or_die(int fd, void *buf, size_t len)
38 ssize_t ret = read(fd, buf, len);
39 if (ret < 0) {
40 if (errno == EPIPE)
41 exit(EXIT_SUCCESS);
42 puke_and_die(EXIT_FAILURE, "Read error");
45 return ret;
48 ssize_t write_or_die(int fd, const void *buf, size_t len)
50 ssize_t ret = write(fd, buf, len);
51 if (ret < 0) {
52 if (errno == EPIPE)
53 exit(EXIT_SUCCESS);
54 puke_and_die(EXIT_FAILURE, "Write error");
57 return ret;
60 ssize_t write_or_whine_pipe(int fd, const void *buf, size_t len,
61 const char *msg)
63 ssize_t ret = write(fd, buf, len);
64 if (ret < 0) {
65 if (errno == EPIPE)
66 exit(0);
67 whine("%s: write error (%s)!\n", msg, strerror(errno));
68 return 0;
71 return ret;
74 ssize_t write_or_whine(int fd, const void *buf, size_t len,
75 const char *msg)
77 ssize_t ret = write(fd, buf, len);
78 if (ret < 0) {
79 whine("%s: write error (%s)!\n", msg, strerror(errno));
80 return 0;
83 return ret;