unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#12945: Assume POSIX 1003.1-1988 or later for unistd.h.
@ 2012-11-20 17:38 Paul Eggert
  2012-11-20 18:14 ` Eli Zaretskii
  0 siblings, 1 reply; 6+ messages in thread
From: Paul Eggert @ 2012-11-20 17:38 UTC (permalink / raw)
  To: 12945

Here's a patch that I plan to install to simplify Emacs based
on assuming that the underyling system supports POSIX 1003.1-1988
or later with respect to unistd.h.  This is universal these days
on GNUish hosts, and I don't forsee any problems with Microsoft
hosts.  I'm CC:ing this to Eli, though, to give him a heads-up
just in case.

It may help in a later patch to simplify the Microsoft side by
removing getwd and standardizing on getcwd, since that's what
POSIX did back in 1988, but that's an issue that's independent
of this patch.

=== modified file 'ChangeLog'
--- ChangeLog	2012-11-20 08:29:04 +0000
+++ ChangeLog	2012-11-20 17:33:00 +0000
@@ -1,5 +1,8 @@
 2012-11-20  Paul Eggert  <eggert@cs.ucla.edu>
 
+	Assume POSIX 1003.1-1988 or later for unistd.h.
+	* configure.ac: Do not check for getcwd or getwd.
+
 	Improve static checking of integer overflow and stack smashing.
 	* configure.ac (WARN_CFLAGS): Add -Wstack-protector
 	if using GCC 4.7.2 or later on a platform with

=== modified file 'admin/CPP-DEFINES'
--- admin/CPP-DEFINES	2012-11-17 22:12:47 +0000
+++ admin/CPP-DEFINES	2012-11-20 17:33:00 +0000
@@ -86,7 +86,6 @@
 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_GAI_STRERROR
 HAVE_GCONF
 HAVE_GETADDRINFO
-HAVE_GETCWD
 HAVE_GETDELIM
 HAVE_GETGRENT
 HAVE_GETHOSTNAME
@@ -178,7 +176,6 @@
 HAVE_GETRUSAGE
 HAVE_GETSOCKNAME
 HAVE_GETTIMEOFDAY
-HAVE_GETWD
 HAVE_GET_CURRENT_DIR_NAME
 HAVE_GHOSTSCRIPT
 HAVE_GIF
@@ -304,7 +301,6 @@
 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_TOUCHLOCK
 HAVE_TZNAME
 HAVE_TZSET
-HAVE_UNISTD_H
 HAVE_UNSIGNED_LONG_LONG_INT
 HAVE_UTIL_H
 HAVE_UTIMENSAT

=== modified file 'admin/ChangeLog'
--- admin/ChangeLog	2012-11-17 22:12:47 +0000
+++ admin/ChangeLog	2012-11-20 17:33:00 +0000
@@ -1,3 +1,9 @@
+2012-11-20  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Assume POSIX 1003.1-1988 or later for unistd.h.
+	* 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).

=== modified file 'configure.ac'
--- configure.ac	2012-11-20 08:29:04 +0000
+++ configure.ac	2012-11-20 17:33:00 +0000
@@ -2889,7 +2889,7 @@
 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 \
@@ -2898,14 +2898,6 @@
 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.

=== modified file 'lib-src/ChangeLog'
--- lib-src/ChangeLog	2012-11-20 08:31:19 +0000
+++ lib-src/ChangeLog	2012-11-20 17:33:00 +0000
@@ -1,5 +1,15 @@
 2012-11-20  Paul Eggert  <eggert@cs.ucla.edu>
 
+	Assume POSIX 1003.1-1988 or later for unistd.h.
+	* 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.
+
 	* emacsclient.c (handle_sigcont, handle_sigtstp): Use raise (sig)
 	rather than kill (getpid (), sig), as it's simpler and safer.
 

=== modified file 'lib-src/emacsclient.c'
--- lib-src/emacsclient.c	2012-11-20 08:31:19 +0000
+++ lib-src/emacsclient.c	2012-11-20 17:33:00 +0000
@@ -88,10 +88,7 @@
 
 
 \f
-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 @@
   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 @@
       buf = (char *) xmalloc (strlen (pwd) + 1);
       strcpy (buf, pwd);
     }
-#ifdef HAVE_GETCWD
   else
     {
       size_t buf_size = 1024;
@@ -267,20 +263,6 @@
 	    }
         }
     }
-#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 @@
   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 ();

=== modified file 'lib-src/etags.c'
--- lib-src/etags.c	2012-09-17 00:56:08 +0000
+++ lib-src/etags.c	2012-11-20 17:33:00 +0000
@@ -123,19 +123,9 @@
 # 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 @@
 # 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 @@
   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 @@
 
   /* 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 @@
 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 @@
 static char *
 etags_getcwd (void)
 {
-#ifdef HAVE_GETCWD
   int bufsize = 200;
   char *path = xnew (bufsize, char);
 
@@ -6387,34 +6363,6 @@
 
   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

=== modified file 'lib-src/movemail.c'
--- lib-src/movemail.c	2012-11-17 22:12:47 +0000
+++ lib-src/movemail.c	2012-11-20 17:33:00 +0000
@@ -96,13 +96,6 @@
 #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

=== modified file 'src/ChangeLog'
--- src/ChangeLog	2012-11-20 11:41:57 +0000
+++ src/ChangeLog	2012-11-20 17:33:00 +0000
@@ -1,5 +1,10 @@
 2012-11-20  Paul Eggert  <eggert@cs.ucla.edu>
 
+	Assume POSIX 1003.1-1988 or later for unistd.h.
+	* alloc.c: Assume unistd.h exists.
+	* sysdep.c (get_current_dir_name): Assume getcwd exists.
+	(getwd) [USG]: Remove; no longer needed.
+
 	* eval.c (interactive_p): Remove no-longer-used decl.
 
 2012-11-20  Dmitry Antipov  <dmantipov@yandex.ru>

=== modified file 'src/alloc.c'
--- src/alloc.c	2012-11-12 01:09:34 +0000
+++ src/alloc.c	2012-11-20 17:33:00 +0000
@@ -63,10 +63,6 @@
 #endif
 
 #include <unistd.h>
-#ifndef HAVE_UNISTD_H
-extern void *sbrk ();
-#endif
-
 #include <fcntl.h>
 
 #ifdef USE_GTK

=== modified file 'src/sysdep.c'
--- src/sysdep.c	2012-11-17 22:12:47 +0000
+++ src/sysdep.c	2012-11-20 17:33:00 +0000
@@ -134,12 +134,12 @@
 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 +155,6 @@
         return NULL;
       strcpy (buf, pwd);
     }
-#ifdef HAVE_GETCWD
   else
     {
       size_t buf_size = 1024;
@@ -179,22 +178,6 @@
             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
@@ -2238,60 +2221,6 @@
 		       &emacs_norealloc_allocator, careadlinkatcwd);
 }
 \f
-#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 */
-\f
 /* Directory routines for systems that don't have them. */
 
 #ifdef HAVE_DIRENT_H






^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#12945: Assume POSIX 1003.1-1988 or later for unistd.h.
  2012-11-20 17:38 bug#12945: Assume POSIX 1003.1-1988 or later for unistd.h Paul Eggert
@ 2012-11-20 18:14 ` Eli Zaretskii
  2012-11-20 20:13   ` Eli Zaretskii
  0 siblings, 1 reply; 6+ messages in thread
From: Eli Zaretskii @ 2012-11-20 18:14 UTC (permalink / raw)
  To: Paul Eggert; +Cc: 12945

> Date: Tue, 20 Nov 2012 09:38:31 -0800
> From: Paul Eggert <eggert@cs.ucla.edu>
> CC: Eli Zaretskii <eliz@gnu.org>
> 
> Here's a patch that I plan to install to simplify Emacs based
> on assuming that the underyling system supports POSIX 1003.1-1988
> or later with respect to unistd.h.  This is universal these days
> on GNUish hosts, and I don't forsee any problems with Microsoft
> hosts.  I'm CC:ing this to Eli, though, to give him a heads-up
> just in case.
> 
> It may help in a later patch to simplify the Microsoft side by
> removing getwd and standardizing on getcwd, since that's what
> POSIX did back in 1988, but that's an issue that's independent
> of this patch.

It's not independent.  The getwd in w32.c must be modified to be
getcwd instead.

Otherwise, I see no problems with this, as far as the MS-Windows build
is concerned.





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#12945: Assume POSIX 1003.1-1988 or later for unistd.h.
  2012-11-20 18:14 ` Eli Zaretskii
@ 2012-11-20 20:13   ` Eli Zaretskii
  2012-11-20 20:51     ` Paul Eggert
  0 siblings, 1 reply; 6+ messages in thread
From: Eli Zaretskii @ 2012-11-20 20:13 UTC (permalink / raw)
  To: eggert; +Cc: 12945

> Date: Tue, 20 Nov 2012 20:14:55 +0200
> From: Eli Zaretskii <eliz@gnu.org>
> Cc: 12945@debbugs.gnu.org
> 
> > It may help in a later patch to simplify the Microsoft side by
> > removing getwd and standardizing on getcwd, since that's what
> > POSIX did back in 1988, but that's an issue that's independent
> > of this patch.
> 
> It's not independent.  The getwd in w32.c must be modified to be
> getcwd instead.

Here's the patch for that:

=== modified file 'src/w32.c'
--- src/w32.c	2012-11-17 22:12:47 +0000
+++ src/w32.c	2012-11-20 20:11:08 +0000
@@ -901,8 +901,18 @@ static char startup_dir[MAXPATHLEN];
 
 /* Get the current working directory.  */
 char *
-getwd (char *dir)
+getcwd (char *dir, int dirsize)
 {
+  if (!dirsize)
+    {
+      errno = EINVAL;
+      return NULL;
+    }
+  if (dirsize < strlen (startup_dir) + 1)
+    {
+      errno = ERANGE;
+      return NULL;
+    }
 #if 0
   if (GetCurrentDirectory (MAXPATHLEN, dir) > 0)
     return dir;






^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#12945: Assume POSIX 1003.1-1988 or later for unistd.h.
  2012-11-20 20:13   ` Eli Zaretskii
@ 2012-11-20 20:51     ` Paul Eggert
  2012-11-21  3:40       ` Eli Zaretskii
  0 siblings, 1 reply; 6+ messages in thread
From: Paul Eggert @ 2012-11-20 20:51 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 12945

[-- Attachment #1: Type: text/plain, Size: 3474 bytes --]

On 11/20/12 12:13, Eli Zaretskii wrote:

> Here's the patch for that:

Thanks.  Won't we need patches elswhere to match?  Something like
the following.  I'm attaching a combined patch, relative to trunk bzr
110966.  Also, how is this related to the "#define getcwd _getcwd" in
lib-src/ntlib.h?

=== modified file 'nt/config.nt'
--- nt/config.nt	2012-11-17 23:58:56 +0000
+++ nt/config.nt	2012-11-20 20:44:17 +0000
@@ -411,11 +411,10 @@
 /* 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
+/* Define to 1 if you have the `getcwd' function.  This is
+   defined on w32.c, and does not really return the current
    directory, to get the desired results elsewhere in Emacs.  */
-#undef HAVE_GETCWD
+#define HAVE_GETCWD 1
 
 /* Define to 1 if you have the `getdelim' function. */
 #undef HAVE_GETDELIM

=== modified file 'src/fileio.c'
--- src/fileio.c	2012-11-14 04:55:41 +0000
+++ src/fileio.c	2012-11-20 20:44:17 +0000
@@ -1133,7 +1133,7 @@
 		newdir = "/";
 	    }
 	  else
-	    getwd (adir);
+	    getcwd (adir, MAXPATHLEN + 1);
 	  newdir = adir;
 	}
 

=== modified file 'src/msdos.c'
--- src/msdos.c	2012-11-05 03:18:32 +0000
+++ src/msdos.c	2012-11-20 20:44:17 +0000
@@ -3784,7 +3784,7 @@
   Lisp_Object cmd;
 
   /* Get current directory as MSDOS cwd is not per-process.  */
-  getwd (oldwd);
+  getcwd (oldwd, sizeof oldwd);
 
   /* If argv[0] is the shell, it might come in any lettercase.
      Since `Fmember' is case-sensitive, we need to downcase

=== modified file 'src/sysdep.c'
--- src/sysdep.c	2012-11-20 17:33:00 +0000
+++ src/sysdep.c	2012-11-20 20:44:17 +0000
@@ -101,7 +101,6 @@
 #define _P_WAIT 0
 int _cdecl _spawnlp (int, const char *, const char *, ...);
 int _cdecl _getpid (void);
-extern char *getwd (char *);
 #endif
 
 #include "syssignal.h"
@@ -504,7 +503,7 @@
       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

=== modified file 'src/w32.c'
--- src/w32.c	2012-11-17 22:12:47 +0000
+++ src/w32.c	2012-11-20 20:44:17 +0000
@@ -901,8 +901,18 @@
 
 /* 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;
@@ -1818,7 +1828,7 @@
 	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))

=== modified file 'src/w32.h'
--- src/w32.h	2012-10-17 19:02:44 +0000
+++ src/w32.h	2012-11-20 20:44:17 +0000
@@ -163,7 +163,7 @@
 extern void register_child (int, int);
 
 extern void sys_sleep (int);
-extern char *getwd (char *);
+extern char *getcwd (char *, size_t);
 extern int sys_link (const char *, const char *);
 
 
@@ -181,4 +181,3 @@
 #endif /* HAVE_GNUTLS */
 
 #endif /* EMACS_W32_H */
-




[-- Attachment #2: unistd.txt --]
[-- Type: text/plain, Size: 16392 bytes --]

=== modified file 'ChangeLog'
--- ChangeLog	2012-11-20 08:29:04 +0000
+++ ChangeLog	2012-11-20 17:45:45 +0000
@@ -1,5 +1,8 @@
 2012-11-20  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.
+
 	Improve static checking of integer overflow and stack smashing.
 	* configure.ac (WARN_CFLAGS): Add -Wstack-protector
 	if using GCC 4.7.2 or later on a platform with

=== modified file 'admin/CPP-DEFINES'
--- admin/CPP-DEFINES	2012-11-17 22:12:47 +0000
+++ admin/CPP-DEFINES	2012-11-20 17:33:00 +0000
@@ -86,7 +86,6 @@
 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_GAI_STRERROR
 HAVE_GCONF
 HAVE_GETADDRINFO
-HAVE_GETCWD
 HAVE_GETDELIM
 HAVE_GETGRENT
 HAVE_GETHOSTNAME
@@ -178,7 +176,6 @@
 HAVE_GETRUSAGE
 HAVE_GETSOCKNAME
 HAVE_GETTIMEOFDAY
-HAVE_GETWD
 HAVE_GET_CURRENT_DIR_NAME
 HAVE_GHOSTSCRIPT
 HAVE_GIF
@@ -304,7 +301,6 @@
 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_TOUCHLOCK
 HAVE_TZNAME
 HAVE_TZSET
-HAVE_UNISTD_H
 HAVE_UNSIGNED_LONG_LONG_INT
 HAVE_UTIL_H
 HAVE_UTIMENSAT

=== modified file 'admin/ChangeLog'
--- admin/ChangeLog	2012-11-17 22:12:47 +0000
+++ admin/ChangeLog	2012-11-20 17:45:45 +0000
@@ -1,3 +1,9 @@
+2012-11-20  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).

=== modified file 'configure.ac'
--- configure.ac	2012-11-20 08:29:04 +0000
+++ configure.ac	2012-11-20 17:33:00 +0000
@@ -2889,7 +2889,7 @@
 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 \
@@ -2898,14 +2898,6 @@
 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.

=== modified file 'lib-src/ChangeLog'
--- lib-src/ChangeLog	2012-11-20 08:31:19 +0000
+++ lib-src/ChangeLog	2012-11-20 17:45:45 +0000
@@ -1,5 +1,15 @@
 2012-11-20  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.
+
 	* emacsclient.c (handle_sigcont, handle_sigtstp): Use raise (sig)
 	rather than kill (getpid (), sig), as it's simpler and safer.
 

=== modified file 'lib-src/emacsclient.c'
--- lib-src/emacsclient.c	2012-11-20 08:31:19 +0000
+++ lib-src/emacsclient.c	2012-11-20 17:33:00 +0000
@@ -88,10 +88,7 @@
 
 
 \f
-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 @@
   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 @@
       buf = (char *) xmalloc (strlen (pwd) + 1);
       strcpy (buf, pwd);
     }
-#ifdef HAVE_GETCWD
   else
     {
       size_t buf_size = 1024;
@@ -267,20 +263,6 @@
 	    }
         }
     }
-#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 @@
   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 ();

=== modified file 'lib-src/etags.c'
--- lib-src/etags.c	2012-09-17 00:56:08 +0000
+++ lib-src/etags.c	2012-11-20 17:33:00 +0000
@@ -123,19 +123,9 @@
 # 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 @@
 # 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 @@
   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 @@
 
   /* 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 @@
 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 @@
 static char *
 etags_getcwd (void)
 {
-#ifdef HAVE_GETCWD
   int bufsize = 200;
   char *path = xnew (bufsize, char);
 
@@ -6387,34 +6363,6 @@
 
   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

=== modified file 'lib-src/movemail.c'
--- lib-src/movemail.c	2012-11-17 22:12:47 +0000
+++ lib-src/movemail.c	2012-11-20 17:33:00 +0000
@@ -96,13 +96,6 @@
 #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

=== modified file 'nt/ChangeLog'
--- nt/ChangeLog	2012-11-18 16:54:31 +0000
+++ nt/ChangeLog	2012-11-20 20:44:17 +0000
@@ -1,3 +1,8 @@
+2012-11-20  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Assume POSIX 1003.1-1988 or later for unistd.h (Bug#12945).
+	* config.nt (HAVE_GETCWD): Now 1.
+
 2012-11-18  Eli Zaretskii  <eliz@gnu.org>
 
 	* inc/unistd.h: Don't include fcntl.h and don't define O_RDWR.

=== modified file 'nt/config.nt'
--- nt/config.nt	2012-11-17 23:58:56 +0000
+++ nt/config.nt	2012-11-20 20:44:17 +0000
@@ -411,11 +411,10 @@
 /* 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
+/* Define to 1 if you have the `getcwd' function.  This is
+   defined on w32.c, and does not really return the current
    directory, to get the desired results elsewhere in Emacs.  */
-#undef HAVE_GETCWD
+#define HAVE_GETCWD 1
 
 /* Define to 1 if you have the `getdelim' function. */
 #undef HAVE_GETDELIM

=== modified file 'src/ChangeLog'
--- src/ChangeLog	2012-11-20 20:06:17 +0000
+++ src/ChangeLog	2012-11-20 20:44:17 +0000
@@ -1,3 +1,15 @@
+2012-11-20  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]:
+	* msdos.c (run_msdos_command):
+	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, w32.h (getcwd): Rename from getwd, and switch to getcwd's API.
+
 2012-11-20  Stefan Monnier  <monnier@iro.umontreal.ca>
 
 	Conflate Qnil and Qunbound for `symbol-function'.

=== modified file 'src/alloc.c'
--- src/alloc.c	2012-11-20 20:06:17 +0000
+++ src/alloc.c	2012-11-20 20:09:49 +0000
@@ -63,10 +63,6 @@
 #endif
 
 #include <unistd.h>
-#ifndef HAVE_UNISTD_H
-extern void *sbrk ();
-#endif
-
 #include <fcntl.h>
 
 #ifdef USE_GTK

=== modified file 'src/fileio.c'
--- src/fileio.c	2012-11-14 04:55:41 +0000
+++ src/fileio.c	2012-11-20 20:44:17 +0000
@@ -1133,7 +1133,7 @@
 		newdir = "/";
 	    }
 	  else
-	    getwd (adir);
+	    getcwd (adir, MAXPATHLEN + 1);
 	  newdir = adir;
 	}
 

=== modified file 'src/msdos.c'
--- src/msdos.c	2012-11-05 03:18:32 +0000
+++ src/msdos.c	2012-11-20 20:44:17 +0000
@@ -3784,7 +3784,7 @@
   Lisp_Object cmd;
 
   /* Get current directory as MSDOS cwd is not per-process.  */
-  getwd (oldwd);
+  getcwd (oldwd, sizeof oldwd);
 
   /* If argv[0] is the shell, it might come in any lettercase.
      Since `Fmember' is case-sensitive, we need to downcase

=== modified file 'src/sysdep.c'
--- src/sysdep.c	2012-11-17 22:12:47 +0000
+++ src/sysdep.c	2012-11-20 20:44:17 +0000
@@ -101,7 +101,6 @@
 #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 @@
 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 @@
         return NULL;
       strcpy (buf, pwd);
     }
-#ifdef HAVE_GETCWD
   else
     {
       size_t buf_size = 1024;
@@ -179,22 +177,6 @@
             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 @@
       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_norealloc_allocator, careadlinkatcwd);
 }
 \f
-#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 */
-\f
 /* Directory routines for systems that don't have them. */
 
 #ifdef HAVE_DIRENT_H

=== modified file 'src/w32.c'
--- src/w32.c	2012-11-17 22:12:47 +0000
+++ src/w32.c	2012-11-20 20:44:17 +0000
@@ -901,8 +901,18 @@
 
 /* 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;
@@ -1818,7 +1828,7 @@
 	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))

=== modified file 'src/w32.h'
--- src/w32.h	2012-10-17 19:02:44 +0000
+++ src/w32.h	2012-11-20 20:44:17 +0000
@@ -163,7 +163,7 @@
 extern void register_child (int, int);
 
 extern void sys_sleep (int);
-extern char *getwd (char *);
+extern char *getcwd (char *, size_t);
 extern int sys_link (const char *, const char *);
 
 
@@ -181,4 +181,3 @@
 #endif /* HAVE_GNUTLS */
 
 #endif /* EMACS_W32_H */
-


^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#12945: Assume POSIX 1003.1-1988 or later for unistd.h.
  2012-11-20 20:51     ` Paul Eggert
@ 2012-11-21  3:40       ` Eli Zaretskii
  2012-11-21 21:07         ` Paul Eggert
  0 siblings, 1 reply; 6+ messages in thread
From: Eli Zaretskii @ 2012-11-21  3:40 UTC (permalink / raw)
  To: Paul Eggert; +Cc: 12945

> Date: Tue, 20 Nov 2012 12:51:00 -0800
> From: Paul Eggert <eggert@cs.ucla.edu>
> CC: 12945@debbugs.gnu.org
> 
> > Here's the patch for that:
> 
> Thanks.  Won't we need patches elswhere to match?

Some, but not all.  See below.

> Also, how is this related to the "#define getcwd _getcwd" in
> lib-src/ntlib.h?

We might need that for MSVC.  But that's a different issue, since
lib-src programs don't use any code in w32.c.

> --- nt/config.nt	2012-11-17 23:58:56 +0000
> +++ nt/config.nt	2012-11-20 20:44:17 +0000
> @@ -411,11 +411,10 @@
>  /* 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
> +/* Define to 1 if you have the `getcwd' function.  This is
> +   defined on w32.c, and does not really return the current
>     directory, to get the desired results elsewhere in Emacs.  */
> -#undef HAVE_GETCWD
> +#define HAVE_GETCWD 1

This should be removed entirely, since there are no HAVE_GETCWD tests
anymore, right?

> === modified file 'src/msdos.c'
> --- src/msdos.c	2012-11-05 03:18:32 +0000
> +++ src/msdos.c	2012-11-20 20:44:17 +0000
> @@ -3784,7 +3784,7 @@
>    Lisp_Object cmd;
>  
>    /* Get current directory as MSDOS cwd is not per-process.  */
> -  getwd (oldwd);
> +  getcwd (oldwd, sizeof oldwd);

MSDOS is unrelated.  This can be changed or left alone.

> --- src/sysdep.c	2012-11-20 17:33:00 +0000
> +++ src/sysdep.c	2012-11-20 20:44:17 +0000
> @@ -101,7 +101,6 @@
>  #define _P_WAIT 0
>  int _cdecl _spawnlp (int, const char *, const char *, ...);
>  int _cdecl _getpid (void);
> -extern char *getwd (char *);
>  #endif
>  
>  #include "syssignal.h"
> @@ -504,7 +503,7 @@
>        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

This is needed.

> === modified file 'src/w32.h'
> --- src/w32.h	2012-10-17 19:02:44 +0000
> +++ src/w32.h	2012-11-20 20:44:17 +0000
> @@ -163,7 +163,7 @@
>  extern void register_child (int, int);
>  
>  extern void sys_sleep (int);
> -extern char *getwd (char *);
> +extern char *getcwd (char *, size_t);
>  extern int sys_link (const char *, const char *);

This isn't needed; the prototype for getcwd is on a system header.
The prototype for getwd should be removed.





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#12945: Assume POSIX 1003.1-1988 or later for unistd.h.
  2012-11-21  3:40       ` Eli Zaretskii
@ 2012-11-21 21:07         ` Paul Eggert
  0 siblings, 0 replies; 6+ messages in thread
From: Paul Eggert @ 2012-11-21 21:07 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 12945-done

Thanks for the further review.  I installed the patch with your suggested changes
and am marking this as done.





^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2012-11-21 21:07 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-11-20 17:38 bug#12945: Assume POSIX 1003.1-1988 or later for unistd.h Paul Eggert
2012-11-20 18:14 ` Eli Zaretskii
2012-11-20 20:13   ` Eli Zaretskii
2012-11-20 20:51     ` Paul Eggert
2012-11-21  3:40       ` Eli Zaretskii
2012-11-21 21:07         ` Paul Eggert

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).