rrd_open.c (rrd_read): Mimicing read() behaviour for EOF case and NULL buffer case.
[rrdtool.git] / src / rrd_open.c
index 0774bce..c6a2d7d 100644 (file)
@@ -440,8 +440,13 @@ inline ssize_t rrd_read(
 {
 #ifdef HAVE_MMAP
     size_t    _cnt = count;
-    ssize_t   _surplus = rrd_file->pos + _cnt - rrd_file->file_len;
+    ssize_t   _surplus;
 
+    if (rrd_file->pos > rrd_file->file_len || _cnt == 0) /* EOF */
+       return 0;
+    if (buf == NULL)
+       return -1; /* EINVAL */
+    _surplus = rrd_file->pos + _cnt - rrd_file->file_len;
     if (_surplus > 0) { /* short read */
         _cnt -= _surplus;
     }