]> git.proxmox.com Git - mirror_edk2.git/blobdiff - InOsEmuPkg/Unix/Sec/BlockIo.c
InOsEmuPkg: Add support for mounting CD-ROM images.
[mirror_edk2.git] / InOsEmuPkg / Unix / Sec / BlockIo.c
index 8b760cc41a94aab0414c9402479f7ac7e17eeca5..57bfdfa78a784bbdd4ab43149323f8e0f26162dc 100644 (file)
@@ -29,6 +29,7 @@ typedef struct {
   BOOLEAN                     WriteProtected;\r
 \r
   UINT64                      NumberOfBlocks;\r
+  UINT32                      BlockSize;\r
 \r
   EMU_BLOCK_IO_PROTOCOL       EmuBlockIo;\r
   EFI_BLOCK_IO_MEDIA          *Media;\r
@@ -157,14 +158,14 @@ EmuBlockIoOpenDevice (
     }\r
 #endif\r
     \r
-  } else if (fstatfs (Private->fd, &buf) == 0) {\r
-    //\r
-    // Works for files, not devices\r
-    //\r
-    Private->Media->BlockSize = buf.f_bsize;\r
-    Private->Media->OptimalTransferLengthGranularity = buf.f_iosize/buf.f_bsize;\r
+  } else {\r
+    Private->Media->BlockSize = Private->BlockSize;\r
     Private->NumberOfBlocks = DivU64x32 (FileSize, Private->Media->BlockSize);\r
     Private->Media->LastBlock = Private->NumberOfBlocks - 1;\r
+    \r
+    if (fstatfs (Private->fd, &buf) == 0) {\r
+      Private->Media->OptimalTransferLengthGranularity = buf.f_iosize/buf.f_bsize;\r
+    }\r
   } \r
 \r
   DEBUG ((EFI_D_INIT, "%HEmuOpenBlock: opened %a%N\n", Private->Filename));\r
@@ -627,7 +628,8 @@ EmuBlockIoThunkOpen (
   Private->Signature = EMU_BLOCK_IO_PRIVATE_SIGNATURE;\r
   Private->Thunk     = This;\r
   CopyMem (&Private->EmuBlockIo, &gEmuBlockIoProtocol, sizeof (gEmuBlockIoProtocol));\r
-  Private->fd = -1;\r
+  Private->fd        = -1;\r
+  Private->BlockSize = 512;\r
  \r
   Private->Filename = StdDupUnicodeToAscii (This->ConfigString);\r
   if (Private->Filename == NULL) {\r
@@ -646,6 +648,10 @@ EmuBlockIoThunkOpen (
       if (*Str == 'O' || *Str == 'W') {\r
         Private->WriteProtected  = (BOOLEAN) (*Str == 'O');\r
       }\r
+      if (*Str == ':') {\r
+        Private->BlockSize = strtol (++Str, NULL, 0);\r
+        break;\r
+      }\r
     }\r
   }\r
   \r