diff options
author | Xin LI <delphij@FreeBSD.org> | 2019-11-10 03:44:32 +0000 |
---|---|---|
committer | Xin LI <delphij@FreeBSD.org> | 2019-11-10 03:44:32 +0000 |
commit | 4ef4bf0189e5e736a37f9ead9beaaa8e1cd1f9fb (patch) | |
tree | 0b82394b9b244b8f3a588afe3b96177c08ff98eb /src/buffer.c | |
parent | ad1ba6e1e032f79d03b9a6e2c714de84d1911b3a (diff) |
Notes
Diffstat (limited to 'src/buffer.c')
-rw-r--r-- | src/buffer.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/src/buffer.c b/src/buffer.c index 5f76b80d282c..6d8967d2fa73 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -27,7 +27,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: buffer.c,v 1.4 2018/02/21 21:26:00 christos Exp $") +FILE_RCSID("@(#)$File: buffer.c,v 1.6 2019/05/07 02:27:11 christos Exp $") #endif /* lint */ #include "magic.h" @@ -37,10 +37,13 @@ FILE_RCSID("@(#)$File: buffer.c,v 1.4 2018/02/21 21:26:00 christos Exp $") #include <sys/stat.h> void -buffer_init(struct buffer *b, int fd, const void *data, size_t len) +buffer_init(struct buffer *b, int fd, const struct stat *st, const void *data, + size_t len) { b->fd = fd; - if (b->fd == -1 || fstat(b->fd, &b->st) == -1) + if (st) + memcpy(&b->st, st, sizeof(b->st)); + else if (b->fd == -1 || fstat(b->fd, &b->st) == -1) memset(&b->st, 0, sizeof(b->st)); b->fbuf = data; b->flen = len; @@ -61,13 +64,13 @@ buffer_fill(const struct buffer *bb) struct buffer *b = CCAST(struct buffer *, bb); if (b->elen != 0) - return b->elen == (size_t)~0 ? -1 : 0; + return b->elen == CAST(size_t, ~0) ? -1 : 0; if (!S_ISREG(b->st.st_mode)) goto out; - b->elen = (size_t)b->st.st_size < b->flen ? - (size_t)b->st.st_size : b->flen; + b->elen = CAST(size_t, b->st.st_size) < b->flen ? + CAST(size_t, b->st.st_size) : b->flen; if ((b->ebuf = malloc(b->elen)) == NULL) goto out; @@ -79,6 +82,6 @@ buffer_fill(const struct buffer *bb) return 0; out: - b->elen = (size_t)~0; + b->elen = CAST(size_t, ~0); return -1; } |