summaryrefslogtreecommitdiff
path: root/src/libstddjb/cdb_init_map.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstddjb/cdb_init_map.c')
-rw-r--r--src/libstddjb/cdb_init_map.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/libstddjb/cdb_init_map.c b/src/libstddjb/cdb_init_map.c
index bf8eb9d..de9aad0 100644
--- a/src/libstddjb/cdb_init_map.c
+++ b/src/libstddjb/cdb_init_map.c
@@ -1,8 +1,14 @@
/* ISC license. */
+#ifndef _BSD_SOURCE
+#define _BSD_SOURCE
+#endif
+
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
+#include <stdint.h>
+#include <errno.h>
#include <skalibs/cdb.h>
int cdb_init_map (struct cdb *c, int fd, int domap)
@@ -12,6 +18,7 @@ int cdb_init_map (struct cdb *c, int fd, int domap)
struct stat st ;
char *map ;
if (fstat(fd, &st) < 0) return 0 ;
+ if (st.st_size > UINT32_MAX) return (errno = EOVERFLOW, 0) ;
map = mmap(0, st.st_size, PROT_READ, MAP_SHARED, fd, 0) ;
if (map == MAP_FAILED) return 0 ;
c->fd = -fd-2 ;