Mercurial > emacs
diff src/w32heap.c @ 19708:16e69fbdbf0f
(os_subtype): New variable.
(cache_system_info): Set os_subtype.
(recreate_heap): Update system information after loading heap.
Don't use data_seg pragma here.
(_heap_init, _heap_term) [_MSC_VER >= 1000]: New functions that
override CRT routines.
author | Geoff Voelker <voelker@cs.washington.edu> |
---|---|
date | Wed, 03 Sep 1997 00:51:32 +0000 |
parents | bcc706aedcea |
children | 2595beed0362 |
line wrap: on
line diff
--- a/src/w32heap.c Wed Sep 03 00:47:47 1997 +0000 +++ b/src/w32heap.c Wed Sep 03 00:51:32 1997 +0000 @@ -41,6 +41,9 @@ int w32_major_version; int w32_minor_version; +/* Distinguish between Windows NT and Windows 95. */ +int os_subtype; + /* Cache information describing the NT system for later use. */ void cache_system_info (void) @@ -61,6 +64,11 @@ w32_major_version = version.info.major; w32_minor_version = version.info.minor; + if (version.info.platform & 0x8000) + os_subtype = OS_WIN95; + else + os_subtype = OS_NT; + /* Cache page size, allocation unit, processor type, etc. */ GetSystemInfo (&sysinfo_cache); syspage_mask = sysinfo_cache.dwPageSize - 1; @@ -85,10 +93,6 @@ return (unsigned char *) (tmp * align); } -/* Force zero initialized variables to be placed in the .data segment; - MSVC 5.0 otherwise places them in .bss, which breaks the dumping code. */ -#pragma data_seg(".data") - /* Info for keeping track of our heap. */ unsigned char *data_region_base = NULL; unsigned char *data_region_end = NULL; @@ -278,6 +282,9 @@ any funny interactions between file I/O and file mapping. */ read_in_bss (executable_path); map_in_heap (executable_path); + + /* Update system version information to match current system. */ + cache_system_info (); } /* Round the heap up to the given alignment. */ @@ -293,3 +300,26 @@ if (need_to_alloc) sbrk (need_to_alloc); } + +#if (_MSC_VER >= 1000) + +/* MSVC 4.2 invokes these functions from mainCRTStartup to initialize + a heap via HeapCreate. They are normally defined by the runtime, + but we override them here so that the unnecessary HeapCreate call + is not performed. */ + +int __cdecl +_heap_init (void) +{ + /* Stepping through the assembly indicates that mainCRTStartup is + expecting a nonzero success return value. */ + return 1; +} + +void __cdecl +_heap_term (void) +{ + return; +} + +#endif