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(). The change in slurp_fd() to use anonymous mmap in case of use_mmap=true is not really necessary. I did it nevertheless for consistency. This ensures that the slrup_file_mmap() functions *always* returns mmaped memory. Michael