File: mapbuffer.cc

package info (click to toggle)
bobcat 6.11.00-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 15,292 kB
  • sloc: cpp: 21,370; fortran: 6,507; makefile: 2,787; sh: 724; perl: 401; ansic: 26
file content (25 lines) | stat: -rw-r--r-- 714 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#define XERR
#include "mmapbuf.ih"

void MmapBuf::mapBuffer(int protection)
{
    int fd = open(d_fname.c_str(), 
                  protection == PROT_READ  ? O_RDONLY : O_RDWR
    );

    if (fd == -1)                               // file can't be opened
        failure("can't open " + d_fname);

        // mmap and munmap accept buffers for reading exceeding the file size
    d_buffer = static_cast<char *>(             // mmap the required buffer
                    mmap(0, d_bufSize, protection, MAP_SHARED, fd, d_offset)
                );

    close(fd);

    if (d_buffer == MAP_FAILED)                 // mapping failed
        failure("mmap for " + d_fname + " failed");

    d_maxPtr = d_buffer;
}