mirror of
https://github.com/reactos/reactos.git
synced 2025-02-23 17:05:46 +00:00
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. svn path=/trunk/; revision=28389
This commit is contained in:
parent
c4bb3a9eb4
commit
fe41b9be51
14 changed files with 145 additions and 87 deletions
|
@ -107,11 +107,21 @@ inline void* ULongToPtr( const unsigned long ul )
|
|||
#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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -102,8 +102,8 @@ typedef char CHAR;
|
|||
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;
|
||||
|
|
39
reactos/include/reactos/typedefs64.h
Normal file
39
reactos/include/reactos/typedefs64.h
Normal file
|
@ -0,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
|
|
@ -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"
|
||||
|
|
|
@ -33,7 +33,7 @@ CMLIB_HOST_OBJECTS = \
|
|||
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)
|
||||
|
|
|
@ -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 @@ typedef char TCHAR, *PTCHAR, *PTSTR;
|
|||
#define strcasecmp stricmp
|
||||
#endif
|
||||
|
||||
extern unsigned long DbgPrint(char *Fmt, ...);
|
||||
extern ULONG DbgPrint(char *Fmt, ...);
|
||||
|
||||
#else /* ! defined(INFLIB_HOST) */
|
||||
|
||||
|
|
|
@ -17,59 +17,59 @@ extern "C" {
|
|||
|
||||
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
|
||||
|
|
|
@ -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 @@ InfHostOpenBufferedFile(PHINF InfHandle,
|
|||
|
||||
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 @@ InfHostOpenFile(PHINF InfHandle,
|
|||
}
|
||||
|
||||
FileLength = ftell(File);
|
||||
if ((unsigned long) -1 == FileLength)
|
||||
if ((ULONG) -1 == FileLength)
|
||||
{
|
||||
DPRINT1("ftell() failed (errno %d)\n", errno);
|
||||
fclose(File);
|
||||
|
|
|
@ -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 @@ InfHostFindNextLine(PINFCONTEXT ContextIn,
|
|||
|
||||
int
|
||||
InfHostFindFirstMatchLine(PINFCONTEXT ContextIn,
|
||||
const char *Key,
|
||||
const CHAR *Key,
|
||||
PINFCONTEXT ContextOut)
|
||||
{
|
||||
INFSTATUS Status;
|
||||
|
@ -76,7 +76,7 @@ InfHostFindFirstMatchLine(PINFCONTEXT ContextIn,
|
|||
|
||||
int
|
||||
InfHostFindNextMatchLine(PINFCONTEXT ContextIn,
|
||||
const char *Key,
|
||||
const CHAR *Key,
|
||||
PINFCONTEXT ContextOut)
|
||||
{
|
||||
INFSTATUS Status;
|
||||
|
@ -94,7 +94,7 @@ InfHostFindNextMatchLine(PINFCONTEXT ContextIn,
|
|||
}
|
||||
|
||||
|
||||
long
|
||||
LONG
|
||||
InfHostGetLineCount(HINF InfHandle,
|
||||
PCTSTR Section)
|
||||
{
|
||||
|
@ -105,7 +105,7 @@ InfHostGetLineCount(HINF InfHandle,
|
|||
/* InfGetLineText */
|
||||
|
||||
|
||||
long
|
||||
LONG
|
||||
InfHostGetFieldCount(PINFCONTEXT Context)
|
||||
{
|
||||
return InfpGetFieldCount(Context);
|
||||
|
@ -114,10 +114,10 @@ InfHostGetFieldCount(PINFCONTEXT Context)
|
|||
|
||||
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 @@ InfHostGetBinaryField(PINFCONTEXT Context,
|
|||
|
||||
int
|
||||
InfHostGetIntField(PINFCONTEXT Context,
|
||||
unsigned long FieldIndex,
|
||||
unsigned long *IntegerValue)
|
||||
ULONG FieldIndex,
|
||||
ULONG *IntegerValue)
|
||||
{
|
||||
INFSTATUS Status;
|
||||
|
||||
|
@ -157,10 +157,10 @@ InfHostGetIntField(PINFCONTEXT Context,
|
|||
|
||||
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 @@ InfHostGetMultiSzField(PINFCONTEXT Context,
|
|||
|
||||
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 @@ InfHostGetStringField(PINFCONTEXT Context,
|
|||
|
||||
int
|
||||
InfHostGetData(PINFCONTEXT Context,
|
||||
char **Key,
|
||||
char **Data)
|
||||
CHAR **Key,
|
||||
CHAR **Data)
|
||||
{
|
||||
INFSTATUS Status;
|
||||
|
||||
|
@ -223,8 +223,8 @@ InfHostGetData(PINFCONTEXT Context,
|
|||
|
||||
int
|
||||
InfHostGetDataField(PINFCONTEXT Context,
|
||||
unsigned long FieldIndex,
|
||||
char **Data)
|
||||
ULONG FieldIndex,
|
||||
CHAR **Data)
|
||||
{
|
||||
INFSTATUS Status;
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
#define NDEBUG
|
||||
#include <debug.h>
|
||||
|
||||
unsigned long
|
||||
ULONG
|
||||
DbgPrint(char *Fmt, ...)
|
||||
{
|
||||
va_list Args;
|
||||
|
|
|
@ -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 @@ InfHostWriteFile(HINF InfHandle, const char *FileName,
|
|||
|
||||
int
|
||||
InfHostFindOrAddSection(HINF InfHandle,
|
||||
const char *Section,
|
||||
const CHAR *Section,
|
||||
PINFCONTEXT *Context)
|
||||
{
|
||||
INFSTATUS Status;
|
||||
|
@ -78,7 +78,7 @@ InfHostFindOrAddSection(HINF InfHandle,
|
|||
}
|
||||
|
||||
int
|
||||
InfHostAddLine(PINFCONTEXT Context, const char *Key)
|
||||
InfHostAddLine(PINFCONTEXT Context, const CHAR *Key)
|
||||
{
|
||||
INFSTATUS Status;
|
||||
|
||||
|
@ -95,7 +95,7 @@ InfHostAddLine(PINFCONTEXT Context, const char *Key)
|
|||
}
|
||||
|
||||
int
|
||||
InfHostAddField(PINFCONTEXT Context, const char *Data)
|
||||
InfHostAddField(PINFCONTEXT Context, const CHAR *Data)
|
||||
{
|
||||
INFSTATUS Status;
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -31,7 +31,7 @@ MKHIVE_OBJECTS = \
|
|||
$(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
|
||||
|
|
Loading…
Reference in a new issue