diff options
author | Stefan Metzmacher <metze@samba.org> | 2008-08-01 07:08:51 +0200 |
---|---|---|
committer | Stefan Metzmacher <metze@samba.org> | 2008-08-01 16:11:00 +0200 |
commit | a925f039ee382df0f3be434108416bab0d17e8c0 (patch) | |
tree | 6055ac5d6e81435bb5a8fa88959535e99c850a55 /source4/heimdal/lib/roken/dumpdata.c | |
parent | cf875a562173d5ae99080cea594e79c6a5555307 (diff) | |
download | samba-a925f039ee382df0f3be434108416bab0d17e8c0.tar.gz samba-a925f039ee382df0f3be434108416bab0d17e8c0.tar.bz2 samba-a925f039ee382df0f3be434108416bab0d17e8c0.zip |
heimdal: update to lorikeet-heimdal rev 801
metze
(This used to be commit d6c54a66fb23c784ef221a3c1cf766b72bdb5a0b)
Diffstat (limited to 'source4/heimdal/lib/roken/dumpdata.c')
-rw-r--r-- | source4/heimdal/lib/roken/dumpdata.c | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/source4/heimdal/lib/roken/dumpdata.c b/source4/heimdal/lib/roken/dumpdata.c index c445bfa361..81fd127296 100644 --- a/source4/heimdal/lib/roken/dumpdata.c +++ b/source4/heimdal/lib/roken/dumpdata.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: dumpdata.c 21005 2007-06-08 01:54:35Z lha $"); +RCSID("$Id: dumpdata.c 23412 2008-07-26 18:34:23Z lha $"); #endif #include <unistd.h> @@ -55,3 +55,45 @@ rk_dumpdata (const char *filename, const void *buf, size_t size) net_write(fd, buf, size); close(fd); } + +/* + * Read all data from a filename, care about errors. + */ + +int ROKEN_LIB_FUNCTION +rk_undumpdata(const char *filename, void **buf, size_t *size) +{ + struct stat sb; + int fd, ret; + ssize_t sret; + + *buf = NULL; + + fd = open(filename, O_RDONLY, 0); + if (fd < 0) + return errno; + if (fstat(fd, &sb) != 0){ + ret = errno; + goto out; + } + *buf = malloc(sb.st_size); + if (*buf == NULL) { + ret = ENOMEM; + goto out; + } + *size = sb.st_size; + + sret = net_read(fd, *buf, *size); + if (sret < 0) + ret = errno; + else if (sret != *size) { + ret = EINVAL; + free(*buf); + *buf = NULL; + } else + ret = 0; + + out: + close(fd); + return ret; +} |