/* Process support for GNU Emacs on the Microsoft W32 API.
- Copyright (C) 1992, 1995, 1999, 2000, 2001, 2002, 2003, 2004,
- 2005, 2006, 2007 Free Software Foundation, Inc.
+ Copyright (C) 1992, 1995, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+ 2006, 2007, 2008 Free Software Foundation, Inc.
This file is part of GNU Emacs.
-GNU Emacs is free software; you can redistribute it and/or modify
+GNU Emacs is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
GNU Emacs is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
-along with GNU Emacs; see the file COPYING. If not, write to
-the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-Boston, MA 02110-1301, USA.
+along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
+/*
Drew Bliss Oct 14, 1993
Adapted from alarm.c by Tim Fleehart
*/
#include "process.h"
#include "syssignal.h"
#include "w32term.h"
+#include "dispextern.h" /* for xstrcasecmp */
#define RVA_TO_PTR(var,section,filedata) \
((void *)((section)->PointerToRawData \
/* Control whether spawnve quotes arguments as necessary to ensure
correct parsing by child process. Because not all uses of spawnve
- are careful about constructing argv arrays, we make this behaviour
+ are careful about constructing argv arrays, we make this behavior
conditional (off by default). */
Lisp_Object Vw32_quote_process_args;
exactly, at the expense of slower operation. Since true hard links
are supported on NTFS volumes, this is only relevant on NT. */
Lisp_Object Vw32_get_true_file_attributes;
+extern Lisp_Object Qlocal;
Lisp_Object Qhigh, Qlow;
/* Thread proc for child process and socket reader threads. Each thread
is normally blocked until woken by select() to check for input by
- reading one char. When the read completes, char_avail is signalled
+ reading one char. When the read completes, char_avail is signaled
to wake up the select emulator and the thread blocks itself again. */
DWORD WINAPI
reader_thread (void *arg)
p = strrchr (filename, '.');
/* We can only identify DOS .com programs from the extension. */
- if (p && stricmp (p, ".com") == 0)
+ if (p && xstrcasecmp (p, ".com") == 0)
*is_dos_app = TRUE;
- else if (p && (stricmp (p, ".bat") == 0
- || stricmp (p, ".cmd") == 0))
+ else if (p && (xstrcasecmp (p, ".bat") == 0
+ || xstrcasecmp (p, ".cmd") == 0))
{
/* A DOS shell script - it appears that CreateProcess is happy to
accept this (somewhat surprisingly); presumably it looks at
#if 0
/* This version does not escape quotes if they occur at the
beginning or end of the arg - this could lead to incorrect
- behaviour when the arg itself represents a command line
+ behavior when the arg itself represents a command line
containing quoted args. I believe this was originally done
as a hack to make some things work, before
`w32-quote-process-args' was added. */
To reduce the number of places in which Emacs can be hung such that
C-g is not able to interrupt it, we always wait on interrupt_handle
- (which is signalled by the input thread when C-g is detected). If we
+ (which is signaled by the input thread when C-g is detected). If we
detect that we were woken up by C-g, we return -1 with errno set to
EINTR as on Unix. */
current_status = cp->status;
if (WaitForSingleObject (cp->char_avail, 0) == WAIT_OBJECT_0)
{
- /* char_avail has been signalled, so status (which may
+ /* char_avail has been signaled, so status (which may
have changed) should indicate read has completed
but has not been acknowledged. */
current_status = cp->status;
}
else
{
- /* char_avail has not been signalled, so status should
+ /* char_avail has not been signaled, so status should
indicate that read is in progress; small possibility
- that read has completed but event wasn't yet signalled
+ that read has completed but event wasn't yet signaled
when we tested it (because a context switch occurred
or if running on separate CPUs). */
if (current_status != STATUS_READ_READY
start_time = GetTickCount ();
- /* Wait for input or child death to be signalled. If user input is
+ /* Wait for input or child death to be signaled. If user input is
allowed, then also accept window messages. */
if (FD_ISSET (0, &orfds))
active = MsgWaitForMultipleObjects (nh + nc, wait_hnd, FALSE, timeout_ms,
abort ();
/* Loop over all handles after active (now officially documented as
- being the first signalled handle in the array). We do this to
+ being the first signaled handle in the array). We do this to
ensure fairness, so that all channels with data available will be
processed - otherwise higher numbered channels could be starved. */
do
#endif
DEFVAR_LISP ("w32-get-true-file-attributes", &Vw32_get_true_file_attributes,
- doc: /* Non-nil means determine accurate link count in `file-attributes'.
-Note that this option is only useful for files on NTFS volumes, where hard links
-are supported. Moreover, it slows down `file-attributes' noticeably. */);
- Vw32_get_true_file_attributes = Qt;
+ doc: /* Non-nil means determine accurate file attributes in `file-attributes'.
+This option controls whether to issue additional system calls to determine
+accurate link counts, file type, and ownership information. It is only
+useful for files on NTFS volumes, where hard links and file security are
+supported.
+
+Without these system calls, link count will always be reported as 1 and file
+ownership will be attributed to the current user.
+The default value `local' means only issue these system calls for files
+on local fixed drives. A value of nil means never issue them.
+Any other non-nil value means do this even on remote and removable drives
+where the performance impact may be noticeable even on modern hardware. */);
+ Vw32_get_true_file_attributes = Qlocal;
staticpro (&Vw32_valid_locale_ids);
staticpro (&Vw32_valid_codepages);