From bd82d030011cd8b9655e5ded6b6df9343b42a6bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Wed, 4 Feb 2015 14:09:54 +0100 Subject: Imported Upstream version 3.22 --- doc/slurp.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 doc/slurp.c (limited to 'doc/slurp.c') diff --git a/doc/slurp.c b/doc/slurp.c new file mode 100644 index 0000000..f0b047d --- /dev/null +++ b/doc/slurp.c @@ -0,0 +1,38 @@ +static void *p_slurp(const char *file, size_t *outsize) +{ + struct stat sb; + int ret = 0, fd = open(file, O_RDONLY | O_BINARY); + void *buf = NULL; + ssize_t rdret; + + if (fd < 0) { + fprintf(stderr, "ERROR: Slurping %s failed: %s\n", + file, strerror(errno)); + return NULL; + } + if (fstat(fd, &buf) < 0) { + ret = errno; + perror("fstat"); + goto out; + } + *outsize = sb.st_size; /* truncate if need be */ + buf = malloc(*outsize); + if (buf == NULL) { + ret = errno; + perror("malloc"); + goto out; + } + rdret = read(fd, buf, *outsize); + if (rdret < 0) { + ret = errno; + perror("read"); + free(buf); + } else { + *outsize = rdret; + } + out: + close(fd); + errno = ret; + return buf; +} + -- cgit v1.2.3