1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-23 10:34:07 +00:00
Commit Graph

82 Commits

Author SHA1 Message Date
Paul Eggert
ab422c4d68 Update copyright notices for 2013. 2013-01-01 09:11:05 +00:00
Paul Eggert
d454751173 Revert recent change for Bug#8855.
As reported by Harald Hanche-Olsen in
<http://lists.gnu.org/archive/html/emacs-devel/2012-11/msg00445.html>
the change introduces a further bug, of creating lots of zombie
processes in some cases.  Further work is needed to come up with a
better fix for Bug#8855.
2012-11-24 00:24:11 -08:00
Paul Eggert
6d4e8f62e9 Fix a race condition with glib (Bug#8855).
This is a backport from the trunk, consisting of:

2012-11-17  Eli Zaretskii  <eliz@gnu.org>

* nt/inc/sys/wait.h: New file, with prototype of waitpid and
definitions of macros it needs.
* nt/inc/ms-w32.h (wait): Don't define, 'wait' is not used anymore.
(sys_wait): Remove prototype.
* nt/config.nt (HAVE_SYS_WAIT_H): Define to 1.
* src/w32proc.c (create_child): Don't clip the PID of the child
process to fit into an Emacs integer, as this is no longer a
restriction.
(waitpid): Rename from sys_wait.  Emulate a Posix 'waitpid' by
reaping only the process specified by PID argument, if that is
positive.  Use PID instead of dead_child to know which process to
reap.  Wait for the child to die only if WNOHANG is not in
OPTIONS.
(sys_select): Don't set dead_child.
* src/sysdep.c (wait_for_termination_1): Remove the WINDOWSNT portion,
as it is no longer needed.
* src/process.c (waitpid, WUNTRACED) [!WNOHANG]: Remove definitions,
no longer needed.
(record_child_status_change): Remove the setting of
record_at_most_one_child for the !WNOHANG case.

2012-11-03  Paul Eggert  <eggert@cs.ucla.edu>

Fix a race condition that causes Emacs to mess up glib (Bug#8855).
This is a backport from the trunk.
The symptom is a diagnostic "GLib-WARNING **: In call to
g_spawn_sync(), exit status of a child process was requested but
SIGCHLD action was set to SIG_IGN and ECHILD was received by
waitpid(), so exit status can't be returned."  The diagnostic
is partly wrong, as the SIGCHLD action is not set to SIG_IGN.
The real bug is a race condition between Emacs and glib: Emacs
does a waitpid (-1, ...) and reaps glib's subprocess by mistake,
so that glib can't find it.  Work around the bug by invoking
waitpid only on subprocesses that Emacs itself creates.
* src/process.c (create_process, record_child_status_change):
Don't use special value -1 in pid field, as the caller now must
know the pid rather than having the callee infer it.  The
inference was sometimes incorrect anyway, due to another race.
(create_process): Set new 'alive' member if child is created.
(process_status_retrieved): New function.
(record_child_status_change): Use it.
Accept negative 1st argument, which means to wait for the
processes that Emacs already knows about.  Move special-case code
for DOS_NT (which lacks WNOHANG) here, from caller.  Keep track of
processes that have already been waited for, by testing and
clearing new 'alive' member.
(CAN_HANDLE_MULTIPLE_CHILDREN): Remove, as record_child_status_change
now does this internally.
(handle_child_signal): Let record_child_status_change do all
the work, since we do not want to reap all exited child processes,
only the child processes that Emacs itself created.
* src/process.h (Lisp_Process): New boolean member 'alive'.
2012-11-23 14:20:31 -08:00
Eli Zaretskii
3b0108c5ba Yet more fixes for bug #12878 with MSVC build.
nt/inc/stdint.h (INTPTR_MIN): Define for MSVC.
2012-11-20 19:07:55 +02:00
Eli Zaretskii
88c4a13c3b More fixes for bug #12878 with MS-Windows MSVC build.
src/xdisp.c (start_hourglass) [HAVE_NTGUI]: Don't mix declaration of
 w32_note_current_window with code.  (Backport from trunk.)
 src/w32.c (FILE_DEVICE_FILE_SYSTEM, METHOD_BUFFERED)
 (FILE_ANY_ACCESS, CTL_CODE, FSCTL_GET_REPARSE_POINT) [_MSC_VER]:
 Define for the MSVC compiler.
 src/w32term.h (EnumSystemLocalesW) [_MSC_VER]: Add a missing
 semi-colon.

 nt/inc/stdint.h (PTRDIFF_MIN) [!__GNUC__]: Define for MSVC.
2012-11-19 19:34:21 +02:00
Eli Zaretskii
7e8b50d9e5 Fix MS-Windows build broken by fixing bug #12776 on Posix platforms.
src/w32proc.c (getpgrp, setpgid): New functions.

 nt/inc/unistd.h (setpgid, getpgrp): Provide prototypes.
 nt/config.nt (GETPGRP_VOID): Define to 1.
2012-11-01 16:21:45 +02:00
Eli Zaretskii
a68089e4a4 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.
2012-10-17 21:02:44 +02:00
Fabrice Popineau
62aba0d497 Support x64 build on MS-Windows with MSVC.
src/w32term.h (SCROLL_BAR_PACK, SCROLL_BAR_UNPACK): Define for x64.
 (SET_SCROLL_BAR_W32_WINDOW): Cast ID to intptr_t, for
 compatibility with x64.
 src/w32term.c (w32_draw_underwave): Don't use GCC extensions for
 defining an XRectangle structure.
 src/w32proc.c (RVA_TO_PTR, w32_executable_type): Fix pointer
 arithmetics for compatibility with x64.
 src/w32menu.c (add_menu_item): Use UINT_PTR instead of UINT, for
 compatibility with x64.
 src/w32heap.h: Adjust prototypes and declarations.
 src/w32heap.c (RVA_TO_PTR, allocate_heap, sbrk, init_heap)
 (round_heap): Use DWORD_PTR, ptrdiff_t and size_t instead of
 DWORD, long, and unsigned long, for compatibility with x64.
 (allocate_heap) [_WIN64]: Reserve 32GB of memory.
 (sbrk): Argument is now of type ptrdiff_t.
 src/w32fns.c (HMONITOR): Condition declaration on _WIN32_WINNT being
 less than 0x0500.
 (w32_msg_pump): Use WPARAM type for 'result'.
 src/w32.c (init_environment, get_emacs_configuration): Support AMD64
 architecture.
 (init_ntproc): Cast arguments of _open_osfhandle to intptr_t, for
 compatibility with x64.
 src/vm-limit.c (lim_data): Now size_t.
 (check_memory_limits): Adjust prototypes of real_morecore and
 __morecore to receive argument of type ptrdiff_t.  Use size_t for
 five_percent and data_size.
 src/unexw32.c: Use DWORD_PTR instead of DWORD for file-scope
 variables, for compatibility with x64.
 (rva_to_section, offset_to_section, relocate_offset)
 (OFFSET_TO_RVA, RVA_TO_OFFSET, RVA_TO_SECTION_OFFSET)
 (PTR_TO_RVA, RVA_TO_PTR, OFFSET_TO_PTR, get_section_info)
 (copy_executable_and_dump_data): Use DWORD_PTR instead of DWORD
 for compatibility with x64.
 src/sysdep.c (STDERR_FILENO): Define if not already defined.
 src/ralloc.c (real_morecore): Argument type is now ptrdiff_t.
 (__morecore): Argument type is now ptrdiff_t.
 (ROUNDUP, MEM_ROUNDUP): Use size_t instead of 'unsigned long'.
 (relinquish): Use ptrdiff_t type for 'excess'.
 (r_alloc_sbrk): Argument type is now ptrdiff_t.
 src/makefile.w32-in (HEAPSIZE): Get value from EMACS_HEAPSIZE.
 (bootstrap-temacs-CMD, bootstrap-temacs-SH): Use $(EMACS_PURESIZE)
 instead of a literal number.
 src/gmalloc.c [WINDOWSNT]: Include w32heap.h.
 (min): Define only if not already defined.
 src/frame.c (x_report_frame_params): Use EMACS_UINT for the return
 value of FRAME_X_WINDOW, to fit a 64-bit pointer on 64-bit Windows
 hosts.
 src/image.c (x_bitmap_pixmap): Return ptrdiff_t, not int, since
 'bitmaps' is a pointer.
 src/dispextern.h (x_bitmap_pixmap): Adjust prototype.
 src/alloc.c (gdb_make_enums_visible): Now conditional on __GNUC__.

 nt/makefile.w32-in ($(TRES)): Use $(EMACS_MANIFEST).
 nt/inc/sys/socket.h: Don't map Winsock error codes to standard ones
 that are already defined.
 nt/inc/ms-w32.h (EMACS_INT, EMACS_UINT, EMACS_INT_MAX, PRIuMAX)
 (pI, _INTPTR) [_MSC_VER]: Fix definitions for MSVC.
 [_MSC_VER]: Add pragmas to suppress some MSVC warnings.
 nt/preprep.c (pfnCheckSumMappedFile, rva_to_section)
 (offset_to_section, relocate_offset, OFFSET_TO_RVA)
 (RVA_TO_OFFSET, RVA_TO_SECTION_OFFSET, PTR_TO_RVA)
 (OFFSET_TO_PTR, ROUND_UP, ROUND_DOWN)
 (copy_executable_and_move_sections, ADJUST_IMPORT_RVA, main): Use
 DWORD_PTR instead of DWORD for compatibility with x64.
 nt/nmake.defs: Support AMD64.
 (EMACS_HEAPSIZE, EMACS_PURESIZE, EMACS_MANIFEST): New macros.
 nt/gmake.defs: (EMACS_HEAPSIZE, EMACS_PURESIZE, EMACS_MANIFEST):
 New macros.
 nt/addsection.c (pfnCheckSumMappedFile, rva_to_section)
 (offset_to_section, relocate_offset, OFFSET_TO_RVA)
 (RVA_TO_OFFSET, RVA_TO_SECTION_OFFSET, PTR_TO_RVA)
 (OFFSET_TO_PTR, ROUND_UP, ROUND_DOWN)
 (copy_executable_and_add_section, main): Use DWORD_PTR instead of
 DWORD, for compatibility with x64.
 nt/emacs-x64.manifest: New file.
 nt/emacs-x86.manifest: Renamed from emacs.manifest.

 lib-src/ntlib.c (gettimeofday): Copy from src/w32.c.  lib/gettime. 
 needs this function.
2012-09-30 23:36:42 +02:00
Eli Zaretskii
c06c382ae4 Support atimers and CPU profiler via profile.c on MS-Windows.
src/w32proc.c (sig_mask, crit_sig): New static variables.
 (sys_signal): Support SIGALRM and SIGPROF.
 (sigemptyset, sigaddset, sigfillset, sigprocmask)
 (pthread_sigmask, setpgrp): Moved here from w32.c.  sigaddset,
 sigfillset, and sigprocmask are no longer no-ops.
 (sigismember): New function.
 (struct itimer_data): New definition.
 (ticks_now, real_itimer, prof_itimer, clocks_min, crit_real)
 (crit_prof): New static variables.
 (MAX_SINGLE_SLEEP): New definition.
 (timer_loop, stop_timer_thread, term_timers, init_timers)
 (start_timer_thread, getitimer, setitimer): New functions.
 (alarm): No longer a no-op, calls setitimer.
 src/w32.c (term_ntproc): Call term_timers.
 (init_ntproc): Make sure all signals are unblocked at startup, to
 erase any traces of dumping.  Call init_timers.
 src/w32fns.c (hourglass_timer, HOURGLASS_ID): Remove.
 Windows-specific code to display the hourglass mouse pointer is no
 longer used.
 (w32_wnd_proc): Remove code that handled the WM_TIMER message due
 to hourglass timer expiration.
 (start_hourglass, cancel_hourglass, DEFAULT_HOURGLASS_DELAY):
 Remove, no longer used.
 (w32_note_current_window, show_hourglass, hide_hourglass): New
 functions, in support of hourglass cursor display similar to other
 window systems.
 (syms_of_w32fns): Don't initialize hourglass_timer.
 src/xdisp.c (start_hourglass, cancel_hourglass): Now used on
 WINDOWSNT as well.
 (start_hourglass) [WINDOWSNT]: Call w32_note_current_window.
 src/w32.h (init_timers, term_timers): Add prototypes.

 nt/inc/sys/time.h (ITIMER_REAL, ITIMER_PROF): Define.
 (struct itimerval): Define.
 (getitimer, setitimer): Add prototypes.
 nt/inc/ms-w32.h <sigset_t> [_MSVC_VER]: Make the typedef consistent
 with MinGW.
 (SA_RESTART, SIGPROF): Define.
 nt/config.nt (HAVE_SETITIMER): Define to 1.
2012-09-30 17:49:05 +02:00
Eli Zaretskii
5101529e98 Clean-up left-overs after 2012-09-23T08:44:20Z!eggert@cs.ucla.edu wrt signal handling.
src/.gdbinit: Set breakpoint on terminate_due_to_signal, not on
 fatal_error_backtrace.
 src/w32proc.c (sys_kill): Undo last change: don't do anything when
 invoked to deliver SIGABRT to our own process.  This is now
 handled by emacs_raise.

 nt/inc/ms-w32.h (emacs_raise): Redefine to invoke emacs_abort.

Fixes: debbugs:12471
2012-09-23 19:34:30 +02:00
Paul Eggert
4d7e6e51dd Simplify and avoid signal-handling races.
* nt/inc/ms-w32.h (emacs_raise): New macro.
* src/alloc.c (die):
* src/sysdep.c (emacs_abort) [HAVE_NTGUI]:
Avoid recursive loop if there's a fatal error in the function itself.
* src/atimer.c (pending_atimers):
* src/blockinput.h: Don't include "atimer.h"; no longer needed.
(interrupt_input_pending): Remove.  All uses removed.
pending_signals now counts both atimers and ordinary interrupts.
This is less racy than having three separate pending-signal flags.
(block_input, unblock_input, totally_unblock_input, unblock_input_to)
(input_blocked_p):
Rename from their upper-case counterparts BLOCK_INPUT,
UNBLOCK_INPUT, TOTALLY_UNBLOCK_INPUT, UNBLOCK_INPUT_TO,
INPUT_BLOCKED_P, and turn into functions.  All uses changed.
This makes it easier to access volatile variables more accurately.
(BLOCK_INPUT_RESIGNAL): Remove.  All uses replaced by unblock_input ().
(input_blocked_p): Prefer this to 'interrupt_input_blocked', as
that's more reliable if the code is buggy and sets
interrupt_input_blocked to a negative value.  All uses changed.
* src/atimer.c (deliver_alarm_signal):
Remove.  No need to deliver this to the parent; any thread can
handle this signal now.  All uses replaced by underlying handler.
* src/atimer.c (turn_on_atimers):
* src/dispnew.c (handle_window_change_signal):
* src/emacs.c (handle_danger_signal):
* src/keyboard.c (kbd_buffer_get_event):
Don't reestablish signal handler; not needed with sigaction.
* src/blockinput.h (UNBLOCK_INPUT_TO, TOTALLY_UNBLOCK_INPUT)
(UNBLOCK_INPUT_TO):
Rework to avoid unnecessary accesses to volatile variables.
(UNBLOCK_INPUT_TO): Now a function.
(totally_unblock_input, unblock_input): New decls.
* src/data.c (handle_arith_signal, deliver_arith_signal): Move to sysdep.c
(init_data): Remove.  Necessary stuff now done in init_signal.
* src/emacs.c, src/xdisp.c: Include "atimer.h", since we invoke atimer functions.
* src/emacs.c (handle_fatal_signal, deliver_fatal_signal): Move to sysdep.c.
(fatal_error_code): Remove; no longer needed.
(terminate_due_to_signal): Rename from fatal_error_backtrace, since
it doesn't always backtrace.  All uses changed.  No need to reset
signal to default, since sigaction and/or die does that for us now.
Use emacs_raise (FOO), not kill (getpid (), FOO).
(main): Check more-accurately whether we're dumping.
Move fatal-error setup to sysdep.c
* src/floatfns.c: Do not include "syssignal.h"; no longer needed.
* src/gtkutil.c (xg_get_file_name, xg_get_font):
Remove no-longer-needed signal-mask manipulation.
* src/keyboard.c, src/process.c (POLL_FOR_INPUT):
Don't depend on USE_ASYNC_EVENTS, a symbol that is never defined.
* src/keyboard.c (read_avail_input): Remove.
All uses replaced by gobble_input.
(Ftop_level): Use TOTALLY_UNBLOCK_INPUT rather than open code.
(kbd_buffer_store_event_hold, gobble_input):
(record_asynch_buffer_change) [USABLE_SIGIO]:
(store_user_signal_events):
No need to mess with signal mask.
(gobble_input): If blocking input and there are terminals, simply
set pending_signals to 1 and return.  All hooks changed to not
worry about whether input is blocked.
(process_pending_signals): Clear pending_signals before processing
them, in case a signal comes in while we're processing.
By convention callers now test pending_signals before calling us.
(UNBLOCK_INPUT_TO, unblock_input, totally_unblock_input):
New functions, to support changes to blockinput.h.
(handle_input_available_signal): Now extern.
(reinvoke_input_signal): Remove.  All uses replaced by
handle_async_input.
(quit_count): Now volatile, since a signal handler uses it.
(handle_interrupt): Now takes bool IN_SIGNAL_HANDLER as arg.  All
callers changed.  Block SIGINT only if not already blocked.
Clear sigmask reliably, even if Fsignal returns, which it can.
Omit unnecessary accesses to volatile var.
(quit_throw_to_read_char): No need to restore sigmask.
* src/keyboard.c (gobble_input, handle_user_signal):
* src/process.c (wait_reading_process_output):
Call signal-handling code rather than killing ourselves.
* src/lisp.h: Include <float.h>, for...
(IEEE_FLOATING_POINT): New macro, moved here to avoid duplication.
(pending_signals): Now volatile.
(syms_of_data): Now const if IEEE floating point.
(handle_input_available_signal) [USABLE_SIGIO]:
(terminate_due_to_signal, record_child_status_change): New decls.
* src/process.c (create_process): Avoid disaster if memory is exhausted
while we're processing a vfork, by tightening the critical section
around the vfork.
(send_process_frame, process_sent_to, handle_pipe_signal)
(deliver_pipe_signal): Remove.  No longer needed, as Emacs now
ignores SIGPIPE.
(send_process): No need for setjmp/longjmp any more, since the
SIGPIPE stuff is now gone.  Instead, report an error if errno
is EPIPE.
(record_child_status_change): Now extern.  PID and W are now args.
Return void, not bool.  All callers changed.
* src/sysdep.c (wait_debugging) [(BSD_SYSTEM || HPUX) && !defined (__GNU__)]:
Remove.  All uses removed.  This bug should be fixed now in a
different way.
(wait_for_termination_1): Use waitpid rather than sigsuspend,
and record the child status change directly.  This avoids the
need to futz with the signal mask.
(process_fatal_action): Move here from emacs.c.
(emacs_sigaction_flags): New function, containing
much of what used to be in emacs_sigaction_init.
(emacs_sigaction_init): Use it.  Block nonfatal system signals that are
caught by emacs, to make races less likely.
(deliver_process_signal): Rename from handle_on_main_thread.
All uses changed.
(BACKTRACE_LIMIT_MAX): Now at top level.
(thread_backtrace_buffer, threadback_backtrace_pointers):
New static vars.
(deliver_thread_signal, deliver_fatal_thread_signal):
New functions, for more-accurate delivery of thread-specific signals.
(handle_fatal_signal, deliver_fatal_signal): Move here from emacs.c.
(deliver_arith_signal): Handle in this thread, not
in the main thread, since it's triggered by this thread.
(maybe_fatal_sig): New function.
(init_signals): New arg DUMPING so that we can be more accurate
about whether we're dumping.  Caller changed.
Treat thread-specific signals differently from process-general signals.
Block all signals while handling fatal error; that's safer.
xsignal from SIGFPE only on non-IEEE hosts, treating it as fatal
on IEEE hosts.
When batch, ignore SIGHUP, SIGINT, SIGTERM if they were already ignored.
Ignore SIGPIPE unless batch.
(emacs_backtrace): Output backtrace for the appropriate thread,
which is not necessarily the main thread.
* src/syssignal.h: Include <stdbool.h>.
(emacs_raise): New macro.
* src/xterm.c (x_connection_signal): Remove; no longer needed
now that we use sigaction.
(x_connection_closed): No need to mess with sigmask now.
(x_initialize): No need to reset SIGPIPE handler here, since
init_signals does this for us now.

Fixes: debbugs:12471
2012-09-23 01:44:20 -07:00
Eli Zaretskii
3e6d6928bd MS-Windows followup for 2012-09-07T01:27:44Z!eggert@cs.ucla.edu, signal-handler cleanup.
src/w32proc.c (sigaction): New function, emulates Posix 'sigaction'.
 src/w32.c (sigemptyset): Empty the set.
 (sigsetmask, sigmask, sigblock, sigunblock): Remove unused functions.

 nt/inc/ms-w32.h (struct sigaction): Declare sa_handler __cdecl.

Fixes: debbugs:12327
2012-09-07 11:20:07 +03:00
Paul Eggert
1088b9226e Simplify redefinition of 'abort' (Bug#12316).
Do not try to redefine the 'abort' function.  Instead, redo
the code so that it calls 'emacs_abort' rather than 'abort'.
This removes the need for the NO_ABORT configure-time macro
and makes it easier to change the abort code to do a backtrace.
* configure.ac (NO_ABRT): Remove.
* admin/CPP-DEFINES (NO_ABORT): Remove.
* nt/inc/ms-w32.h (w32_abort) [HAVE_NTGUI]: Remove.
* src/.gdbinit: Just stop at emacs_abort, not at w32_abort or abort.
* src/emacs.c (abort) [!DOS_NT && !NO_ABORT]:
Remove; sysdep.c's emacs_abort now takes its place.
* src/lisp.h (emacs_abort): New decl.  All calls from Emacs code to
'abort' changed to use 'emacs_abort'.
* src/msdos.c (dos_abort) [defined abort]: Remove; not used.
(abort) [!defined abort]: Rename to ...
(emacs_abort): ... new name.
* src/sysdep.c (emacs_abort) [!HAVE_NTGUI]: New function, taking
the place of the old 'abort' in emacs.c.
* src/w32.c, src/w32fns.c (abort): Do not #undef.
* src/w32.c (emacs_abort): Rename from w32_abort.
2012-09-04 10:34:54 -07:00
Daniel Colascione
17a2cbbd76 Refactor window-system configuration
This change streamlines the window system selection code in
configure.in and moves many common function declarations from
window-specific headers to frame.h.  It introduces a new TERM_HEADER
macro in config.h: we set this macro to the right header to use for
the window system for which we're compiling Emacs and have source
files include it indirectly.  This way, we don't have to teach every
file about every window system.
2012-08-31 22:38:52 -08:00
Juanma Barranquero
a8ab93b0f6 * nt/config.nt: Sync with autogen/config.nt.
(BROKEN_GETWD, DISPNEW_NEEDS_STDIO_EXT): New macros.
(PENDING_OUTPUT_COUNT): Move definition to inc/ms-w32.h.

* nt/inc/ms-w32.h (PENDING_OUTPUT_COUNT): Define.
2012-08-07 13:03:48 +02:00
Juanma Barranquero
3fbc4b542c * nt/config.nt: Sync with autogen/config.in.
(DOS_NT, MSDOS): New macros.
(WRETCODE, wait3): Remove.

* nt/inc/ms-w32.h (DOS_NT): Remove; defined in config.nt.

* lib-src/makefile.w32-in (LOCAL_FLAGS): Remove WINDOWSNT and DOS_NT,
they are always defined in config.h.
2012-08-03 14:16:40 +02:00
Eli Zaretskii
6dad71783c Support symlinks on latest versions of MS-Windows.
src/w32.c: Include winioctl.h and aclapi.h.
 (is_symlink, chase_symlinks, enable_privilege, restore_privilege)
 (revert_to_self): Forward declarations of static functions.
 <static BOOL g_b_init_get_security_info>:
 <g_b_init_create_symbolic_link>: New static flags.
 (globals_of_w32): Initialize them to zero.
 (GetSecurityInfo_Proc, CreateSymbolicLink_Proc): New typedefs.
 (map_w32_filename): Improve commentary.  Simplify switch.
 (SYMBOLIC_LINK_FLAG_DIRECTORY): Define if not defined in system
 headers (most versions of MinGW w32api don't).
 (get_security_info, create_symbolic_link)
 (get_file_security_desc_by_handle, is_symlink, chase_symlinks):
 New functions.
 (sys_access, sys_chmod): Call 'chase_symlinks' to resolve symlinks
 in the argument file name.
 (sys_access): Call unc_volume_file_attributes only if
 GetFileAttributes fails with network-related error codes.
 (sys_rename): Diagnose renaming of a symlink when the user doesn't
 have the required privileges.
 (get_file_security_desc_by_name): Renamed from
 get_file_security_desc.
 (stat_worker): New function, with most of the guts of 'stat', and
 with addition of handling of symlinks and support for 'lstat'.  If
 possible, get file's attributes and security information by
 handle, not by name.  Produce S_IFLNK bit for symlinks, when
 called from 'lstat'.
 (stat, lstat): New functions, call 'stat_worker'.
 (symlink, readlink, careadlinkat): Rewritten to create and resolve
 symlinks when the underlying filesystem supports them.

 lib/src/ntlib.c (lstat): New function, calls 'stat'.

 nt/inc/sys/stat.h (S_IFLNK): Define.
 (S_ISLNK): A non-trivial definition.
 (lstat): Prototype instead of a macro that redirects to 'stat'.

 lisp/files.el (file-truename): Don't skip symlink-chasing part on
 windows-nt.  Incorporate the resolution of 8+3 short aliases on
 Windows into the loop that recursively chases symlinks.  Compare
 directory and its parent case-insensitively on MS-Windows and
 MS-DOS.

 etc/NEWS: Announce the symlink support on MS-Windows.
2012-08-03 13:23:30 +03:00
Glenn Morris
837b365b2a Move NT-specific include file to the NT include directory
* nt/inc/ms-w32.h: Move here from ../src/s.
* nt/config.nt (config_opsysfile): Change to <ms-w32.h>.

* s/ms-w32.h: Move to ../nt/inc.
* src/makefile.w32-in (TAGS, TAGS-gmake, MS_W32_H):
Update for new ms-w32.h location.

* lib-src/makefile.w32-in (MS_W32_H): Update for new ms-w32.h location.

* lib/makefile.w32-in (MS_W32_H): Update for new ms-w32.h location.

* lisp/emacs-lisp/authors.el (authors-renamed-files-alist): Add ms-w32.h.
2012-08-01 23:19:48 -07:00
Eli Zaretskii
55a6cca64f MS-Windows followup for 2012-07-28T23:05:32Z!eggert@cs.ucla.edu.
nt/inc/stdalign.h (_Alignas, alignas): Define.
 src/makefile.w32-in (LISP_H): Add $(NT_INC)/stdalign.h.

Fixes: debbugs:9772
2012-07-29 18:43:09 +03:00
Eli Zaretskii
696056c280 Improve port of struct timespec to MS-Windows.
lib/makefile.w32-in ($(BLD)/dtotimespec.$(O)):
 ($(BLD)/timespec-add.$(O)):
 ($(BLD)/timespec-sub.$(O)): Don't depend on
 $(EMACS_ROOT)/nt/inc/sys/time.h.
 lib/stat-time.h:
 lib/timespec.h:
 lib/utimens.h: Revert last change.
 src/makefile.w32-in (TIMESPEC_H): Remove nt/inc/sys/time.h.
 (SYSTIME_H): Add nt/inc/sys/time.h.
 src/systime.h [WINDOWSNT]: Include sys/time.h.
 src/s/ms-w32.h (struct timespec): Definition moved from
 nt/inc/sys/time.h.  Suggested by Paul Eggert <eggert@cs.ucla.edu>.
 nt/inc/sys/time.h (struct timespec): Don't define it here, it is
 now defined in src/s/ms-w32.h.

Fixes: debbugs:9000
2012-06-24 20:21:20 +03:00
Eli Zaretskii
388cdec072 Fix the MS-Windows build broken by 2012-06-22T21:17:42Z!eggert@cs.ucla.edu.
nt/inc/sys/time.h (struct timespec): Define.
 lib/makefile.w32-in (GNULIBOBJS): Add $(BLD)/dtotimespec.$(O),
 $(BLD)/gettime.$(O), $(BLD)/timespec-add.$(O), and
 $(BLD)/timespec-sub.$(O).
 ($(BLD)/dtotimespec.$(O)):
 ($(BLD)/gettime.$(O)):
 ($(BLD)/timespec-add.$(O)):
 ($(BLD)/timespec-sub.$(O)): New dependencies.
 lib/stat-time.h:
 lib/timespec.h:
 lib/utimens.h: Include sys/time.h
 src/w32.c (fdutimens): New function.
 src/w32proc.c (sys_select): Adapt to change in the EMACS_TIME type.
 src/s/ms-w32.h (pselect): Redirect to sys_select.
 src/sysselect.h [WINDOWSNT]: Don't include sys/select.h.

Fixes: debbugs:9000
2012-06-23 13:22:59 +03:00
Eli Zaretskii
cd37650917 Fix the MS-Windows build broken by 1995-02-25T20:57:45Z!rms@gnu.org.
lib/makefile.w32-in ($(BLD)/md5.$(O)): 
 ($(BLD)/sha1.$(O)): 
 ($(BLD)/sha256.$(O)): 
 ($(BLD)/sha512.$(O)): Depend on $(EMACS_ROOT)/nt/inc/stdalign.h.
 Suggested by Christoph Scholtes <cschol2112@googlemail.com>.
 lib/getopt_.h: Regenerate.
 nt/inc/stdalign.h: New file.

Fixes: debbugs:11527
2012-05-27 15:11:23 +03:00
Eli Zaretskii
e0aeebda1f Avoid MS-Windows compilation errors when struct stat is redefined.
nt/inc/sys/stat.h (_STAT_DEFINED): Define, to prevent redefinitions
 by other headers.
2012-02-04 15:24:07 +02:00
Glenn Morris
acaf905b11 Add 2012 to FSF copyright years for Emacs files 2012-01-05 01:46:05 -08:00
Eli Zaretskii
8c9afb4694 Fix MS-Windows build with MSVC compiler.
Parts of the changes by Fabrice Popineau  <fabrice.popineau@supelec.fr>.

 lib-src/makefile.w32-in (LOCAL_FLAGS): Add $(EMACS_EXTRA_C_FLAGS).
 lib-src/emacsclient.c (main) <environ>: Remove declaration, already
 pulled in by unistd.h on Posix hosts and stdlib.h on MS-Windows.
 nt/inc/stdint.h (uint32_t, uint64_t) [_WIN64]: New typedefs.
 (UINT64_MAX) [_WIN64]: Fix definition.
 (uintmax_t, intmax_t): Fix definitions.
 nt/inc/inttypes.h (strtoumax, strtoimax) [!__MINGW32__]: Provide
 correct definitions.
 nt/config.nt (HAVE_DECL_STRTOLL): Define.
 (va_copy) [_WIN64]: Provide a better definition.
 src/s/ms-w32.h (utimbuf) [_MSC_VER]: Don't define.
 (snprintf) [_MSC_VER]: Redirect to _snprintf.
 (strtoll) [_MSC_VER]: Redirect to _strtoi64.
 (malloc, free, realloc, calloc): Redirect to e_* only when
 compiling Emacs.
 src/lisp.h (GCTYPEBITS): Move before first use.
 (ALIGN_GCTYPEBITS) [_MSC_VER]: Define.
 (DECL_ALIGN) [_MSC_VER]: Use it, as MSVC doesn't like bit ops in
 this macro definition.
 (tzname): Redirect to _tzname for all values of _MSC_VER.

Fixes: debbugs:9960
2011-11-27 20:52:53 +02:00
Christoph Scholtes
d7cecd19b3 * inc/stdint.h (UINT64_MAX, UINT32_MAX): Fix values. 2011-11-13 07:43:13 -07:00
Christoph Scholtes
c4c32b976a * inc/stdint.h (UINT64_MAX, UINT64_MIN, INT64_MIN, UINTMAX_MAX)
(UINTMAX_MIN, INTMAX_MAX, INTMAX_MIN, UINT32_MIN, UINT32_MAX)
(INT32_MIN, UINTMAX_MAX, UINTMAX_MIN, INTMAX_MAX, INTMAX_MIN)
(intmax_t, INT64_MAX): Add for MSVC.
2011-11-05 16:33:44 -06:00
Eli Zaretskii
f7b2cdf3ad Update nt/inc/stdint.h for PTRDIFF_MAX.
nt/inc/stdint.h (INT32_MAX, INT64_MAX, INTPTR_MAX, PTRDIFF_MAX)
 [!__GNUC__]: New macros.
2011-06-07 15:34:09 +03:00
Eli Zaretskii
0a47eac473 Adapt Windows include files to latest changes.
nt/inc/inttypes.h [!__MINGW32__]: Include stdint.h.  Move the
 definition of uintmax_t from here...
 nt/inc/stdint.h (uintmax_t): ...to here.
 (intptr_t) [!__GNUC__]: New typedef.
2011-05-06 15:09:08 +03:00
Eli Zaretskii
fc3b729195 Support inttypes.h and strtoumax in non-MinGW builds on Windows.
nt/inc/inttypes.h: New file.
 nt/config.nt (HAVE_DECL_STRTOULL, HAVE_DECL_STRTOUMAX)
 (HAVE_STRTOULL, HAVE_STRTOUMAX): New macros.
2011-04-28 00:14:34 +03:00
Eli Zaretskii
0f7bb05d28 Implement stubs of readlink' and symlink' for MS-Windows.
src/w32.c (symlink, readlink): New stub functions.
 nt/inc/unistd.h (readlink, symlink): Declare prototypes.
2011-02-27 21:48:31 +02:00
Christoph Scholtes
9f8370e63f Add stdint.h for MS-Windows.
nt/inc/stdint.h: New file, to support compilation with tool chains
 that do not have stdint.h (e.g. MSVC).
 lib/makefile.w32-in: ($(BLD)/md5.$(O)): Added dependency on
 $(EMACS_ROOT)/nt/inc/stdint.h.
2011-02-21 22:16:43 +02:00
Eli Zaretskii
25c51af3a9 Adapt MS-Windows build to import of filemode.c from gnulib.
nt/inc/sys/stat.h (S_ISUID, S_ISGID, S_ISVTX, S_IRGRP, S_IROTH)
 (S_IWGRP, S_IWOTH, S_IXGRP, S_IXOTH, S_ISSOCK, S_ISLNK, S_ISCTG)
 (S_ISDOOR, S_ISMPB, S_ISMPC, S_ISNWK, S_ISPORT, S_ISWHT)
 (S_TYPEISMQ, S_TYPEISSEM, S_TYPEISSHM, S_TYPEISTMO): Define.
 (lstat): Define to stat.
 lib/makefile.w32-in ($(BLD)/filemode.$(O)): Move from
 src/makefile.w32-in and adapt.  Depend on stamp_BLD.
 (GNULIBOBJS): Add $(BLD)/filemode.$(O).
 src/makefile.w32-in ($(BLD)/filemode.$(O)): Move recipe to
 lib/makefilw.w32-in.
 ($(BLD)/dired.$(O)): Depend on $(EMACS_ROOT)/lib/filemode.h.
 (GLOBAL_SOURCES): Remove filemode.c.
 (OBJ1): Remove $(BLD)/filemode.$(O).
 lib-src/makefile.w32-in ($(BLD)/ctags.$(O), $(BLD)/emacsclient.$(O))
 ($(BLD)/etags.$(O), $(BLD)/movemail.$(O), $(BLD)/ntlib.$(O)):
 Depend on $(EMACS_ROOT)/nt/inc/sys/stat.h.
2011-02-21 22:00:19 +02:00
Eli Zaretskii
70b0d280eb Fix the MS-Windows build broken by 2011-01-30T23:34:18Z!eggert@cs.ucla.edu and 2011-01-31T08:15:13Z!eggert@cs.ucla.edu.
lib/makefile.w32-in (GNULIBOBJS): Add $(BLD)/strftime.$(O) and
 $(BLD)/time_r.$(O).
 ($(BLD)/dtoastr.$(O)): Depend on $(EMACS_ROOT)/src/s/ms-w32.h and
 $(EMACS_ROOT)/src/m/intel386.h.
 ($(BLD)/strftime.$(O)): 
 ($(BLD)/time_r.$(O)): Define prerequisites.
 src/makefile.w32-in (OBJ2): Remove strftime.$(O).
 ($(BLD)/strftime.$(O)): Remove prerequisites.
 lib-src/makefile.w32-in (VERSION): Don't define, defined on nt/config.nt.
 (ECLIENT_CFLAGS): Remove -DVERSION.
 ($(BLD)/emacsclient.$(O)): Don't depend on makefile.w32-in.
 nt/config.nt (VERSION): Uncomment definition.
 (restrict): Define.
 nt/inc/stdbool.h: New file.
 admin/admin.el (set-version): Remove lib-src/makefile.w32-in.  Add
 nt/config.nt.
2011-01-31 21:36:08 +02:00
Glenn Morris
95df8112a0 Refill some long/short copyright headers. 2011-01-26 00:36:39 -08:00
Glenn Morris
73b0cd5003 Convert consecutive FSF copyright years to ranges. 2011-01-24 20:08:28 -08:00
Glenn Morris
0d9f702fd0 Nuke arch-tags. 2011-01-15 15:16:57 -08:00
Glenn Morris
5df4f04cd3 Add 2011 to FSF/AIST copyright years. 2011-01-02 15:50:46 -08:00
Glenn Morris
60e552a5d4 * inc/grp.h: Remove execute bit. 2010-02-03 21:17:02 -08:00
Eli Zaretskii
22749e9acb inc/sys/stat.h (struct stat): Change the types of st_uid and st_gid to unsigned.
inc/pwd.h (struct passwd): Change the types of pw_uid and pw_gid to unsigned.
	  (getpwuid): Argument is now unsigned.
	  uid_t is now unsigned.

ntlib.c (setuid): Argument is now unsigned.
	(getuid): Return value is now unsigned.
	(getpwuid): Argument is now unsigned.
	(fchown): UID and GID arguments are now unsigned.

ntlib.h (fchown): UID and GID arguments are now unsigned.
	(getuid): Return value is now unsigned.
	(setuid): Argument is now unsigned.
	(getpwuid): Remove prototype (it's declared in nt/inc/pwd.h).

w32.c   (getpwuid): Change argument type to unsigned.
	(struct w32_id): Change type of `rid' member to unsigned.
	(w32_cached_id, w32_add_to_cache, get_name_and_id): Change type of
	argument ID to unsigned.  All callers changed.
	(getuid, geteuid, getgid, getegid): Change return type to unsigned.
2009-03-21 11:31:50 +00:00
Glenn Morris
f5d0ac07d6 Add 2009 to copyright years. 2009-01-08 03:38:51 +00:00
Eli Zaretskii
71e41ffb85 (struct stat): Move st_dev after st_ino, for better alignment.
Make st_size 64-bit wide.  Add new members st_uname and st_gname.
2008-05-09 19:01:28 +00:00
Eli Zaretskii
de56235e50 (struct group): Add gr_gid member. 2008-05-09 09:41:42 +00:00
Glenn Morris
eef0be9e86 Switch to recommended form of GPLv3 permissions notice. 2008-05-09 05:14:16 +00:00
Eli Zaretskii
87c24bb740 (__MINGW_NOTHROW): If not defined, define to nothing.
Add copyright notice.
2008-04-11 19:24:04 +00:00
Miles Bader
80d0c8d97f Add arch tagline 2008-04-05 20:18:32 +00:00
Eli Zaretskii
40beb14781 New file. 2008-04-05 14:34:28 +00:00
Miles Bader
59ce725a3b Merge from emacs--rel--22
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-987
2008-01-08 20:46:54 +00:00
Glenn Morris
b9b14d130b Add 2008 to copyright years. 2008-01-07 08:31:52 +00:00
Miles Bader
9aecacd08a Merge from emacs--rel--22
Patches applied:

 * emacs--rel--22  (patch 70-73)

   - Update from CVS

2007-07-25  Glenn Morris  <rgm@gnu.org>

   * Relicense all FSF files to GPLv3 or later.

Revision: emacs@sv.gnu.org/emacs--devo--0--patch-828
2007-07-26 05:28:10 +00:00