cdb_init_fromfd.c (490B)
1 /* ISC license. */ 2 3 #include <skalibs/bsdsnowflake.h> 4 5 #include <stdint.h> 6 #include <sys/stat.h> 7 #include <sys/mman.h> 8 #include <errno.h> 9 10 #include <skalibs/cdb.h> 11 12 int cdb_init_fromfd (cdb *c, int fd) 13 { 14 char *map ; 15 struct stat st ; 16 if (fstat(fd, &st) < 0) return 0 ; 17 if (st.st_size > UINT32_MAX) return (errno = EOVERFLOW, 0) ; 18 map = mmap(0, st.st_size, PROT_READ, MAP_SHARED, fd, 0) ; 19 if (map == MAP_FAILED) return 0 ; 20 c->map = map ; 21 c->size = st.st_size ; 22 return 1 ; 23 }