+
+ if((rrd_file->pos + count) > old_size)
+ {
+ new_size = rrd_file->pos + count;
+ rrd_file->file_len = new_size;
+ lseek(rrd_file->fd, new_size - 1, SEEK_SET);
+ write(rrd_file->fd, "\0", 1); /* poke */
+ lseek(rrd_file->fd, 0, SEEK_SET);
+ if(rrd_file->file_start == NULL)
+ {
+ rrd_file->file_start = mmap(0, new_size, mm_prot, mm_flags,
+ rrd_file->fd, 0);
+ }
+ else
+ rrd_file->file_start = mremap(rrd_file->file_start, old_size, new_size, MREMAP_MAYMOVE);
+
+ if (rrd_file->file_start == MAP_FAILED) {
+ rrd_set_error("m(re)maping file : %s",
+ rrd_strerror(errno));
+ return -1;
+ }
+ }