From a68089e4a4dd41c9b838d82d1d96d971b01398c8 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Wed, 17 Oct 2012 21:02:44 +0200 Subject: [PATCH] Fix warnings when compiling on MS-Windows with -std=gnu99. src/makefile.w32-in ($(BLD)/w32.$(O)): ($(BLD)/vm-limit.$(O)): ($(BLD)/term.$(O)): ($(BLD)/unexw32.$(O)): ($(BLD)/fileio.$(O)): ($(BLD)/dispnew.$(O)): Update dependencies. src/w32term.h (w32_initialize_display_info, initialize_w32_display): Add prototypes. src/w32proc.c: Include ctype.h. src/w32.h (init_environment, check_windows_init_file) (syms_of_ntproc, syms_of_ntterm, dostounix_filename) (unixtodos_filename, init_winsock, srandom, random, sys_pipe) (set_process_dir, sys_spawnve, register_child, sys_sleep, getwd) (sys_link): Add prototypes. src/w32.c: Include w32select.h. (sys_access, e_malloc, sys_select): Add prototypes. (emacs_gnutls_pull): 'timeout' is now EMACS_TIME, not struct timeval. src/vm-limit.c [WINDOWSNT]: Include w32heap.h. src/unexw32.c: Include lisp.h and w32.h. src/term.c [WINDOWSNT]: Include w32term.h. src/process.c [WINDOWSNT]: Add prototype of sys_select. src/fileio.c [WINDOWSNT]: Include w32.h. src/dispnew.c [WINDOWSNT]: Include w32.h. nt/inc/pwd.h (getuid, geteuid): Add prototypes. nt/inc/ms-w32.h (sys_wait, _getpid, gmtgime_r, localtime_r) (signal_handler, sys_signal, sigemptyset, sigfillset, sigprocmask) (pthread_sigmask, sigismember, setpgrp, sigaction, alarm) (sys_kill, getpagesize): Add prototypes for emulated functions. nt/inc/grp.h (getgid, getegid): Add prototypes. nt/gmake.defs (DEBUG_CFLAGS) [NOOPT]: Add -std=gnu99. nt/configure.bat (chkapiN): Avoid compiler warning in junk.c when compiling with -std=gnu99. nt/config.nt (CHECK_LISP_OBJECT_TYPE): Don't undef, so that it could be used via --cflags switch to configure.bat. --- nt/ChangeLog | 19 +++++++++++++++ nt/config.nt | 2 +- nt/configure.bat | 2 +- nt/gmake.defs | 2 +- nt/inc/grp.h | 5 +++- nt/inc/ms-w32.h | 56 +++++++++++++++++++++++++++++++++------------ nt/inc/pwd.h | 7 ++++-- src/ChangeLog | 34 +++++++++++++++++++++++++++ src/dispnew.c | 4 ++++ src/fileio.c | 1 + src/makefile.w32-in | 7 ++++++ src/process.c | 5 ++++ src/term.c | 1 + src/unexw32.c | 2 ++ src/vm-limit.c | 2 ++ src/w32.c | 12 +++++++--- src/w32.h | 22 ++++++++++++++++++ src/w32proc.c | 3 +-- src/w32term.h | 3 +++ 19 files changed, 163 insertions(+), 26 deletions(-) diff --git a/nt/ChangeLog b/nt/ChangeLog index 4b0a65a59d..94d2ce1855 100644 --- a/nt/ChangeLog +++ b/nt/ChangeLog @@ -1,3 +1,22 @@ +2012-10-17 Eli Zaretskii + + * inc/pwd.h (getuid, geteuid): Add prototypes. + + * inc/ms-w32.h (sys_wait, _getpid, gmtgime_r, localtime_r) + (signal_handler, sys_signal, sigemptyset, sigfillset, sigprocmask) + (pthread_sigmask, sigismember, setpgrp, sigaction, alarm) + (sys_kill, getpagesize): Add prototypes for emulated functions. + + * inc/grp.h (getgid, getegid): Add prototypes. + + * gmake.defs (DEBUG_CFLAGS) [NOOPT]: Add -std=gnu99. + + * configure.bat (chkapiN): Avoid compiler warning in junk.c when + compiling with -std=gnu99. + + * config.nt (CHECK_LISP_OBJECT_TYPE): Don't undef, so that it + could be used via --cflags switch to configure.bat. + 2012-10-08 Juanma Barranquero * config.nt: Sync with autogen/config.in. diff --git a/nt/config.nt b/nt/config.nt index cd695bc4e3..4582928cb5 100644 --- a/nt/config.nt +++ b/nt/config.nt @@ -76,7 +76,7 @@ along with GNU Emacs. If not, see . */ #undef CANNOT_DUMP /* Define this to enable compile time checks for the Lisp_Object data type. */ -#undef CHECK_LISP_OBJECT_TYPE +/* #undef CHECK_LISP_OBJECT_TYPE */ /* Define if you want lock files to be written, so that Emacs can tell instantly when you try to modify a file that someone else has modified in diff --git a/nt/configure.bat b/nt/configure.bat index 7fedff411b..3118bb11e5 100755 --- a/nt/configure.bat +++ b/nt/configure.bat @@ -429,7 +429,7 @@ rem echo Checking whether Windows API headers are too old... echo #include "windows.h" >junk.c echo #include "usp10.h" >>junk.c -echo test(PIMAGE_NT_HEADERS pHeader) >>junk.c +echo void test(PIMAGE_NT_HEADERS pHeader) >>junk.c echo {PIMAGE_SECTION_HEADER pSection = IMAGE_FIRST_SECTION(pHeader);} >>junk.c if (%nocygwin%) == (Y) goto chkapi1 set cf=%usercflags% diff --git a/nt/gmake.defs b/nt/gmake.defs index 7206237c47..358c262db2 100644 --- a/nt/gmake.defs +++ b/nt/gmake.defs @@ -211,7 +211,7 @@ OBJ1_c = $(patsubst $(BLD)%.$(O),$(CURDIR)%.c,$(OBJ1)) OBJ2_c = $(patsubst $(BLD)%.$(O),$(CURDIR)%.c,$(OBJ2)) ifdef NOOPT -DEBUG_CFLAGS = -DEMACSDEBUG -fno-crossjumping +DEBUG_CFLAGS = -DEMACSDEBUG -fno-crossjumping -std=gnu99 else DEBUG_CFLAGS = endif diff --git a/nt/inc/grp.h b/nt/inc/grp.h index 8c3131ac89..3d36904497 100644 --- a/nt/inc/grp.h +++ b/nt/inc/grp.h @@ -28,7 +28,10 @@ struct group { gid_t gr_gid; /* group numerical ID */ }; -struct group *getgrgid(gid_t); +extern unsigned getgid (void); +extern unsigned getegid (void); + +extern struct group *getgrgid(gid_t); #endif /* _GRP_H */ diff --git a/nt/inc/ms-w32.h b/nt/inc/ms-w32.h index 06a3af937d..dd2ae781cb 100644 --- a/nt/inc/ms-w32.h +++ b/nt/inc/ms-w32.h @@ -120,21 +120,6 @@ extern char *getenv (); #endif #include -#ifdef _MSC_VER -typedef int sigset_t; -typedef int ssize_t; -#endif - -struct sigaction { - int sa_flags; - void (_CALLBACK_ *sa_handler)(int); - sigset_t sa_mask; -}; -#define SA_RESTART 0 -#define SIG_BLOCK 1 -#define SIG_SETMASK 2 -#define SIG_UNBLOCK 3 - #ifndef MAXPATHLEN #define MAXPATHLEN _MAX_PATH #endif @@ -207,6 +192,8 @@ struct sigaction { /* Internal signals. */ #define emacs_raise(sig) emacs_abort() +extern int sys_wait (int *); + /* termcap.c calls that are emulated. */ #define tputs sys_tputs #define tgetstr sys_tgetstr @@ -251,6 +238,9 @@ typedef int pid_t; #define stricmp _stricmp #define tzset _tzset +/* We cannot include system header process.h, since there's src/process.h. */ +int _getpid (void); + /* Include time.h before redirecting tzname, since MSVC's time.h defines _tzname to call a function, but also declares tzname a 2-element array. Having the redirection before including the @@ -272,6 +262,10 @@ struct timespec long int tv_nsec; /* nanoseconds */ }; +/* Required for functions in lib/time_r.c, since we don't use lib/time.h. */ +extern struct tm *gmtime_r (time_t const * restrict, struct tm * restrict); +extern struct tm *localtime_r (time_t const * restrict, struct tm * restrict); + /* This is hacky, but is necessary to avoid warnings about macro redefinitions using the SDK compilers. */ #ifndef __STDC__ @@ -300,6 +294,37 @@ struct timespec #define NSIG 23 #endif +#ifdef _MSC_VER +typedef int sigset_t; +typedef int ssize_t; +#endif + +typedef void (_CALLBACK_ *signal_handler) (int); +extern signal_handler sys_signal (int, signal_handler); + +struct sigaction { + int sa_flags; + void (_CALLBACK_ *sa_handler)(int); + sigset_t sa_mask; +}; +#define SA_RESTART 0 +#define SIG_BLOCK 1 +#define SIG_SETMASK 2 +#define SIG_UNBLOCK 3 + +extern int sigemptyset (sigset_t *); +extern int sigaddset (sigset_t *, int); +extern int sigfillset (sigset_t *); +extern int sigprocmask (int, const sigset_t *, sigset_t *); +extern int pthread_sigmask (int, const sigset_t *, sigset_t *); +extern int sigismember (const sigset_t *, int); +extern int setpgrp (int, int); +extern int sigaction (int, const struct sigaction *, struct sigaction *); +extern int alarm (int); + +extern int sys_kill (int, int); + + /* For integration with MSDOS support. */ #define getdisk() (_getdrive () - 1) #ifdef emacs @@ -357,6 +382,7 @@ extern char *get_emacs_configuration_options (void); #endif extern int getloadavg (double *, int); +extern int getpagesize (void); #if defined (__MINGW32__) diff --git a/nt/inc/pwd.h b/nt/inc/pwd.h index b39309d08f..54e477e966 100644 --- a/nt/inc/pwd.h +++ b/nt/inc/pwd.h @@ -18,8 +18,11 @@ struct passwd { typedef unsigned uid_t; typedef uid_t gid_t; -struct passwd * getpwnam (char *); -struct passwd * getpwuid (unsigned); +extern unsigned getuid (void); +extern unsigned geteuid (void); + +extern struct passwd * getpwnam (char *); +extern struct passwd * getpwuid (unsigned); #endif /* _PWD_H_ */ diff --git a/src/ChangeLog b/src/ChangeLog index 3a6fb718e4..827850e332 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,39 @@ 2012-10-17 Eli Zaretskii + * makefile.w32-in ($(BLD)/w32.$(O)): + ($(BLD)/vm-limit.$(O)): + ($(BLD)/term.$(O)): + ($(BLD)/unexw32.$(O)): + ($(BLD)/fileio.$(O)): + ($(BLD)/dispnew.$(O)): Update dependencies. + + * w32term.h (w32_initialize_display_info, initialize_w32_display): + Add prototypes. + + * w32proc.c: Include ctype.h. + + * w32.h (init_environment, check_windows_init_file) + (syms_of_ntproc, syms_of_ntterm, dostounix_filename) + (unixtodos_filename, init_winsock, srandom, random, sys_pipe) + (set_process_dir, sys_spawnve, register_child, sys_sleep, getwd) + (sys_link): Add prototypes. + + * w32.c: Include w32select.h. + (sys_access, e_malloc, sys_select): Add prototypes. + (emacs_gnutls_pull): 'timeout' is now EMACS_TIME, not struct timeval. + + * vm-limit.c [WINDOWSNT]: Include w32heap.h. + + * unexw32.c: Include lisp.h and w32.h. + + * term.c [WINDOWSNT]: Include w32term.h. + + * process.c [WINDOWSNT]: Add prototype of sys_select. + + * fileio.c [WINDOWSNT]: Include w32.h. + + * dispnew.c [WINDOWSNT]: Include w32.h. + * cygw32.c (Fcygwin_convert_path_to_windows) (Fcygwin_convert_path_from_windows): Use EQ to compare 2 Lisp_Object values. (Bug#12661) diff --git a/src/dispnew.c b/src/dispnew.c index 0956e3f290..fa24408aa4 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -60,6 +60,10 @@ along with GNU Emacs. If not, see . */ #if defined (HAVE_TERM_H) && defined (GNU_LINUX) #include /* for tgetent */ #endif + +#ifdef WINDOWSNT +#include "w32.h" +#endif /* Structure to pass dimensions around. Used for character bounding boxes, glyph matrix dimensions and alike. */ diff --git a/src/fileio.c b/src/fileio.c index e3a91c2c9d..d47d7dd9e0 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -53,6 +53,7 @@ along with GNU Emacs. If not, see . */ #include #include #include +#include "w32.h" #endif /* not WINDOWSNT */ #ifdef MSDOS diff --git a/src/makefile.w32-in b/src/makefile.w32-in index 2acce9c123..5be1ccb70d 100644 --- a/src/makefile.w32-in +++ b/src/makefile.w32-in @@ -735,6 +735,7 @@ $(BLD)/dispnew.$(O) : \ $(SRC)/disptab.h \ $(SRC)/indent.h \ $(SRC)/termchar.h \ + $(SRC)/w32.h \ $(NT_INC)/unistd.h \ $(BUFFER_H) \ $(CHARACTER_H) \ @@ -832,6 +833,7 @@ $(BLD)/fileio.$(O) : \ $(SRC)/fileio.c \ $(SRC)/blockinput.h \ $(SRC)/commands.h \ + $(SRC)/w32.h \ $(NT_INC)/pwd.h \ $(NT_INC)/sys/file.h \ $(NT_INC)/sys/stat.h \ @@ -1173,6 +1175,7 @@ $(BLD)/w32.$(O) : \ $(SRC)/w32.h \ $(SRC)/w32common.h \ $(SRC)/w32heap.h \ + $(SRC)/w32select.h \ $(NT_INC)/pwd.h \ $(NT_INC)/sys/file.h \ $(NT_INC)/sys/time.h \ @@ -1428,6 +1431,7 @@ $(BLD)/term.$(O) : \ $(SYSSIGNAL_H) \ $(SYSTTY_H) \ $(TERMHOOKS_H) \ + $(W32TERM_H) \ $(WINDOW_H) $(BLD)/terminal.$(O) : \ @@ -1468,13 +1472,16 @@ $(BLD)/undo.$(O) : \ $(BLD)/unexw32.$(O) : \ $(SRC)/unexw32.c \ $(SRC)/unexec.h \ + $(SRC)/w32.h \ $(SRC)/w32common.h \ $(SRC)/w32heap.h \ + $(LISP_H) \ $(CONFIG_H) $(BLD)/vm-limit.$(O) : \ $(SRC)/vm-limit.c \ $(SRC)/mem-limits.h \ + $(SRC)/w32heap.h \ $(NT_INC)/unistd.h \ $(CONFIG_H) \ $(LISP_H) diff --git a/src/process.c b/src/process.c index d45a2c6e8e..307e82819d 100644 --- a/src/process.c +++ b/src/process.c @@ -125,6 +125,11 @@ along with GNU Emacs. If not, see . */ #include "xgselect.h" #endif +#ifdef WINDOWSNT +extern int sys_select (int, SELECT_TYPE *, SELECT_TYPE *, SELECT_TYPE *, + EMACS_TIME *, void *); +#endif + #ifndef WNOHANG # undef waitpid # define waitpid(pid, status, options) wait (status) diff --git a/src/term.c b/src/term.c index acce9c0548..f7c87b7608 100644 --- a/src/term.c +++ b/src/term.c @@ -66,6 +66,7 @@ static int been_here = -1; /* The name of the default console device. */ #ifdef WINDOWSNT #define DEV_TTY "CONOUT$" +#include "w32term.h" #else #define DEV_TTY "/dev/tty" #endif diff --git a/src/unexw32.c b/src/unexw32.c index 82671d0f12..1e591a78b7 100644 --- a/src/unexw32.c +++ b/src/unexw32.c @@ -22,7 +22,9 @@ along with GNU Emacs. If not, see . */ #include #include "unexec.h" +#include "lisp.h" #include "w32common.h" +#include "w32.h" #include #include diff --git a/src/vm-limit.c b/src/vm-limit.c index 3020b84858..2a71e88695 100644 --- a/src/vm-limit.c +++ b/src/vm-limit.c @@ -85,6 +85,8 @@ get_lim_data (void) #else /* not USG */ #ifdef WINDOWSNT +#include "w32heap.h" + static void get_lim_data (void) { diff --git a/src/w32.c b/src/w32.c index babbcc6df9..5ac1bc3eb7 100644 --- a/src/w32.c +++ b/src/w32.c @@ -175,6 +175,7 @@ typedef struct _REPARSE_DATA_BUFFER { #include "ndir.h" #include "w32common.h" #include "w32heap.h" +#include "w32select.h" #include "systime.h" #include "dispextern.h" /* for xstrcasecmp */ #include "coding.h" /* for Vlocale_coding_system */ @@ -198,6 +199,12 @@ static int enable_privilege (LPCTSTR, BOOL, TOKEN_PRIVILEGES *); static int restore_privilege (TOKEN_PRIVILEGES *); static BOOL WINAPI revert_to_self (void); +extern int sys_access (const char *, int); +extern void *e_malloc (size_t); +extern int sys_select (int, SELECT_TYPE *, SELECT_TYPE *, SELECT_TYPE *, + EMACS_TIME *, void *); + + /* Initialization states. @@ -6961,7 +6968,7 @@ emacs_gnutls_pull (gnutls_transport_ptr_t p, void* buf, size_t sz) { int n, sc, err; SELECT_TYPE fdset; - struct timeval timeout; + EMACS_TIME timeout; struct Lisp_Process *process = (struct Lisp_Process *)p; int fd = process->infd; @@ -6977,8 +6984,7 @@ emacs_gnutls_pull (gnutls_transport_ptr_t p, void* buf, size_t sz) if (err == EWOULDBLOCK) { /* Set a small timeout. */ - timeout.tv_sec = 1; - timeout.tv_usec = 0; + timeout = make_emacs_time (1, 0); FD_ZERO (&fdset); FD_SET ((int)fd, &fdset); diff --git a/src/w32.h b/src/w32.h index c4cfdf5fed..8309a3cc23 100644 --- a/src/w32.h +++ b/src/w32.h @@ -146,6 +146,28 @@ extern int _sys_wait_accept (int fd); extern Lisp_Object QCloaded_from; extern HMODULE w32_delayed_load (Lisp_Object); +extern void init_environment (char **); +extern void check_windows_init_file (void); +extern void syms_of_ntproc (void); +extern void syms_of_ntterm (void); +extern void dostounix_filename (register char *); +extern void unixtodos_filename (register char *); +extern BOOL init_winsock (int load_now); +extern void srandom (int); +extern int random (void); + +extern int sys_pipe (int *); + +extern void set_process_dir (char *); +extern int sys_spawnve (int, char *, char **, char **); +extern void register_child (int, int); + +extern void sys_sleep (int); +extern char *getwd (char *); +extern int sys_link (const char *, const char *); + + + #ifdef HAVE_GNUTLS #include diff --git a/src/w32proc.c b/src/w32proc.c index 7e8183b0e8..57b3860cb7 100644 --- a/src/w32proc.c +++ b/src/w32proc.c @@ -24,6 +24,7 @@ along with GNU Emacs. If not, see . */ #include #include #include +#include #include #include #include @@ -68,8 +69,6 @@ extern BOOL WINAPI IsValidLocale (LCID, DWORD); Lisp_Object Qhigh, Qlow; -typedef void (_CALLBACK_ *signal_handler) (int); - /* Signal handlers...SIG_DFL == 0 so this is initialized correctly. */ static signal_handler sig_handlers[NSIG]; diff --git a/src/w32term.h b/src/w32term.h index 83f9e7b98d..af5b37a117 100644 --- a/src/w32term.h +++ b/src/w32term.h @@ -681,6 +681,9 @@ extern BOOL parse_button (int, int, int *, int *); extern void w32_sys_ring_bell (struct frame *f); extern void x_delete_display (struct w32_display_info *dpyinfo); +extern void w32_initialize_display_info (Lisp_Object); +extern void initialize_w32_display (struct terminal *); + /* Keypad command key support. W32 doesn't have virtual keys defined for the function keys on the keypad (they are mapped to the standard -- 2.20.1