]> wimlib.net Git - wimlib/blobdiff - programs/imagex-win32.c
lzms_decompress.c: pack states together in struct lzms_decompressor
[wimlib] / programs / imagex-win32.c
index 083c1453a9dc1d034721770e55ca28c7b8b38586..6ff838ca63e845a7053dbc7a2a984b9fafb9a491 100644 (file)
@@ -56,30 +56,46 @@ L"       Maybe try converting your text file to UTF-16LE?\n"
        return NULL;
 }
 
-static inline bool
-is_path_separator(wchar_t c)
+/* Set a file descriptor to binary mode.  */
+void set_fd_to_binary_mode(int fd)
 {
-       return c == L'/' || c == L'\\';
+       _setmode(fd, _O_BINARY);
 }
 
-/* basename() (modifying, trailing-slash stripping version) for wide-character
- * strings.  Understands both forward and backward slashes.  */
-wchar_t *
-win32_wbasename(wchar_t *path)
-{
-       wchar_t *p = wcschr(path, L'\0');
+#include <sddl.h>
 
-       p--;
-       while (p >= path && is_path_separator(*p))
-               *p-- = '\0';
-       while (p >= path && !is_path_separator(*p))
-               p--;
-       p++;
-       return p;
+static wchar_t *
+get_security_descriptor_string(PSECURITY_DESCRIPTOR desc)
+{
+       wchar_t *str = NULL;
+       /* 52 characters!!!  */
+       ConvertSecurityDescriptorToStringSecurityDescriptorW(
+                       desc,
+                       SDDL_REVISION_1,
+                       OWNER_SECURITY_INFORMATION |
+                               GROUP_SECURITY_INFORMATION |
+                               DACL_SECURITY_INFORMATION |
+                               SACL_SECURITY_INFORMATION,
+                       &str,
+                       NULL);
+       return str;
 }
 
-/* Set a file descriptor to binary mode.  */
-void set_fd_to_binary_mode(int fd)
+void
+win32_print_security_descriptor(const uint8_t *sd, size_t size)
 {
-       _setmode(fd, _O_BINARY);
+       wchar_t *str;
+       const wchar_t *printstr;
+
+       /* 'size' is ignored here due to the crappy Windows APIs.  Oh well, this
+        * is just for debugging anyway.  */
+       str = get_security_descriptor_string((PSECURITY_DESCRIPTOR)sd);
+       if (str)
+               printstr = str;
+       else
+               printstr = L"(invalid)";
+
+       wprintf(L"Security Descriptor = %ls\n", printstr);
+
+       LocalFree(str);
 }