1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-05 22:20:24 -08:00

Remove all traces of MSVC support from MS-Windows code

We dropped support for MSVC long ago, and nowadays only support
MinGW for the MS-Windows builds of Emacs.
* src/w32term.h:
* src/w32fns.c:
* src/w32.c:
* nt/inc/sys/socket.h:
* nt/inc/stdalign.h:
* nt/inc/ms-w32.h: Remove MSVC-specific code and preprocessor
conditions.
* nt/inc/ms-w32.h: Don't redirect Posix functions to MS _FOO
equivalents, as MinGW headers do that nowadays better, not
necessarily via functions, and do not disable that when __STDC__
is defined.
This commit is contained in:
Eli Zaretskii 2025-11-27 09:07:04 +02:00
parent d74bcd7b2c
commit 5822759d47
6 changed files with 11 additions and 207 deletions

View file

@ -122,37 +122,13 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
#ifdef __GNUC__ #ifdef __GNUC__
# ifndef __cplusplus # ifndef __cplusplus
# undef inline # undef inline
#endif
#else /* MSVC */
#define inline __inline
#endif
#ifdef __GNUC__
/* config.h may have defined already. */ /* config.h may have defined already. */
# ifndef restrict # ifndef restrict
# define restrict __restrict__ # define restrict __restrict__
# endif # endif
#else
/* FIXME: should we define to __restrict, which MSVC supports? */
# define restrict
# endif # endif
/* `mode_t' is not defined for MSVC. Define. */
#ifdef _MSC_VER
typedef unsigned short mode_t;
#endif #endif
/* A va_copy replacement for MSVC. */
#ifdef _MSC_VER
# ifdef _WIN64
# ifndef va_copy /* Need to be checked (?) */
# define va_copy(d,s) ((d) = (s))
# endif
# else /* not _WIN64 */
# define va_copy(d,s) ((d) = (s))
# endif /* not _WIN64 */
#endif /* _MSC_VER */
#ifndef WINDOWSNT #ifndef WINDOWSNT
/* Some of the files of Emacs which are intended for use with other /* Some of the files of Emacs which are intended for use with other
programs assume that if you have a config.h file, you must declare programs assume that if you have a config.h file, you must declare
@ -228,17 +204,6 @@ typedef jmp_buf sigjmp_buf;
#endif #endif
extern void w32_reset_stack_overflow_guard (void); extern void w32_reset_stack_overflow_guard (void);
#ifdef _MSC_VER
#include <sys/timeb.h>
#include <sys/stat.h>
#include <signal.h>
/* MSVC gets link-time errors without these redirections. */
#define fstat(a, b) sys_fstat(a, b)
#define stat(a, b) sys_stat(a, b)
#define utime sys_utime
#endif
/* Calls that are emulated or shadowed. */ /* Calls that are emulated or shadowed. */
#undef chdir #undef chdir
#define chdir sys_chdir #define chdir sys_chdir
@ -310,34 +275,16 @@ extern int sys_umask (int);
#define open sys_open #define open sys_open
/* Map to MSVC names. */ /* Map to MSVC names. */
#define execlp _execlp
#define execvp _execvp
#include <stdint.h> /* for intptr_t */
extern intptr_t _execvp (const char *, char **);
#define tcdrain _commit #define tcdrain _commit
#define fdopen _fdopen #define fdopen _fdopen
#define fsync _commit #define fsync _commit
#define ftruncate _chsize #define ftruncate _chsize
#define getpid _getpid #define getpid _getpid
#ifdef _MSC_VER
typedef int pid_t;
#define snprintf _snprintf
#define strtoll _strtoi64
#define copysign _copysign
#endif
#define isatty _isatty #define isatty _isatty
#define _longjmp longjmp #define _longjmp longjmp
/* MinGW64 defines lseek to invoke lseek64. */ #define execvp _execvp
#ifndef lseek #include <stdint.h> /* for intptr_t */
#define lseek _lseek extern intptr_t _execvp (const char *, char **);
#endif
#define popen _popen
#define pclose _pclose
#define strdup _strdup
#define strupr _strupr
#define strnicmp _strnicmp
#define stricmp _stricmp
#define tzset _tzset
/* We cannot include system header process.h, since there's src/process.h. */ /* We cannot include system header process.h, since there's src/process.h. */
int _getpid (void); int _getpid (void);
@ -354,27 +301,9 @@ int _getpid (void);
extern struct tm *gmtime_r (time_t const * restrict, struct tm * restrict); extern struct tm *gmtime_r (time_t const * restrict, struct tm * restrict);
extern struct tm *localtime_r (time_t const * restrict, struct tm * restrict); extern struct tm *localtime_r (time_t const * restrict, struct tm * restrict);
#ifdef _MSC_VER
/* This is hacky, but is necessary to avoid warnings about macro
redefinitions using the MSVC compilers, since, when __STDC__ is
undefined or zero, those compilers declare functions like fileno,
lseek, and chdir, for which we defined macros above. */
#ifndef __STDC__
#define __STDC__ 1
#define MUST_UNDEF__STDC__
#endif
#include <direct.h> #include <direct.h>
#include <io.h> #include <io.h>
#include <stdio.h> #include <stdio.h>
#ifdef MUST_UNDEF__STDC__
#undef __STDC__
#undef MUST_UNDEF__STDC__
#endif
#else /* !_MSC_VER */
#include <direct.h>
#include <io.h>
#include <stdio.h>
#endif /* !_MSC_VER */
#ifndef fileno #ifndef fileno
#define fileno _fileno #define fileno _fileno
#endif #endif
@ -407,11 +336,6 @@ int sys_read (int, char *, unsigned int);
#define EOPNOTSUPP 130 #define EOPNOTSUPP 130
#endif #endif
#ifdef _MSC_VER
typedef int sigset_t;
typedef int ssize_t;
#endif
#ifdef MINGW_W64 #ifdef MINGW_W64
#ifndef _POSIX #ifndef _POSIX
typedef _sigset_t sigset_t; typedef _sigset_t sigset_t;
@ -479,11 +403,7 @@ extern char *get_emacs_configuration_options (void);
/* Defines size_t and alloca (). */ /* Defines size_t and alloca (). */
#include <stdlib.h> #include <stdlib.h>
#include <sys/stat.h> #include <sys/stat.h>
#ifdef _MSC_VER
#define alloca _alloca
#else
#include <malloc.h> #include <malloc.h>
#endif
/* Needed in Emacs and in Gnulib. */ /* Needed in Emacs and in Gnulib. */
/* This must be after including sys/stat.h, because we need mode_t. */ /* This must be after including sys/stat.h, because we need mode_t. */
@ -564,81 +484,11 @@ extern int mkostemp (char *, int);
#endif #endif
#ifdef _MSC_VER
# if defined(_WIN64)
typedef __int64 EMACS_INT;
typedef unsigned __int64 EMACS_UINT;
# define EMACS_INT_MAX LLONG_MAX
# define PRIuMAX "llu"
# define pI "ll"
/* Fix a bug in MSVC headers : stdint.h */
# define _INTPTR 2
# elif defined(_WIN32)
/* Temporarily disable wider-than-pointer integers until they're tested more.
Build with CFLAGS='-DWIDE_EMACS_INT' to try them out. */
# ifdef WIDE_EMACS_INT
/* Use pre-C99-style 64-bit integers. */
typedef __int64 EMACS_INT;
typedef unsigned __int64 EMACS_UINT;
# define EMACS_INT_MAX LLONG_MAX
# define PRIuMAX "llu"
# define pI "I64"
# else
typedef int EMACS_INT;
typedef unsigned int EMACS_UINT;
# define EMACS_INT_MAX LONG_MAX
# define PRIuMAX "lu"
# define pI "l"
# endif
# endif
#endif
#define DATA_START get_data_start () #define DATA_START get_data_start ()
/* For unexec to work on Alpha systems, we need to put Emacs'
initialized data into a separate section from the CRT initialized
data (because the Alpha linker freely reorders data variables, even
across libraries, so our data and the CRT data get intermingled).
Starting with MSVC 5.0, we must also place the uninitialized data
into its own section. VC5 intermingles uninitialized data from the CRT
between Emacs's static uninitialized data and its public uninitialized
data. A separate .bss section for Emacs groups both static and
public uninitialized together.
Note that unexw32.c relies on this fact, and must be modified
accordingly if this section name is changed, or if this pragma is
removed. Also, obviously, all files that define initialized data
must include config.h to pick up this pragma. */
/* Names must be < 8 bytes. */
#ifdef _MSC_VER
#pragma data_seg("EMDATA")
#pragma bss_seg("EMBSS")
#endif
/* #define FULL_DEBUG */ /* #define FULL_DEBUG */
/* #define EMACSDEBUG */ /* #define EMACSDEBUG */
#ifdef _MSC_VER
#if _MSC_VER >= 800 && !defined(__cplusplus)
/* Unnamed type definition in parentheses.
A structure, union, or enumerated type with no name is defined in a
parenthetical expression. The type definition is meaningless. */
#pragma warning(disable:4116)
/* 'argument' : conversion from 'type1' to 'type2', possible loss of
data A floating point type was converted to an integer type. A
possible loss of data may have occurred. */
#pragma warning(disable:4244)
/* Negative integral constant converted to unsigned type.
An expression converts a negative integer constant to an unsigned type.
The result of the expression is probably meaningless. */
#pragma warning(disable:4308)
#endif
#endif
/* Event name for when emacsclient starts the Emacs daemon on Windows. */ /* Event name for when emacsclient starts the Emacs daemon on Windows. */
#define W32_DAEMON_EVENT "EmacsServerEvent" #define W32_DAEMON_EVENT "EmacsServerEvent"

View file

@ -12,8 +12,6 @@
#if __GNUC__ #if __GNUC__
# define _Alignas(a) __attribute__ ((__aligned__ (a))) # define _Alignas(a) __attribute__ ((__aligned__ (a)))
#elif 1300 <= _MSC_VER
# define _Alignas(a) __declspec (align (a))
#endif #endif
#ifdef _Alignas #ifdef _Alignas
# define alignas _Alignas # define alignas _Alignas

View file

@ -43,12 +43,6 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
#undef FD_ZERO #undef FD_ZERO
#endif #endif
/* Avoid duplicate definition of timeval. MinGW uses _TIMEVAL_DEFINED
in sys/time.h to avoid that. */
#if defined (HAVE_TIMEVAL) && defined (_MSC_VER)
#define timeval ws_timeval
#endif
#if defined __MINGW32_VERSION && __MINGW32_VERSION >= 5000002L #if defined __MINGW32_VERSION && __MINGW32_VERSION >= 5000002L
/* Need winerror.h before winsock2.h with mingw.org's MinGW 5.x, /* Need winerror.h before winsock2.h with mingw.org's MinGW 5.x,
otherwise some error codes are not defined. */ otherwise some error codes are not defined. */
@ -82,10 +76,6 @@ typedef unsigned short uint16_t;
#include "w32.h" #include "w32.h"
#endif /* EMACS_CONFIG_H */ #endif /* EMACS_CONFIG_H */
#if defined (HAVE_TIMEVAL) && defined (_MSC_VER)
#undef timeval
#endif
/* shadow functions where we provide our own wrapper */ /* shadow functions where we provide our own wrapper */
#define socket sys_socket #define socket sys_socket
#define bind sys_bind #define bind sys_bind

View file

@ -138,9 +138,7 @@ PCONTEXT ctxrec;
#include <tlhelp32.h> #include <tlhelp32.h>
#include <psapi.h> #include <psapi.h>
#ifndef _MSC_VER
#include <w32api.h> #include <w32api.h>
#endif
#if _WIN32_WINNT < 0x0500 #if _WIN32_WINNT < 0x0500
#if !defined (__MINGW32__) || __W32API_MAJOR_VERSION < 3 || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION < 15) #if !defined (__MINGW32__) || __W32API_MAJOR_VERSION < 3 || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION < 15)
/* This either is not in psapi.h or guarded by higher value of /* This either is not in psapi.h or guarded by higher value of
@ -175,8 +173,8 @@ typedef struct _PROCESS_MEMORY_COUNTERS_EX {
#define SDDL_REVISION_1 1 #define SDDL_REVISION_1 1
#endif /* SDDL_REVISION_1 */ #endif /* SDDL_REVISION_1 */
#if defined(_MSC_VER) || defined(MINGW_W64) #if defined(MINGW_W64)
/* MSVC and MinGW64 don't provide the definition of /* MinGW64 donesn't provide the definition of
REPARSE_DATA_BUFFER and the associated macros, except on ntifs.h, REPARSE_DATA_BUFFER and the associated macros, except on ntifs.h,
which cannot be included because it triggers conflicts with other which cannot be included because it triggers conflicts with other
Windows API headers. So we define it here by hand. */ Windows API headers. So we define it here by hand. */
@ -7653,19 +7651,7 @@ system_process_attributes (Lisp_Object pid)
memstex.dwLength = sizeof (memstex); memstex.dwLength = sizeof (memstex);
if (global_memory_status_ex (&memstex)) if (global_memory_status_ex (&memstex))
#if __GNUC__ || (defined (_MSC_VER) && _MSC_VER >= 1300)
totphys = memstex.ullTotalPhys / 1024.0; totphys = memstex.ullTotalPhys / 1024.0;
#else
/* Visual Studio 6 cannot convert an unsigned __int64 type to
double, so we need to do this for it... */
{
DWORD tot_hi = memstex.ullTotalPhys >> 32;
DWORD tot_md = (memstex.ullTotalPhys & 0x00000000ffffffff) >> 10;
DWORD tot_lo = memstex.ullTotalPhys % 1024;
totphys = tot_hi * 4194304.0 + tot_md + tot_lo / 1024.0;
}
#endif /* __GNUC__ || _MSC_VER >= 1300 */
else if (global_memory_status (&memst)) else if (global_memory_status (&memst))
totphys = memst.dwTotalPhys / 1024.0; totphys = memst.dwTotalPhys / 1024.0;

View file

@ -180,11 +180,6 @@ struct MONITOR_INFO_EX
char szDevice[CCHDEVICENAME]; char szDevice[CCHDEVICENAME];
}; };
/* Reportedly, MSVC does not have this in its headers. */
#if defined (_MSC_VER) && _WIN32_WINNT < 0x0500
DECLARE_HANDLE(HMONITOR);
#endif
typedef BOOL (WINAPI * TrackMouseEvent_Proc) typedef BOOL (WINAPI * TrackMouseEvent_Proc)
(IN OUT LPTRACKMOUSEEVENT lpEventTrack); (IN OUT LPTRACKMOUSEEVENT lpEventTrack);
typedef LONG (WINAPI * ImmGetCompositionString_Proc) typedef LONG (WINAPI * ImmGetCompositionString_Proc)

View file

@ -881,21 +881,6 @@ extern int w32_system_caret_mode_height;
extern Window tip_window; extern Window tip_window;
#ifdef _MSC_VER
#ifndef EnumSystemLocales
/* MSVC headers define these only for _WIN32_WINNT >= 0x0500. */
typedef BOOL (CALLBACK *LOCALE_ENUMPROCA)(LPSTR);
typedef BOOL (CALLBACK *LOCALE_ENUMPROCW)(LPWSTR);
BOOL WINAPI EnumSystemLocalesA(LOCALE_ENUMPROCA,DWORD);
BOOL WINAPI EnumSystemLocalesW(LOCALE_ENUMPROCW,DWORD);
#ifdef UNICODE
#define EnumSystemLocales EnumSystemLocalesW
#else
#define EnumSystemLocales EnumSystemLocalesA
#endif
#endif
#endif
#if EMACSDEBUG #if EMACSDEBUG
extern const char* extern const char*
w32_name_of_message (UINT msg); w32_name_of_message (UINT msg);