/* Interfaces to system-dependent kernel and library entries.
Copyright (C) 1985, 1986, 1987, 1988, 1993, 1994, 1995, 1999, 2000, 2001,
- 2003, 2004, 2005 Free Software Foundation, Inc.
+ 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
it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
+the Free Software Foundation; either version 3, or (at your option)
any later version.
GNU Emacs is distributed in the hope that it will be useful,
#endif
#include "blockinput.h"
-#undef NULL
#ifdef MAC_OS8
-/* It is essential to include stdlib.h so that this file picks up
- the correct definitions of rand, srand, and RAND_MAX.
- Otherwise random numbers will not work correctly. */
-#include <stdlib.h>
+#include <sys/param.h>
#ifndef subprocesses
/* Nonzero means delete a process right away if it exits (process.c). */
#define _P_WAIT 0
int _CRTAPI1 _spawnlp (int, const char *, const char *, ...);
int _CRTAPI1 _getpid (void);
+extern char *getwd (char *);
#endif
#ifdef NONSYSTEM_DIR_LIBRARY
under VMS, we place the input channel number here. */
int input_fd;
-void croak P_ ((char *));
+void croak P_ ((char *)) NO_RETURN;
#ifdef AIXHFT
void hft_init ();
SIGMASKTYPE sigprocmask_set;
+
+#if !defined (HAVE_GET_CURRENT_DIR_NAME) || defined (BROKEN_GET_CURRENT_DIR_NAME)
+
+/* Return the current working directory. Returns NULL on errors.
+ Any other returned value must be freed with free. This is used
+ only when get_current_dir_name is not defined on the system. */
+char*
+get_current_dir_name ()
+{
+ char *buf;
+ char *pwd;
+ struct stat dotstat, pwdstat;
+ /* If PWD is accurate, use it instead of calling getwd. PWD is
+ sometimes a nicer name, and using it may avoid a fatal error if a
+ parent directory is searchable but not readable. */
+ if ((pwd = getenv ("PWD")) != 0
+ && (IS_DIRECTORY_SEP (*pwd) || (*pwd && IS_DEVICE_SEP (pwd[1])))
+ && stat (pwd, &pwdstat) == 0
+ && stat (".", &dotstat) == 0
+ && dotstat.st_ino == pwdstat.st_ino
+ && dotstat.st_dev == pwdstat.st_dev
+#ifdef MAXPATHLEN
+ && strlen (pwd) < MAXPATHLEN
+#endif
+ )
+ {
+ buf = (char *) malloc (strlen (pwd) + 1);
+ if (!buf)
+ return NULL;
+ strcpy (buf, pwd);
+ }
+#ifdef HAVE_GETCWD
+ else
+ {
+ size_t buf_size = 1024;
+ buf = (char *) malloc (buf_size);
+ if (!buf)
+ return NULL;
+ for (;;)
+ {
+ if (getcwd (buf, buf_size) == buf)
+ break;
+ if (errno != ERANGE)
+ {
+ int tmp_errno = errno;
+ free (buf);
+ errno = tmp_errno;
+ return NULL;
+ }
+ buf_size *= 2;
+ buf = (char *) realloc (buf, buf_size);
+ if (!buf)
+ return NULL;
+ }
+ }
+#else
+ else
+ {
+ /* We need MAXPATHLEN here. */
+ buf = (char *) malloc (MAXPATHLEN + 1);
+ if (!buf)
+ return NULL;
+ if (getwd (buf) == NULL)
+ {
+ int tmp_errno = errno;
+ free (buf);
+ errno = tmp_errno;
+ return NULL;
+ }
+ }
+#endif
+ return buf;
+}
+#endif
+
\f
/* Specify a different file descriptor for further input operations. */
void
request_sigio ()
{
- if (read_socket_hook)
+ if (noninteractive || read_socket_hook)
return;
#ifdef SIGWINCH
void
unrequest_sigio ()
{
- if (read_socket_hook)
+ if (noninteractive || read_socket_hook)
return;
#ifdef SIGWINCH
{
int on = 1;
- if (read_socket_hook)
+ if (noninteractive || read_socket_hook)
return;
ioctl (input_fd, FIOASYNC, &on);
{
int off = 0;
- if (read_socket_hook)
+ if (noninteractive || read_socket_hook)
return;
ioctl (input_fd, FIOASYNC, &off);
int on = 1;
sigset_t st;
- if (read_socket_hook)
+ if (noninteractive || read_socket_hook)
return;
sigemptyset (&st);
{
int off = 0;
- if (read_socket_hook)
+ if (noninteractive || read_socket_hook)
return;
ioctl (input_fd, FIOASYNC, &off);
void
request_sigio ()
{
- if (read_socket_hook)
+ if (noninteractive || read_socket_hook)
return;
croak ("request_sigio");
void
unrequest_sigio ()
{
- if (read_socket_hook)
+ if (noninteractive || read_socket_hook)
return;
croak ("unrequest_sigio");
{
struct emacs_tty tty;
-#ifdef MAC_OS8
-/* cus-start.el complains if delete-exited-processes is not defined */
-#ifndef subprocesses
- DEFVAR_BOOL ("delete-exited-processes", &delete_exited_processes,
- doc: /* *Non-nil means delete processes immediately when they exit.
-nil means don't delete them until `list-processes' is run. */);
- delete_exited_processes = 0;
-#endif
-#endif /* MAC_OS8 */
-
#ifdef VMS
#if 0
static int oob_chars[2] = {0, 1 << 7}; /* catch C-g's */
void
request_sigio ()
{
+ if (noninteractive)
+ return;
croak ("request sigio");
}
void
unrequest_sigio ()
{
+ if (noninteractive)
+ return;
croak ("unrequest sigio");
}
/* We still don't have a fully qualified domain name.
Try to find one in the list of alternate names */
char **alias = hp->h_aliases;
- while (*alias && !index (*alias, '.'))
+ while (*alias
+ && (!index (*alias, '.')
+ || !strcmp (*alias, "localhost.localdomain")))
alias++;
if (*alias)
fqdn = *alias;
void
request_sigio ()
{
+ if (noninteractive)
+ return;
sigrelse (SIGTINT);
interrupts_deferred = 0;
void
unrequest_sigio ()
{
+ if (noninteractive)
+ return;
sighold (SIGTINT);
interrupts_deferred = 1;
int did_retry = 0;
register int rtnval;
+#if defined (MAC_OSX) && defined (HAVE_CARBON)
+ {
+ extern int mac_try_close_socket P_ ((int));
+
+ if (mac_try_close_socket (fd))
+ return 0;
+ }
+#endif
+
while ((rtnval = close (fd)) == -1
&& (errno == EINTR))
did_retry = 1;
* sdcsvax!rmr or rmr@uscd
*
* Severely hacked over by John Gilmore to make a 4.2BSD compatible
- * subroutine. 11Mar86; hoptoad!gnu
+ * subroutine. 11Mar86; hoptoad!gnu
*
* Modified by rmtodd@uokmax 6-28-87 -- when making an already existing dir,
* subroutine didn't return EEXIST. It does now.