Merge branch 'refs/heads/t/lopsub'
[osl.git] / util.c
diff --git a/util.c b/util.c
index 7bf74b0..32f3402 100644 (file)
--- a/util.c
+++ b/util.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2008 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2009 Andre Noll <maan@tuebingen.mpg.de>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -14,7 +14,6 @@
 
 #include "log.h"
 #include "osl.h"
-#include "error.h"
 #include "util.h"
 
 /**
@@ -40,7 +39,7 @@ static ssize_t __write(int fd, const void *buf, size_t size)
                ret = write(fd, buf, size);
                if ((ret < 0) && (errno == EAGAIN || errno == EINTR))
                        continue;
-               return ret >= 0? ret : -ERRNO_TO_ERROR(errno);
+               return ret >= 0? ret : -E_OSL_WRITE;
        }
 }
 
@@ -62,8 +61,10 @@ int write_all(int fd, const char *buf, size_t *len)
        *len = 0;
        while (*len < total) {
                int ret = __write(fd, buf + *len, total - *len);
-               if (ret < 0)
+               if (ret < 0) {
+                       ERROR_LOG("write error: %s\n", strerror(errno));
                        return ret;
+               }
                *len += ret;
        }
        return 1;
@@ -89,7 +90,7 @@ int osl_open(const char *path, int flags, mode_t mode)
 
        if (ret >= 0)
                return ret;
-       return -ERRNO_TO_ERROR(errno);
+       return errno == ENOENT? -E_OSL_NOENT : -E_OSL_OPEN;
 }
 
 /**
@@ -109,9 +110,11 @@ int write_file(const char *filename, const void *buf, size_t size)
        if (ret < 0)
                return ret;
        fd = ret;
-       ret = write_all(fd, buf, &size);
-       if (ret < 0)
-               goto out;
+       if (size != 0) {
+               ret = write_all(fd, buf, &size);
+               if (ret < 0)
+                       goto out;
+       }
        ret = 1;
 out:
        close(fd);
@@ -153,7 +156,7 @@ int mmap_full_file(const char *path, int open_mode, void **map,
                return ret;
        fd = ret;
        if (fstat(fd, &file_status) < 0) {
-               ret = -ERRNO_TO_ERROR(errno);
+               ret = errno == ENOENT? -E_OSL_NOENT : -E_OSL_STAT;
                goto out;
        }
        *size = file_status.st_size;
@@ -194,7 +197,7 @@ int osl_munmap(void *start, size_t length)
        err = errno;
        ERROR_LOG("munmap (%p/%zu) failed: %s\n", start, length,
                strerror(err));
-       return -ERRNO_TO_ERROR(err);
+       return -E_OSL_MUNMAP;
 }
 
 /**
@@ -267,6 +270,6 @@ int truncate_file(const char *path, off_t size)
        if (statbuf.st_size < size)
                return ret;
        if (truncate(path, statbuf.st_size - size) < 0)
-               return -ERRNO_TO_ERROR(errno);
+               return -E_OSL_TRUNCATE;
        return 1;
 }