]> mj.ucw.cz Git - libucw.git/blobdiff - lib/fb-mmap.c
Implemented bfix_tmp_file(), which turns a temporary file fastbuf
[libucw.git] / lib / fb-mmap.c
index 1e610c9c9d18b99bf2eba577f850d765d7fc8a24..56c2ef666504d2abfac52832e62d16d697885dd8 100644 (file)
@@ -146,9 +146,10 @@ bfmm_close(struct fastbuf *f)
     {
     case 1:
       if (unlink(f->name) < 0)
-       log(L_ERROR, "unlink(%s): %m", f->name);
+       msg(L_ERROR, "unlink(%s): %m", f->name);
     case 0:
-      close(F->fd);
+      if (close(F->fd))
+       die("close(%s): %m", f->name);
     }
   xfree(f);
 }
@@ -156,18 +157,21 @@ bfmm_close(struct fastbuf *f)
 static int
 bfmm_config(struct fastbuf *f, uns item, int value)
 {
+  int orig;
+
   switch (item)
     {
     case BCONFIG_IS_TEMP_FILE:
+      orig = FB_MMAP(f)->is_temp_file;
       FB_MMAP(f)->is_temp_file = value;
-      return 0;
+      return orig;
     default:
       return -1;
     }
 }
 
 struct fastbuf *
-bfmmopen_internal(int fd, byte *name, uns mode)
+bfmmopen_internal(int fd, const char *name, uns mode)
 {
   int namelen = strlen(name) + 1;
   struct fb_mmap *F = xmalloc(sizeof(struct fb_mmap) + namelen);
@@ -178,6 +182,8 @@ bfmmopen_internal(int fd, byte *name, uns mode)
   memcpy(f->name, name, namelen);
   F->fd = fd;
   F->file_extend = F->file_size = sh_seek(fd, 0, SEEK_END);
+  if (F->file_size < 0)
+    die("seek(%s): %m", name);
   if (mode & O_APPEND)
     f->pos = F->file_size;
   F->mode = mode;