]> wimlib.net Git - wimlib/blobdiff - src/util.h
Add Windows implementations of pread(), pwrite(), writev()
[wimlib] / src / util.h
index 4b75eda2c98001a515101d8a7e9c398250292925..7bff1b5d21c5a4929920992ee45fe226683ec92f 100644 (file)
@@ -129,7 +129,7 @@ tstr_to_utf8_simple(const tchar *tstr, char **out);
 #define ZERO_ARRAY(array) memset(array, 0, sizeof(array))
 
 /* Used for buffering FILE IO in a few places */
-#define BUFFER_SIZE 4096
+#define BUFFER_SIZE 32768
 
 static inline void FORMAT(printf, 1, 2)
 dummy_tprintf(const tchar *format, ...)
@@ -151,7 +151,7 @@ wimlib_warning_with_errno(const tchar *format, ...) FORMAT(printf, 1, 2) COLD;
 #  define ERROR(format, ...)                   wimlib_error(T(format), ## __VA_ARGS__)
 #  define ERROR_WITH_ERRNO(format, ...)        wimlib_error_with_errno(T(format), ## __VA_ARGS__)
 #  define WARNING(format, ...)                 wimlib_warning(T(format), ## __VA_ARGS__)
-#  define WARNING_WITH_ERRNO(format, ...)      wimlib_warning(T(format), ## __VA_ARGS__)
+#  define WARNING_WITH_ERRNO(format, ...)      wimlib_warning_with_errno(T(format), ## __VA_ARGS__)
 #else /* ENABLE_ERROR_MESSAGES */
 #  define ERROR(format, ...)                   dummy_tprintf(T(format), ## __VA_ARGS__)
 #  define ERROR_WITH_ERRNO(format, ...)                dummy_tprintf(T(format), ## __VA_ARGS__)
@@ -172,7 +172,7 @@ extern void
 wimlib_debug(const tchar *file, int line, const char *func,
             const tchar *format, ...);
 #  define DEBUG(format, ...) \
-               wimlib_debug(T(__FILE__), __LINE__, __func__, T(format), ## __VA_ARGS__);
+               wimlib_debug(T(__FILE__), __LINE__, __func__, T(format), ## __VA_ARGS__)
 
 #else
 #  define DEBUG(format, ...) dummy_tprintf(T(format), ## __VA_ARGS__)
@@ -243,10 +243,10 @@ extern const tchar *
 path_stream_name(const tchar *path);
 
 static inline void
-print_byte_field(const u8 field[], size_t len)
+print_byte_field(const u8 field[], size_t len, FILE *out)
 {
        while (len--)
-               tprintf(T("%02hhx"), *field++);
+               tfprintf(out, T("%02hhx"), *field++);
 }
 
 static inline u32
@@ -279,4 +279,42 @@ wimlib_printf(const tchar *format, ...) FORMAT(printf, 1, 2);
 extern void
 zap_backslashes(tchar *s);
 
+static inline u64
+hash_u64(u64 n)
+{
+       return n * 0x9e37fffffffc0001ULL;
+}
+
+typedef int filedes_t;
+
+extern size_t
+full_read(filedes_t fd, void *buf, size_t n);
+
+extern size_t
+full_write(filedes_t fd, const void *buf, size_t n);
+
+extern size_t
+full_pread(filedes_t fd, void *buf, size_t nbyte, off_t offset);
+
+extern size_t
+full_pwrite(filedes_t fd, const void *buf, size_t count, off_t offset);
+
+#ifdef __WIN32__
+struct iovec {
+       void *iov_base;
+       size_t iov_len;
+};
+#else
+struct iovec;
+#endif
+
+
+extern size_t
+full_writev(int fd, struct iovec *iov, int iovcnt);
+
+extern off_t
+filedes_offset(filedes_t fd);
+
+#define INVALID_FILEDES (-1)
+
 #endif /* _WIMLIB_UTIL_H */