If util-linux is installed on a system without large file support,
an out of memory issue can occur while processing a file which is
2 GB in size:
$ ./configure --disable-largefile && make
$ dd if=/dev/zero of=2gb-file seek=
2147483646 count=1 bs=1
$ fincore 2gb-file
(endless loop)
fincore: failed to do mmap: 2gb-file: Cannot allocate memory
Even though iterating with "len" seems counter-intuitive, it fixes
this issue. The variable len is only in the last iteration not a
multiplication of pagesize -- which is the requirement for mmap.
Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
off_t *count_incore)
{
size_t window_size = N_PAGES_IN_WINDOW * ctl->pagesize;
- off_t file_offset;
+ off_t file_offset, len;
int rc = 0;
int warned_once = 0;
- for (file_offset = 0; file_offset < file_size; file_offset += window_size) {
- off_t len;
+ for (file_offset = 0; file_offset < file_size; file_offset += len) {
void *window = NULL;
len = file_size - file_offset;