[ros-diffs] [dgorbachev] 45490: Fix formatting.

dgorbachev at svn.reactos.org dgorbachev at svn.reactos.org
Sun Feb 7 20:52:11 CET 2010


Author: dgorbachev
Date: Sun Feb  7 20:52:10 2010
New Revision: 45490

URL: http://svn.reactos.org/svn/reactos?rev=45490&view=rev
Log:
Fix formatting.

Modified:
    trunk/reactos/base/setup/usetup/cabinet.c

Modified: trunk/reactos/base/setup/usetup/cabinet.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/setup/usetup/cabinet.c?rev=45490&r1=45489&r2=45490&view=diff
==============================================================================
--- trunk/reactos/base/setup/usetup/cabinet.c [iso-8859-1] (original)
+++ trunk/reactos/base/setup/usetup/cabinet.c [iso-8859-1] Sun Feb  7 20:52:10 2010
@@ -20,19 +20,19 @@
 #define SEEK_END      2
 #endif
 
-typedef struct __DOSTIME
-{
-  WORD Second:5;
-  WORD Minute:6;
-  WORD Hour:5;
+typedef struct _DOSTIME
+{
+    WORD Second:5;
+    WORD Minute:6;
+    WORD Hour:5;
 } DOSTIME, *PDOSTIME;
 
 
-typedef struct __DOSDATE
-{
-  WORD Day:5;
-  WORD Month:4;
-  WORD Year:5;
+typedef struct _DOSDATE
+{
+    WORD Day:5;
+    WORD Month:4;
+    WORD Year:5;
 } DOSDATE, *PDOSDATE;
 
 static WCHAR CabinetName[256];          // Filename of current cabinet
@@ -57,7 +57,7 @@
 static ULONG CodecId;
 static PCABINET_CODEC_UNCOMPRESS CodecUncompress = NULL;
 static BOOL CodecSelected = FALSE;
-static ULONG LastFileOffset = 0;          // Uncompressed offset of last extracted file
+static ULONG LastFileOffset = 0;    // Uncompressed offset of last extracted file
 static PCABINET_OVERWRITE OverwriteHandler = NULL;
 static PCABINET_EXTRACT ExtractHandler = NULL;
 static PCABINET_DISK_CHANGE DiskChangeHandler = NULL;
@@ -80,7 +80,6 @@
    return RtlAllocateHeap(ProcessHeap, HEAP_ZERO_MEMORY, nSize);
 }
 
-
 void __cdecl free(void* _ptr)
 {
   RtlFreeHeap(ProcessHeap, 0, _ptr);
@@ -93,11 +92,6 @@
 
 /* RAW codec */
 
-ULONG
-RawCodecUncompress(PVOID OutputBuffer,
-				   PVOID InputBuffer,
-				   PLONG InputLength,
-				   PLONG OutputLength)
 /*
  * FUNCTION: Uncompresses data in a buffer
  * ARGUMENTS:
@@ -108,21 +102,20 @@
  *     OutputLength = Length of output buffer before, amount filled after
  *                    Negative to indicate that this is not the end of the block
  */
-{
-  LONG In = abs(*InputLength), Out = abs(*OutputLength);
-  memcpy(OutputBuffer, InputBuffer, In < Out ? In : Out);
-  *InputLength = *OutputLength = In < Out ? In : Out;
-  return CS_SUCCESS;
-}
-
+ULONG
+RawCodecUncompress(PVOID OutputBuffer,
+                   PVOID InputBuffer,
+                   PLONG InputLength,
+                   PLONG OutputLength)
+{
+    LONG In = abs(*InputLength), Out = abs(*OutputLength);
+    memcpy(OutputBuffer, InputBuffer, In < Out ? In : Out);
+    *InputLength = *OutputLength = In < Out ? In : Out;
+    return CS_SUCCESS;
+}
 
 /* MSZIP codec */
 
-ULONG
-MSZipCodecUncompress(PVOID OutputBuffer,
-					 PVOID InputBuffer,
-					 PLONG InputLength,
-					 PLONG OutputLength)
 /*
  * FUNCTION: Uncompresses data in a buffer
  * ARGUMENTS:
@@ -133,140 +126,146 @@
  *     OutputLength = Length of output buffer before, amount filled after
  *                    Negative to indicate that this is not the end of the block
  */
-{
-  USHORT Magic;
-  INT Status;
-
-  DPRINT("MSZipCodecUncompress( OutputBuffer = %x, InputBuffer = %x, InputLength = %d, OutputLength = %d.\n", OutputBuffer, InputBuffer, *InputLength, *OutputLength);
-  if( *InputLength > 0 )
-	{
-	  Magic = *((PUSHORT)InputBuffer);
-
-	  if (Magic != MSZIP_MAGIC)
-		{
-		  DPRINT("Bad MSZIP block header magic (0x%X)\n", Magic);
-		  return CS_BADSTREAM;
-		}
-
-	  ZStream.next_in   = ((PUCHAR)InputBuffer )+ 2;
-	  ZStream.avail_in  = *InputLength - 2;
-	  ZStream.next_out  = (PUCHAR)OutputBuffer;
-	  ZStream.avail_out = abs(*OutputLength);
-
-	  /* WindowBits is passed < 0 to tell that there is no zlib header.
-	   * Note that in this case inflate *requires* an extra "dummy" byte
-	   * after the compressed stream in order to complete decompression and
-	   * return Z_STREAM_END.
-	   */
-	  Status = inflateInit2(&ZStream, -MAX_WBITS);
-	  if (Status != Z_OK)
-		{
-		  DPRINT("inflateInit2() returned (%d).\n", Status);
-		  return CS_BADSTREAM;
-		}
-	  ZStream.total_in = 2;
-	}
-  else {
-	ZStream.avail_in = -*InputLength;
-	ZStream.next_in = (PUCHAR)InputBuffer;
-	ZStream.next_out = (PUCHAR)OutputBuffer;
-	ZStream.avail_out = abs(*OutputLength);
-	ZStream.total_in = 0;
-  }
-  ZStream.total_out = 0;
-  Status = inflate(&ZStream, Z_SYNC_FLUSH );
-  if (Status != Z_OK && Status != Z_STREAM_END)
-	{
-	  DPRINT("inflate() returned (%d) (%s).\n", Status, ZStream.msg);
-	  if (Status == Z_MEM_ERROR)
-		return CS_NOMEMORY;
-	  return CS_BADSTREAM;
-	}
-
-  if( *OutputLength > 0 )
-	{
-	  Status = inflateEnd(&ZStream);
-	  if (Status != Z_OK)
-		{
-		  DPRINT("inflateEnd() returned (%d).\n", Status);
-		  return CS_BADSTREAM;
-		}
-	}
-  *OutputLength = ZStream.total_out;
-  *InputLength = ZStream.total_in;
-  return CS_SUCCESS;
-}
-
-
+ULONG
+MSZipCodecUncompress(PVOID OutputBuffer,
+                     PVOID InputBuffer,
+                     PLONG InputLength,
+                     PLONG OutputLength)
+{
+    USHORT Magic;
+    INT Status;
+
+    DPRINT("MSZipCodecUncompress(OutputBuffer = %x, InputBuffer = %x, "
+           "InputLength = %d, OutputLength = %d)\n", OutputBuffer,
+           InputBuffer, *InputLength, *OutputLength);
+    if (*InputLength > 0)
+    {
+        Magic = *(PUSHORT)InputBuffer;
+
+        if (Magic != MSZIP_MAGIC)
+        {
+            DPRINT("Bad MSZIP block header magic (0x%X)\n", Magic);
+            return CS_BADSTREAM;
+        }
+
+        ZStream.next_in = (PUCHAR)InputBuffer + 2;
+        ZStream.avail_in = *InputLength - 2;
+        ZStream.next_out = (PUCHAR)OutputBuffer;
+        ZStream.avail_out = abs(*OutputLength);
+
+        /* WindowBits is passed < 0 to tell that there is no zlib header.
+         * Note that in this case inflate *requires* an extra "dummy" byte
+         * after the compressed stream in order to complete decompression and
+         * return Z_STREAM_END.
+         */
+        Status = inflateInit2(&ZStream, -MAX_WBITS);
+        if (Status != Z_OK)
+        {
+            DPRINT("inflateInit2() returned (%d)\n", Status);
+            return CS_BADSTREAM;
+        }
+        ZStream.total_in = 2;
+    }
+    else
+    {
+        ZStream.avail_in = -*InputLength;
+        ZStream.next_in = (PUCHAR)InputBuffer;
+        ZStream.next_out = (PUCHAR)OutputBuffer;
+        ZStream.avail_out = abs(*OutputLength);
+        ZStream.total_in = 0;
+    }
+
+    ZStream.total_out = 0;
+    Status = inflate(&ZStream, Z_SYNC_FLUSH);
+    if (Status != Z_OK && Status != Z_STREAM_END)
+    {
+        DPRINT("inflate() returned (%d) (%s)\n", Status, ZStream.msg);
+        if (Status == Z_MEM_ERROR)
+            return CS_NOMEMORY;
+        return CS_BADSTREAM;
+    }
+
+    if (*OutputLength > 0)
+    {
+        Status = inflateEnd(&ZStream);
+        if (Status != Z_OK)
+        {
+            DPRINT("inflateEnd() returned (%d)\n", Status);
+            return CS_BADSTREAM;
+        }
+    }
+
+    *OutputLength = ZStream.total_out;
+    *InputLength = ZStream.total_in;
+
+    return CS_SUCCESS;
+}
 
 /* Memory functions */
 
-voidpf MSZipAlloc(voidpf opaque, uInt items, uInt size)
-{
-  return (voidpf)RtlAllocateHeap (ProcessHeap, 0, items * size);
-}
-
-void MSZipFree (voidpf opaque, voidpf address)
-{
-  RtlFreeHeap(ProcessHeap, 0, address);
+voidpf
+MSZipAlloc(voidpf opaque, uInt items, uInt size)
+{
+    return (voidpf)RtlAllocateHeap(ProcessHeap, 0, items * size);
+}
+
+void
+MSZipFree(voidpf opaque, voidpf address)
+{
+    RtlFreeHeap(ProcessHeap, 0, address);
 }
 
 static BOOL
-ConvertSystemTimeToFileTime(
-  CONST SYSTEMTIME *  lpSystemTime,
-  LPFILETIME  lpFileTime)
-{
-  TIME_FIELDS TimeFields;
-  LARGE_INTEGER liTime;
-
-  TimeFields.Year = lpSystemTime->wYear;
-  TimeFields.Month = lpSystemTime->wMonth;
-  TimeFields.Day = lpSystemTime->wDay;
-  TimeFields.Hour = lpSystemTime->wHour;
-  TimeFields.Minute = lpSystemTime->wMinute;
-  TimeFields.Second = lpSystemTime->wSecond;
-  TimeFields.Milliseconds = lpSystemTime->wMilliseconds;
-
-  if (RtlTimeFieldsToTime(&TimeFields, &liTime))
-    {
-      lpFileTime->dwLowDateTime = liTime.u.LowPart;
-      lpFileTime->dwHighDateTime = liTime.u.HighPart;
-      return TRUE;
-    }
-  return FALSE;
-}
-
+ConvertSystemTimeToFileTime(CONST SYSTEMTIME *lpSystemTime,
+                            LPFILETIME lpFileTime)
+{
+    TIME_FIELDS TimeFields;
+    LARGE_INTEGER liTime;
+
+    TimeFields.Year = lpSystemTime->wYear;
+    TimeFields.Month = lpSystemTime->wMonth;
+    TimeFields.Day = lpSystemTime->wDay;
+    TimeFields.Hour = lpSystemTime->wHour;
+    TimeFields.Minute = lpSystemTime->wMinute;
+    TimeFields.Second = lpSystemTime->wSecond;
+    TimeFields.Milliseconds = lpSystemTime->wMilliseconds;
+
+    if (RtlTimeFieldsToTime(&TimeFields, &liTime))
+    {
+        lpFileTime->dwLowDateTime = liTime.u.LowPart;
+        lpFileTime->dwHighDateTime = liTime.u.HighPart;
+        return TRUE;
+    }
+
+    return FALSE;
+}
 
 static BOOL
-ConvertDosDateTimeToFileTime(
-  WORD wFatDate,
-  WORD wFatTime,
-  LPFILETIME lpFileTime)
-{
-  PDOSTIME  pdtime = (PDOSTIME) &wFatTime;
-  PDOSDATE  pddate = (PDOSDATE) &wFatDate;
-  SYSTEMTIME SystemTime;
-
-  if (lpFileTime == NULL)
-    return FALSE;
-
-  SystemTime.wMilliseconds = 0;
-  SystemTime.wSecond = pdtime->Second;
-  SystemTime.wMinute = pdtime->Minute;
-  SystemTime.wHour = pdtime->Hour;
-
-  SystemTime.wDay = pddate->Day;
-  SystemTime.wMonth = pddate->Month;
-  SystemTime.wYear = 1980 + pddate->Year;
-
-  ConvertSystemTimeToFileTime(&SystemTime,lpFileTime);
-
-  return TRUE;
-}
-
-
-static PWCHAR
-GetFileName(PWCHAR Path)
+ConvertDosDateTimeToFileTime(WORD wFatDate,
+                             WORD wFatTime,
+                             LPFILETIME lpFileTime)
+{
+    PDOSTIME pdtime = (PDOSTIME)&wFatTime;
+    PDOSDATE pddate = (PDOSDATE)&wFatDate;
+    SYSTEMTIME SystemTime;
+
+    if (lpFileTime == NULL)
+        return FALSE;
+
+    SystemTime.wMilliseconds = 0;
+    SystemTime.wSecond = pdtime->Second;
+    SystemTime.wMinute = pdtime->Minute;
+    SystemTime.wHour = pdtime->Hour;
+
+    SystemTime.wDay = pddate->Day;
+    SystemTime.wMonth = pddate->Month;
+    SystemTime.wYear = 1980 + pddate->Year;
+
+    ConvertSystemTimeToFileTime(&SystemTime, lpFileTime);
+
+    return TRUE;
+}
+
 /*
  * FUNCTION: Returns a pointer to file name
  * ARGUMENTS:
@@ -274,43 +273,45 @@
  * RETURNS:
  *     Pointer to filename
  */
-{
-  ULONG i, j;
-
-  j = i = 0;
-
-  while (Path [i++])
-    {
-      if (Path[i - 1] == L'\\') j = i;
-    }
-  return Path + j;
-}
-
-
-static VOID
-RemoveFileName(PWCHAR Path)
+static PWCHAR
+GetFileName(PWCHAR Path)
+{
+    ULONG i, j;
+
+    j = i = 0;
+
+    while (Path[i++])
+    {
+        if (Path[i - 1] == L'\\')
+            j = i;
+    }
+
+    return Path + j;
+}
+
 /*
  * FUNCTION: Removes a file name from a path
  * ARGUMENTS:
  *     Path = Pointer to string with path
  */
-{
-  PWCHAR FileName;
-  DWORD i;
-
-  i = 0;
-  FileName = GetFileName(Path + i);
-
-  if ((FileName != (Path + i)) && (FileName [-1] == L'\\'))
-    FileName--;
-  if ((FileName == (Path + i)) && (FileName [0] == L'\\'))
-    FileName++;
-  FileName[0] = 0;
-}
-
-
-static BOOL
-SetAttributesOnFile(PCFFILE File, HANDLE hFile)
+static VOID
+RemoveFileName(PWCHAR Path)
+{
+    PWCHAR FileName;
+    DWORD i;
+
+    i = 0;
+    FileName = GetFileName(Path + i);
+
+    if (FileName != Path + i && FileName[-1] == L'\\')
+        FileName--;
+
+    if (FileName == Path + i && FileName[0] == L'\\')
+        FileName++;
+
+    FileName[0] = 0;
+}
+
 /*
  * FUNCTION: Sets attributes on a file
  * ARGUMENTS:
@@ -318,113 +319,110 @@
  * RETURNS:
  *     Status of operation
  */
-{
-  FILE_BASIC_INFORMATION FileBasic;
-  IO_STATUS_BLOCK IoStatusBlock;
-  NTSTATUS NtStatus;
-  ULONG Attributes = 0;
-
-  if (File->Attributes & CAB_ATTRIB_READONLY)
-    Attributes |= FILE_ATTRIBUTE_READONLY;
-
-  if (File->Attributes & CAB_ATTRIB_HIDDEN)
-    Attributes |= FILE_ATTRIBUTE_HIDDEN;
-
-  if (File->Attributes & CAB_ATTRIB_SYSTEM)
-    Attributes |= FILE_ATTRIBUTE_SYSTEM;
-
-  if (File->Attributes & CAB_ATTRIB_DIRECTORY)
-    Attributes |= FILE_ATTRIBUTE_DIRECTORY;
-
-  if (File->Attributes & CAB_ATTRIB_ARCHIVE)
-    Attributes |= FILE_ATTRIBUTE_ARCHIVE;
-
-  NtStatus = NtQueryInformationFile(hFile,
-    &IoStatusBlock,
-    &FileBasic,
-    sizeof(FILE_BASIC_INFORMATION),
-    FileBasicInformation);
-  if (!NT_SUCCESS(NtStatus))
-    {
-      DPRINT("NtQueryInformationFile() failed (%x).\n", NtStatus);
-    }
-  else
-    {
-      FileBasic.FileAttributes = Attributes;
-
-      NtStatus = NtSetInformationFile(hFile,
-        &IoStatusBlock,
-        &FileBasic,
-        sizeof(FILE_BASIC_INFORMATION),
-        FileBasicInformation);
-      if (!NT_SUCCESS(NtStatus))
-        {
-          DPRINT("NtSetInformationFile() failed (%x).\n", NtStatus);
-        }
-    }
-
-  return NT_SUCCESS(NtStatus);
-}
-
-static ULONG
-CloseCabinet(VOID)
+static BOOL
+SetAttributesOnFile(PCFFILE File,
+                    HANDLE hFile)
+{
+    FILE_BASIC_INFORMATION FileBasic;
+    IO_STATUS_BLOCK IoStatusBlock;
+    NTSTATUS NtStatus;
+    ULONG Attributes = 0;
+
+    if (File->Attributes & CAB_ATTRIB_READONLY)
+        Attributes |= FILE_ATTRIBUTE_READONLY;
+
+    if (File->Attributes & CAB_ATTRIB_HIDDEN)
+        Attributes |= FILE_ATTRIBUTE_HIDDEN;
+
+    if (File->Attributes & CAB_ATTRIB_SYSTEM)
+        Attributes |= FILE_ATTRIBUTE_SYSTEM;
+
+    if (File->Attributes & CAB_ATTRIB_DIRECTORY)
+        Attributes |= FILE_ATTRIBUTE_DIRECTORY;
+
+    if (File->Attributes & CAB_ATTRIB_ARCHIVE)
+        Attributes |= FILE_ATTRIBUTE_ARCHIVE;
+
+    NtStatus = NtQueryInformationFile(hFile,
+                                      &IoStatusBlock,
+                                      &FileBasic,
+                                      sizeof(FILE_BASIC_INFORMATION),
+                                      FileBasicInformation);
+    if (!NT_SUCCESS(NtStatus))
+    {
+        DPRINT("NtQueryInformationFile() failed (%x)\n", NtStatus);
+    }
+    else
+    {
+        FileBasic.FileAttributes = Attributes;
+
+        NtStatus = NtSetInformationFile(hFile,
+                                        &IoStatusBlock,
+                                        &FileBasic,
+                                        sizeof(FILE_BASIC_INFORMATION),
+                                        FileBasicInformation);
+        if (!NT_SUCCESS(NtStatus))
+        {
+            DPRINT("NtSetInformationFile() failed (%x)\n", NtStatus);
+        }
+    }
+
+    return NT_SUCCESS(NtStatus);
+}
+
 /*
  * FUNCTION: Closes the current cabinet
  * RETURNS:
  *     Status of operation
  */
-{
-  if (FileBuffer)
-    {
-      NtUnmapViewOfSection( NtCurrentProcess(), FileBuffer );
-	  NtClose( FileSectionHandle );
-	  NtClose( FileHandle );
-      FileBuffer = NULL;
-    }
-
-  return 0;
-}
-
-
+static ULONG
+CloseCabinet(VOID)
+{
+    if (FileBuffer)
+    {
+        NtUnmapViewOfSection(NtCurrentProcess(), FileBuffer);
+        NtClose(FileSectionHandle);
+        NtClose(FileHandle);
+        FileBuffer = NULL;
+    }
+
+    return 0;
+}
+
+/*
+ * FUNCTION: Initialize archiver
+ */
 VOID
 CabinetInitialize(VOID)
-/*
- * FUNCTION: Initialize archiver
- */
-{
-  ZStream.zalloc = MSZipAlloc;
-  ZStream.zfree  = MSZipFree;
-  ZStream.opaque = (voidpf)0;
-
-  FileOpen = FALSE;
-  wcscpy(DestPath, L"");
-
-  CodecId       = CAB_CODEC_RAW;
-  CodecSelected = TRUE;
-
-  FolderUncompSize = 0;
-  BytesLeftInBlock = 0;
-  CabinetReserved = 0;
-  FolderReserved = 0;
-  DataReserved = 0;
-  CabinetReservedArea = NULL;
-  LastFileOffset = 0;
-}
-
-
+{
+    ZStream.zalloc = MSZipAlloc;
+    ZStream.zfree = MSZipFree;
+    ZStream.opaque = (voidpf)0;
+
+    FileOpen = FALSE;
+    wcscpy(DestPath, L"");
+
+    CodecId = CAB_CODEC_RAW;
+    CodecSelected = TRUE;
+
+    FolderUncompSize = 0;
+    BytesLeftInBlock = 0;
+    CabinetReserved = 0;
+    FolderReserved = 0;
+    DataReserved = 0;
+    CabinetReservedArea = NULL;
+    LastFileOffset = 0;
+}
+
+/*
+ * FUNCTION: Cleanup archiver
+ */
 VOID
 CabinetCleanup(VOID)
-/*
- * FUNCTION: Cleanup archiver
- */
-{
-  CabinetClose();
-}
-
-
-BOOL
-CabinetNormalizePath(PWCHAR Path,
-  ULONG Length)
+{
+    CabinetClose();
+}
+
 /*
  * FUNCTION: Normalizes a path
  * ARGUMENTS:
@@ -433,254 +431,256 @@
  * RETURNS:
  *     TRUE if there was enough room in Path, or FALSE
  */
-{
-  ULONG n;
-  BOOL OK = TRUE;
-
-  if ((n = wcslen(Path)) &&
-    (Path[n - 1] != L'\\') &&
-    (OK = ((n + 1) < Length)))
-    {
-      Path[n]     = L'\\';
-      Path[n + 1] = 0;
-    }
-  return OK;
-}
-
-
-PWCHAR
-CabinetGetCabinetName()
+BOOL
+CabinetNormalizePath(PWCHAR Path,
+                     ULONG Length)
+{
+    ULONG n;
+    BOOL Ok;
+
+    n = wcslen(Path);
+    Ok = (n + 1) < Length;
+
+    if (n != 0 && Path[n - 1] != L'\\' && Ok)
+    {
+        Path[n] = L'\\';
+        Path[n + 1] = 0;
+    }
+
+    return Ok;
+}
+
 /*
  * FUNCTION: Returns pointer to cabinet file name
  * RETURNS:
  *     Pointer to string with name of cabinet
  */
-{
-  return CabinetName;
-}
-
-
-VOID
-CabinetSetCabinetName(PWCHAR FileName)
+PWCHAR
+CabinetGetCabinetName(VOID)
+{
+    return CabinetName;
+}
+
 /*
  * FUNCTION: Sets cabinet file name
  * ARGUMENTS:
  *     FileName = Pointer to string with name of cabinet
  */
-{
-  wcscpy(CabinetName, FileName);
-}
-
-
 VOID
-CabinetSetDestinationPath(PWCHAR DestinationPath)
+CabinetSetCabinetName(PWCHAR FileName)
+{
+    wcscpy(CabinetName, FileName);
+}
+
 /*
  * FUNCTION: Sets destination path
  * ARGUMENTS:
  *    DestinationPath = Pointer to string with name of destination path
  */
-{
-  wcscpy(DestPath, DestinationPath);
-  if (wcslen(DestPath) > 0)
-    CabinetNormalizePath(DestPath, MAX_PATH);
-}
-
-
-PWCHAR
-CabinetGetDestinationPath()
+VOID
+CabinetSetDestinationPath(PWCHAR DestinationPath)
+{
+    wcscpy(DestPath, DestinationPath);
+
+    if (wcslen(DestPath) > 0)
+        CabinetNormalizePath(DestPath, MAX_PATH);
+}
+
 /*
  * FUNCTION: Returns destination path
  * RETURNS:
  *    Pointer to string with name of destination path
  */
-{
-  return DestPath;
-}
-
-
-ULONG
-CabinetOpen(VOID)
+PWCHAR
+CabinetGetDestinationPath(VOID)
+{
+    return DestPath;
+}
+
 /*
  * FUNCTION: Opens a cabinet file
  * RETURNS:
  *     Status of operation
  */
-{
-  PUCHAR Buffer;
-  UNICODE_STRING ustring;
-  ANSI_STRING astring;
-
-  if (!FileOpen)
-    {
-      OBJECT_ATTRIBUTES ObjectAttributes;
-      IO_STATUS_BLOCK IoStatusBlock;
-      UNICODE_STRING FileName;
-      NTSTATUS NtStatus;
-      ULONG Size;
-
-      RtlInitUnicodeString(&FileName,
-        CabinetName);
-
-      InitializeObjectAttributes(&ObjectAttributes,
-        &FileName,
-        OBJ_CASE_INSENSITIVE,
-        NULL,
-        NULL);
-
-      NtStatus = NtOpenFile(&FileHandle,
-							GENERIC_READ | SYNCHRONIZE,
-							&ObjectAttributes,
-							&IoStatusBlock,
-							FILE_SHARE_READ,
-							FILE_SYNCHRONOUS_IO_NONALERT);
-      if (!NT_SUCCESS(NtStatus))
-        {
-          DPRINT("Cannot open file (%S) (%x).\n", CabinetName, NtStatus);
-          return CAB_STATUS_CANNOT_OPEN;
-        }
-      FileOpen = TRUE;
-
-	  NtStatus = NtCreateSection(&FileSectionHandle,
-								 SECTION_ALL_ACCESS,
-								 0,
-								 0,
-								 PAGE_READONLY,
-								 SEC_COMMIT,
-								 FileHandle);
-      if(!NT_SUCCESS(NtStatus))
-		{
-		  DPRINT("NtCreateSection failed: %x\n", NtStatus);
-		  return CAB_STATUS_NOMEMORY;
-		}
-	  FileBuffer = 0;
-	  FileSize = 0;
-	  NtStatus = NtMapViewOfSection(FileSectionHandle,
-									NtCurrentProcess(),
-									(PVOID *)&FileBuffer,
-									0,
-									0,
-									0,
-									&FileSize,
-									ViewUnmap,
-									0,
-									PAGE_READONLY);
-	  if(!NT_SUCCESS(NtStatus))
-		{
-		  DPRINT("NtMapViewOfSection failed: %x\n", NtStatus);
-		  return CAB_STATUS_NOMEMORY;
-		}
-	  DPRINT( "Cabinet file %S opened and mapped to %x\n", CabinetName, FileBuffer );
-	  PCABHeader = (PCFHEADER)FileBuffer;
-
-      /* Check header */
-      if(FileSize <= sizeof(CFHEADER) ||
-		 PCABHeader->Signature != CAB_SIGNATURE ||
-		 PCABHeader->Version != CAB_VERSION ||
-		 PCABHeader->FolderCount == 0 ||
-		 PCABHeader->FileCount == 0 ||
-		 PCABHeader->FileTableOffset < sizeof(CFHEADER))
-		{
-		  CloseCabinet();
-		  DPRINT("File has invalid header.\n");
-		  return CAB_STATUS_INVALID_CAB;
-		}
-
-      Size = 0;
-	  Buffer = (PUCHAR)(PCABHeader+1);
-      /* Read/skip any reserved bytes */
-      if (PCABHeader->Flags & CAB_FLAG_RESERVE)
-        {
-		  CabinetReserved = *(PUSHORT)Buffer;
-		  Buffer += 2;
-          FolderReserved = *Buffer;
-		  Buffer++;
-          DataReserved = *Buffer;
-		  Buffer++;
-          if (CabinetReserved > 0)
+ULONG
+CabinetOpen(VOID)
+{
+    PUCHAR Buffer;
+    UNICODE_STRING ustring;
+    ANSI_STRING astring;
+
+    if (!FileOpen)
+    {
+        OBJECT_ATTRIBUTES ObjectAttributes;
+        IO_STATUS_BLOCK IoStatusBlock;
+        UNICODE_STRING FileName;
+        NTSTATUS NtStatus;
+        ULONG Size;
+
+        RtlInitUnicodeString(&FileName, CabinetName);
+
+        InitializeObjectAttributes(&ObjectAttributes,
+                                   &FileName,
+                                   OBJ_CASE_INSENSITIVE,
+                                   NULL, NULL);
+
+        NtStatus = NtOpenFile(&FileHandle,
+                              GENERIC_READ | SYNCHRONIZE,
+                              &ObjectAttributes,
+                              &IoStatusBlock,
+                              FILE_SHARE_READ,
+                              FILE_SYNCHRONOUS_IO_NONALERT);
+
+        if (!NT_SUCCESS(NtStatus))
+        {
+            DPRINT("Cannot open file (%S) (%x)\n", CabinetName, NtStatus);
+            return CAB_STATUS_CANNOT_OPEN;
+        }
+
+        FileOpen = TRUE;
+
+        NtStatus = NtCreateSection(&FileSectionHandle,
+                                   SECTION_ALL_ACCESS,
+                                   0, 0,
+                                   PAGE_READONLY,
+                                   SEC_COMMIT,
+                                   FileHandle);
+
+        if (!NT_SUCCESS(NtStatus))
+        {
+            DPRINT("NtCreateSection failed: %x\n", NtStatus);
+            return CAB_STATUS_NOMEMORY;
+        }
+
+        FileBuffer = 0;
+        FileSize = 0;
+
+        NtStatus = NtMapViewOfSection(FileSectionHandle,
+                                      NtCurrentProcess(),
+                                      (PVOID *)&FileBuffer,
+                                      0, 0, 0,
+                                      &FileSize,
+                                      ViewUnmap,
+                                      0,
+                                      PAGE_READONLY);
+
+        if (!NT_SUCCESS(NtStatus))
+        {
+            DPRINT("NtMapViewOfSection failed: %x\n", NtStatus);
+            return CAB_STATUS_NOMEMORY;
+        }
+
+        DPRINT("Cabinet file %S opened and mapped to %x\n", CabinetName, FileBuffer);
+        PCABHeader = (PCFHEADER) FileBuffer;
+
+        /* Check header */
+        if (FileSize <= sizeof(CFHEADER) ||
+            PCABHeader->Signature != CAB_SIGNATURE ||
+            PCABHeader->Version != CAB_VERSION ||
+            PCABHeader->FolderCount == 0 ||
+            PCABHeader->FileCount == 0 ||
+            PCABHeader->FileTableOffset < sizeof(CFHEADER))
+        {
+            CloseCabinet();
+            DPRINT("File has invalid header\n");
+            return CAB_STATUS_INVALID_CAB;
+        }
+
+        Size = 0;
+        Buffer = (PUCHAR)(PCABHeader + 1);
+
+        /* Read/skip any reserved bytes */
+        if (PCABHeader->Flags & CAB_FLAG_RESERVE)
+        {
+            CabinetReserved = *(PUSHORT)Buffer;
+            Buffer += 2;
+            FolderReserved = *Buffer;
+            Buffer++;
+            DataReserved = *Buffer;
+            Buffer++;
+
+            if (CabinetReserved > 0)
             {
-			  CabinetReservedArea = Buffer;
-			  Buffer += CabinetReserved;
+                CabinetReservedArea = Buffer;
+                Buffer += CabinetReserved;
             }
         }
 
-      if (PCABHeader->Flags & CAB_FLAG_HASPREV)
-        {
-          /* The previous cabinet file is in the same directory as the current */
-          wcscpy(CabinetPrev, CabinetName);
-          RemoveFileName(CabinetPrev);
-          CabinetNormalizePath(CabinetPrev, 256);
-		  RtlInitAnsiString( &astring, (LPSTR)Buffer );
-		  ustring.Length = wcslen( CabinetPrev );
-		  ustring.Buffer = CabinetPrev + ustring.Length;
-		  ustring.MaximumLength = sizeof( CabinetPrev ) - ustring.Length;
-		  RtlAnsiStringToUnicodeString( &ustring, &astring, FALSE );
-		  Buffer += astring.Length + 1;
-
-          /* Read label of prev disk */
-		  RtlInitAnsiString( &astring, (LPSTR)Buffer );
-		  ustring.Length = 0;
-		  ustring.Buffer = DiskPrev;
-		  ustring.MaximumLength = sizeof( DiskPrev );
-		  RtlAnsiStringToUnicodeString( &ustring, &astring, FALSE );
-		  Buffer += astring.Length + 1;
-        }
-      else
-        {
-          wcscpy(CabinetPrev, L"");
-          wcscpy(DiskPrev, L"");
-        }
-
-      if (PCABHeader->Flags & CAB_FLAG_HASNEXT)
-        {
-          /* The next cabinet file is in the same directory as the previous */
-          wcscpy(CabinetNext, CabinetName);
-          RemoveFileName(CabinetNext);
-          CabinetNormalizePath(CabinetNext, 256);
-		  RtlInitAnsiString( &astring, (LPSTR)Buffer );
-		  ustring.Length = wcslen( CabinetNext );
-		  ustring.Buffer = CabinetNext + ustring.Length;
-		  ustring.MaximumLength = sizeof( CabinetNext ) - ustring.Length;
-		  RtlAnsiStringToUnicodeString( &ustring, &astring, FALSE );
-		  Buffer += astring.Length + 1;
-
-          /* Read label of next disk */
-		  RtlInitAnsiString( &astring, (LPSTR)Buffer );
-		  ustring.Length = 0;
-		  ustring.Buffer = DiskNext;
-		  ustring.MaximumLength = sizeof( DiskNext );
-		  RtlAnsiStringToUnicodeString( &ustring, &astring, FALSE );
-		  Buffer += astring.Length + 1;
-        }
-      else
-        {
-          wcscpy(CabinetNext, L"");
-          wcscpy(DiskNext,    L"");
-        }
-	  CabinetFolders = (PCFFOLDER)Buffer;
-    }
-  DPRINT( "CabinetOpen returning SUCCESS\n" );
-  return CAB_STATUS_SUCCESS;
-}
-
-
+        if (PCABHeader->Flags & CAB_FLAG_HASPREV)
+        {
+            /* The previous cabinet file is in
+               the same directory as the current */
+            wcscpy(CabinetPrev, CabinetName);
+            RemoveFileName(CabinetPrev);
+            CabinetNormalizePath(CabinetPrev, 256);
+            RtlInitAnsiString(&astring, (LPSTR)Buffer);
+            ustring.Length = wcslen(CabinetPrev);
+            ustring.Buffer = CabinetPrev + ustring.Length;
+            ustring.MaximumLength = sizeof(CabinetPrev) - ustring.Length;
+            RtlAnsiStringToUnicodeString(&ustring, &astring, FALSE);
+            Buffer += astring.Length + 1;
+
+            /* Read label of prev disk */
+            RtlInitAnsiString(&astring, (LPSTR)Buffer);
+            ustring.Length = 0;
+            ustring.Buffer = DiskPrev;
+            ustring.MaximumLength = sizeof(DiskPrev);
+            RtlAnsiStringToUnicodeString(&ustring, &astring, FALSE);
+            Buffer += astring.Length + 1;
+        }
+        else
+        {
+            wcscpy(CabinetPrev, L"");
+            wcscpy(DiskPrev, L"");
+        }
+
+        if (PCABHeader->Flags & CAB_FLAG_HASNEXT)
+        {
+            /* The next cabinet file is in
+               the same directory as the previous */
+            wcscpy(CabinetNext, CabinetName);
+            RemoveFileName(CabinetNext);
+            CabinetNormalizePath(CabinetNext, 256);
+            RtlInitAnsiString(&astring, (LPSTR)Buffer);
+            ustring.Length = wcslen(CabinetNext);
+            ustring.Buffer = CabinetNext + ustring.Length;
+            ustring.MaximumLength = sizeof(CabinetNext) - ustring.Length;
+            RtlAnsiStringToUnicodeString(&ustring, &astring, FALSE);
+            Buffer += astring.Length + 1;
+
+            /* Read label of next disk */
+            RtlInitAnsiString(&astring, (LPSTR)Buffer);
+            ustring.Length = 0;
+            ustring.Buffer = DiskNext;
+            ustring.MaximumLength = sizeof(DiskNext);
+            RtlAnsiStringToUnicodeString(&ustring, &astring, FALSE);
+            Buffer += astring.Length + 1;
+        }
+        else
+        {
+            wcscpy(CabinetNext, L"");
+            wcscpy(DiskNext, L"");
+        }
+        CabinetFolders = (PCFFOLDER)Buffer;
+    }
+
+    DPRINT("CabinetOpen returning SUCCESS\n");
+    return CAB_STATUS_SUCCESS;
+}
+
+/*
+ * FUNCTION: Closes the cabinet file
+ */
 VOID
 CabinetClose(VOID)
-/*
- * FUNCTION: Closes the cabinet file
- */
-{
-  if (FileOpen)
-    {
-      CloseCabinet();
-
-      FileOpen = FALSE;
-    }
-}
-
-
-ULONG
-CabinetFindFirst(PWCHAR FileName,
-				 PCAB_SEARCH Search)
+{
+    if (FileOpen)
+    {
+        CloseCabinet();
+        FileOpen = FALSE;
+    }
+}
+
 /*
  * FUNCTION: Finds the first file in the cabinet that matches a search criteria
  * ARGUMENTS:
@@ -689,17 +689,17 @@
  * RETURNS:
  *     Status of operation
  */
-{
-  DPRINT( "CabinetFindFirst( FileName = %S )\n", FileName );
-  wcsncpy(Search->Search, FileName, MAX_PATH);
-  wcsncpy(Search->Cabinet, CabinetName, MAX_PATH);
-  Search->File = 0;
-  return CabinetFindNext(Search);
-}
-
-
 ULONG
-CabinetFindNext(PCAB_SEARCH Search)
+CabinetFindFirst(PWCHAR FileName,
+                 PCAB_SEARCH Search)
+{
+    DPRINT("CabinetFindFirst( FileName = %S )\n", FileName);
+    wcsncpy(Search->Search, FileName, MAX_PATH);
+    wcsncpy(Search->Cabinet, CabinetName, MAX_PATH);
+    Search->File = 0;
+    return CabinetFindNext(Search);
+}
+
 /*
  * FUNCTION: Finds next file in the cabinet that matches a search criteria
  * ARGUMENTS:
@@ -707,99 +707,116 @@
  * RETURNS:
  *     Status of operation
  */
-{
-  ULONG Status;
-  PCFFILE Prev;
-  ANSI_STRING AnsiString;
-  UNICODE_STRING UnicodeString;
-  WCHAR FileName[MAX_PATH] = {L'\0'};
-
-  if( wcscmp( Search->Cabinet, CabinetName ) != 0 )
-	Search->File = 0;    // restart search of cabinet has changed since last find
-  if( !Search->File )
-	{
-	  // starting new search or cabinet
-	  Search->File = (PCFFILE)(FileBuffer + PCABHeader->FileTableOffset);
-	  Search->Index = 0;
-	  Prev = 0;
-	}
-  else Prev = Search->File;
-  while(1)
-	{
-	  // look at each file in the archive and see if we found a match
-	  if( Search->File->FolderIndex == 0xFFFD || Search->File->FolderIndex == 0xFFFF )
-		{
-		  // skip files continued from previous cab
-		  DPRINT("Skipping file (%s)  FileOffset (0x%X)  LastFileOffset (0x%X).\n",
-				 (char *)(Search->File + 1), Search->File->FileOffset, LastFileOffset);
-		}
-	  else {
-		// FIXME: check for match against search criteria
-		if( Search->File != Prev )
-		  {
-			// don't match the file we started with
-			if( wcscmp( Search->Search, L"*" ) == 0 )
-			  {
-				// take any file
-				break;
-			  }
-			else {
-			  // otherwise, try to match the exact file name
-			  RtlInitAnsiString( &AnsiString, Search->File->FileName );
-			  UnicodeString.Buffer = FileName;
-			  UnicodeString.Length = 0;
-			  UnicodeString.MaximumLength = sizeof( FileName );
-			  RtlAnsiStringToUnicodeString( &UnicodeString, &AnsiString, FALSE );
-			  if( wcscmp( Search->Search, UnicodeString.Buffer ) == 0 )
-				break;
-			}
-		  }
-	  }
-	  // if we make it here we found no match, so move to the next file
-	  Search->Index++;
-	  if( Search->Index >= PCABHeader->FileCount )
-		{
-		  // we have reached the end of this cabinet, try to open the next
-		  DPRINT( "End of cabinet reached\n" );
-		  if (wcslen(DiskNext) > 0)
-			{
-			  CloseCabinet();
-
-			  CabinetSetCabinetName(CabinetNext);
-			  wcscpy( Search->Cabinet, CabinetName );
-
-			  if (DiskChangeHandler != NULL)
-				{
-				  DiskChangeHandler(CabinetNext, DiskNext);
-				}
-
-			  Status = CabinetOpen();
-			  if (Status != CAB_STATUS_SUCCESS)
-				return Status;
-
-			}
-		  else
-			{
-			  return CAB_STATUS_NOFILE;
-			}
-		  // starting new search or cabinet
-		  Search->File = (PCFFILE)(FileBuffer + PCABHeader->FileTableOffset);
-		  Search->Index = 0;
-		  Prev = 0;
-		}
-	  else Search->File = (PCFFILE)(strchr( (char *)(Search->File + 1), 0 ) + 1);
-	}
-  DPRINT( "Found file %s\n", Search->File->FileName );
-  return CAB_STATUS_SUCCESS;
-}
-
-
-int Validate()
-{
-  return (int)RtlValidateHeap(ProcessHeap, 0, 0);
-}
-
-ULONG CabinetExtractFile( PCAB_SEARCH Search )
+ULONG
+CabinetFindNext(PCAB_SEARCH Search)
+{
+    ULONG Status;
+    PCFFILE Prev;
+    ANSI_STRING AnsiString;
+    UNICODE_STRING UnicodeString;
+    WCHAR FileName[MAX_PATH];
+
+    if (wcscmp(Search->Cabinet, CabinetName) != 0)
+    {
+        /* restart search of cabinet has changed since last find */
+        Search->File = 0;
+    }
+
+    if (!Search->File)
+    {
+        /* starting new search or cabinet */
+        Search->File = (PCFFILE)(FileBuffer + PCABHeader->FileTableOffset);
+        Search->Index = 0;
+        Prev = 0;
+    }
+    else
+        Prev = Search->File;
+
+    while (TRUE)
+    {
+        /* look at each file in the archive and see if we found a match */
+        if (Search->File->FolderIndex == 0xFFFD ||
+            Search->File->FolderIndex == 0xFFFF)
+        {
+            /* skip files continued from previous cab */
+            DPRINT("Skipping file (%s): FileOffset (0x%X), "
+                   "LastFileOffset (0x%X)\n", (char *)(Search->File + 1),
+                   Search->File->FileOffset, LastFileOffset);
+        }
+        else
+        {
+            // FIXME: check for match against search criteria
+            if (Search->File != Prev)
+            {
+                /* don't match the file we started with */
+                if (wcscmp(Search->Search, L"*") == 0)
+                {
+                    /* take any file */
+                    break;
+                }
+                else
+                {
+                    /* otherwise, try to match the exact file name */
+                    RtlInitAnsiString(&AnsiString, Search->File->FileName);
+                    UnicodeString.Buffer = FileName;
+                    UnicodeString.Buffer[0] = 0;
+                    UnicodeString.Length = 0;
+                    UnicodeString.MaximumLength = sizeof(FileName);
+                    RtlAnsiStringToUnicodeString(&UnicodeString, &AnsiString, FALSE);
+                    if (wcscmp(Search->Search, UnicodeString.Buffer) == 0)
+                        break;
+                }
+            }
+        }
+
+        /* if we make it here we found no match, so move to the next file */
+        Search->Index++;
+        if (Search->Index >= PCABHeader->FileCount)
+        {
+            /* we have reached the end of this cabinet, try to open the next */
+            DPRINT("End of cabinet reached\n");
+            if (wcslen(DiskNext) > 0)
+            {
+                CloseCabinet();
+
+                CabinetSetCabinetName(CabinetNext);
+                wcscpy(Search->Cabinet, CabinetName);
+
+                if (DiskChangeHandler != NULL)
+                {
+                    DiskChangeHandler(CabinetNext, DiskNext);
+                }
+
+                Status = CabinetOpen();
+                if (Status != CAB_STATUS_SUCCESS)
+                    return Status;
+            }
+            else
+            {
+                return CAB_STATUS_NOFILE;
+            }
+
+            /* starting new search or cabinet */
+            Search->File = (PCFFILE)(FileBuffer + PCABHeader->FileTableOffset);
+            Search->Index = 0;
+            Prev = 0;
+        }
+        else
+            Search->File = (PCFFILE)(strchr((char *)(Search->File + 1), 0) + 1);
+    }
+
+    DPRINT("Found file %s\n", Search->File->FileName);
+    return CAB_STATUS_SUCCESS;
+}
+
+#if 0
+int
+Validate()
+{
+    return (int)RtlValidateHeap(ProcessHeap, 0, 0);
+}
+#endif
+
 /*
  * FUNCTION: Extracts a file from the cabinet
  * ARGUMENTS:
@@ -807,309 +824,339 @@
  * RETURNS
  *     Status of operation
  */
-{
-  ULONG Size;                // remaining file bytes to decompress
-  ULONG CurrentOffset;       // current uncompressed offset within the folder
-  PUCHAR CurrentBuffer;      // current pointer to compressed data in the block
-  LONG RemainingBlock;       // remaining comp data in the block
-  HANDLE DestFile;
-  HANDLE DestFileSection;
-  PVOID DestFileBuffer;      // mapped view of dest file
-  PVOID CurrentDestBuffer;   // pointer to the current position in the dest view
-  PCFDATA CFData;            // current data block
-  ULONG Status;
-  FILETIME FileTime;
-  WCHAR DestName[MAX_PATH];
-  NTSTATUS NtStatus;
-  UNICODE_STRING UnicodeString;
-  ANSI_STRING AnsiString;
-  IO_STATUS_BLOCK IoStatusBlock;
-  OBJECT_ATTRIBUTES ObjectAttributes;
-  FILE_BASIC_INFORMATION FileBasic;
-  PCFFOLDER CurrentFolder;
-  LARGE_INTEGER MaxDestFileSize;
-  LONG InputLength, OutputLength;
-  char Junk[512];
-
-  if( wcscmp( Search->Cabinet, CabinetName ) != 0 )
-	{
-	  // the file is not in the current cabinet
-	  DPRINT( "File is not in this cabinet ( %S != %S )\n", Search->Cabinet, CabinetName );
-	  return CAB_STATUS_NOFILE;
-	}
-  // look up the folder that the file specifies
-  if( Search->File->FolderIndex == 0xFFFD || Search->File->FolderIndex == 0xFFFF )
-	{
-	  // folder is continued from previous cabinet, that shouldn't happen here
-	  return CAB_STATUS_NOFILE;
-	}
-  else if( Search->File->FolderIndex == 0xFFFE )
-	{
-	  // folder is the last in this cabinet and continues into next
-	  CurrentFolder = &CabinetFolders[PCABHeader->FolderCount-1];
-	}
-  else {
-	// folder is completely contained within this cabinet
-	CurrentFolder = &CabinetFolders[Search->File->FolderIndex];
-  }
-  switch (CurrentFolder->CompressionType & CAB_COMP_MASK)
-    {
-	case CAB_COMP_NONE:
-	  CabinetSelectCodec(CAB_CODEC_RAW);
-	  break;
-	case CAB_COMP_MSZIP:
-	  CabinetSelectCodec(CAB_CODEC_MSZIP);
-	  break;
-	default:
-	  return CAB_STATUS_UNSUPPCOMP;
-    }
-
-  DPRINT("Extracting file at uncompressed offset (0x%X)  Size (%d bytes)).\n",
-		 (UINT)Search->File->FileOffset,
-		 (UINT)Search->File->FileSize);
-  RtlInitAnsiString( &AnsiString, Search->File->FileName );
-  wcscpy( DestName, DestPath );
-  UnicodeString.MaximumLength = sizeof( DestName ) - wcslen( DestName );
-  UnicodeString.Buffer = DestName + wcslen( DestName );
-  UnicodeString.Length = 0;
-  RtlAnsiStringToUnicodeString( &UnicodeString, &AnsiString, FALSE );
-
-  /* Create destination file, fail if it already exists */
-  RtlInitUnicodeString(&UnicodeString,
-					   DestName);
-
-
-  InitializeObjectAttributes(&ObjectAttributes,
-							 &UnicodeString,
-							 OBJ_CASE_INSENSITIVE,
-							 NULL,
-							 NULL);
-
-  NtStatus = NtCreateFile(&DestFile,
-						  GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE,
-						  &ObjectAttributes,
-						  &IoStatusBlock,
-						  NULL,
-						  FILE_ATTRIBUTE_NORMAL,
-						  0,
-						  FILE_CREATE,
-						  FILE_SYNCHRONOUS_IO_NONALERT,
-						  NULL,
-						  0);
-  if (!NT_SUCCESS(NtStatus))
-    {
-      DPRINT("NtCreateFile() failed (%S) (%x).\n", DestName, NtStatus);
-
-      /* If file exists, ask to overwrite file */
-      if (OverwriteHandler == NULL || OverwriteHandler(Search->File, DestName))
-        {
-          /* Create destination file, overwrite if it already exists */
-          NtStatus = NtCreateFile(&DestFile,
-								  GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE,
-								  &ObjectAttributes,
-								  &IoStatusBlock,
-								  NULL,
-								  FILE_ATTRIBUTE_NORMAL,
-								  0,
-								  FILE_OVERWRITE,
-								  FILE_SYNCHRONOUS_IO_ALERT,
-								  NULL,
-								  0);
-          if (!NT_SUCCESS(NtStatus))
+ULONG
+CabinetExtractFile(PCAB_SEARCH Search)
+{
+    ULONG Size;                 // remaining file bytes to decompress
+    ULONG CurrentOffset;        // current uncompressed offset within the folder
+    PUCHAR CurrentBuffer;       // current pointer to compressed data in the block
+    LONG RemainingBlock;        // remaining comp data in the block
+    HANDLE DestFile;
+    HANDLE DestFileSection;
+    PVOID DestFileBuffer;       // mapped view of dest file
+    PVOID CurrentDestBuffer;    // pointer to the current position in the dest view
+    PCFDATA CFData;             // current data block
+    ULONG Status;
+    FILETIME FileTime;
+    WCHAR DestName[MAX_PATH];
+    NTSTATUS NtStatus;
+    UNICODE_STRING UnicodeString;
+    ANSI_STRING AnsiString;
+    IO_STATUS_BLOCK IoStatusBlock;
+    OBJECT_ATTRIBUTES ObjectAttributes;
+    FILE_BASIC_INFORMATION FileBasic;
+    PCFFOLDER CurrentFolder;
+    LARGE_INTEGER MaxDestFileSize;
+    LONG InputLength, OutputLength;
+    char Junk[512];
+
+    if (wcscmp(Search->Cabinet, CabinetName) != 0)
+    {
+        /* the file is not in the current cabinet */
+        DPRINT("File is not in this cabinet (%S != %S)\n",
+               Search->Cabinet, CabinetName);
+        return CAB_STATUS_NOFILE;
+    }
+
+    /* look up the folder that the file specifies */
+    if (Search->File->FolderIndex == 0xFFFD ||
+        Search->File->FolderIndex == 0xFFFF)
+    {
+        /* folder is continued from previous cabinet,
+           that shouldn't happen here */
+        return CAB_STATUS_NOFILE;
+    }
+    else if (Search->File->FolderIndex == 0xFFFE)
+    {
+        /* folder is the last in this cabinet and continues into next */
+        CurrentFolder = &CabinetFolders[PCABHeader->FolderCount - 1];
+    }
+    else
+    {
+        /* folder is completely contained within this cabinet */
+        CurrentFolder = &CabinetFolders[Search->File->FolderIndex];
+    }
+
+    switch (CurrentFolder->CompressionType & CAB_COMP_MASK)
+    {
+        case CAB_COMP_NONE:
+            CabinetSelectCodec(CAB_CODEC_RAW);
+            break;
+        case CAB_COMP_MSZIP:
+            CabinetSelectCodec(CAB_CODEC_MSZIP);
+            break;
+        default:
+            return CAB_STATUS_UNSUPPCOMP;
+    }
+
+    DPRINT("Extracting file at uncompressed offset (0x%X) Size (%d bytes)\n",
+           (UINT)Search->File->FileOffset, (UINT)Search->File->FileSize);
+
+    RtlInitAnsiString(&AnsiString, Search->File->FileName);
+    wcscpy(DestName, DestPath);
+    UnicodeString.MaximumLength = sizeof(DestName) - wcslen(DestName);
+    UnicodeString.Buffer = DestName + wcslen(DestName);
+    UnicodeString.Length = 0;
+    RtlAnsiStringToUnicodeString(&UnicodeString, &AnsiString, FALSE);
+
+    /* Create destination file, fail if it already exists */
+    RtlInitUnicodeString(&UnicodeString, DestName);
+
+    InitializeObjectAttributes(&ObjectAttributes,
+                               &UnicodeString,
+                               OBJ_CASE_INSENSITIVE,
+                               NULL, NULL);
+
+    NtStatus = NtCreateFile(&DestFile,
+                            GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE,
+                            &ObjectAttributes,
+                            &IoStatusBlock,
+                            NULL,
+                            FILE_ATTRIBUTE_NORMAL,
+                            0,
+                            FILE_CREATE,
+                            FILE_SYNCHRONOUS_IO_NONALERT,
+                            NULL, 0);
+
+    if (!NT_SUCCESS(NtStatus))
+    {
+        DPRINT("NtCreateFile() failed (%S) (%x)\n", DestName, NtStatus);
+
+        /* If file exists, ask to overwrite file */
+        if (OverwriteHandler == NULL || OverwriteHandler(Search->File, DestName))
+        {
+            /* Create destination file, overwrite if it already exists */
+            NtStatus = NtCreateFile(&DestFile,
+                                    GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE,
+                                    &ObjectAttributes,
+                                    &IoStatusBlock,
+                                    NULL,
+                                    FILE_ATTRIBUTE_NORMAL,
+                                    0,
+                                    FILE_OVERWRITE,
+                                    FILE_SYNCHRONOUS_IO_ALERT,
+                                    NULL, 0);
+
+            if (!NT_SUCCESS(NtStatus))
             {
-              DPRINT("NtCreateFile() failed 2 (%S) (%x).\n", DestName, NtStatus);
-              return CAB_STATUS_CANNOT_CREATE;
+                DPRINT("NtCreateFile() failed (%S) (%x)\n", DestName, NtStatus);
+                return CAB_STATUS_CANNOT_CREATE;
             }
         }
-      else
-        {
-          DPRINT("File (%S) exists.\n", DestName);
-          return CAB_STATUS_FILE_EXISTS;
-        }
-    }
-  MaxDestFileSize.QuadPart = Search->File->FileSize;
-  NtStatus = NtCreateSection(&DestFileSection,
-							 SECTION_ALL_ACCESS,
-							 0,
-							 &MaxDestFileSize,
-							 PAGE_READWRITE,
-							 SEC_COMMIT,
-							 DestFile);
-  if(!NT_SUCCESS(NtStatus))
-	{
-	  DPRINT("NtCreateSection failed: %x\n", NtStatus);
-	  Status = CAB_STATUS_NOMEMORY;
-	  goto CloseDestFile;
-	}
-  DestFileBuffer = 0;
-  DestFileSize = 0;
-  NtStatus = NtMapViewOfSection(DestFileSection,
-								NtCurrentProcess(),
-								&DestFileBuffer,
-								0,
-								0,
-								0,
-								&DestFileSize,
-								ViewUnmap,
-								0,
-								PAGE_READWRITE);
-  if(!NT_SUCCESS(NtStatus))
-	{
-	  DPRINT("NtMapViewOfSection failed: %x\n", NtStatus);
-	  Status = CAB_STATUS_NOMEMORY;
-	  goto CloseDestFileSection;
-	}
-  CurrentDestBuffer = DestFileBuffer;
-  if (!ConvertDosDateTimeToFileTime(Search->File->FileDate, Search->File->FileTime, &FileTime))
-    {
-      DPRINT("DosDateTimeToFileTime() failed.\n");
-      Status = CAB_STATUS_CANNOT_WRITE;
-	  goto UnmapDestFile;
-    }
-
-  NtStatus = NtQueryInformationFile(DestFile,
-									&IoStatusBlock,
-									&FileBasic,
-									sizeof(FILE_BASIC_INFORMATION),
-									FileBasicInformation);
-  if (!NT_SUCCESS(NtStatus))
-    {
-      DPRINT("NtQueryInformationFile() failed (%x).\n", NtStatus);
-    }
-  else
-    {
-      memcpy(&FileBasic.LastAccessTime, &FileTime, sizeof(FILETIME));
-
-      NtStatus = NtSetInformationFile(DestFile,
-									  &IoStatusBlock,
-									  &FileBasic,
-									  sizeof(FILE_BASIC_INFORMATION),
-									  FileBasicInformation);
-      if (!NT_SUCCESS(NtStatus))
-        {
-          DPRINT("NtSetInformationFile() failed (%x).\n", NtStatus);
-        }
-    }
-
-  SetAttributesOnFile(Search->File, DestFile);
-
-  /* Call extract event handler */
-  if (ExtractHandler != NULL)
-    {
-      ExtractHandler(Search->File, DestName);
-    }
-  // find the starting block of the file
-  // start with the first data block of the folder
-  CFData = (PCFDATA)(CabinetFolders[Search->File->FolderIndex].DataOffset + FileBuffer);
-  CurrentOffset = 0;
-  while( CurrentOffset + CFData->UncompSize <= Search->File->FileOffset )
-	{
-	  // walk the data blocks until we reach the one containing the start of the file
-	  CurrentOffset += CFData->UncompSize;
-	  CFData = (PCFDATA)((char *)(CFData+1) + DataReserved + CFData->CompSize);
-	}
-  // now decompress and discard any data in the block before the start of the file
-  CurrentBuffer = ((unsigned char *)(CFData+1)) + DataReserved; // start of comp data
-  RemainingBlock = CFData->CompSize;
-  InputLength = RemainingBlock;
-  while( CurrentOffset < Search->File->FileOffset )
-	{
-	  // compute remaining uncomp bytes to start of file, bounded by sizeof junk
-	  OutputLength = Search->File->FileOffset - CurrentOffset;
-	  if( OutputLength > (LONG)sizeof( Junk ) )
-		OutputLength = sizeof( Junk );
-	  OutputLength = -OutputLength;     // negate to signal NOT end of block
-	  CodecUncompress( Junk,
-					   CurrentBuffer,
-					   &InputLength,
-					   &OutputLength );
-	  CurrentOffset += OutputLength;   // add the uncomp bytes extracted to current folder offset
-	  CurrentBuffer += InputLength;    // add comp bytes consumed to CurrentBuffer
-	  RemainingBlock -= InputLength;   // subtract bytes consumed from bytes remaining in block
-	  InputLength = -RemainingBlock;   // neg for resume decompression of the same block
-	}
-  // now CurrentBuffer points to the first comp byte of the file, so we can begin decompressing
-
-  Size = Search->File->FileSize;   // Size = remaining uncomp bytes of the file to decompress
-  while(Size > 0)
-    {
-	  OutputLength = Size;
-	  DPRINT( "Decompressing block at %x with RemainingBlock = %d, Size = %d\n", CurrentBuffer, RemainingBlock, Size );
-	  Status = CodecUncompress(CurrentDestBuffer,
-							   CurrentBuffer,
-							   &InputLength,
-							   &OutputLength);
-	  if (Status != CS_SUCCESS)
-		{
-		  DPRINT("Cannot uncompress block.\n");
-		  if(Status == CS_NOMEMORY)
-			Status = CAB_STATUS_NOMEMORY;
-		  Status = CAB_STATUS_INVALID_CAB;
-		  goto UnmapDestFile;
-		}
-	  CurrentDestBuffer = (PVOID)((ULONG_PTR)CurrentDestBuffer + OutputLength);  // advance dest buffer by bytes produced
-	  CurrentBuffer += InputLength;       // advance src buffer by bytes consumed
-	  Size -= OutputLength;               // reduce remaining file bytes by bytes produced
-	  RemainingBlock -= InputLength;      // reduce remaining block size by bytes consumed
-	  if( RemainingBlock == 0 )
-		{
-		  // used up this block, move on to the next
-		  DPRINT( "Out of block data\n" );
-		  CFData = (PCFDATA)CurrentBuffer;
-		  RemainingBlock = CFData->CompSize;
-		  CurrentBuffer = ((unsigned char *)(CFData+1) + DataReserved);
-		  InputLength = RemainingBlock;
-		}
-	}
-  Status = CAB_STATUS_SUCCESS;
- UnmapDestFile:
-  NtUnmapViewOfSection(NtCurrentProcess(), DestFileBuffer);
- CloseDestFileSection:
-  NtClose(DestFileSection);
- CloseDestFile:
-  NtClose(DestFile);
-
-  return Status;
-}
-
-
-VOID
-CabinetSelectCodec(ULONG Id)
+        else
+        {
+            DPRINT("File (%S) exists\n", DestName);
+            return CAB_STATUS_FILE_EXISTS;
+        }
+    }
+
+    MaxDestFileSize.QuadPart = Search->File->FileSize;
+    NtStatus = NtCreateSection(&DestFileSection,
+                               SECTION_ALL_ACCESS,
+                               0,
+                               &MaxDestFileSize,
+                               PAGE_READWRITE,
+                               SEC_COMMIT,
+                               DestFile);
+
+    if (!NT_SUCCESS(NtStatus))
+    {
+        DPRINT("NtCreateSection failed: %x\n", NtStatus);
+        Status = CAB_STATUS_NOMEMORY;
+        goto CloseDestFile;
+    }
+
+    DestFileBuffer = 0;
+    DestFileSize = 0;
+    NtStatus = NtMapViewOfSection(DestFileSection,
+                                  NtCurrentProcess(),
+                                  &DestFileBuffer,
+                                  0, 0, 0,
+                                  &DestFileSize,
+                                  ViewUnmap,
+                                  0,
+                                  PAGE_READWRITE);
+
+    if (!NT_SUCCESS(NtStatus))
+    {
+        DPRINT("NtMapViewOfSection failed: %x\n", NtStatus);
+        Status = CAB_STATUS_NOMEMORY;
+        goto CloseDestFileSection;
+    }
+
+    CurrentDestBuffer = DestFileBuffer;
+    if (!ConvertDosDateTimeToFileTime(Search->File->FileDate,
+                                      Search->File->FileTime,
+                                      &FileTime))
+    {
+        DPRINT("DosDateTimeToFileTime() failed\n");
+        Status = CAB_STATUS_CANNOT_WRITE;
+        goto UnmapDestFile;
+    }
+
+    NtStatus = NtQueryInformationFile(DestFile,
+                                      &IoStatusBlock,
+                                      &FileBasic,
+                                      sizeof(FILE_BASIC_INFORMATION),
+                                      FileBasicInformation);
+    if (!NT_SUCCESS(NtStatus))
+    {
+        DPRINT("NtQueryInformationFile() failed (%x)\n", NtStatus);
+    }
+    else
+    {
+        memcpy(&FileBasic.LastAccessTime, &FileTime, sizeof(FILETIME));
+
+        NtStatus = NtSetInformationFile(DestFile,
+                                        &IoStatusBlock,
+                                        &FileBasic,
+                                        sizeof(FILE_BASIC_INFORMATION),
+                                        FileBasicInformation);
+        if (!NT_SUCCESS(NtStatus))
+        {
+            DPRINT("NtSetInformationFile() failed (%x)\n", NtStatus);
+        }
+    }
+
+    SetAttributesOnFile(Search->File, DestFile);
+
+    /* Call extract event handler */
+    if (ExtractHandler != NULL)
+    {
+        ExtractHandler(Search->File, DestName);
+    }
+
+    /* find the starting block of the file
+       start with the first data block of the folder */
+    CFData = (PCFDATA)(CabinetFolders[Search->File->FolderIndex].DataOffset + FileBuffer);
+    CurrentOffset = 0;
+    while (CurrentOffset + CFData->UncompSize <= Search->File->FileOffset)
+    {
+        /* walk the data blocks until we reach
+           the one containing the start of the file */
+        CurrentOffset += CFData->UncompSize;
+        CFData = (PCFDATA)((char *)(CFData + 1) + DataReserved + CFData->CompSize);
+    }
+
+    /* now decompress and discard any data in
+       the block before the start of the file */
+
+    /* start of comp data */
+    CurrentBuffer = ((unsigned char *)(CFData + 1)) + DataReserved;
+    RemainingBlock = CFData->CompSize;
+    InputLength = RemainingBlock;
+
+    while (CurrentOffset < Search->File->FileOffset)
+    {
+        /* compute remaining uncomp bytes to start
+           of file, bounded by sizeof junk */
+        OutputLength = Search->File->FileOffset - CurrentOffset;
+        if (OutputLength > (LONG)sizeof(Junk))
+            OutputLength = sizeof (Junk);
+
+        /* negate to signal NOT end of block */
+        OutputLength = -OutputLength;
+        CodecUncompress(Junk, CurrentBuffer, &InputLength, &OutputLength);
+        /* add the uncomp bytes extracted to current folder offset */
+        CurrentOffset += OutputLength;
+        /* add comp bytes consumed to CurrentBuffer */
+        CurrentBuffer += InputLength;
+        /* subtract bytes consumed from bytes remaining in block */
+        RemainingBlock -= InputLength;
+        /* neg for resume decompression of the same block */
+        InputLength = -RemainingBlock;
+    }
+
+    /* now CurrentBuffer points to the first comp byte
+       of the file, so we can begin decompressing */
+
+    /* Size = remaining uncomp bytes of the file to decompress */
+    Size = Search->File->FileSize;
+    while (Size > 0)
+    {
+        OutputLength = Size;
+        DPRINT("Decompressing block at %x with RemainingBlock = %d, Size = %d\n",
+               CurrentBuffer, RemainingBlock, Size);
+
+        Status = CodecUncompress(CurrentDestBuffer,
+                                 CurrentBuffer,
+                                 &InputLength,
+                                 &OutputLength);
+
+        if (Status != CS_SUCCESS)
+        {
+            DPRINT("Cannot uncompress block\n");
+            if (Status == CS_NOMEMORY)
+                Status = CAB_STATUS_NOMEMORY;
+            Status = CAB_STATUS_INVALID_CAB;
+            goto UnmapDestFile;
+        }
+
+        /* advance dest buffer by bytes produced */
+        CurrentDestBuffer = (PVOID)((ULONG_PTR)CurrentDestBuffer + OutputLength);
+        /* advance src buffer by bytes consumed */
+        CurrentBuffer += InputLength;
+        /* reduce remaining file bytes by bytes produced */
+        Size -= OutputLength;
+        /* reduce remaining block size by bytes consumed */
+        RemainingBlock -= InputLength;
+        if (RemainingBlock == 0)
+        {
+            /* used up this block, move on to the next */
+            DPRINT("Out of block data\n");
+            CFData = (PCFDATA)CurrentBuffer;
+            RemainingBlock = CFData->CompSize;
+            CurrentBuffer = (unsigned char *)(CFData + 1) + DataReserved;
+            InputLength = RemainingBlock;
+        }
+    }
+
+    Status = CAB_STATUS_SUCCESS;
+
+UnmapDestFile:
+    NtUnmapViewOfSection(NtCurrentProcess(), DestFileBuffer);
+
+CloseDestFileSection:
+    NtClose(DestFileSection);
+
+CloseDestFile:
+    NtClose(DestFile);
+
+    return Status;
+}
+
 /*
  * FUNCTION: Selects codec engine to use
  * ARGUMENTS:
  *     Id = Codec identifier
  */
-{
-  if (CodecSelected)
-    {
-      if (Id == CodecId)
-        return;
-
-      CodecSelected = FALSE;
-    }
-
-  switch (Id)
-    {
-      case CAB_CODEC_RAW:
-        CodecUncompress = RawCodecUncompress;
-        break;
-      case CAB_CODEC_MSZIP:
-        CodecUncompress = MSZipCodecUncompress;
-        break;
-      default:
-        return;
-    }
-
-  CodecId = Id;
-  CodecSelected = TRUE;
-}
-
-
 VOID
-CabinetSetEventHandlers(PCABINET_OVERWRITE Overwrite,
-  PCABINET_EXTRACT Extract,
-  PCABINET_DISK_CHANGE DiskChange)
+CabinetSelectCodec(ULONG Id)
+{
+    if (CodecSelected)
+    {
+        if (Id == CodecId)
+            return;
+
+        CodecSelected = FALSE;
+    }
+
+    switch (Id)
+    {
+        case CAB_CODEC_RAW:
+            CodecUncompress = RawCodecUncompress;
+            break;
+        case CAB_CODEC_MSZIP:
+            CodecUncompress = MSZipCodecUncompress;
+            break;
+        default:
+            return;
+    }
+
+    CodecId = Id;
+    CodecSelected = TRUE;
+}
+
 /*
  * FUNCTION: Set event handlers
  * ARGUMENTS:
@@ -1117,33 +1164,38 @@
  *     Extract = Handler called when a file is to be extracted
  *     DiskChange = Handler called when changing the disk
  */
-{
-  OverwriteHandler = Overwrite;
-  ExtractHandler = Extract;
-  DiskChangeHandler = DiskChange;
-}
-
-
+VOID
+CabinetSetEventHandlers(PCABINET_OVERWRITE Overwrite,
+                        PCABINET_EXTRACT Extract,
+                        PCABINET_DISK_CHANGE DiskChange)
+{
+    OverwriteHandler = Overwrite;
+    ExtractHandler = Extract;
+    DiskChangeHandler = DiskChange;
+}
+
+/*
+ * FUNCTION: Get pointer to cabinet reserved area. NULL if none
+ */
 PVOID
 CabinetGetCabinetReservedArea(PULONG Size)
-/*
- * FUNCTION: Get pointer to cabinet reserved area. NULL if none
- */
-{
-  if (CabinetReservedArea != NULL)
-    {
-      if (Size != NULL)
-        {
-          *Size = CabinetReserved;
-        }
-      return CabinetReservedArea;
-    }
-  else
-    {
-      if (Size != NULL)
-        {
-          *Size = 0;
-        }
-      return NULL;
-    }
-}
+{
+    if (CabinetReservedArea != NULL)
+    {
+        if (Size != NULL)
+        {
+            *Size = CabinetReserved;
+        }
+
+        return CabinetReservedArea;
+    }
+    else
+    {
+        if (Size != NULL)
+        {
+            *Size = 0;
+        }
+
+        return NULL;
+    }
+}




More information about the Ros-diffs mailing list