skalibs

Mirror/fork of https://skarnet.org/software/skalibs/
git clone https://ccx.te2000.cz/git/skalibs
Log | Files | Refs | README | LICENSE

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 }