[ros-diffs] [janderwald] 43044: - Add back PHYSICAL_ADDRESS workarround for IDmaChannel::PhysicalAddress - Only define guids for gcc - Add missing PURE interface function definitions - Silence debug spam - Initialize ResourceList members - Fix calculation when allocating new resources entries - Fix building of portcls with msvc

janderwald at svn.reactos.org janderwald at svn.reactos.org
Mon Sep 14 00:13:48 CEST 2009


Author: janderwald
Date: Mon Sep 14 00:13:48 2009
New Revision: 43044

URL: http://svn.reactos.org/svn/reactos?rev=43044&view=rev
Log:
- Add back PHYSICAL_ADDRESS workarround for IDmaChannel::PhysicalAddress
- Only define guids for gcc
- Add missing PURE interface function definitions
- Silence debug spam
- Initialize ResourceList members
- Fix calculation when allocating new resources entries
- Fix building of portcls with msvc

Modified:
    trunk/reactos/drivers/wdm/audio/backpln/portcls/dma_slave.cpp
    trunk/reactos/drivers/wdm/audio/backpln/portcls/guids.cpp
    trunk/reactos/drivers/wdm/audio/backpln/portcls/interfaces.hpp
    trunk/reactos/drivers/wdm/audio/backpln/portcls/portcls.rbuild
    trunk/reactos/drivers/wdm/audio/backpln/portcls/private.hpp
    trunk/reactos/drivers/wdm/audio/backpln/portcls/resource.cpp

Modified: trunk/reactos/drivers/wdm/audio/backpln/portcls/dma_slave.cpp
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/backpln/portcls/dma_slave.cpp?rev=43044&r1=43043&r2=43044&view=diff
==============================================================================
--- trunk/reactos/drivers/wdm/audio/backpln/portcls/dma_slave.cpp [iso-8859-1] (original)
+++ trunk/reactos/drivers/wdm/audio/backpln/portcls/dma_slave.cpp [iso-8859-1] Mon Sep 14 00:13:48 2009
@@ -196,11 +196,16 @@
 
 PHYSICAL_ADDRESS
 NTAPI
-CDmaChannelInit::PhysicalAddress()
+CDmaChannelInit::PhysicalAddress(
+    PPHYSICAL_ADDRESS Address)
 {
     DPRINT("CDmaChannelInit_PhysicalAdress: this %p Virtuell %p Physical High %x Low %x%\n", this, m_Buffer, m_Address.HighPart, m_Address.LowPart);
 
-    return m_Address;
+    PHYSICAL_ADDRESS Result;
+
+    Address->QuadPart = m_Address.QuadPart;
+    Result.QuadPart = (PtrToUlong(Address));
+    return Result;
 }
 
 VOID

Modified: trunk/reactos/drivers/wdm/audio/backpln/portcls/guids.cpp
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/backpln/portcls/guids.cpp?rev=43044&r1=43043&r2=43044&view=diff
==============================================================================
--- trunk/reactos/drivers/wdm/audio/backpln/portcls/guids.cpp [iso-8859-1] (original)
+++ trunk/reactos/drivers/wdm/audio/backpln/portcls/guids.cpp [iso-8859-1] Mon Sep 14 00:13:48 2009
@@ -6,9 +6,12 @@
  * PROGRAMMER:      Johannes Anderwald
  */
 
-
+#ifdef _MSC_VER
+#define PUT_GUIDS_HERE
+#endif
 #include "private.hpp"
 
+#ifndef _MSC_VER
 const GUID CLSID_PortTopology = {0xb4c90a32L, 0x5791, 0x11d0, {0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44}};
 const GUID CLSID_PortMidi = {0xb4c90a43L, 0x5791, 0x11d0, {0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44}};
 const GUID CLSID_PortWaveCyclic = {0xb4c90a2aL, 0x5791, 0x11d0, {0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44}};
@@ -98,3 +101,4 @@
 const GUID IID_IUnregisterSubdevice              = {0x16738177, 0xe199, 0x41f9, {0x9a, 0x87, 0xab, 0xb2, 0xa5, 0x43, 0x2f, 0x21}};
 const GUID IID_IUnregisterPhysicalConnection     = {0x6c38e231, 0x2a0d, 0x428d, {0x81, 0xf8, 0x07, 0xcc, 0x42, 0x8b, 0xb9, 0xa4}};
 
+#endif

Modified: trunk/reactos/drivers/wdm/audio/backpln/portcls/interfaces.hpp
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/backpln/portcls/interfaces.hpp?rev=43044&r1=43043&r2=43044&view=diff
==============================================================================
--- trunk/reactos/drivers/wdm/audio/backpln/portcls/interfaces.hpp [iso-8859-1] (original)
+++ trunk/reactos/drivers/wdm/audio/backpln/portcls/interfaces.hpp [iso-8859-1] Mon Sep 14 00:13:48 2009
@@ -304,46 +304,46 @@
         IN PDEVICE_OBJECT DeviceObject,
         IN ULONG FrameSize,
         IN ULONG Alignment,
-        IN PVOID SilenceBuffer);
+        IN PVOID SilenceBuffer) PURE;
 
     STDMETHOD_(NTSTATUS, AddMapping)(THIS_
         IN PUCHAR Buffer,
         IN ULONG BufferSize,
-        IN PIRP Irp);
+        IN PIRP Irp) PURE;
 
     STDMETHOD_(NTSTATUS, GetMapping)(THIS_
         OUT PUCHAR * Buffer,
-        OUT PULONG BufferSize);
+        OUT PULONG BufferSize) PURE;
 
     STDMETHOD_(VOID, UpdateMapping)(THIS_
-        IN ULONG BytesWritten);
-
-    STDMETHOD_(ULONG, NumMappings)(THIS);
-
-    STDMETHOD_(ULONG, NumData)(THIS);
-
-    STDMETHOD_(BOOL, MinimumDataAvailable)(THIS);
-
-    STDMETHOD_(BOOL, CancelBuffers)(THIS);
+        IN ULONG BytesWritten) PURE;
+
+    STDMETHOD_(ULONG, NumMappings)(THIS) PURE;
+
+    STDMETHOD_(ULONG, NumData)(THIS) PURE;
+
+    STDMETHOD_(BOOL, MinimumDataAvailable)(THIS) PURE;
+
+    STDMETHOD_(BOOL, CancelBuffers)(THIS) PURE;
 
     STDMETHOD_(VOID, UpdateFormat)(THIS_
-        IN PKSDATAFORMAT DataFormat);
+        IN PKSDATAFORMAT DataFormat) PURE;
 
     STDMETHOD_(NTSTATUS, GetMappingWithTag)(THIS_
         IN PVOID Tag,
         OUT PPHYSICAL_ADDRESS  PhysicalAddress,
         OUT PVOID  *VirtualAddress,
         OUT PULONG  ByteCount,
-        OUT PULONG  Flags);
+        OUT PULONG  Flags) PURE;
 
     STDMETHOD_(NTSTATUS, ReleaseMappingWithTag)(THIS_
-        IN PVOID Tag);
-
-    STDMETHOD_(BOOL, HasLastMappingFailed)(THIS);
-    STDMETHOD_(VOID, PrintQueueStatus)(THIS);
+        IN PVOID Tag) PURE;
+
+    STDMETHOD_(BOOL, HasLastMappingFailed)(THIS) PURE;
+    STDMETHOD_(VOID, PrintQueueStatus)(THIS) PURE;
     STDMETHOD_(VOID, SetMinimumDataThreshold)(THIS_
-        IN ULONG MinimumDataThreshold);
-    STDMETHOD_(ULONG, GetMinimumDataThreshold)(THIS);
+        IN ULONG MinimumDataThreshold) PURE;
+    STDMETHOD_(ULONG, GetMinimumDataThreshold)(THIS) PURE;
 };
 
 
@@ -633,20 +633,20 @@
         IN KSPIN_DESCRIPTOR * PinDescriptor,
         IN PDEVICE_OBJECT DeviceObject) PURE;
 
-    STDMETHOD_(PVOID, GetIrpStream)(THIS);
-    STDMETHOD_(PMINIPORT, GetMiniport)(THIS);
+    STDMETHOD_(PVOID, GetIrpStream)(THIS) PURE;
+    STDMETHOD_(PMINIPORT, GetMiniport)(THIS) PURE;
 };
 
 #define IMP_IPortPinWavePci                        \
     IMP_IIrpTarget;                                \
     STDMETHODIMP_(NTSTATUS) Init(THIS_             \
         IN PPORTWAVEPCI Port,                      \
-		IN PPORTFILTERWAVEPCI Filter,              \
+        IN PPORTFILTERWAVEPCI Filter,              \
         IN KSPIN_CONNECT * ConnectDetails,         \
         IN KSPIN_DESCRIPTOR * PinDescriptor,       \
         IN PDEVICE_OBJECT DeviceObject);           \
                                                    \
-    STDMETHODIMP_(PVOID) GetIrpStream(THIS);       \
+    STDMETHODIMP_(PVOID) GetIrpStream();           \
     STDMETHODIMP_(PMINIPORT) GetMiniport(THIS)
 
 
@@ -771,11 +771,11 @@
         IN KSPIN_CONNECT * ConnectDetails,
         IN KSPIN_DESCRIPTOR * PinDescriptor) PURE;
 
-    STDMETHOD_(ULONG, GetCompletedPosition)(THIS);
-    STDMETHOD_(ULONG, GetCycleCount)(THIS);
-    STDMETHOD_(ULONG, GetDeviceBufferSize)(THIS);
-    STDMETHOD_(PVOID, GetIrpStream)(THIS);
-    STDMETHOD_(PMINIPORT, GetMiniport)(THIS);
+    STDMETHOD_(ULONG, GetCompletedPosition)(THIS) PURE;
+    STDMETHOD_(ULONG, GetCycleCount)(THIS) PURE;
+    STDMETHOD_(ULONG, GetDeviceBufferSize)(THIS) PURE;
+    STDMETHOD_(PVOID, GetIrpStream)(THIS) PURE;
+    STDMETHOD_(PMINIPORT, GetMiniport)(THIS) PURE;
 };
 
 #define IMP_IPortPinWaveCyclic                           \
@@ -814,7 +814,7 @@
     STDMETHOD_(NTSTATUS, FreePin)(THIS_
         IN struct IPortPinDMus* Pin)PURE;
 
-    STDMETHOD_(VOID, NotifyPins)(THIS);
+    STDMETHOD_(VOID, NotifyPins)(THIS) PURE;
 };
 
 typedef IPortFilterDMus *PPORTFILTERDMUS;
@@ -848,7 +848,7 @@
         IN KSPIN_DESCRIPTOR * PinDescriptor,
         IN PDEVICE_OBJECT DeviceObject) PURE;
 
-    STDMETHOD_(VOID, Notify)(THIS);
+    STDMETHOD_(VOID, Notify)(THIS) PURE;
 };
 
 #define IMP_IPortPinDMus                       \
@@ -868,28 +868,95 @@
  *****************************************************************************
  */
 
+#define IMP_IDmaChannelEx                                                 \
+    STDMETHODIMP_(NTSTATUS) AllocateBuffer(                               \
+        IN  ULONG BufferSize,                                             \
+        IN  PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL);        \
+                                                                          \
+    STDMETHODIMP_(void) FreeBuffer(void);                                 \
+    STDMETHODIMP_(ULONG) TransferCount(void);                             \
+    STDMETHODIMP_(ULONG) MaximumBufferSize(void);                         \
+    STDMETHODIMP_(ULONG) AllocatedBufferSize(void);                       \
+    STDMETHODIMP_(ULONG) BufferSize(void);                                \
+                                                                          \
+    STDMETHODIMP_(void) SetBufferSize(                                    \
+        IN  ULONG BufferSize);                                            \
+                                                                          \
+    STDMETHODIMP_(PVOID) SystemAddress(void);                             \
+    STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress(                      \
+        IN  PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL);        \
+    STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void);                \
+                                                                          \
+    STDMETHODIMP_(void) CopyTo(                                           \
+        IN  PVOID Destination,                                            \
+        IN  PVOID Source,                                                 \
+        IN  ULONG ByteCount);                                             \
+                                                                          \
+    STDMETHODIMP_(void) CopyFrom(                                         \
+        IN  PVOID Destination,                                            \
+        IN  PVOID Source,                                                 \
+        IN  ULONG ByteCount)
+
+#define IMP_IDmaChannelSlaveEx                 \
+    IMP_IDmaChannelEx;                         \
+    STDMETHODIMP_(NTSTATUS) Start(             \
+        IN  ULONG MapSize,                     \
+        IN  BOOLEAN WriteToDevice);            \
+                                               \
+    STDMETHODIMP_(NTSTATUS) Stop(void);        \
+    STDMETHODIMP_(ULONG) ReadCounter(void);    \
+                                               \
+    STDMETHODIMP_(NTSTATUS) WaitForTC(         \
+        ULONG Timeout)
+
+#define IMP_IDmaChannelInit\
+    IMP_IDmaChannelSlaveEx;\
+    STDMETHODIMP_(NTSTATUS) Init( \
+        IN  PDEVICE_DESCRIPTION DeviceDescription, \
+        IN  PDEVICE_OBJECT DeviceObject)
+
+#define DEFINE_ABSTRACT_DMACHANNEL_EX() \
+    STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \
+        IN  ULONG BufferSize, \
+        IN  PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) PURE; \
+\
+    STDMETHOD_(void, FreeBuffer)( THIS ) PURE; \
+    STDMETHOD_(ULONG, TransferCount)( THIS ) PURE; \
+    STDMETHOD_(ULONG, MaximumBufferSize)( THIS ) PURE; \
+    STDMETHOD_(ULONG, AllocatedBufferSize)( THIS ) PURE; \
+    STDMETHOD_(ULONG, BufferSize)( THIS ) PURE; \
+\
+    STDMETHOD_(void, SetBufferSize)( THIS_ \
+        IN  ULONG BufferSize) PURE; \
+\
+    STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \
+    STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS_       \
+        IN PPHYSICAL_ADDRESS Address) PURE; \
+    STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \
+\
+    STDMETHOD_(void, CopyTo)( THIS_ \
+        IN  PVOID Destination, \
+        IN  PVOID Source, \
+        IN  ULONG ByteCount) PURE; \
+\
+    STDMETHOD_(void, CopyFrom)( THIS_ \
+        IN  PVOID Destination, \
+        IN  PVOID Source, \
+        IN  ULONG ByteCount) PURE;
+
 #undef INTERFACE
 #define INTERFACE IDmaChannelInit
 
 DECLARE_INTERFACE_(IDmaChannelInit, IUnknown)
 {
     DEFINE_ABSTRACT_UNKNOWN()
-    DEFINE_ABSTRACT_DMACHANNEL()
+    DEFINE_ABSTRACT_DMACHANNEL_EX()
     DEFINE_ABSTRACT_DMACHANNELSLAVE()
 
     STDMETHOD_(NTSTATUS, Init)( THIS_
         IN PDEVICE_DESCRIPTION DeviceDescription,
         IN PDEVICE_OBJECT DeviceObject) PURE;
 };
-
-
-
-#define IMP_IDmaChannelInit\
-    IMP_IDmaChannelSlave;\
-    STDMETHODIMP_(NTSTATUS) Init( \
-        IN  PDEVICE_DESCRIPTION DeviceDescription, \
-        IN  PDEVICE_OBJECT DeviceObject)
-
 
 #undef INTERFACE
 
@@ -1021,7 +1088,4 @@
         IN      ULONG             Index                                   \
     )
 
-
-
-
 #endif

Modified: trunk/reactos/drivers/wdm/audio/backpln/portcls/portcls.rbuild
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/backpln/portcls/portcls.rbuild?rev=43044&r1=43043&r2=43044&view=diff
==============================================================================
--- trunk/reactos/drivers/wdm/audio/backpln/portcls/portcls.rbuild [iso-8859-1] (original)
+++ trunk/reactos/drivers/wdm/audio/backpln/portcls/portcls.rbuild [iso-8859-1] Mon Sep 14 00:13:48 2009
@@ -15,6 +15,10 @@
 	<group compilerset="gcc">
 		<compilerflag compiler="cxx">-fno-exceptions</compilerflag>
 		<compilerflag compiler="cxx">-fno-rtti</compilerflag>
+	</group>
+
+	<group compilerset="msc">
+		<compilerflag compiler="cxx">/GR-</compilerflag>
 	</group>
 
 	<file>adapter.cpp</file>

Modified: trunk/reactos/drivers/wdm/audio/backpln/portcls/private.hpp
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/backpln/portcls/private.hpp?rev=43044&r1=43043&r2=43044&view=diff
==============================================================================
--- trunk/reactos/drivers/wdm/audio/backpln/portcls/private.hpp [iso-8859-1] (original)
+++ trunk/reactos/drivers/wdm/audio/backpln/portcls/private.hpp [iso-8859-1] Mon Sep 14 00:13:48 2009
@@ -12,7 +12,7 @@
 
 #include <ntddk.h>
 #include <portcls.h>
-#define YDEBUG
+#define NDEBUG
 #include <debug.h>
 
 #include <dmusicks.h>

Modified: trunk/reactos/drivers/wdm/audio/backpln/portcls/resource.cpp
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/backpln/portcls/resource.cpp?rev=43044&r1=43043&r2=43044&view=diff
==============================================================================
--- trunk/reactos/drivers/wdm/audio/backpln/portcls/resource.cpp [iso-8859-1] (original)
+++ trunk/reactos/drivers/wdm/audio/backpln/portcls/resource.cpp [iso-8859-1] Mon Sep 14 00:13:48 2009
@@ -34,7 +34,7 @@
     }
 
     IMP_IResourceList;
-    CResourceList(IUnknown * OuterUnknown) {}
+    CResourceList(IUnknown * OuterUnknown) : m_OuterUnknown(OuterUnknown), m_PoolType(NonPagedPool), m_TranslatedResourceList(0), m_UntranslatedResourceList(0), m_NumberOfEntries(0) {}
     virtual ~CResourceList() {}
 
 public:
@@ -88,7 +88,7 @@
     IN  CM_RESOURCE_TYPE Type)
 {
     ULONG Index, Count = 0;
-    PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor;
+    PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor, UnPartialDescriptor;
 
     PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
 
@@ -97,17 +97,30 @@
         // no resource list
         return 0;
     }
-
+     PC_ASSERT(m_TranslatedResourceList->List[0].PartialResourceList.Count == m_UntranslatedResourceList->List[0].PartialResourceList.Count);
     // I guess the translated and untranslated lists will be same length?
     for (Index = 0; Index < m_TranslatedResourceList->List[0].PartialResourceList.Count; Index ++ )
     {
         PartialDescriptor = &m_TranslatedResourceList->List[0].PartialResourceList.PartialDescriptors[Index];
-        DPRINT("Descriptor Type %u\n", PartialDescriptor->Type);
+        UnPartialDescriptor = &m_UntranslatedResourceList->List[0].PartialResourceList.PartialDescriptors[Index];
+        DPRINT1("Descriptor Type %u\n", PartialDescriptor->Type);
         if (PartialDescriptor->Type == Type)
         {
             // Yay! Finally found one that matches!
             Count++;
         }
+
+        if (PartialDescriptor->Type == CmResourceTypeInterrupt)
+        {
+            DPRINT1("Index %u TRANS   Interrupt Number Affinity %x Level %u Vector %u\n", Index, PartialDescriptor->u.Interrupt.Affinity, PartialDescriptor->u.Interrupt.Level, PartialDescriptor->u.Interrupt.Vector, PartialDescriptor->u.Port.Start.LowPart, PartialDescriptor->Flags);
+            DPRINT1("Index %u UNTRANS Interrupt Number Affinity %x Level %u Vector %u\n", Index, UnPartialDescriptor->u.Interrupt.Affinity, UnPartialDescriptor->u.Interrupt.Level, UnPartialDescriptor->u.Interrupt.Vector, PartialDescriptor->u.Port.Start.LowPart, PartialDescriptor->Flags);
+
+        }
+		else if (PartialDescriptor->Type == CmResourceTypePort)
+		{
+            DPRINT1("Index %u TRANS    Port Length %u Start %u %u Flags %x\n", Index, PartialDescriptor->u.Port.Length, PartialDescriptor->u.Port.Start.HighPart, PartialDescriptor->u.Port.Start.LowPart, PartialDescriptor->Flags);
+            DPRINT1("Index %u UNTRANS  Port Length %u Start %u %u Flags %x\n", Index, UnPartialDescriptor->u.Port.Length, UnPartialDescriptor->u.Port.Start.HighPart, UnPartialDescriptor->u.Port.Start.LowPart, UnPartialDescriptor->Flags);
+		}
     }
 
     DPRINT("Found %d type %d\n", Count, Type);
@@ -200,9 +213,8 @@
     NewTranslatedSize = FIELD_OFFSET(CM_RESOURCE_LIST, List[0].PartialResourceList.PartialDescriptors[ResourceCount+1]);
     TranslatedSize = FIELD_OFFSET(CM_RESOURCE_LIST, List[0].PartialResourceList.PartialDescriptors[ResourceCount]);
 #else
-    NewTranslatedSize = sizeof(CM_RESOURCE_LIST) + (ResourceCount > 0 ? (ResourceCount+1) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) : 0);
-    TranslatedSize = sizeof(CM_RESOURCE_LIST) + (ResourceCount > 0 ? (ResourceCount) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) : 0);
-
+    NewTranslatedSize = sizeof(CM_RESOURCE_LIST) - sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) + (ResourceCount+1) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR);
+    TranslatedSize = sizeof(CM_RESOURCE_LIST) - sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) + (ResourceCount) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR);
 #endif
     NewTranslatedResources = (PCM_RESOURCE_LIST)AllocateItem(m_PoolType, NewTranslatedSize, TAG_PORTCLASS);
     if (!NewTranslatedResources)
@@ -216,9 +228,8 @@
     NewUntranslatedSize = FIELD_OFFSET(CM_RESOURCE_LIST, List[0].PartialResourceList.PartialDescriptors[ResourceCount+1]);
     UntranslatedSize = FIELD_OFFSET(CM_RESOURCE_LIST, List[0].PartialResourceList.PartialDescriptors[ResourceCount]);
 #else
-    NewUntranslatedSize = sizeof(CM_RESOURCE_LIST) + (ResourceCount > 0 ? (ResourceCount+1) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) : 0);
-    UntranslatedSize = sizeof(CM_RESOURCE_LIST) + (ResourceCount > 0 ? (ResourceCount) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) : 0);
-
+    NewUntranslatedSize = sizeof(CM_RESOURCE_LIST) - sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) + (ResourceCount+1) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR);
+    UntranslatedSize = sizeof(CM_RESOURCE_LIST) - sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) + (ResourceCount) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR);
 #endif
 
 
@@ -361,7 +372,7 @@
 #ifdef _MSC_VER
     NewTranslatedSize = FIELD_OFFSET(CM_RESOURCE_LIST, List[0].PartialResourceList.PartialDescriptors[ResourceCount]);
 #else
-    NewTranslatedSize = sizeof(CM_RESOURCE_LIST) + (ResourceCount > 0 ? (ResourceCount-1) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) : 0);
+    NewTranslatedSize = sizeof(CM_RESOURCE_LIST) - sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) + (ResourceCount) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR);
 #endif
 
     // store resource count
@@ -372,7 +383,7 @@
 #ifdef _MSC_VER
     NewUntranslatedSize = FIELD_OFFSET(CM_RESOURCE_LIST, List[0].PartialResourceList.PartialDescriptors[ResourceCount]);
 #else
-    NewUntranslatedSize = sizeof(CM_RESOURCE_LIST) + (ResourceCount > 0 ? (ResourceCount-1) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) : 0);
+    NewUntranslatedSize = sizeof(CM_RESOURCE_LIST) - sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) + (ResourceCount) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR);
 #endif
 
     // allocate translated resource list
@@ -454,6 +465,7 @@
     NewList->m_OuterUnknown = OuterUnknown;
     NewList->m_PoolType = PoolType;
     NewList->m_Ref = 1;
+    NewList->m_NumberOfEntries = 0;
 
     *OutResourceList = (IResourceList*)NewList;
 




More information about the Ros-diffs mailing list