[ros-diffs] [arty] 36834: Commit up some stuff from cdfs. Misc merged from trunk and my overhaul of noncached read.

arty at svn.reactos.org arty at svn.reactos.org
Sun Oct 19 21:18:05 CEST 2008


Author: arty
Date: Sun Oct 19 14:18:04 2008
New Revision: 36834

URL: http://svn.reactos.org/svn/reactos?rev=36834&view=rev
Log:
Commit up some stuff from cdfs.
Misc merged from trunk and my overhaul of noncached read.

Added:
    branches/arty-newcc/drivers/filesystems/cdfs/cdfs.xml
      - copied unchanged from r21065, trunk/reactos/drivers/fs/cdfs/cdfs.xml
Modified:
    branches/arty-newcc/drivers/filesystems/cdfs/fsctl.c
    branches/arty-newcc/drivers/filesystems/cdfs/rw.c

Modified: branches/arty-newcc/drivers/filesystems/cdfs/fsctl.c
URL: http://svn.reactos.org/svn/reactos/branches/arty-newcc/drivers/filesystems/cdfs/fsctl.c?rev=36834&r1=36833&r2=36834&view=diff
==============================================================================
--- branches/arty-newcc/drivers/filesystems/cdfs/fsctl.c [iso-8859-1] (original)
+++ branches/arty-newcc/drivers/filesystems/cdfs/fsctl.c [iso-8859-1] Sun Oct 19 14:18:04 2008
@@ -331,8 +331,7 @@
   Status = IoCreateDevice(CdfsGlobalData->DriverObject,
 			  sizeof(DEVICE_EXTENSION),
 			  NULL,
-			  FILE_DEVICE_FILE_SYSTEM,
-//			  FILE_DEVICE_DISK_FILE_SYSTEM,
+			  FILE_DEVICE_CD_ROM_FILE_SYSTEM,
 			  0,
 			  FALSE,
 			  &NewDeviceObject);

Modified: branches/arty-newcc/drivers/filesystems/cdfs/rw.c
URL: http://svn.reactos.org/svn/reactos/branches/arty-newcc/drivers/filesystems/cdfs/rw.c?rev=36834&r1=36833&r2=36834&view=diff
==============================================================================
--- branches/arty-newcc/drivers/filesystems/cdfs/rw.c [iso-8859-1] (original)
+++ branches/arty-newcc/drivers/filesystems/cdfs/rw.c [iso-8859-1] Sun Oct 19 14:18:04 2008
@@ -76,23 +76,14 @@
     {
       LARGE_INTEGER FileOffset;
       IO_STATUS_BLOCK IoStatus;
-      CC_FILE_SIZES FileSizes;
 
       if (ReadOffset + Length > Fcb->Entry.DataLengthL)
          Length = Fcb->Entry.DataLengthL - ReadOffset;
 
       if (FileObject->PrivateCacheMap == NULL)
 	{
-	  FileSizes.AllocationSize = Fcb->RFCB.AllocationSize;
-	  FileSizes.FileSize = Fcb->RFCB.FileSize;
-	  FileSizes.ValidDataLength = Fcb->RFCB.ValidDataLength;
-
-	  DPRINT("Attach FCB to File: Size %08x%08x\n", 
-		 Fcb->RFCB.ValidDataLength.HighPart,
-		 Fcb->RFCB.ValidDataLength.LowPart);
-
           CcInitializeCacheMap(FileObject,
-                               &FileSizes,
+                               (PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize),
 		               FALSE,
 		               &(CdfsGlobalData->CacheMgrCallbacks),
 		               Fcb);
@@ -112,65 +103,25 @@
 
   if ((ReadOffset % BLOCKSIZE) != 0 || (Length % BLOCKSIZE) != 0)
     {
-      /* Then we need to do a partial or misaligned read ... */
-      PVOID PageBuf = ExAllocatePool(NonPagedPool, BLOCKSIZE);
-      PCHAR ReadInPage = (PCHAR)PageBuf + (ReadOffset & (BLOCKSIZE - 1));
-      PCHAR TargetRead = (PCHAR)Buffer;
-      ULONG ActualReadOffset, EndOfExtent, ReadLen;
+      return STATUS_INVALID_PARAMETER;
+    }
 
-      if (!PageBuf)
-        {
-	    return STATUS_NO_MEMORY;
-	}
+  if (ReadOffset + Length > ROUND_UP(Fcb->Entry.DataLengthL, BLOCKSIZE))
+    Length = ROUND_UP(Fcb->Entry.DataLengthL, BLOCKSIZE) - ReadOffset;
 
-      ActualReadOffset = ReadOffset & ~(BLOCKSIZE - 1);
-      EndOfExtent = ReadOffset + Length;
-
-      while (ActualReadOffset < EndOfExtent)
-        {
-	  Status = CdfsReadSectors
-	      (DeviceExt->StorageDevice,
-	       Fcb->Entry.ExtentLocationL + (ActualReadOffset / BLOCKSIZE),
-	       1,
-	       PageBuf,
-	       FALSE);
-	  
-	  if (!NT_SUCCESS(Status))
-	    break;
-	  
-	  ReadLen = BLOCKSIZE - (ActualReadOffset & (BLOCKSIZE - 1));
-	  if (ReadLen > EndOfExtent - ActualReadOffset)
-	    {
-		ReadLen = EndOfExtent - ActualReadOffset;
-	    }
-
-	  RtlCopyMemory(TargetRead, ReadInPage, ReadLen);
-
-	  ActualReadOffset += ReadLen;
-	  TargetRead += ReadLen;	  
-	}
-
-      ExFreePool(PageBuf);
-    }
-  else
+  Status = CdfsReadSectors(DeviceExt->StorageDevice,
+			   Fcb->Entry.ExtentLocationL + (ReadOffset / BLOCKSIZE),
+			   Length / BLOCKSIZE,
+			   Buffer,
+			   FALSE);
+  if (NT_SUCCESS(Status))
     {
-      if (ReadOffset + Length > ROUND_UP(Fcb->Entry.DataLengthL, BLOCKSIZE))
-	Length = ROUND_UP(Fcb->Entry.DataLengthL, BLOCKSIZE) - ReadOffset;
-
-      Status = CdfsReadSectors(DeviceExt->StorageDevice,
-			       Fcb->Entry.ExtentLocationL + (ReadOffset / BLOCKSIZE),
-			       Length / BLOCKSIZE,
-			       Buffer,
-			       FALSE);
-      if (NT_SUCCESS(Status))
-        {
-	  *LengthRead = Length;
-	  if (Length + ReadOffset > Fcb->Entry.DataLengthL)
-	    {
-	      memset(Buffer + Fcb->Entry.DataLengthL - ReadOffset,
-		     0,
-		     Length + ReadOffset - Fcb->Entry.DataLengthL);
-	    }
+      *LengthRead = Length;
+      if (Length + ReadOffset > Fcb->Entry.DataLengthL)
+	{
+	  memset(Buffer + Fcb->Entry.DataLengthL - ReadOffset,
+		 0,
+		 Length + ReadOffset - Fcb->Entry.DataLengthL);
 	}
     }
 



More information about the Ros-diffs mailing list