X-Git-Url: http://git.chise.org/gitweb/?p=chise%2Fxemacs-chise.git.1;a=blobdiff_plain;f=src%2Funexnt.c;h=3a6b0b139a04fb4e6db96e1d6743428d0ae657c8;hp=38fac1f806671db26bf424153eee80112727266e;hb=59eec5f21669e81977b5b1fe9bf717cab49cf7fb;hpb=716cfba952c1dc0d2cf5c968971f3780ba728a89 diff --git a/src/unexnt.c b/src/unexnt.c index 38fac1f..3a6b0b1 100644 --- a/src/unexnt.c +++ b/src/unexnt.c @@ -56,24 +56,26 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * version of my_ebss in lastfile.c and a new firstfile.c file. jhar */ #include -#include /* _fmode */ -#include -#include -#include +#include "lisp.h" + +#include "syswindows.h" + +#include "nt.h" +#include "ntheap.h" /* From IMAGEHLP.H which is not installed by default by MSVC < 5 */ /* The IMAGEHLP.DLL library is not distributed by default with Windows95 */ -PIMAGE_NT_HEADERS -(__stdcall * pfnCheckSumMappedFile) (LPVOID BaseAddress, DWORD FileLength, - LPDWORD HeaderSum, LPDWORD CheckSum); +typedef PIMAGE_NT_HEADERS +(__stdcall * pfnCheckSumMappedFile_t) (LPVOID BaseAddress, DWORD FileLength, + LPDWORD HeaderSum, LPDWORD CheckSum); + #if 0 extern BOOL ctrl_c_handler (unsigned long type); #endif -#include "ntheap.h" - -/* Sync with FSF Emacs 19.34.6 note: struct file_data is now defined in ntheap.h */ +/* Sync with FSF Emacs 19.34.6 + note: struct file_data is now defined in nt.h */ enum { HEAP_UNINITIALIZED = 1, @@ -100,13 +102,6 @@ DWORD data_size = UNINIT_LONG; PUCHAR bss_start = UNINIT_PTR; DWORD bss_size = UNINIT_LONG; -#ifdef HAVE_NTGUI -HINSTANCE hinst = NULL; -HINSTANCE hprevinst = NULL; -LPSTR lpCmdLine = ""; -int nCmdShow = 0; -#endif /* HAVE_NTGUI */ - /* Startup code for running on NT. When we are running as the dumped version, we need to bootstrap our heap and .bss section into our address space before we can actually hand off control to the startup @@ -160,7 +155,7 @@ _start (void) hit and fix all the weirdities this causes us, the better --kkm */ #if 0 /* The default behavior is to treat files as binary and patch up - text files appropriately, in accordance with the MSDOS code. */ + text files appropriately. */ _fmode = O_BINARY; #endif @@ -170,27 +165,19 @@ _start (void) SetConsoleCtrlHandler ((PHANDLER_ROUTINE) ctrl_c_handler, TRUE); #endif - /* Invoke the NT CRT startup routine now that our housecleaning - is finished. */ -#ifdef HAVE_NTGUI - /* determine WinMain args like crt0.c does */ - hinst = GetModuleHandle(NULL); - lpCmdLine = GetCommandLine(); - nCmdShow = SW_SHOWDEFAULT; -#endif mainCRTStartup (); } /* Dump out .data and .bss sections into a new executable. */ -void -unexec (char *new_name, char *old_name, void *start_data, void *start_bss, - void *entry_address) +int +unexec (char *new_name, char *old_name, unsigned int start_data, + unsigned int start_bss, unsigned int entry_address) { file_data in_file, out_file; char out_filename[MAX_PATH], in_filename[MAX_PATH]; unsigned long size; char *ptr; - HANDLE hImagehelp; + HINSTANCE hImagehelp; /* Make sure that the input and output filenames have the ".exe" extension...patch them up if they don't. */ @@ -245,21 +232,29 @@ unexec (char *new_name, char *old_name, void *start_data, void *start_bss, { PIMAGE_DOS_HEADER dos_header; PIMAGE_NT_HEADERS nt_header; + DWORD headersum; DWORD checksum; + pfnCheckSumMappedFile_t pfnCheckSumMappedFile; dos_header = (PIMAGE_DOS_HEADER) out_file.file_base; nt_header = (PIMAGE_NT_HEADERS) ((char *) dos_header + dos_header->e_lfanew); nt_header->OptionalHeader.CheckSum = 0; -// nt_header->FileHeader.TimeDateStamp = time (NULL); -// dos_header->e_cp = size / 512; -// nt_header->OptionalHeader.SizeOfImage = size; +#if 0 + nt_header->FileHeader.TimeDateStamp = time (NULL); + dos_header->e_cp = size / 512; + nt_header->OptionalHeader.SizeOfImage = size; +#endif - pfnCheckSumMappedFile = (void *) GetProcAddress (hImagehelp, "CheckSumMappedFile"); + pfnCheckSumMappedFile = + (pfnCheckSumMappedFile_t) GetProcAddress (hImagehelp, + "CheckSumMappedFile"); if (pfnCheckSumMappedFile) { -// nt_header->FileHeader.TimeDateStamp = time (NULL); +#if 0 + nt_header->FileHeader.TimeDateStamp = time (NULL); +#endif pfnCheckSumMappedFile (out_file.file_base, out_file.size, &headersum, @@ -271,40 +266,8 @@ unexec (char *new_name, char *old_name, void *start_data, void *start_bss, close_file_data (&in_file); close_file_data (&out_file); -} - - -/* File handling. */ - - -int -open_output_file (file_data *p_file, CONST char *filename, unsigned long size) -{ - HANDLE file; - HANDLE file_mapping; - void *file_base; - - file = CreateFile (filename, GENERIC_READ | GENERIC_WRITE, 0, NULL, - CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); - if (file == INVALID_HANDLE_VALUE) - return FALSE; - - file_mapping = CreateFileMapping (file, NULL, PAGE_READWRITE, - 0, size, NULL); - if (!file_mapping) - return FALSE; - - file_base = MapViewOfFile (file_mapping, FILE_MAP_WRITE, 0, 0, size); - if (file_base == 0) - return FALSE; - - p_file->name = filename; - p_file->size = size; - p_file->file = file; - p_file->file_mapping = file_mapping; - p_file->file_base = file_base; - return TRUE; + return 0; } /* Routines to manipulate NT executable file sections. */ @@ -486,7 +449,7 @@ copy_executable_and_dump_data_section (file_data *p_infile, DUMP_MSG (("Dumping data section...\n")); DUMP_MSG (("\t0x%08x Address in process.\n", data_va)); DUMP_MSG (("\t0x%08x Offset in output file.\n", - data_file - p_outfile->file_base)); + (char*)data_file - p_outfile->file_base)); DUMP_MSG (("\t0x%08x Size in bytes.\n", size)); memcpy (data_file, data_va, size);