Merged r16600:17394 from trunk.
Modified: branches/cache_manager_rewrite/reactos/ReactOS.xml
Modified: branches/cache_manager_rewrite/reactos/apps/directory.xml
Modified: branches/cache_manager_rewrite/reactos/apps/utils/binpatch/patch.c
Modified: branches/cache_manager_rewrite/reactos/apps/utils/directory.xml
Modified: branches/cache_manager_rewrite/reactos/apps/utils/net/arp/arp.xml
Modified: branches/cache_manager_rewrite/reactos/apps/utils/net/directory.xml
Modified: branches/cache_manager_rewrite/reactos/apps/utils/net/finger/finger.xml
Modified: branches/cache_manager_rewrite/reactos/apps/utils/net/ftp/ftp.c
Modified: branches/cache_manager_rewrite/reactos/apps/utils/net/ftp/ftp.xml
Modified: branches/cache_manager_rewrite/reactos/apps/utils/net/ipconfig/ipconfig.c
Modified: branches/cache_manager_rewrite/reactos/apps/utils/net/ipconfig/ipconfig.xml
Modified: branches/cache_manager_rewrite/reactos/apps/utils/net/netstat/netstat.xml
Modified: branches/cache_manager_rewrite/reactos/apps/utils/net/ping/ping.xml
Modified: branches/cache_manager_rewrite/reactos/apps/utils/net/route/route.xml
Modified: branches/cache_manager_rewrite/reactos/apps/utils/net/telnet/src/tnclass.cpp
Modified: branches/cache_manager_rewrite/reactos/apps/utils/net/telnet/src/ttelhndl.cpp
Modified: branches/cache_manager_rewrite/reactos/apps/utils/net/telnet/src/ttelhndl.h
Modified: branches/cache_manager_rewrite/reactos/apps/utils/net/telnet/telnet.xml
Modified: branches/cache_manager_rewrite/reactos/apps/utils/net/tracert/tracert.c
Modified: branches/cache_manager_rewrite/reactos/apps/utils/net/tracert/tracert.h
Modified: branches/cache_manager_rewrite/reactos/apps/utils/net/tracert/tracert.xml
Modified: branches/cache_manager_rewrite/reactos/apps/utils/net/whois/whois.xml
Deleted: branches/cache_manager_rewrite/reactos/apps/utils/pesum/
Modified: branches/cache_manager_rewrite/reactos/apps/utils/ps/ps.c
Modified: branches/cache_manager_rewrite/reactos/apps/utils/ps/ps.xml
Modified: branches/cache_manager_rewrite/reactos/apps/utils/rosperf/rosperf.xml
Modified: branches/cache_manager_rewrite/reactos/apps/utils/sdkparse/sdkparse.dsp
Modified: branches/cache_manager_rewrite/reactos/apps/utils/sdkparse/sdkparse.dsw
Modified: branches/cache_manager_rewrite/reactos/apps/utils/stats/stats.c
Deleted: branches/cache_manager_rewrite/reactos/apps/utils/winetest/
Modified: branches/cache_manager_rewrite/reactos/baseaddress.xml
Modified: branches/cache_manager_rewrite/reactos/boot/boot.xml
Modified: branches/cache_manager_rewrite/reactos/boot/freeldr/bootsect/bootsect.xml
Modified: branches/cache_manager_rewrite/reactos/boot/freeldr/freeldr/freeldr.xml
Modified: branches/cache_manager_rewrite/reactos/boot/freeldr/freeldr/freeldr_base.xml
Modified: branches/cache_manager_rewrite/reactos/boot/freeldr/freeldr/freeldr_base64k.xml
Modified: branches/cache_manager_rewrite/reactos/boot/freeldr/freeldr/freeldr_main.xml
Modified: branches/cache_manager_rewrite/reactos/boot/freeldr/freeldr/freeldr_startup.xml
Modified: branches/cache_manager_rewrite/reactos/boot/freeldr/freeldr/include/rtl.h
Modified: branches/cache_manager_rewrite/reactos/boot/freeldr/freeldr/reactos/loader.c
Modified: branches/cache_manager_rewrite/reactos/boot/freeldr/freeldr/setupldr.xml
Modified: branches/cache_manager_rewrite/reactos/boot/freeldr/freeldr/setupldr_main.xml
Modified: branches/cache_manager_rewrite/reactos/boot/freeldr/freeldr.xml
Modified: branches/cache_manager_rewrite/reactos/bootdata/bootdata.xml
Modified: branches/cache_manager_rewrite/reactos/bootdata/hivecls.inf
Modified: branches/cache_manager_rewrite/reactos/bootdata/hivesys.inf
Modified: branches/cache_manager_rewrite/reactos/bootdata/packages/reactos.dff
Modified: branches/cache_manager_rewrite/reactos/bootdata/txtsetup.sif
Modified: branches/cache_manager_rewrite/reactos/config.template.xml
Modified: branches/cache_manager_rewrite/reactos/doc/INTERNALS
Modified: branches/cache_manager_rewrite/reactos/doc/README.WINE
Modified: branches/cache_manager_rewrite/reactos/drivers/bus/acpi/acpi.xml
Modified: branches/cache_manager_rewrite/reactos/drivers/bus/acpi/include/acpi.h
Modified: branches/cache_manager_rewrite/reactos/drivers/bus/acpi/include/platform/types.h
Modified: branches/cache_manager_rewrite/reactos/drivers/bus/acpi/ospm/busmgr/bmutils.c
Modified: branches/cache_manager_rewrite/reactos/drivers/bus/acpi/ospm/fdo.c
Modified: branches/cache_manager_rewrite/reactos/drivers/bus/directory.xml
Modified: branches/cache_manager_rewrite/reactos/drivers/bus/isapnp/isapnp.c
Modified: branches/cache_manager_rewrite/reactos/drivers/bus/isapnp/isapnp.xml
Modified: branches/cache_manager_rewrite/reactos/drivers/bus/pci/pci.c
Modified: branches/cache_manager_rewrite/reactos/drivers/bus/pci/pci.xml
Modified: branches/cache_manager_rewrite/reactos/drivers/bus/serenum/detect.c
Modified: branches/cache_manager_rewrite/reactos/drivers/bus/serenum/fdo.c
Modified: branches/cache_manager_rewrite/reactos/drivers/dd/beep/beep.c
Modified: branches/cache_manager_rewrite/reactos/drivers/dd/beep/beep.xml
Modified: branches/cache_manager_rewrite/reactos/drivers/dd/blue/blue.c
Modified: branches/cache_manager_rewrite/reactos/drivers/dd/blue/blue.xml
Modified: branches/cache_manager_rewrite/reactos/drivers/dd/bootvid/bootvid.xml
Modified: branches/cache_manager_rewrite/reactos/drivers/dd/debugout/debugout.xml
Modified: branches/cache_manager_rewrite/reactos/drivers/dd/directory.xml
Modified: branches/cache_manager_rewrite/reactos/drivers/dd/mpu401/mpu401.xml
Modified: branches/cache_manager_rewrite/reactos/drivers/dd/mpu401/settings.c
Modified: branches/cache_manager_rewrite/reactos/drivers/dd/null/null.c
Modified: branches/cache_manager_rewrite/reactos/drivers/dd/null/null.xml
Modified: branches/cache_manager_rewrite/reactos/drivers/dd/parallel/parallel.xml
Modified: branches/cache_manager_rewrite/reactos/drivers/dd/ramdrv/ramdrv.xml
Modified: branches/cache_manager_rewrite/reactos/drivers/dd/serial/serial.xml
Modified: branches/cache_manager_rewrite/reactos/drivers/dd/sndblst/irq.c
Modified: branches/cache_manager_rewrite/reactos/drivers/dd/sndblst/sndblst.xml
Modified: branches/cache_manager_rewrite/reactos/drivers/dd/sound/sound.xml
Modified: branches/cache_manager_rewrite/reactos/drivers/directory.xml
Modified: branches/cache_manager_rewrite/reactos/drivers/fs/cdfs/cdfs.c
Modified: branches/cache_manager_rewrite/reactos/drivers/fs/cdfs/cdfs.h
Modified: branches/cache_manager_rewrite/reactos/drivers/fs/cdfs/cdfs.xml
Modified: branches/cache_manager_rewrite/reactos/drivers/fs/cdfs/cleanup.c
Modified: branches/cache_manager_rewrite/reactos/drivers/fs/cdfs/close.c
Modified: branches/cache_manager_rewrite/reactos/drivers/fs/cdfs/common.c
Modified: branches/cache_manager_rewrite/reactos/drivers/fs/cdfs/create.c
Modified: branches/cache_manager_rewrite/reactos/drivers/fs/cdfs/dirctl.c
Modified: branches/cache_manager_rewrite/reactos/drivers/fs/cdfs/fcb.c
Modified: branches/cache_manager_rewrite/reactos/drivers/fs/cdfs/finfo.c
Modified: branches/cache_manager_rewrite/reactos/drivers/fs/cdfs/fsctl.c
Modified: branches/cache_manager_rewrite/reactos/drivers/fs/cdfs/misc.c
Modified: branches/cache_manager_rewrite/reactos/drivers/fs/cdfs/rw.c
Modified: branches/cache_manager_rewrite/reactos/drivers/fs/cdfs/volinfo.c
Modified: branches/cache_manager_rewrite/reactos/drivers/fs/directory.xml
Modified: branches/cache_manager_rewrite/reactos/drivers/fs/fs_rec/fs_rec.xml
Modified: branches/cache_manager_rewrite/reactos/drivers/fs/ms/msfs.xml
Modified: branches/cache_manager_rewrite/reactos/drivers/fs/mup/mup.xml
Modified: branches/cache_manager_rewrite/reactos/drivers/fs/np/fsctrl.c
[truncated at 100 lines; 1988 more skipped]
Modified: branches/cache_manager_rewrite/reactos/ReactOS.xml
--- branches/cache_manager_rewrite/reactos/ReactOS.xml	2005-08-15 02:24:48 UTC (rev 17394)
+++ branches/cache_manager_rewrite/reactos/ReactOS.xml	2005-08-15 11:39:19 UTC (rev 17395)
@@ -1,77 +1,80 @@
-<?xml version="1.0"?>
-<!DOCTYPE project SYSTEM "tools/rbuild/project.dtd">
-<project name="ReactOS" makefile="makefile.auto" xmlns:xi="http://www.w3.org/2001/XInclude">
-	<xi:include href="config.xml">
-		<xi:fallback>
-			<xi:include href="config.template.xml" />
-		</xi:fallback>
-	</xi:include>
-
-	<xi:include href="baseaddress.xml" />
-
-	<define name="_M_IX86" />
-	<if property="MP" value="1">
-		<define name="CONFIG_SMP" value="1" />
-	</if>
-	<if property="DBG" value="1">
-		<define name="DBG" value="1" />
-		<property name="DBG_OR_KDBG" value="true" />
-	</if>
-	<if property="DBG" value="0">
-		<compilerflag>-Os</compilerflag>
-		<compilerflag>-Wno-strict-aliasing</compilerflag>
-		<compilerflag>-ftracer</compilerflag>
-		<compilerflag>-momit-leaf-frame-pointer</compilerflag>
-		<compilerflag>-mpreferred-stack-boundary=2</compilerflag>
-	</if>
-	<if property="KDBG" value="1">
-		<define name="KDBG" value="1" />
-		<property name="DBG_OR_KDBG" value="true" />
-	</if>
-	<compilerflag>-Wpointer-arith</compilerflag>
-
-	<include>include</include>
-	<include>include/reactos</include>
-	<include>w32api/include</include>
-	<include>w32api/include/ddk</include>
-
-	<directory name="apps">
-		<xi:include href="apps/directory.xml" />
-	</directory>
-	<directory name="boot">
-		<xi:include href="boot/boot.xml" />
-	</directory>
-	<directory name="bootdata">
-		<xi:include href="bootdata/bootdata.xml" />
-	</directory>
-	<directory name="drivers">
-		<xi:include href="drivers/directory.xml" />
-	</directory>
-	<directory name="hal">
-		<xi:include href="hal/directory.xml" />
-	</directory>
-	<directory name="include">
-		<xi:include href="include/directory.xml" />
-	</directory>
-	<directory name="lib">
-		<xi:include href="lib/directory.xml" />
-	</directory>
-	<directory name="media">
-		<xi:include href="media/directory.xml" />
-	</directory>
-	<directory name="modules">
-		<xi:include href="modules/directory.xml" />
-	</directory>
-	<directory name="ntoskrnl">
-		<xi:include href="ntoskrnl/ntoskrnl.xml" />
-	</directory>
-	<directory name="regtests">
-		<xi:include href="regtests/directory.xml" />
-	</directory>
-	<directory name="services">
-		<xi:include href="services/directory.xml" />
-	</directory>
-	<directory name="subsys">
-		<xi:include href="subsys/directory.xml" />
-	</directory>
-</project>
+<?xml version="1.0"?>
+<!DOCTYPE project SYSTEM "tools/rbuild/project.dtd">
+<project name="ReactOS" makefile="makefile.auto" xmlns:xi="http://www.w3.org/2001/XInclude">
+	<xi:include href="config.xml">
+		<xi:fallback>
+			<xi:include href="config.template.xml" />
+		</xi:fallback>
+	</xi:include>
+
+	<xi:include href="baseaddress.xml" />
+
+	<define name="_M_IX86" />
+	<if property="MP" value="1">
+		<define name="CONFIG_SMP" value="1" />
+	</if>
+	<if property="DBG" value="1">
+		<define name="DBG" value="1" />
+		<property name="DBG_OR_KDBG" value="true" />
+	</if>
+	<if property="DBG" value="0">
+		<compilerflag>-Os</compilerflag>
+		<compilerflag>-Wno-strict-aliasing</compilerflag>
+		<compilerflag>-ftracer</compilerflag>
+		<compilerflag>-momit-leaf-frame-pointer</compilerflag>
+		<compilerflag>-mpreferred-stack-boundary=2</compilerflag>
+	</if>
+	<if property="KDBG" value="1">
+		<define name="KDBG" value="1" />
+		<property name="DBG_OR_KDBG" value="true" />
+	</if>
+	<compilerflag>-Wpointer-arith</compilerflag>
+
+	<include>include</include>
+	<include>include/reactos</include>
+	<include>include/libs</include>
+	<include>include/drivers</include>
+	<include>include/subsys</include>
+	<include>w32api/include</include>
+	<include>w32api/include/ddk</include>
+
+	<directory name="apps">
+		<xi:include href="apps/directory.xml" />
+	</directory>
+	<directory name="boot">
+		<xi:include href="boot/boot.xml" />
+	</directory>
+	<directory name="bootdata">
+		<xi:include href="bootdata/bootdata.xml" />
+	</directory>
+	<directory name="drivers">
+		<xi:include href="drivers/directory.xml" />
+	</directory>
+	<directory name="hal">
+		<xi:include href="hal/directory.xml" />
+	</directory>
+	<directory name="include">
+		<xi:include href="include/directory.xml" />
+	</directory>
+	<directory name="lib">
+		<xi:include href="lib/directory.xml" />
+	</directory>
+	<directory name="media">
+		<xi:include href="media/directory.xml" />
+	</directory>
+	<directory name="modules">
+		<xi:include href="modules/directory.xml" />
+	</directory>
+	<directory name="ntoskrnl">
+		<xi:include href="ntoskrnl/ntoskrnl.xml" />
+	</directory>
+	<directory name="regtests">
+		<xi:include href="regtests/directory.xml" />
+	</directory>
+	<directory name="services">
+		<xi:include href="services/directory.xml" />
+	</directory>
+	<directory name="subsys">
+		<xi:include href="subsys/directory.xml" />
+	</directory>
+</project>
Property changes on: branches/cache_manager_rewrite/reactos/ReactOS.xml
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/cache_manager_rewrite/reactos/apps/directory.xml
--- branches/cache_manager_rewrite/reactos/apps/directory.xml	2005-08-15 02:24:48 UTC (rev 17394)
+++ branches/cache_manager_rewrite/reactos/apps/directory.xml	2005-08-15 11:39:19 UTC (rev 17395)
@@ -1,3 +1,3 @@
-<directory name="utils">
-	<xi:include href="utils/directory.xml" />
-</directory>
+<directory name="utils">
+	<xi:include href="utils/directory.xml" />
+</directory>
Property changes on: branches/cache_manager_rewrite/reactos/apps/directory.xml
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: branches/cache_manager_rewrite/reactos/apps/utils/binpatch/patch.c
--- branches/cache_manager_rewrite/reactos/apps/utils/binpatch/patch.c	2005-08-15 02:24:48 UTC (rev 17394)
+++ branches/cache_manager_rewrite/reactos/apps/utils/binpatch/patch.c	2005-08-15 11:39:19 UTC (rev 17395)
@@ -1,615 +1,615 @@
-#include <conio.h>
-#include <io.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/stat.h>
-
-/** DEFINES *******************************************************************/
-
-#define PATCH_BUFFER_SIZE           4096    /* Maximum size of a patch */
-#define PATCH_BUFFER_MAGIC          "\xde\xad\xbe\xef MaGiC MaRk "
-#define SIZEOF_PATCH_BUFFER_MAGIC   (sizeof (PATCH_BUFFER_MAGIC) - 1)
-
-/** TYPES *********************************************************************/
-
-typedef struct _PatchedByte
-{
-   int            offset;    /*!< File offset of the patched byte. */
-   unsigned char  expected;  /*!< Expected (original) value of the byte. */
-   unsigned char  patched;   /*!< Patched (new) value for the byte. */
-} PatchedByte;
-
-typedef struct _PatchedFile
-{
-   const char  *name;        /*!< Name of the file to be patched. */
-   int          fileSize;    /*!< Size of the file in bytes. */
-   int          patchCount;  /*!< Number of patches for the file. */
-   PatchedByte *patches;     /*!< Patches for the file. */
-} PatchedFile;
-
-typedef struct _Patch
-{
-   const char   *name;       /*!< Name of the patch. */
-   int           fileCount;  /*!< Number of files in the patch. */
-   PatchedFile  *files;      /*!< Files for the patch. */
-} Patch;
-
-/** FUNCTION PROTOTYPES *******************************************************/
-
-static void printUsage();
-
-/** GLOBALS *******************************************************************/
-
-static Patch m_patch = { NULL, 0, NULL };
-static int m_argc = 0;
-static char **m_argv = NULL;
-
-/* patch buffer where we put the patch info into */
-static unsigned char m_patchBuffer[SIZEOF_PATCH_BUFFER_MAGIC + PATCH_BUFFER_SIZE] =
-   PATCH_BUFFER_MAGIC;
-
-/** HELPER FUNCTIONS **********************************************************/
-
-static void *
-loadFile(const char *fileName, int *fileSize_)
-{
-   FILE *f;
-   struct stat sb;
-   int fileSize;
-   void *p;
-   
-   /* Open the file */
-   f = fopen(fileName, "rb");
-   if (f == NULL)
-   {
-      printf("Couldn't open file %s for reading!\n", fileName);
-      return NULL;
-   }
-   
-   /* Get file size */
-   if (fstat(fileno(f), &sb) < 0)
-   {
-      fclose(f);
-      printf("Couldn't get size of file %s!\n", fileName);
-      return NULL;
-   }
-   fileSize = sb.st_size;
-   
-   /* Load file */
-   p = malloc(fileSize);
-   if (p == NULL)
-   {
-      fclose(f);
-      printf("Couldn't allocate %d bytes for file %s!\n", fileSize, fileName);
-      return NULL;
-   }
-   
-   if (fread(p, fileSize, 1, f) != 1)
-   {
-      fclose(f);
-      free(p);
-      printf("Couldn't read file %s into memory!\n", fileName);
-      return NULL;
-   }
-   
-   /* Close file */
-   fclose(f);
-   
-   *fileSize_ = fileSize;
-   return p;
-}
-
-
-static int
-saveFile(const char *fileName, void *file, int fileSize)
-{
-   FILE *f;
-
-   /* Open the file */
-   f = fopen(fileName, "wb");
-   if (f == NULL)
-   {
-      printf("Couldn't open file %s for writing!\n", fileName);
-      return -1;
-   }
-
-   /* Write file */
-   if (fwrite(file, fileSize, 1, f) != 1)
-   {
-      fclose(f);
-      printf("Couldn't write file %s!\n", fileName);
-      return -1;
-   }
-
-   /* Close file */
-   fclose(f);
-   return 0;
-}
-
-
-static int
-compareFiles(
-   PatchedFile *patchedFile,
-   const char *originalFileName)
-{
-   const char *patchedFileName = patchedFile->name;
-   unsigned char *origChunk, *patchedChunk;
-   int origSize, patchedSize, i, patchCount;
-   PatchedByte *patches = NULL;
-   int patchesArrayCount = 0;
-   
-   /* Load both files */
-   origChunk = loadFile(originalFileName, &origSize);
-   if (origChunk == NULL)
-      return -1;
-   patchedChunk = loadFile(patchedFileName, &patchedSize);
-   if (patchedChunk == NULL)
-   {
-      free(origChunk);
-      return -1;
-   }
-   if (origSize != patchedSize)
-   {
-      free(origChunk);
-      free(patchedChunk);
-      printf("File size of %s and %s differs (%d != %d)\n",
-             originalFileName, patchedFileName,
-             origSize, patchedSize);
-      return -1;
-   }
-   
-   /* Compare the files and record any differences */
-   printf("Comparing %s to %s", originalFileName, patchedFileName);
-   for (i = 0, patchCount = 0; i < origSize; i++)
-   {
-      if (origChunk[i] != patchedChunk[i])
-      {
-         patchCount++;
-         
-         /* Resize patches array if needed */
-         if (patchesArrayCount < patchCount)
-         {
-            PatchedByte *newPatches;
-            newPatches = realloc(patches, patchCount * sizeof (PatchedByte));
-            if (newPatches == NULL)
-            {
-              if (patches != NULL)
-                free(patches);
-              free(origChunk);
-              free(patchedChunk);
-              printf("\nOut of memory (tried to allocated %d bytes)\n",
-                     patchCount * sizeof (PatchedByte));
-              return -1;
-            }
-            patches = newPatches;
-         }
-         
-         /* Fill in patch info */
-         patches[patchCount - 1].offset = i;
-         patches[patchCount - 1].expected = origChunk[i];
-         patches[patchCount - 1].patched = patchedChunk[i];
-      }
-      if ((i % (origSize / 40)) == 0)
-         printf(".");
-   }
-   printf(" %d changed bytes found.\n", patchCount);
-   
-   /* Unload the files */
-   free(origChunk);
-   free(patchedChunk);
-   
-   /* Save patch info */
-   patchedFile->fileSize = patchedSize;
-   patchedFile->patchCount = patchCount;
-   patchedFile->patches = patches;
-   
-   return 0;
-}
-
-
-static int
-outputPatch(const char *outputFileName)
-{
-   unsigned char *patchExe, *patchBuffer;
-   int i, size, patchExeSize, patchSize, stringSize, stringOffset, patchOffset;
-   Patch *patch;
-   PatchedFile *files;
-   
-   printf("Putting patch into %s...\n", outputFileName);
-   
-   /* Calculate size of the patch */
-   patchSize = sizeof (Patch) + sizeof (PatchedFile) * m_patch.fileCount;
-   stringSize = strlen(m_patch.name) + 1;
-   for (i = 0; i < m_patch.fileCount; i++)
-   {
-      stringSize += strlen(m_patch.files[i].name) + 1;
-      patchSize += sizeof (PatchedByte) * m_patch.files[i].patchCount;
-   }
-   if ((stringSize + patchSize) > PATCH_BUFFER_SIZE)
-   {
-      printf("Patch is too big - %d bytes maximum, %d bytes needed\n",
-             PATCH_BUFFER_SIZE, stringSize + patchSize);
-      return -1;
-   }
-
-   /* Load patch.exe file into memory... */
-   patchExe = loadFile(m_argv[0], &patchExeSize);
-   if (patchExe == NULL)
-   {
-      return -1;
-   }
-   
-   /* Try to find the magic mark for the patch buffer */
-   for (i = 0; i < (patchExeSize - SIZEOF_PATCH_BUFFER_MAGIC); i++)
-   {
-      if (memcmp(patchExe + i, m_patchBuffer, SIZEOF_PATCH_BUFFER_MAGIC) == 0)
-      {
-         patchBuffer = patchExe + i + SIZEOF_PATCH_BUFFER_MAGIC;
-         
-         break;
-      }
-   }
-   if (!(i < (patchExeSize - SIZEOF_PATCH_BUFFER_MAGIC)))
-   {
-      free(patchExe);
-      printf("Couldn't find patch buffer magic in file %s - this shouldn't happen!!!\n", m_argv[0]);
-      return -1;
-   }
-   
-   /* Pack patch together and replace string pointers by offsets */
-   patch = (Patch *)patchBuffer;
-   files = (PatchedFile *)(patchBuffer + sizeof (Patch));
-   patchOffset = sizeof (Patch) + sizeof (PatchedFile) * m_patch.fileCount;
-   stringOffset = patchSize;
-   
-   patch->fileCount = m_patch.fileCount;
-   patch->files = (PatchedFile *)sizeof (Patch);
-
-   patch->name = (const char *)stringOffset;
-   strcpy(patchBuffer + stringOffset, m_patch.name);
-   stringOffset += strlen(m_patch.name) + 1;
-   
-   for (i = 0; i < m_patch.fileCount; i++)
-   {
-      files[i].fileSize = m_patch.files[i].fileSize;
-      files[i].patchCount = m_patch.files[i].patchCount;
-      
-      files[i].name = (const char *)stringOffset;
-      strcpy(patchBuffer + stringOffset, m_patch.files[i].name);
-      stringOffset += strlen(m_patch.files[i].name) + 1;
-      
-      size = files[i].patchCount * sizeof (PatchedByte);
-      files[i].patches = (PatchedByte *)patchOffset;
-      memcpy(patchBuffer + patchOffset, m_patch.files[i].patches, size);
-      patchOffset += size;
-   }
-   size = patchSize + stringSize;
-   memset(patchBuffer + size, 0, PATCH_BUFFER_SIZE - size);
-
-   /* Save file */
-   if (saveFile(outputFileName, patchExe, patchExeSize) < 0)
-   {
-      free(patchExe);
-      return -1;
-   }
-   free(patchExe);
-
-   printf("Patch saved!\n");
-   return 0;
-}
-
-
-static int
-loadPatch()
-{
-   char *p;
-   Patch *patch;
-   int i;
-   
-   p = m_patchBuffer + SIZEOF_PATCH_BUFFER_MAGIC;
-   patch = (Patch *)p;
-   
-   if (patch->name == NULL)
-   {
-      return -1;
-   }
-   
-   m_patch.name = p + (int)patch->name;
-   m_patch.fileCount = patch->fileCount;
-   m_patch.files = (PatchedFile *)(p + (int)patch->files);
-
-   for (i = 0; i < m_patch.fileCount; i++)
-   {
-      m_patch.files[i].name = p + (int)m_patch.files[i].name;
-      m_patch.files[i].patches = (PatchedByte *)(p + (int)m_patch.files[i].patches);
-   }
-   
-   printf("Patch %s loaded...\n", m_patch.name);
-   return 0;
-}
-
-
-/** MAIN FUNCTIONS ************************************************************/
-
-static int
-createPatch()
-{
-   int i, status;
-   const char *outputFileName;
-
-   /* Check argument count */
-   if (m_argc < 6 || (m_argc % 2) != 0)
-   {
-      printUsage();
-      return -1;
-   }
-
-   outputFileName = m_argv[3];
-   m_patch.name = m_argv[2];
-
-   /* Allocate PatchedFiles array */
-   m_patch.fileCount = (m_argc - 4) / 2;
-   m_patch.files = malloc(m_patch.fileCount * sizeof (PatchedFile));
-   if (m_patch.files == NULL)
-   {
-      printf("Out of memory!\n");
-      return -1;
-   }
-   memset(m_patch.files, 0, m_patch.fileCount * sizeof (PatchedFile));
-
-   /* Compare original to patched files and fill m_patch.files array */
-   for (i = 0; i < m_patch.fileCount; i++)
-   {
-      m_patch.files[i].name = m_argv[4 + (i * 2) + 1];
-      status = compareFiles(m_patch.files + i, m_argv[4 + (i * 2) + 0]);
-      if (status < 0)
-      {
-         for (i = 0; i < m_patch.fileCount; i++)
-         {
-            if (m_patch.files[i].patches != NULL)
-               free(m_patch.files[i].patches);
-         }
-         free(m_patch.files);
-         m_patch.files = NULL;
-         m_patch.fileCount = 0;
-         return status;
-      }
-   }
-   
-   /* Output patch */
-   return outputPatch(outputFileName);
-}
-
-
-static int
-applyPatch()
-{
-   int c, i, j, fileSize, makeBackup;
-   unsigned char *file;
-   char *p;
-   const char *fileName;
-   char buffer[MAX_PATH];
-   
-
-   if (m_argc > 1 && strcmp(m_argv[1], "-d") != 0)
-   {
-      printUsage();
-      return -1;
-   }
-
-   /* Load patch */
-   if (loadPatch() < 0)
-   {
-      printf("This executable doesn't contain a patch, use -c to create one.\n");
-      return -1;
-   }
-
-   if (m_argc > 1)
-   {
-      /* Dump patch */
-      printf("Patch name: %s\n", m_patch.name);
-      printf("File count: %d\n", m_patch.fileCount);
-      for (i = 0; i < m_patch.fileCount; i++)
-      {
-         printf("----------------------\n"
-                "File name:   %s\n"
-                "File size:   %d bytes\n",
-                m_patch.files[i].name, m_patch.files[i].fileSize);
-         printf("Patch count: %d\n", m_patch.files[i].patchCount);
-         for (j = 0; j < m_patch.files[i].patchCount; j++)
-         {
-            printf("  Offset 0x%x   0x%02x -> 0x%02x\n",
-                   m_patch.files[i].patches[j].offset,
-                   m_patch.files[i].patches[j].expected,
-                   m_patch.files[i].patches[j].patched);
-         }
-      }
-   }
-   else
-   {
-      /* Apply patch */
-      printf("Applying patch...\n");
-      for (i = 0; i < m_patch.fileCount; i++)
-      {
-         /* Load original file */
-         fileName = m_patch.files[i].name;
-applyPatch_retry_file:
-         file = loadFile(fileName, &fileSize);
-         if (file == NULL)
-         {
-            printf("File %s not found! ", fileName);
-applyPatch_file_open_error:
-            printf("(S)kip, (R)etry, (A)bort, (M)anually enter filename");
-            do
-            {
-               c = getch();
-            }
-            while (c != 's' && c != 'r' && c != 'a' && c != 'm');
-            printf("\n");
-            if (c == 's')
-            {
-               continue;
-            }
-            else if (c == 'r')
-            {
-               goto applyPatch_retry_file;
-            }
-            else if (c == 'a')
-            {
-               return 0;
-            }
-            else if (c == 'm')
-            {
-               if (fgets(buffer, sizeof (buffer), stdin) == NULL)
-               {
-                  printf("fgets() failed!\n");
-                  return -1;
-               }
-               p = strchr(buffer, '\r');
-               if (p != NULL)
-                  *p = '\0';
-               p = strchr(buffer, '\n');
-               if (p != NULL)
-                  *p = '\0';
-
-               fileName = buffer;
-               goto applyPatch_retry_file;
-            }
-         }
-
-         /* Check file size */
-         if (fileSize != m_patch.files[i].fileSize)
-         {
-            free(file);
-            printf("File %s has unexpected filesize of %d bytes (%d bytes expected)\n",
-                   fileName, fileSize, m_patch.files[i].fileSize);
-            if (fileName != m_patch.files[i].name) /* manually entered filename */
-            {
-               goto applyPatch_file_open_error;
-            }
-            return -1;
-         }
-         
-         /* Ask for backup */
-         printf("Do you want to make a backup of %s? (Y)es, (N)o, (A)bort", fileName);
-         do
-         {
-            c = getch();
-         }
-         while (c != 'y' && c != 'n' && c != 'a');
-         printf("\n");
-         if (c == 'y')
-         {
-            char buffer[MAX_PATH];
-            snprintf(buffer, MAX_PATH, "%s.bak", fileName);
-            buffer[MAX_PATH-1] = '\0';
-            makeBackup = 1;
-            if (access(buffer, 0) >= 0) /* file exists */
-            {
-               printf("File %s already exists, overwrite? (Y)es, (N)o, (A)bort", buffer);
-               do
-               {
-                  c = getch();
-               }
-               while (c != 'y' && c != 'n' && c != 'a');
-               printf("\n");
-               if (c == 'n')
-                  makeBackup = 0;
-               else if (c == 'a')
-               {
-                  free(file);
-                  return 0;
-               }
-            }
-            if (makeBackup && saveFile(buffer, file, fileSize) < 0)
-            {
-               free(file);
-               return -1;
-            }
-         }
-         else if (c == 'a')
-         {
-            free(file);
-            return 0;
-         }
-         
-         /* Patch file */
-         for (j = 0; j < m_patch.files[i].patchCount; j++)
-         {
-            int offset = m_patch.files[i].patches[j].offset;
-            if (file[offset] != m_patch.files[i].patches[j].expected)
-            {
-               printf("Unexpected value in file %s at offset 0x%x: expected = 0x%02x, found = 0x%02x\n",
-                      fileName, offset, m_patch.files[i].patches[j].expected, file[offset]);
-               free(file);
-               return -1;
-            }
-            file[offset] = m_patch.files[i].patches[j].patched;
-         }
-         
-         /* Save file */
-         if (saveFile(fileName, file, fileSize) < 0)
-         {
-            free(file);
-            return -1;
-         }
-         free(file);
-      }
-      
-      printf("Patch applied sucessfully!\n");
-   }
-
-   return 0;
-}
-
-
-static void
-printUsage()
-{
-   printf("Usage:\n"
-          "%s -c     - Create patch\n"
-          "%s -d     - Dump patch\n"
-          "%s        - Apply patch\n"
-          "\n"
-          "A patch can be created like this:\n"
-          "%s -c \"patch name\" output.exe file1.orig file1.patched[ file2.orig file2.patched[ ...]]\n",
-          m_argv[0], m_argv[0], m_argv[0], m_argv[0]);
-}
-
-
-int
-main(
-   int argc,
-   char *argv[])
-{
-   m_argc = argc;
-   m_argv = argv;
-
-   if (argc >= 2 && (strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "--help") == 0))
-   {
-      printUsage();
-      return 0;
-   }
-   else if (argc >= 2 && argv[1][0] == '-')
-   {
-      if (strcmp(argv[1], "-c") == 0)
-      {
-         return createPatch();
-      }
-      else if (strcmp(argv[1], "-d") == 0)
-      {
-         return applyPatch();
-      }
-      else
-      {
-         printf("Unknown option: %s\n"
-                "Use -h for help.\n",
-                argv[1]);
-         return -1;
-      }
-   }
-   
-   return applyPatch();
-}
-
+#include <conio.h>
+#include <io.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+
+/** DEFINES *******************************************************************/
+
+#define PATCH_BUFFER_SIZE           4096    /* Maximum size of a patch */
+#define PATCH_BUFFER_MAGIC          "\xde\xad\xbe\xef MaGiC MaRk "
+#define SIZEOF_PATCH_BUFFER_MAGIC   (sizeof (PATCH_BUFFER_MAGIC) - 1)
+
+/** TYPES *********************************************************************/
+
+typedef struct _PatchedByte
+{
+   int            offset;    /*!< File offset of the patched byte. */
+   unsigned char  expected;  /*!< Expected (original) value of the byte. */
+   unsigned char  patched;   /*!< Patched (new) value for the byte. */
+} PatchedByte;
+
+typedef struct _PatchedFile
+{
+   const char  *name;        /*!< Name of the file to be patched. */
+   int          fileSize;    /*!< Size of the file in bytes. */
+   int          patchCount;  /*!< Number of patches for the file. */
+   PatchedByte *patches;     /*!< Patches for the file. */
+} PatchedFile;
+
+typedef struct _Patch
+{
+   const char   *name;       /*!< Name of the patch. */
+   int           fileCount;  /*!< Number of files in the patch. */
+   PatchedFile  *files;      /*!< Files for the patch. */
+} Patch;
+
+/** FUNCTION PROTOTYPES *******************************************************/
+
+static void printUsage();
+
+/** GLOBALS *******************************************************************/
+
+static Patch m_patch = { NULL, 0, NULL };
+static int m_argc = 0;
+static char **m_argv = NULL;
+
+/* patch buffer where we put the patch info into */
+static unsigned char m_patchBuffer[SIZEOF_PATCH_BUFFER_MAGIC + PATCH_BUFFER_SIZE] =
+   PATCH_BUFFER_MAGIC;
+
+/** HELPER FUNCTIONS **********************************************************/
+
+static void *
+loadFile(const char *fileName, int *fileSize_)
+{
+   FILE *f;
+   struct stat sb;
+   int fileSize;
+   void *p;
+   
+   /* Open the file */
+   f = fopen(fileName, "rb");
+   if (f == NULL)
+   {
+      printf("Couldn't open file %s for reading!\n", fileName);
+      return NULL;
+   }
+   
+   /* Get file size */
+   if (fstat(fileno(f), &sb) < 0)
+   {
+      fclose(f);
+      printf("Couldn't get size of file %s!\n", fileName);
+      return NULL;
+   }
+   fileSize = sb.st_size;
+   
+   /* Load file */
+   p = malloc(fileSize);
+   if (p == NULL)
+   {
+      fclose(f);
+      printf("Couldn't allocate %d bytes for file %s!\n", fileSize, fileName);
+      return NULL;
+   }
+   
+   if (fread(p, fileSize, 1, f) != 1)
+   {
+      fclose(f);
+      free(p);
+      printf("Couldn't read file %s into memory!\n", fileName);
+      return NULL;
+   }
+   
+   /* Close file */
+   fclose(f);
+   
+   *fileSize_ = fileSize;
+   return p;
+}
+
+
+static int
+saveFile(const char *fileName, void *file, int fileSize)
+{
+   FILE *f;
+
+   /* Open the file */
+   f = fopen(fileName, "wb");
+   if (f == NULL)
+   {
+      printf("Couldn't open file %s for writing!\n", fileName);
+      return -1;
+   }
+
+   /* Write file */
+   if (fwrite(file, fileSize, 1, f) != 1)
+   {
+      fclose(f);
+      printf("Couldn't write file %s!\n", fileName);
+      return -1;
+   }
+
+   /* Close file */
+   fclose(f);
+   return 0;
+}
+
+
+static int
+compareFiles(
+   PatchedFile *patchedFile,
+   const char *originalFileName)
+{
+   const char *patchedFileName = patchedFile->name;
+   unsigned char *origChunk, *patchedChunk;
+   int origSize, patchedSize, i, patchCount;
+   PatchedByte *patches = NULL;
+   int patchesArrayCount = 0;
+   
+   /* Load both files */
+   origChunk = loadFile(originalFileName, &origSize);
+   if (origChunk == NULL)
+      return -1;
+   patchedChunk = loadFile(patchedFileName, &patchedSize);
+   if (patchedChunk == NULL)
+   {
+      free(origChunk);
+      return -1;
+   }
+   if (origSize != patchedSize)
+   {
+      free(origChunk);
+      free(patchedChunk);
+      printf("File size of %s and %s differs (%d != %d)\n",
+             originalFileName, patchedFileName,
+             origSize, patchedSize);
+      return -1;
+   }
+   
+   /* Compare the files and record any differences */
+   printf("Comparing %s to %s", originalFileName, patchedFileName);
+   for (i = 0, patchCount = 0; i < origSize; i++)
+   {
+      if (origChunk[i] != patchedChunk[i])
+      {
+         patchCount++;
+         
+         /* Resize patches array if needed */
+         if (patchesArrayCount < patchCount)
+         {
+            PatchedByte *newPatches;
+            newPatches = realloc(patches, patchCount * sizeof (PatchedByte));
+            if (newPatches == NULL)
+            {
+              if (patches != NULL)
+                free(patches);
+              free(origChunk);
+              free(patchedChunk);
+              printf("\nOut of memory (tried to allocated %d bytes)\n",
+                     patchCount * sizeof (PatchedByte));
+              return -1;
+            }
+            patches = newPatches;
+         }
+         
+         /* Fill in patch info */
+         patches[patchCount - 1].offset = i;
+         patches[patchCount - 1].expected = origChunk[i];
+         patches[patchCount - 1].patched = patchedChunk[i];
+      }
+      if ((i % (origSize / 40)) == 0)
+         printf(".");
+   }
+   printf(" %d changed bytes found.\n", patchCount);
+   
+   /* Unload the files */
+   free(origChunk);
[truncated at 1000 lines; 810660 more skipped]