Assume POSIX 1003.1-1988 or later for unistd.h.

* admin/CPP-DEFINES (BROKEN_GETWD, HAVE_GETCWD, HAVE_GETWD, HAVE_SIZE_T)
(HAVE_UNISTD_H): Remove.
* configure.ac: Do not check for getcwd or getwd.
* lib-src/emacsclient.c (getcwd): Remove decl.
(get_current_dir_name): Assume getcwd exists.
* lib-src/etags.c (HAVE_GETCWD): Remove.
(getcwd): Remove decl.
(NO_LONG_OPTIONS): Remove this.  All uses removed.
Emacs always has GNU getopt.
(etags_getcwd): Assume getcwd exists.
* lib-src/movemail.c (F_OK, X_OK, W_OK, R_OK): Remove.
* nt/config.nt (HAVE_GETCWD): Remove.
* src/alloc.c: Assume unistd.h exists.
* src/fileio.c (Fexpand_file_name) [DOS_NT]: Use getcwd, not getwd.
* src/sysdep.c (get_current_dir_name): Assume getcwd exists.
(getwd) [USG]: Remove; no longer needed.
(sys_subshell) [DOS_NT]: Use getcwd, not getwd.
* src/w32.c (getcwd): Rename from getwd, and switch to getcwd's API.
* src/w32.h (getcwd): Remove decl.

Fixes: debbugs:12945
This commit is contained in:
Paul Eggert 2012-11-21 13:06:52 -08:00
parent 954bba56c6
commit 9239d97052
16 changed files with 67 additions and 193 deletions

View file

@ -1,3 +1,8 @@
2012-11-21 Paul Eggert <eggert@cs.ucla.edu>
Assume POSIX 1003.1-1988 or later for unistd.h (Bug#12945).
* configure.ac: Do not check for getcwd or getwd.
2012-11-21 Glenn Morris <rgm@gnu.org>
* configure.ac (--enable-profiling): Doc fix.

View file

@ -86,7 +86,6 @@ anymore, so they can be removed.
AMPERSAND_FULL_NAME
BROKEN_DATAGRAM_SOCKETS
BROKEN_FIONREAD
BROKEN_GETWD
BROKEN_GET_CURRENT_DIR_NAME
BROKEN_NON_BLOCKING_CONNECT
BROKEN_PTY_READ_AFTER_EAGAIN
@ -161,7 +160,6 @@ HAVE_FUTIMESAT
HAVE_GAI_STRERROR
HAVE_GCONF
HAVE_GETADDRINFO
HAVE_GETCWD
HAVE_GETDELIM
HAVE_GETGRENT
HAVE_GETHOSTNAME
@ -178,7 +176,6 @@ HAVE_GETRLIMIT
HAVE_GETRUSAGE
HAVE_GETSOCKNAME
HAVE_GETTIMEOFDAY
HAVE_GETWD
HAVE_GET_CURRENT_DIR_NAME
HAVE_GHOSTSCRIPT
HAVE_GIF
@ -304,7 +301,6 @@ HAVE_SIGNED_SIG_ATOMIC_T
HAVE_SIGNED_WCHAR_T
HAVE_SIGNED_WINT_T
HAVE_SIGSET_T
HAVE_SIZE_T
HAVE_SNPRINTF
HAVE_SOCKETS
HAVE_SOUND
@ -369,7 +365,6 @@ HAVE_TM_ZONE
HAVE_TOUCHLOCK
HAVE_TZNAME
HAVE_TZSET
HAVE_UNISTD_H
HAVE_UNSIGNED_LONG_LONG_INT
HAVE_UTIL_H
HAVE_UTIMENSAT

View file

@ -1,3 +1,9 @@
2012-11-21 Paul Eggert <eggert@cs.ucla.edu>
Assume POSIX 1003.1-1988 or later for unistd.h (Bug#12945).
* CPP-DEFINES (BROKEN_GETWD, HAVE_GETCWD, HAVE_GETWD, HAVE_SIZE_T)
(HAVE_UNISTD_H): Remove.
2012-11-17 Paul Eggert <eggert@cs.ucla.edu>
Assume POSIX 1003.1-1988 or later for fcntl.h (Bug#12881).

View file

@ -2894,7 +2894,7 @@ AC_CHECK_FUNCS(gethostname \
closedir getrusage get_current_dir_name \
lrand48 \
select getpagesize setlocale \
utimes getrlimit setrlimit getcwd shutdown getaddrinfo \
utimes getrlimit setrlimit shutdown getaddrinfo \
strsignal setitimer \
sendto recvfrom getsockname getpeername getifaddrs freeifaddrs \
gai_strerror mkstemp getline getdelim fsync sync \
@ -2903,14 +2903,6 @@ getpwent endpwent getgrent endgrent \
touchlock \
cfmakeraw cfsetspeed copysign __executable_start)
dnl getwd appears to be buggy on SVR4.2, so we don't use it.
if test $opsys = unixware; then
dnl In case some other test ends up checking for getwd.
AC_DEFINE(BROKEN_GETWD, 1, [Define if getwd should not be used.])
else
AC_CHECK_FUNCS(getwd)
fi
## Eric Backus <ericb@lsid.hp.com> says, HP-UX 9.x on HP 700 machines
## has a broken `rint' in some library versions including math library
## version number A.09.05.

View file

@ -1,3 +1,15 @@
2012-11-21 Paul Eggert <eggert@cs.ucla.edu>
Assume POSIX 1003.1-1988 or later for unistd.h (Bug#12945).
* emacsclient.c (getcwd): Remove decl.
(get_current_dir_name): Assume getcwd exists.
* etags.c (HAVE_GETCWD): Remove.
(getcwd): Remove decl.
(NO_LONG_OPTIONS): Remove this. All uses removed.
Emacs always has GNU getopt.
(etags_getcwd): Assume getcwd exists.
* movemail.c (F_OK, X_OK, W_OK, R_OK): Remove.
2012-11-20 Paul Eggert <eggert@cs.ucla.edu>
* emacsclient.c (handle_sigcont, handle_sigtstp): Use raise (sig)

View file

@ -88,10 +88,7 @@ char *w32_getenv (char *);
char *getenv (const char *), *getwd (char *);
#ifdef HAVE_GETCWD
char *(getcwd) (char *, size_t);
#endif
char *getenv (const char *);
#ifndef VERSION
#define VERSION "unspecified"
@ -223,7 +220,7 @@ get_current_dir_name (void)
char *buf;
const char *pwd;
struct stat dotstat, pwdstat;
/* If PWD is accurate, use it instead of calling getwd. PWD is
/* If PWD is accurate, use it instead of calling getcwd. 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 = egetenv ("PWD")) != 0
@ -240,7 +237,6 @@ get_current_dir_name (void)
buf = (char *) xmalloc (strlen (pwd) + 1);
strcpy (buf, pwd);
}
#ifdef HAVE_GETCWD
else
{
size_t buf_size = 1024;
@ -267,20 +263,6 @@ get_current_dir_name (void)
}
}
}
#else
else
{
/* We need MAXPATHLEN here. */
buf = (char *) xmalloc (MAXPATHLEN + 1);
if (getwd (buf) == NULL)
{
int tmp_errno = errno;
free (buf);
errno = tmp_errno;
return NULL;
}
}
#endif
return buf;
}
#endif
@ -1592,7 +1574,6 @@ main (int argc, char **argv)
cwd = get_current_dir_name ();
if (cwd == 0)
{
/* getwd puts message in STRING if it fails. */
message (TRUE, "%s: %s\n", progname,
"Cannot get current working directory");
fail ();

View file

@ -123,19 +123,9 @@ char pot_etags_version[] = "@(#) pot revision number is 17.38.1.4";
# undef HAVE_NTGUI
# undef DOS_NT
# define DOS_NT
# ifndef HAVE_GETCWD
# define HAVE_GETCWD
# endif /* undef HAVE_GETCWD */
#else /* not WINDOWSNT */
#endif /* !WINDOWSNT */
#endif /* WINDOWSNT */
#include <unistd.h>
#ifndef HAVE_UNISTD_H
# if defined (HAVE_GETCWD) && !defined (WINDOWSNT)
extern char *getcwd (char *buf, size_t size);
# endif
#endif /* HAVE_UNISTD_H */
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
@ -152,16 +142,7 @@ char pot_etags_version[] = "@(#) pot revision number is 17.38.1.4";
# define assert(x) ((void) 0)
#endif
#ifdef NO_LONG_OPTIONS /* define this if you don't have GNU getopt */
# define NO_LONG_OPTIONS TRUE
# define getopt_long(argc,argv,optstr,lopts,lind) getopt (argc, argv, optstr)
extern char *optarg;
extern int optind, opterr;
#else
# define NO_LONG_OPTIONS FALSE
# include <getopt.h>
#endif /* NO_LONG_OPTIONS */
#include <getopt.h>
#include <regex.h>
/* Define CTAGS to make the program "ctags" compatible with the usual one.
@ -869,11 +850,7 @@ print_help (argument *argbuffer)
printf ("Usage: %s [options] [[regex-option ...] file-name] ...\n\
\n\
These are the options accepted by %s.\n", progname, progname);
if (NO_LONG_OPTIONS)
puts ("WARNING: long option names do not work with this executable,\n\
as it is not linked with GNU getopt.");
else
puts ("You may use unambiguous abbreviations for the long option names.");
puts ("You may use unambiguous abbreviations for the long option names.");
puts (" A - as file name means read names from stdin (one per line).\n\
Absolute names are stored in the output file as they are.\n\
Relative ones are stored relative to the output file's directory.\n");
@ -1065,9 +1042,9 @@ main (int argc, char **argv)
/* When the optstring begins with a '-' getopt_long does not rearrange the
non-options arguments to be at the end, but leaves them alone. */
optstring = concat (NO_LONG_OPTIONS ? "" : "-",
"ac:Cf:Il:o:r:RSVhH",
(CTAGS) ? "BxdtTuvw" : "Di:");
optstring = concat ("-ac:Cf:Il:o:r:RSVhH",
(CTAGS) ? "BxdtTuvw" : "Di:",
"");
while ((opt = getopt_long (argc, argv, optstring, longopts, NULL)) != EOF)
switch (opt)
@ -6333,8 +6310,8 @@ pfatal (const char *s1)
static void
suggest_asking_for_help (void)
{
fprintf (stderr, "\tTry `%s %s' for a complete list of options.\n",
progname, NO_LONG_OPTIONS ? "-h" : "--help");
fprintf (stderr, "\tTry `%s --help' for a complete list of options.\n",
progname);
exit (EXIT_FAILURE);
}
@ -6372,7 +6349,6 @@ concat (const char *s1, const char *s2, const char *s3)
static char *
etags_getcwd (void)
{
#ifdef HAVE_GETCWD
int bufsize = 200;
char *path = xnew (bufsize, char);
@ -6387,34 +6363,6 @@ etags_getcwd (void)
canonicalize_filename (path);
return path;
#else /* not HAVE_GETCWD */
#if MSDOS
char *p, path[MAXPATHLEN + 1]; /* Fixed size is safe on MSDOS. */
getwd (path);
for (p = path; *p != '\0'; p++)
if (*p == '\\')
*p = '/';
else
*p = lowcase (*p);
return strdup (path);
#else /* not MSDOS */
linebuffer path;
FILE *pipe;
linebuffer_init (&path);
pipe = (FILE *) popen ("pwd 2>/dev/null", "r");
if (pipe == NULL || readline_internal (&path, pipe) == 0)
pfatal ("pwd");
pclose (pipe);
return path.buffer;
#endif /* not MSDOS */
#endif /* not HAVE_GETCWD */
}
/* Return a newly allocated string containing the file name of FILE

View file

@ -96,13 +96,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#include <fcntl.h>
#endif /* WINDOWSNT */
#ifndef F_OK
#define F_OK 0
#define X_OK 1
#define W_OK 2
#define R_OK 4
#endif
#ifdef WINDOWSNT
#include <sys/locking.h>
#endif

View file

@ -1,3 +1,8 @@
2012-11-21 Paul Eggert <eggert@cs.ucla.edu>
Assume POSIX 1003.1-1988 or later for unistd.h (Bug#12945).
* config.nt (HAVE_GETCWD): Remove.
2012-11-21 Eli Zaretskii <eliz@gnu.org>
* nmake.defs: Use !if, not !ifdef. For the details, see

View file

@ -411,12 +411,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
/* Define to 1 if you have the `getaddrinfo' function. */
#undef HAVE_GETADDRINFO
/* Define to 1 if you have the `getcwd' function.
If you think about defining HAVE_GETCWD, don't: the alternative
getwd is redefined on w32.c, and does not really return the current
directory, to get the desired results elsewhere in Emacs. */
#undef HAVE_GETCWD
/* Define to 1 if you have the `getdelim' function. */
#undef HAVE_GETDELIM

View file

@ -1,3 +1,14 @@
2012-11-21 Paul Eggert <eggert@cs.ucla.edu>
Assume POSIX 1003.1-1988 or later for unistd.h (Bug#12945).
* alloc.c: Assume unistd.h exists.
* fileio.c (Fexpand_file_name) [DOS_NT]: Use getcwd, not getwd.
* sysdep.c (get_current_dir_name): Assume getcwd exists.
(getwd) [USG]: Remove; no longer needed.
(sys_subshell) [DOS_NT]: Use getcwd, not getwd.
* w32.c (getcwd): Rename from getwd, and switch to getcwd's API.
* w32.h (getcwd): Remove decl.
2012-11-21 Stefan Monnier <monnier@iro.umontreal.ca>
* xdisp.c (fast_set_selected_frame): Rename from update_tool_bar_unwind.

View file

@ -63,10 +63,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#endif
#include <unistd.h>
#ifndef HAVE_UNISTD_H
extern void *sbrk ();
#endif
#include <fcntl.h>
#ifdef USE_GTK

View file

@ -1148,7 +1148,7 @@ filesystem tree, not (expand-file-name ".." dirname). */)
newdir = "/";
}
else
getwd (adir);
getcwd (adir, MAXPATHLEN + 1);
newdir = adir;
}

View file

@ -101,7 +101,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#define _P_WAIT 0
int _cdecl _spawnlp (int, const char *, const char *, ...);
int _cdecl _getpid (void);
extern char *getwd (char *);
#endif
#include "syssignal.h"
@ -134,12 +133,12 @@ char*
get_current_dir_name (void)
{
char *buf;
char *pwd;
char *pwd = getenv ("PWD");
struct stat dotstat, pwdstat;
/* If PWD is accurate, use it instead of calling getwd. PWD is
/* If PWD is accurate, use it instead of calling getcwd. 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
if (pwd
&& (IS_DIRECTORY_SEP (*pwd) || (*pwd && IS_DEVICE_SEP (pwd[1])))
&& stat (pwd, &pwdstat) == 0
&& stat (".", &dotstat) == 0
@ -155,7 +154,6 @@ get_current_dir_name (void)
return NULL;
strcpy (buf, pwd);
}
#ifdef HAVE_GETCWD
else
{
size_t buf_size = 1024;
@ -179,22 +177,6 @@ get_current_dir_name (void)
return NULL;
}
}
#else
else
{
/* We need MAXPATHLEN here. */
buf = 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
@ -521,7 +503,7 @@ sys_subshell (void)
const char *sh = 0;
#ifdef DOS_NT /* MW, Aug 1993 */
getwd (oldwd);
getcwd (oldwd, sizeof oldwd);
if (sh == 0)
sh = (char *) egetenv ("SUSPEND"); /* KFS, 1994-12-14 */
#endif
@ -2238,60 +2220,6 @@ emacs_readlink (char const *filename, char initial_buf[READLINK_BUFSIZE])
&emacs_norealloc_allocator, careadlinkatcwd);
}
#ifdef USG
/*
* All of the following are for USG.
*
* On USG systems the system calls are INTERRUPTIBLE by signals
* that the user program has elected to catch. Thus the system call
* must be retried in these cases. To handle this without massive
* changes in the source code, we remap the standard system call names
* to names for our own functions in sysdep.c that do the system call
* with retries. Actually, for portability reasons, it is good
* programming practice, as this example shows, to limit all actual
* system calls to a single occurrence in the source. Sure, this
* adds an extra level of function call overhead but it is almost
* always negligible. Fred Fish, Unisoft Systems Inc.
*/
/*
* Warning, this function may not duplicate 4.2 action properly
* under error conditions.
*/
#if !defined (HAVE_GETWD) || defined (BROKEN_GETWD)
#ifndef MAXPATHLEN
/* In 4.1, param.h fails to define this. */
#define MAXPATHLEN 1024
#endif
char *
getwd (char *pathname)
{
char *npath, *spath;
extern char *getcwd (char *, size_t);
block_input (); /* getcwd uses malloc */
spath = npath = getcwd ((char *) 0, MAXPATHLEN);
if (spath == 0)
{
unblock_input ();
return spath;
}
/* On Altos 3068, getcwd can return @hostname/dir, so discard
up to first slash. Should be harmless on other systems. */
while (*npath && *npath != '/')
npath++;
strcpy (pathname, npath);
free (spath); /* getcwd uses malloc */
unblock_input ();
return pathname;
}
#endif /* !defined (HAVE_GETWD) || defined (BROKEN_GETWD) */
#endif /* USG */
/* Directory routines for systems that don't have them. */
#ifdef HAVE_DIRENT_H

View file

@ -908,8 +908,18 @@ static char startup_dir[MAXPATHLEN];
/* Get the current working directory. */
char *
getwd (char *dir)
getcwd (char *dir, size_t dirsize)
{
if (!dirsize)
{
errno = EINVAL;
return NULL;
}
if (dirsize <= strlen (startup_dir))
{
errno = ERANGE;
return NULL;
}
#if 0
if (GetCurrentDirectory (MAXPATHLEN, dir) > 0)
return dir;
@ -1825,7 +1835,7 @@ init_environment (char ** argv)
memcpy (*envp, "COMSPEC=", 8);
}
/* Remember the initial working directory for getwd. */
/* Remember the initial working directory for getcwd. */
/* FIXME: Do we need to resolve possible symlinks in startup_dir?
Does it matter anywhere in Emacs? */
if (!GetCurrentDirectory (MAXPATHLEN, startup_dir))

View file

@ -163,7 +163,6 @@ 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 *);
@ -181,4 +180,3 @@ extern ssize_t emacs_gnutls_push (gnutls_transport_ptr_t p,
#endif /* HAVE_GNUTLS */
#endif /* EMACS_W32_H */