From 7ca04f328e22fcbee4659d73f9a72dfdf1dd6a23 Mon Sep 17 00:00:00 2001 From: Glenn L McGrath Date: Wed, 25 Sep 2002 02:47:48 +0000 Subject: New common unarchive code. --- libbb/xfuncs.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) (limited to 'libbb/xfuncs.c') diff --git a/libbb/xfuncs.c b/libbb/xfuncs.c index 869c04a4c..2249e263a 100644 --- a/libbb/xfuncs.c +++ b/libbb/xfuncs.c @@ -19,10 +19,13 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include +#include #include #include #include #include +#include #include "libbb.h" @@ -85,6 +88,59 @@ FILE *xfopen(const char *path, const char *mode) return fp; } +extern int xopen(const char *pathname, int flags) +{ + int ret; + + ret = open(pathname, flags); + if (ret == -1) { + perror_msg_and_die("%s", pathname); + } + return ret; +} + +extern ssize_t xread(int fd, void *buf, size_t count) +{ + ssize_t size; + + size = read(fd, buf, count); + if (size == -1) { + perror_msg_and_die("Read error"); + } + return(size); +} + +extern void xread_all(int fd, void *buf, size_t count) +{ + ssize_t size; + + size = xread(fd, buf, count); + if (size != count) { + error_msg_and_die("Short read"); + } + return; +} + +extern ssize_t xread_all_eof(int fd, void *buf, size_t count) +{ + ssize_t size; + + size = xread(fd, buf, count); + if ((size != 0) && (size != count)) { + error_msg_and_die("Short read"); + } + return(size); +} + +extern unsigned char xread_char(int fd) +{ + char tmp; + + xread_all(fd, &tmp, 1); + + return(tmp); +} + /* Stupid gcc always includes its own builtin strlen()... */ #undef strlen size_t xstrlen(const char *string) -- cgit v1.2.3