Author: cfinck Date: Sat Aug 18 02:17:13 2007 New Revision: 28389
URL: http://svn.reactos.org/svn/reactos?rev=28389&view=rev Log: Fix the long-standing mkhive bug on 64-bit systems
This is now done by adding a "typedefs64.h" header file, which uses int's instead of long's for 32-bit values. As far as I know, this is the only way to avoid the problem that a long has a size of 64-bit on 64-bit systems. This header file is now used in the host makefiles of cmlib, inflib and mkhive. It is also suitable for the other host tools, which need 32-bit values (will do some changes there in the next few days).
Unfortunately, Live-CDs still do not work because of another bug (see bug #2290). But I compared the hives created by 32-bit Debian Linux and 64-bit Debian Linux and after these changes, they are exactly the same. See issue #2272 for more details.
Added: trunk/reactos/include/reactos/typedefs64.h Modified: trunk/reactos/include/psdk/basetsd.h trunk/reactos/include/psdk/basetyps.h trunk/reactos/include/psdk/winnt.h trunk/reactos/lib/cmlib/cmlib.h trunk/reactos/lib/cmlib/cmlib.mak trunk/reactos/lib/inflib/builddep.h (contents, props changed) trunk/reactos/lib/inflib/infhost.h (contents, props changed) trunk/reactos/lib/inflib/infhostgen.c (contents, props changed) trunk/reactos/lib/inflib/infhostget.c (contents, props changed) trunk/reactos/lib/inflib/infhostglue.c (contents, props changed) trunk/reactos/lib/inflib/infhostput.c (contents, props changed) trunk/reactos/tools/mkhive/mkhive.h trunk/reactos/tools/mkhive/mkhive.mak
Modified: trunk/reactos/include/psdk/basetsd.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/psdk/basetsd.h?rev=... ============================================================================== --- trunk/reactos/include/psdk/basetsd.h (original) +++ trunk/reactos/include/psdk/basetsd.h Sat Aug 18 02:17:13 2007 @@ -107,11 +107,21 @@ #else /* !_WIN64 */ typedef _W64 int INT_PTR, *PINT_PTR; typedef _W64 unsigned int UINT_PTR, *PUINT_PTR; -typedef _W64 long LONG_PTR, *PLONG_PTR; -typedef _W64 unsigned long ULONG_PTR, *PULONG_PTR; + +#ifndef LONG_PTR_DEFINED +#define LONG_PTR_DEFINED + typedef _W64 long LONG_PTR, *PLONG_PTR; + typedef _W64 unsigned long ULONG_PTR, *PULONG_PTR; +#endif + typedef unsigned short UHALF_PTR, *PUHALF_PTR; typedef short HALF_PTR, *PHALF_PTR; -typedef _W64 unsigned long HANDLE_PTR; + +#ifndef HANDLE_PTR_DEFINED +#define HANDLE_PTR_DEFINED + typedef _W64 unsigned long HANDLE_PTR; +#endif + #endif /* !_WIN64 */
typedef _W64 ULONG_PTR SIZE_T, *PSIZE_T;
Modified: trunk/reactos/include/psdk/basetyps.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/psdk/basetyps.h?rev... ============================================================================== --- trunk/reactos/include/psdk/basetyps.h (original) +++ trunk/reactos/include/psdk/basetyps.h Sat Aug 18 02:17:13 2007 @@ -77,8 +77,8 @@ #include <guiddef.h>
#ifndef _ERROR_STATUS_T_DEFINED -typedef unsigned long error_status_t; #define _ERROR_STATUS_T_DEFINED + typedef unsigned long error_status_t; #endif
#ifndef _WCHAR_T_DEFINED
Modified: trunk/reactos/include/psdk/winnt.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/psdk/winnt.h?rev=28... ============================================================================== --- trunk/reactos/include/psdk/winnt.h (original) +++ trunk/reactos/include/psdk/winnt.h Sat Aug 18 02:17:13 2007 @@ -102,8 +102,8 @@ typedef short SHORT; #ifndef LONG_DEFINED #define LONG_DEFINED - typedef long LONG; - typedef unsigned long ULONG,*PULONG; + typedef long LONG; + typedef unsigned long ULONG,*PULONG; #endif//LONG_DEFINED typedef char CCHAR, *PCCHAR; typedef unsigned char UCHAR,*PUCHAR;
Added: trunk/reactos/include/reactos/typedefs64.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/reactos/typedefs64.... ============================================================================== --- trunk/reactos/include/reactos/typedefs64.h (added) +++ trunk/reactos/include/reactos/typedefs64.h Sat Aug 18 02:17:13 2007 @@ -1,0 +1,39 @@ +/* + PROJECT: ReactOS + LICENSE: GPL v2 or any later version + FILE: include/reactos/typedefs64.h + PURPOSE: Type definitions for host tools, which are built on 64-bit systems + COPYRIGHT: Copyright 2007 Colin Finck mail@colinfinck.de +*/ + +#ifndef _TYPEDEFS64_H +#define _TYPEDEFS64_H + +#ifndef DWORD_DEFINED +#define DWORD_DEFINED + typedef unsigned int DWORD; +#endif + +#ifndef LONG_DEFINED +#define LONG_DEFINED + typedef int LONG; + typedef unsigned int ULONG,*PULONG; +#endif + +#ifndef LONG_PTR_DEFINED +#define LONG_PTR_DEFINED + typedef int LONG_PTR, *PLONG_PTR; + typedef unsigned int ULONG_PTR, *PULONG_PTR; +#endif + +#ifndef HANDLE_PTR_DEFINED +#define HANDLE_PTR_DEFINED + typedef unsigned int HANDLE_PTR; +#endif + +#ifndef _ERROR_STATUS_T_DEFINED +#define _ERROR_STATUS_T_DEFINED + typedef unsigned int error_status_t; +#endif + +#endif
Modified: trunk/reactos/lib/cmlib/cmlib.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/cmlib/cmlib.h?rev=28389... ============================================================================== --- trunk/reactos/lib/cmlib/cmlib.h (original) +++ trunk/reactos/lib/cmlib/cmlib.h Sat Aug 18 02:17:13 2007 @@ -9,6 +9,10 @@ #define CMLIB_H
//#define WIN32_NO_STATUS +#ifdef CMLIB_HOST +#include <typedefs64.h> +#endif + #include <ntddk.h> #include "hivedata.h" #include "cmdata.h"
Modified: trunk/reactos/lib/cmlib/cmlib.mak URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/cmlib/cmlib.mak?rev=283... ============================================================================== --- trunk/reactos/lib/cmlib/cmlib.mak (original) +++ trunk/reactos/lib/cmlib/cmlib.mak Sat Aug 18 02:17:13 2007 @@ -33,7 +33,7 @@ CMLIB_HOST_CFLAGS = -O3 -Wall -Wwrite-strings -Wpointer-arith \ -D_X86_ -D__i386__ -D_REACTOS_ -D_NTOSKRNL_ -D_NTSYSTEM_ \ -DCMLIB_HOST -D_M_IX86 -I$(CMLIB_BASE) -Iinclude/reactos -Iinclude/psdk -Iinclude/ddk -Iinclude/crt \ - -D__NO_CTYPE_INLINES + -D__NO_CTYPE_INLINES -DCMLIB_HOST
$(CMLIB_HOST_TARGET): $(CMLIB_HOST_OBJECTS) | $(CMLIB_OUT) $(ECHO_AR)
Modified: trunk/reactos/lib/inflib/builddep.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/inflib/builddep.h?rev=2... ============================================================================== --- trunk/reactos/lib/inflib/builddep.h (original) +++ trunk/reactos/lib/inflib/builddep.h Sat Aug 18 02:17:13 2007 @@ -30,10 +30,10 @@
typedef char CHAR, *PCHAR; typedef unsigned char UCHAR, *PUCHAR; -typedef long LONG, *PLONG; -typedef unsigned long ULONG, *PULONG; typedef void VOID, *PVOID; typedef UCHAR BOOLEAN, *PBOOLEAN; +#include <typedefs64.h> +typedef LONG *PLONG;
typedef char TCHAR, *PTCHAR, *PTSTR; #define _T(x) x @@ -48,7 +48,7 @@ #define strcasecmp stricmp #endif
-extern unsigned long DbgPrint(char *Fmt, ...); +extern ULONG DbgPrint(char *Fmt, ...);
#else /* ! defined(INFLIB_HOST) */
Propchange: trunk/reactos/lib/inflib/builddep.h ------------------------------------------------------------------------------ --- svn:needs-lock (original) +++ svn:needs-lock (removed) @@ -1,1 +1,0 @@ -*
Modified: trunk/reactos/lib/inflib/infhost.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/inflib/infhost.h?rev=28... ============================================================================== --- trunk/reactos/lib/inflib/infhost.h (original) +++ trunk/reactos/lib/inflib/infhost.h Sat Aug 18 02:17:13 2007 @@ -17,59 +17,59 @@
extern int InfHostOpenBufferedFile(PHINF InfHandle, void *Buffer, - unsigned long BufferSize, - unsigned long *ErrorLine); + ULONG BufferSize, + ULONG *ErrorLine); extern int InfHostOpenFile(PHINF InfHandle, - const char *FileName, - unsigned long *ErrorLine); + const CHAR *FileName, + ULONG *ErrorLine); extern int InfHostWriteFile(HINF InfHandle, - const char *FileName, - const char *HeaderComment); + const CHAR *FileName, + const CHAR *HeaderComment); extern void InfHostCloseFile(HINF InfHandle); extern int InfHostFindFirstLine(HINF InfHandle, - const char *Section, - const char *Key, + const CHAR *Section, + const CHAR *Key, PINFCONTEXT *Context); extern int InfHostFindNextLine(PINFCONTEXT ContextIn, PINFCONTEXT ContextOut); extern int InfHostFindFirstMatchLine(PINFCONTEXT ContextIn, - const char *Key, + const CHAR *Key, PINFCONTEXT ContextOut); extern int InfHostFindNextMatchLine(PINFCONTEXT ContextIn, - const char *Key, + const CHAR *Key, PINFCONTEXT ContextOut); -extern long InfHostGetLineCount(HINF InfHandle, - const char *Section); -extern long InfHostGetFieldCount(PINFCONTEXT Context); +extern LONG InfHostGetLineCount(HINF InfHandle, + const CHAR *Section); +extern LONG InfHostGetFieldCount(PINFCONTEXT Context); extern int InfHostGetBinaryField(PINFCONTEXT Context, - unsigned long FieldIndex, - unsigned char *ReturnBuffer, - unsigned long ReturnBufferSize, - unsigned long *RequiredSize); + ULONG FieldIndex, + UCHAR *ReturnBuffer, + ULONG ReturnBufferSize, + ULONG *RequiredSize); extern int InfHostGetIntField(PINFCONTEXT Context, - unsigned long FieldIndex, - unsigned long *IntegerValue); + ULONG FieldIndex, + ULONG *IntegerValue); extern int InfHostGetMultiSzField(PINFCONTEXT Context, - unsigned long FieldIndex, - char *ReturnBuffer, - unsigned long ReturnBufferSize, - unsigned long *RequiredSize); + ULONG FieldIndex, + CHAR *ReturnBuffer, + ULONG ReturnBufferSize, + ULONG *RequiredSize); extern int InfHostGetStringField(PINFCONTEXT Context, - unsigned long FieldIndex, - char *ReturnBuffer, - unsigned long ReturnBufferSize, - unsigned long *RequiredSize); + ULONG FieldIndex, + CHAR *ReturnBuffer, + ULONG ReturnBufferSize, + ULONG *RequiredSize); extern int InfHostGetData(PINFCONTEXT Context, - char **Key, - char **Data); + CHAR **Key, + CHAR **Data); extern int InfHostGetDataField(PINFCONTEXT Context, - unsigned long FieldIndex, - char **Data); + ULONG FieldIndex, + CHAR **Data); extern int InfHostFindOrAddSection(HINF InfHandle, - const char *Section, + const CHAR *Section, PINFCONTEXT *Context); -extern int InfHostAddLine(PINFCONTEXT Context, const char *Key); -extern int InfHostAddField(PINFCONTEXT Context, const char *Data); +extern int InfHostAddLine(PINFCONTEXT Context, const CHAR *Key); +extern int InfHostAddField(PINFCONTEXT Context, const CHAR *Data); extern void InfHostFreeContext(PINFCONTEXT Context);
#ifdef __cplusplus
Propchange: trunk/reactos/lib/inflib/infhost.h ------------------------------------------------------------------------------ --- svn:needs-lock (original) +++ svn:needs-lock (removed) @@ -1,1 +1,0 @@ -*
Modified: trunk/reactos/lib/inflib/infhostgen.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/inflib/infhostgen.c?rev... ============================================================================== --- trunk/reactos/lib/inflib/infhostgen.c (original) +++ trunk/reactos/lib/inflib/infhostgen.c Sat Aug 18 02:17:13 2007 @@ -19,15 +19,15 @@ int InfHostOpenBufferedFile(PHINF InfHandle, void *Buffer, - unsigned long BufferSize, - unsigned long *ErrorLine) + ULONG BufferSize, + ULONG *ErrorLine) { INFSTATUS Status; PINFCACHE Cache; - char *FileBuffer; + CHAR *FileBuffer;
*InfHandle = NULL; - *ErrorLine = (unsigned long)-1; + *ErrorLine = (ULONG)-1;
/* Allocate file buffer */ FileBuffer = MALLOC(BufferSize + 1); @@ -77,17 +77,17 @@
int InfHostOpenFile(PHINF InfHandle, - const char *FileName, - unsigned long *ErrorLine) + const CHAR *FileName, + ULONG *ErrorLine) { FILE *File; - char *FileBuffer; - unsigned long FileLength; + CHAR *FileBuffer; + ULONG FileLength; PINFCACHE Cache; INFSTATUS Status;
*InfHandle = NULL; - *ErrorLine = (unsigned long)-1; + *ErrorLine = (ULONG)-1;
/* Open the inf file */ File = fopen(FileName, "rb"); @@ -108,7 +108,7 @@ }
FileLength = ftell(File); - if ((unsigned long) -1 == FileLength) + if ((ULONG) -1 == FileLength) { DPRINT1("ftell() failed (errno %d)\n", errno); fclose(File);
Propchange: trunk/reactos/lib/inflib/infhostgen.c ------------------------------------------------------------------------------ --- svn:needs-lock (original) +++ svn:needs-lock (removed) @@ -1,1 +1,0 @@ -*
Modified: trunk/reactos/lib/inflib/infhostget.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/inflib/infhostget.c?rev... ============================================================================== --- trunk/reactos/lib/inflib/infhostget.c (original) +++ trunk/reactos/lib/inflib/infhostget.c Sat Aug 18 02:17:13 2007 @@ -16,8 +16,8 @@
int InfHostFindFirstLine(HINF InfHandle, - const char *Section, - const char *Key, + const CHAR *Section, + const CHAR *Key, PINFCONTEXT *Context) { INFSTATUS Status; @@ -56,7 +56,7 @@
int InfHostFindFirstMatchLine(PINFCONTEXT ContextIn, - const char *Key, + const CHAR *Key, PINFCONTEXT ContextOut) { INFSTATUS Status; @@ -76,7 +76,7 @@
int InfHostFindNextMatchLine(PINFCONTEXT ContextIn, - const char *Key, + const CHAR *Key, PINFCONTEXT ContextOut) { INFSTATUS Status; @@ -94,7 +94,7 @@ }
-long +LONG InfHostGetLineCount(HINF InfHandle, PCTSTR Section) { @@ -105,7 +105,7 @@ /* InfGetLineText */
-long +LONG InfHostGetFieldCount(PINFCONTEXT Context) { return InfpGetFieldCount(Context); @@ -114,10 +114,10 @@
int InfHostGetBinaryField(PINFCONTEXT Context, - unsigned long FieldIndex, - unsigned char *ReturnBuffer, - unsigned long ReturnBufferSize, - unsigned long *RequiredSize) + ULONG FieldIndex, + UCHAR *ReturnBuffer, + ULONG ReturnBufferSize, + ULONG *RequiredSize) { INFSTATUS Status;
@@ -137,8 +137,8 @@
int InfHostGetIntField(PINFCONTEXT Context, - unsigned long FieldIndex, - unsigned long *IntegerValue) + ULONG FieldIndex, + ULONG *IntegerValue) { INFSTATUS Status;
@@ -157,10 +157,10 @@
int InfHostGetMultiSzField(PINFCONTEXT Context, - unsigned long FieldIndex, - char * ReturnBuffer, - unsigned long ReturnBufferSize, - unsigned long *RequiredSize) + ULONG FieldIndex, + CHAR * ReturnBuffer, + ULONG ReturnBufferSize, + ULONG *RequiredSize) { INFSTATUS Status;
@@ -180,10 +180,10 @@
int InfHostGetStringField(PINFCONTEXT Context, - unsigned long FieldIndex, - char *ReturnBuffer, - unsigned long ReturnBufferSize, - unsigned long *RequiredSize) + ULONG FieldIndex, + CHAR *ReturnBuffer, + ULONG ReturnBufferSize, + ULONG *RequiredSize) { INFSTATUS Status;
@@ -203,8 +203,8 @@
int InfHostGetData(PINFCONTEXT Context, - char **Key, - char **Data) + CHAR **Key, + CHAR **Data) { INFSTATUS Status;
@@ -223,8 +223,8 @@
int InfHostGetDataField(PINFCONTEXT Context, - unsigned long FieldIndex, - char **Data) + ULONG FieldIndex, + CHAR **Data) { INFSTATUS Status;
Propchange: trunk/reactos/lib/inflib/infhostget.c ------------------------------------------------------------------------------ --- svn:needs-lock (original) +++ svn:needs-lock (removed) @@ -1,1 +1,0 @@ -*
Modified: trunk/reactos/lib/inflib/infhostglue.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/inflib/infhostglue.c?re... ============================================================================== --- trunk/reactos/lib/inflib/infhostglue.c (original) +++ trunk/reactos/lib/inflib/infhostglue.c Sat Aug 18 02:17:13 2007 @@ -11,7 +11,7 @@ #define NDEBUG #include <debug.h>
-unsigned long +ULONG DbgPrint(char *Fmt, ...) { va_list Args;
Propchange: trunk/reactos/lib/inflib/infhostglue.c ------------------------------------------------------------------------------ --- svn:needs-lock (original) +++ svn:needs-lock (removed) @@ -1,1 +1,0 @@ -*
Modified: trunk/reactos/lib/inflib/infhostput.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/inflib/infhostput.c?rev... ============================================================================== --- trunk/reactos/lib/inflib/infhostput.c (original) +++ trunk/reactos/lib/inflib/infhostput.c Sat Aug 18 02:17:13 2007 @@ -13,11 +13,11 @@ #include <debug.h>
int -InfHostWriteFile(HINF InfHandle, const char *FileName, - const char *HeaderComment) +InfHostWriteFile(HINF InfHandle, const CHAR *FileName, + const CHAR *HeaderComment) { - char *Buffer; - unsigned long BufferSize; + CHAR *Buffer; + ULONG BufferSize; INFSTATUS Status; FILE *File;
@@ -60,7 +60,7 @@
int InfHostFindOrAddSection(HINF InfHandle, - const char *Section, + const CHAR *Section, PINFCONTEXT *Context) { INFSTATUS Status; @@ -78,7 +78,7 @@ }
int -InfHostAddLine(PINFCONTEXT Context, const char *Key) +InfHostAddLine(PINFCONTEXT Context, const CHAR *Key) { INFSTATUS Status;
@@ -95,7 +95,7 @@ }
int -InfHostAddField(PINFCONTEXT Context, const char *Data) +InfHostAddField(PINFCONTEXT Context, const CHAR *Data) { INFSTATUS Status;
Propchange: trunk/reactos/lib/inflib/infhostput.c ------------------------------------------------------------------------------ --- svn:needs-lock (original) +++ svn:needs-lock (removed) @@ -1,1 +1,0 @@ -*
Modified: trunk/reactos/tools/mkhive/mkhive.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/tools/mkhive/mkhive.h?rev=2... ============================================================================== --- trunk/reactos/tools/mkhive/mkhive.h (original) +++ trunk/reactos/tools/mkhive/mkhive.h Sat Aug 18 02:17:13 2007 @@ -37,6 +37,11 @@
#define NTOS_MODE_USER #define WIN32_NO_STATUS + +#ifdef MKHIVE_HOST +#include <typedefs64.h> +#endif + #include <ntddk.h> #include <cmlib.h> #include <infhost.h>
Modified: trunk/reactos/tools/mkhive/mkhive.mak URL: http://svn.reactos.org/svn/reactos/trunk/reactos/tools/mkhive/mkhive.mak?rev... ============================================================================== --- trunk/reactos/tools/mkhive/mkhive.mak (original) +++ trunk/reactos/tools/mkhive/mkhive.mak Sat Aug 18 02:17:13 2007 @@ -31,7 +31,7 @@ $(addprefix $(INTERMEDIATE_), $(MKHIVE_SOURCES:.c=.o))
MKHIVE_HOST_CFLAGS = -fshort-wchar $(xTOOLS_CFLAGS) -I$(INFLIB_BASE) -I$(CMLIB_BASE) \ - -D_NTOSKRNL_ -D_NTSYSTEM_ \ + -D_NTOSKRNL_ -D_NTSYSTEM_ -DMKHIVE_HOST \ -Iinclude/reactos -Iinclude/ddk -Iinclude/ndk -Iinclude/psdk -Iinclude -Iinclude/crt -g3
MKHIVE_HOST_LFLAGS = $(xTOOLS_LFLAGS) -g3