]> wimlib.net Git - wimlib/blobdiff - src/util.c
NTFS capture updates
[wimlib] / src / util.c
index e14ddd403f64eef883594f7a805ffec19c1e8a15..8f4e0c0be53756db28ef2974d43de4b1f08b8b3e 100644 (file)
@@ -25,6 +25,8 @@
 #include "wimlib_internal.h"
 #include "endianness.h"
 #include "sha1.h"
+#include "timestamp.h"
+#include <sys/time.h>
 
 
 #include <iconv.h>
@@ -49,7 +51,7 @@ void wimlib_error(const char *format, ...)
 
                va_start(va, format);
                errno_save = errno;
-               fputs("ERROR: ", stderr);
+               fputs("[ERROR] ", stderr);
                vfprintf(stderr, format, va);
                putc('\n', stderr);
                errno = errno_save;
@@ -65,7 +67,7 @@ void wimlib_error_with_errno(const char *format, ...)
 
                va_start(va, format);
                errno_save = errno;
-               fputs("ERROR: ", stderr);
+               fputs("[ERROR] ", stderr);
                vfprintf(stderr, format, va);
                fprintf(stderr, ": %s\n", strerror(errno_save));
                errno = errno_save;
@@ -81,7 +83,7 @@ void wimlib_warning(const char *format, ...)
 
                va_start(va, format);
                errno_save = errno;
-               fputs("WARNING: ", stderr);
+               fputs("[WARNING] ", stderr);
                vfprintf(stderr, format, va);
                putc('\n', stderr);
                errno = errno_save;
@@ -125,6 +127,8 @@ static const char *error_strings[] = {
                = "Tried to add an image with a name that is already in use",
        [WIMLIB_ERR_INTEGRITY] 
                = "The WIM failed an integrity check",
+       [WIMLIB_ERR_INVALID_CAPTURE_CONFIG]
+               = "The capture configuration string was invalid",
        [WIMLIB_ERR_INVALID_CHUNK_SIZE] 
                = "The WIM is compressed but does not have a chunk "
                        "size of 32768",
@@ -139,8 +143,12 @@ static const char *error_strings[] = {
                = "Tried to select an image that does not exist in the WIM",
        [WIMLIB_ERR_INVALID_INTEGRITY_TABLE] 
                = "The WIM's integrity table is invalid",
+       [WIMLIB_ERR_INVALID_LOOKUP_TABLE_ENTRY]
+               = "An entry in the WIM's lookup table is invalid",
        [WIMLIB_ERR_INVALID_PARAM] 
                = "An invalid parameter was given",
+       [WIMLIB_ERR_INVALID_RESOURCE_HASH]
+               = "The SHA1 message digest of a WIM resource did not match the expected value",
        [WIMLIB_ERR_INVALID_RESOURCE_SIZE] 
                = "A resource entry in the WIM is invalid",
        [WIMLIB_ERR_LINK] 
@@ -167,8 +175,12 @@ static const char *error_strings[] = {
                = "Failed to open a directory",
        [WIMLIB_ERR_READ] 
                = "Could not read data from a file",
+       [WIMLIB_ERR_READLINK]
+               = "Could not read the target of a symbolic link",
        [WIMLIB_ERR_RENAME] 
                = "Could not rename a file",
+       [WIMLIB_ERR_SPECIAL_FILE]
+               = "Encountered a special file that cannot be archived",
        [WIMLIB_ERR_SPLIT_INVALID] 
                = "The WIM is part of an invalid split WIM",
        [WIMLIB_ERR_SPLIT_UNSUPPORTED] 
@@ -255,7 +267,7 @@ static iconv_t cd_utf16_to_utf8 = (iconv_t)(-1);
 /* Converts a string in the UTF-16 encoding to a newly allocated string in the
  * UTF-8 encoding.  */
 char *utf16_to_utf8(const char *utf16_str, size_t utf16_len,
-                               size_t *utf8_len_ret)
+                   size_t *utf8_len_ret)
 {
        if (cd_utf16_to_utf8 == (iconv_t)(-1)) {
                cd_utf16_to_utf8 = iconv_open("UTF-8", "UTF-16LE");
@@ -383,10 +395,8 @@ void randomize_char_array_with_alnum(char p[], size_t n)
 }
 
 /* Fills @n bytes pointer to by @p with random numbers. */
-void randomize_byte_array(void *__p, size_t n)
+void randomize_byte_array(u8 *p, size_t n)
 {
-       u8 *p = __p;
-
        if (!seeded) {
                srand(time(NULL));
                seeded = true;
@@ -419,8 +429,13 @@ const char *path_basename(const char *path)
        p--;
 
        /* Trailing slashes. */
-       while ((p != path - 1) && *p == '/')
+       while (1) {
+               if (p == path - 1)
+                       return "";
+               if (*p != '/')
+                       break;
                p--;
+       }
 
        while ((p != path - 1) && *p != '/')
                p--;
@@ -428,6 +443,10 @@ const char *path_basename(const char *path)
        return p + 1;
 }
 
+/* 
+ * Returns a pointer to the part of @path following the first colon in the last
+ * path component, or NULL if the last path component does not contain a colon.
+ */
 const char *path_stream_name(const char *path)
 {
        const char *base = path_basename(path);
@@ -497,3 +516,12 @@ void print_string(const void *string, size_t len)
                p++;
        }
 }
+
+u64 get_wim_timestamp()
+{
+       struct timeval tv;
+       gettimeofday(&tv, NULL);
+       return timeval_to_wim_timestamp(&tv);
+}
+
+