]> mj.ucw.cz Git - libucw.git/blobdiff - lib/fb-mem.c
Added xstrdup() and new logging functions.
[libucw.git] / lib / fb-mem.c
index 0f3158c379dbc9e7ae666c35d90e0d91c6bdfb32..daa807338301000882aa338cc5dc8ef1864619da 100644 (file)
@@ -110,7 +110,7 @@ fbmem_seek(struct fastbuf *f, sh_off_t pos, int whence)
   /* Yes, this is linear. But considering the average number of buckets, it doesn't matter. */
   for (b=m->first; b; b=b->next)
     {
-      if (pos <= b->pos + b->size) /* <=, because we need to be able to seek just after file end */
+      if (pos <= b->pos + (sh_off_t)b->size) /* <=, because we need to be able to seek just after file end */
        {
          f->buffer = b->data;
          f->bptr = b->data + (pos - b->pos);
@@ -120,6 +120,14 @@ fbmem_seek(struct fastbuf *f, sh_off_t pos, int whence)
          return;
        }
     }
+  if (!m->first && !pos)
+    {
+      /* Seeking to offset 0 in an empty file needs an exception */
+      f->buffer = f->bptr = f->bufend = NULL;
+      f->pos = 0;
+      FB_MEM(f)->block = NULL;
+      return;
+    }
   die("fbmem_seek to invalid offset");
 }