[BTRFS][UBTRFS][SHELLBTRFS] Upgrade to 1.7.2
[reactos.git] / drivers / filesystems / btrfs / dirctrl.c
index e6e96fe..2d0a5fd 100644 (file)
@@ -16,6 +16,7 @@
  * along with WinBtrfs.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "btrfs_drv.h"
+#include "crc32c.h"
 
 #ifndef __REACTOS__
 // not currently in mingw
@@ -63,7 +64,7 @@ typedef struct _FILE_ID_EXTD_BOTH_DIR_INFORMATION {
 #else
 #define FileIdExtdDirectoryInformation (enum _FILE_INFORMATION_CLASS)60
 #define FileIdExtdBothDirectoryInformation (enum _FILE_INFORMATION_CLASS)63
-#endif
+#endif // __REACTOS__
 
 enum DirEntryType {
     DirEntryType_File,
@@ -95,7 +96,7 @@ ULONG get_reparse_tag_fcb(fcb* fcb) {
 
         Status = read_file(fcb, (uint8_t*)&tag, 0, sizeof(ULONG), &br, NULL);
         if (!NT_SUCCESS(Status)) {
-            ERR("read_file returned %08x\n", Status);
+            ERR("read_file returned %08lx\n", Status);
             return 0;
         }
     }
@@ -112,13 +113,13 @@ ULONG get_reparse_tag(device_extension* Vcb, root* subvol, uint64_t inode, uint8
         return IO_REPARSE_TAG_SYMLINK;
     else if (lxss) {
         if (type == BTRFS_TYPE_SOCKET)
-            return IO_REPARSE_TAG_LXSS_SOCKET;
+            return IO_REPARSE_TAG_AF_UNIX;
         else if (type == BTRFS_TYPE_FIFO)
-            return IO_REPARSE_TAG_LXSS_FIFO;
+            return IO_REPARSE_TAG_LX_FIFO;
         else if (type == BTRFS_TYPE_CHARDEV)
-            return IO_REPARSE_TAG_LXSS_CHARDEV;
+            return IO_REPARSE_TAG_LX_CHR;
         else if (type == BTRFS_TYPE_BLOCKDEV)
-            return IO_REPARSE_TAG_LXSS_BLOCKDEV;
+            return IO_REPARSE_TAG_LX_BLK;
     }
 
     if (type != BTRFS_TYPE_FILE && type != BTRFS_TYPE_DIRECTORY)
@@ -129,7 +130,7 @@ ULONG get_reparse_tag(device_extension* Vcb, root* subvol, uint64_t inode, uint8
 
     Status = open_fcb(Vcb, subvol, inode, type, NULL, false, NULL, &fcb, PagedPool, Irp);
     if (!NT_SUCCESS(Status)) {
-        ERR("open_fcb returned %08x\n", Status);
+        ERR("open_fcb returned %08lx\n", Status);
         return 0;
     }
 
@@ -155,7 +156,7 @@ static ULONG get_ea_len(device_extension* Vcb, root* subvol, uint64_t inode, PIR
         Status = IoCheckEaBufferValidity((FILE_FULL_EA_INFORMATION*)eadata, len, &offset);
 
         if (!NT_SUCCESS(Status)) {
-            WARN("IoCheckEaBufferValidity returned %08x (error at offset %u)\n", Status, offset);
+            WARN("IoCheckEaBufferValidity returned %08lx (error at offset %lu)\n", Status, offset);
             ExFreePool(eadata);
             return 0;
         } else {
@@ -251,7 +252,7 @@ static NTSTATUS query_dir_item(fcb* fcb, ccb* ccb, void* buf, LONG* len, PIRP Ir
 
                         Status = find_item(fcb->Vcb, r, &tp, &searchkey, false, Irp);
                         if (!NT_SUCCESS(Status)) {
-                            ERR("error - find_item returned %08x\n", Status);
+                            ERR("error - find_item returned %08lx\n", Status);
                             return Status;
                         }
 
@@ -328,7 +329,7 @@ static NTSTATUS query_dir_item(fcb* fcb, ccb* ccb, void* buf, LONG* len, PIRP Ir
             needed = sizeof(FILE_BOTH_DIR_INFORMATION) - sizeof(WCHAR) + de->name.Length;
 
             if (needed > *len) {
-                TRACE("buffer overflow - %u > %u\n", needed, *len);
+                TRACE("buffer overflow - %li > %lu\n", needed, *len);
                 return STATUS_BUFFER_OVERFLOW;
             }
 
@@ -368,7 +369,7 @@ static NTSTATUS query_dir_item(fcb* fcb, ccb* ccb, void* buf, LONG* len, PIRP Ir
             needed = sizeof(FILE_DIRECTORY_INFORMATION) - sizeof(WCHAR) + de->name.Length;
 
             if (needed > *len) {
-                TRACE("buffer overflow - %u > %u\n", needed, *len);
+                TRACE("buffer overflow - %li > %lu\n", needed, *len);
                 return STATUS_BUFFER_OVERFLOW;
             }
 
@@ -406,7 +407,7 @@ static NTSTATUS query_dir_item(fcb* fcb, ccb* ccb, void* buf, LONG* len, PIRP Ir
             needed = sizeof(FILE_FULL_DIR_INFORMATION) - sizeof(WCHAR) + de->name.Length;
 
             if (needed > *len) {
-                TRACE("buffer overflow - %u > %u\n", needed, *len);
+                TRACE("buffer overflow - %li > %lu\n", needed, *len);
                 return STATUS_BUFFER_OVERFLOW;
             }
 
@@ -445,7 +446,7 @@ static NTSTATUS query_dir_item(fcb* fcb, ccb* ccb, void* buf, LONG* len, PIRP Ir
             needed = sizeof(FILE_ID_BOTH_DIR_INFORMATION) - sizeof(WCHAR) + de->name.Length;
 
             if (needed > *len) {
-                TRACE("buffer overflow - %u > %u\n", needed, *len);
+                TRACE("buffer overflow - %li > %lu\n", needed, *len);
                 return STATUS_BUFFER_OVERFLOW;
             }
 
@@ -486,7 +487,7 @@ static NTSTATUS query_dir_item(fcb* fcb, ccb* ccb, void* buf, LONG* len, PIRP Ir
             needed = sizeof(FILE_ID_FULL_DIR_INFORMATION) - sizeof(WCHAR) + de->name.Length;
 
             if (needed > *len) {
-                TRACE("buffer overflow - %u > %u\n", needed, *len);
+                TRACE("buffer overflow - %li > %lu\n", needed, *len);
                 return STATUS_BUFFER_OVERFLOW;
             }
 
@@ -531,7 +532,7 @@ static NTSTATUS query_dir_item(fcb* fcb, ccb* ccb, void* buf, LONG* len, PIRP Ir
             needed = offsetof(FILE_ID_EXTD_DIR_INFORMATION, FileName[0]) + de->name.Length;
 
             if (needed > *len) {
-                TRACE("buffer overflow - %u > %u\n", needed, *len);
+                TRACE("buffer overflow - %li > %lu\n", needed, *len);
                 return STATUS_BUFFER_OVERFLOW;
             }
 
@@ -574,7 +575,7 @@ static NTSTATUS query_dir_item(fcb* fcb, ccb* ccb, void* buf, LONG* len, PIRP Ir
             needed = offsetof(FILE_ID_EXTD_BOTH_DIR_INFORMATION, FileName[0]) + de->name.Length;
 
             if (needed > *len) {
-                TRACE("buffer overflow - %u > %u\n", needed, *len);
+                TRACE("buffer overflow - %li > %lu\n", needed, *len);
                 return STATUS_BUFFER_OVERFLOW;
             }
 
@@ -624,7 +625,7 @@ static NTSTATUS query_dir_item(fcb* fcb, ccb* ccb, void* buf, LONG* len, PIRP Ir
             needed = sizeof(FILE_NAMES_INFORMATION) - sizeof(WCHAR) + de->name.Length;
 
             if (needed > *len) {
-                TRACE("buffer overflow - %u > %u\n", needed, *len);
+                TRACE("buffer overflow - %li > %lu\n", needed, *len);
                 return STATUS_BUFFER_OVERFLOW;
             }
 
@@ -812,7 +813,7 @@ static NTSTATUS query_directory(PIRP Irp) {
         }
 
         if (flags != 0)
-            TRACE("    unknown flags: %u\n", flags);
+            TRACE("    unknown flags: %lu\n", flags);
     }
 
     if (IrpSp->Flags & SL_RESTART_SCAN) {
@@ -830,7 +831,7 @@ static NTSTATUS query_directory(PIRP Irp) {
     initial = !ccb->query_string.Buffer;
 
     if (IrpSp->Parameters.QueryDirectory.FileName && IrpSp->Parameters.QueryDirectory.FileName->Length > 1) {
-        TRACE("QD filename: %.*S\n", IrpSp->Parameters.QueryDirectory.FileName->Length / sizeof(WCHAR), IrpSp->Parameters.QueryDirectory.FileName->Buffer);
+        TRACE("QD filename: %.*S\n", (int)(IrpSp->Parameters.QueryDirectory.FileName->Length / sizeof(WCHAR)), IrpSp->Parameters.QueryDirectory.FileName->Buffer);
 
         if (IrpSp->Parameters.QueryDirectory.FileName->Length > sizeof(WCHAR) || IrpSp->Parameters.QueryDirectory.FileName->Buffer[0] != L'*') {
             specific_file = true;
@@ -872,7 +873,7 @@ static NTSTATUS query_directory(PIRP Irp) {
     }
 
     if (ccb->query_string.Buffer) {
-        TRACE("query string = %.*S\n", ccb->query_string.Length / sizeof(WCHAR), ccb->query_string.Buffer);
+        TRACE("query string = %.*S\n", (int)(ccb->query_string.Length / sizeof(WCHAR)), ccb->query_string.Buffer);
     }
 
     newoffset = ccb->query_dir_offset;
@@ -913,7 +914,7 @@ static NTSTATUS query_directory(PIRP Irp) {
         if (!ccb->case_sensitive) {
             Status = RtlUpcaseUnicodeString(&us, &ccb->query_string, true);
             if (!NT_SUCCESS(Status)) {
-                ERR("RtlUpcaseUnicodeString returned %08x\n", Status);
+                ERR("RtlUpcaseUnicodeString returned %08lx\n", Status);
                 goto end;
             }
 
@@ -996,8 +997,8 @@ static NTSTATUS query_directory(PIRP Irp) {
         }
     }
 
-    TRACE("file(0) = %.*S\n", de.name.Length / sizeof(WCHAR), de.name.Buffer);
-    TRACE("offset = %u\n", ccb->query_dir_offset - 1);
+    TRACE("file(0) = %.*S\n", (int)(de.name.Length / sizeof(WCHAR)), de.name.Buffer);
+    TRACE("offset = %I64u\n", ccb->query_dir_offset - 1);
 
     Status = query_dir_item(fcb, ccb, buf, &length, Irp, &de, fcb->subvol);
 
@@ -1041,8 +1042,8 @@ static NTSTATUS query_directory(PIRP Irp) {
                         curitem = (uint8_t*)buf + IrpSp->Parameters.QueryDirectory.Length - length;
                         count++;
 
-                        TRACE("file(%u) %u = %.*S\n", count, curitem - (uint8_t*)buf, de.name.Length / sizeof(WCHAR), de.name.Buffer);
-                        TRACE("offset = %u\n", ccb->query_dir_offset - 1);
+                        TRACE("file(%lu) %Iu = %.*S\n", count, curitem - (uint8_t*)buf, (int)(de.name.Length / sizeof(WCHAR)), de.name.Buffer);
+                        TRACE("offset = %I64u\n", ccb->query_dir_offset - 1);
 
                         status2 = query_dir_item(fcb, ccb, curitem, &length, Irp, &de, fcb->subvol);
 
@@ -1075,7 +1076,7 @@ end:
 
     ExReleaseResourceLite(&Vcb->tree_lock);
 
-    TRACE("returning %08x\n", Status);
+    TRACE("returning %08lx\n", Status);
 
     return Status;
 }
@@ -1135,11 +1136,11 @@ static NTSTATUS notify_change_directory(device_extension* Vcb, PIRP Irp) {
 
             Status = fileref_get_filename(fileref, &ccb->filename, NULL, &reqlen);
             if (!NT_SUCCESS(Status)) {
-                ERR("fileref_get_filename returned %08x\n", Status);
+                ERR("fileref_get_filename returned %08lx\n", Status);
                 goto end;
             }
         } else {
-            ERR("fileref_get_filename returned %08x\n", Status);
+            ERR("fileref_get_filename returned %08lx\n", Status);
             goto end;
         }
     }
@@ -1196,7 +1197,7 @@ NTSTATUS __stdcall drv_directory_control(IN PDEVICE_OBJECT DeviceObject, IN PIRP
             break;
 
         default:
-            WARN("unknown minor %u\n", func);
+            WARN("unknown minor %lu\n", func);
             Status = STATUS_NOT_IMPLEMENTED;
             Irp->IoStatus.Status = Status;
             break;
@@ -1211,7 +1212,7 @@ end:
     IoCompleteRequest(Irp, IO_DISK_INCREMENT);
 
 exit:
-    TRACE("returning %08x\n", Status);
+    TRACE("returning %08lx\n", Status);
 
     if (top_level)
         IoSetTopLevelIrp(NULL);