On 10/28/15 at 10:57am, Michael Holzheu wrote: > On Wed, 28 Oct 2015 14:46:23 +0800 > Dave Young <dyoung at redhat.com> wrote: > > > Hi, Michael > > > > > @@ -552,11 +563,18 @@ char *slurp_file(const char *filename, o > > > if (err < 0) > > > die("Can not seek to the begin of file %s: %s\n", > > > filename, strerror(errno)); > > > + buf = slurp_fd(fd, filename, size, &nread, use_mmap); > > > } else { > > > size = stats.st_size; > > > + if (use_mmap) { > > > + buf = mmap(NULL, size, PROT_READ | PROT_WRITE, > > > + MAP_PRIVATE, fd, 0); > > > + nread = stats.st_size; > > > + } else { > > > + buf = slurp_fd(fd, filename, size, &nread, 0); > > > + } > > > } > > > > Drop above changes and replace below lines with an extra use_mmap argument > > should be enough? > > > > - buf = slurp_fd(fd, filename, size, &nread); > > [snip] > > Hmm, I don't think so. > > In case of non-character devices I either mmap the file directly (use_mmap=true) > or use "slurp_fd()" (use_mmap=false). So I can't unconditionaly use slurp_fd(). How about handle these in slurp_fd only? Directly return mmapped buf in case use_mmap=1 there. I do not understand why use_mmap=1 but you still call read syscall to read data into the mmapped buffer.. Thanks Dave