GNU bug report logs - #12968
Assume POSIX 1003.1-1988 or later for errno.h.

Previous Next

Package: emacs;

Reported by: Paul Eggert <eggert <at> cs.ucla.edu>

Date: Fri, 23 Nov 2012 09:07:02 UTC

Severity: normal

Tags: patch

Done: Paul Eggert <eggert <at> cs.ucla.edu>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Paul Eggert <eggert <at> cs.ucla.edu>
To: 12968 <at> debbugs.gnu.org
Subject: bug#12968: Assume POSIX 1003.1-1988 or later for errno.h.
Date: Fri, 23 Nov 2012 01:04:27 -0800
Here's a patch to simplify Emacs by assuming
POSIX 1003.1-1988 or later for errno.h, which I plan
to install soon.  This should be safe as other parts of Emacs
are already assuming the relevant macros.  I haven't tested
this on Microsoft platforms though.

=== modified file 'lib-src/ChangeLog'
--- lib-src/ChangeLog	2012-11-23 08:28:06 +0000
+++ lib-src/ChangeLog	2012-11-23 08:56:17 +0000
@@ -1,5 +1,8 @@
 2012-11-23  Paul Eggert  <eggert <at> cs.ucla.edu>
 
+	Assume POSIX 1003.1-1988 or later for errno.h.
+	* movemail.c (main): Assume EAGAIN and EBUSY.
+
 	movemail: treat EACCES etc. failures as permanent
 	* movemail.c (main): Treat any link failure other than EEXIST as a
 	permanent failure, not just EPERM.  EACCES, for example.

=== modified file 'lib-src/movemail.c'
--- lib-src/movemail.c	2012-11-23 08:28:06 +0000
+++ lib-src/movemail.c	2012-11-23 08:56:17 +0000
@@ -430,22 +430,10 @@
 	 for certain failure codes.  */
       if (status < 0)
 	{
-	  if (++lockcount <= 5)
+	  if (++lockcount <= 5 && (errno == EAGAIN || errno == EBUSY))
 	    {
-#ifdef EAGAIN
-	      if (errno == EAGAIN)
-		{
-		  sleep (1);
-		  goto retry_lock;
-		}
-#endif
-#ifdef EBUSY
-	      if (errno == EBUSY)
-		{
-		  sleep (1);
-		  goto retry_lock;
-		}
-#endif
+	      sleep (1);
+	      goto retry_lock;
 	    }
 
 	  pfatal_with_name (inname);

=== modified file 'src/ChangeLog'
--- src/ChangeLog	2012-11-23 08:47:34 +0000
+++ src/ChangeLog	2012-11-23 08:59:17 +0000
@@ -1,3 +1,16 @@
+2012-11-23  Paul Eggert  <eggert <at> cs.ucla.edu>
+
+	Assume POSIX 1003.1-1988 or later for errno.h.
+	* dired.c (directory_files_internal, file_name_completion):
+	Assume EAGAIN and EINTR are defined.
+	* fileio.c (Fcopy_file): Assume EISDIR is defined.
+	* gmalloc.c (ENOMEM, EINVAL): Assume they're defined.
+	* gnutls.c (emacs_gnutls_write): Assume EAGAIN is defined.
+	* lread.c (readbyte_from_file): Assume EINTR is defined.
+	* process.c (wait_reading_process_output, send_process) [subprocesses]:
+	Assume EIO and EAGAIN are defined.
+	* unexcoff.c (write_segment): Assume EFAULT is defined.
+
 2012-11-23  Eli Zaretskii  <eliz <at> gnu.org>
 
 	* makefile.w32-in (globals.h, gl-stamp): Use $(SWITCHCHAR) instead

=== modified file 'src/dired.c'
--- src/dired.c	2012-11-23 07:48:43 +0000
+++ src/dired.c	2012-11-23 08:56:17 +0000
@@ -193,19 +193,15 @@
 
       errno = 0;
       dp = readdir (d);
-
-      if (dp == NULL && (0
-#ifdef EAGAIN
-			 || errno == EAGAIN
-#endif
-#ifdef EINTR
-			 || errno == EINTR
-#endif
-			 ))
-	{ QUIT; continue; }
-
-      if (dp == NULL)
-	break;
+      if (!dp)
+	{
+	  if (errno == EAGAIN || errno == EINTR)
+	    {
+	      QUIT;
+	      continue;
+	    }
+	  break;
+	}
 
       len = dirent_namelen (dp);
       name = finalname = make_unibyte_string (dp->d_name, len);
@@ -480,17 +476,15 @@
 
       errno = 0;
       dp = readdir (d);
-      if (dp == NULL && (0
-# ifdef EAGAIN
-			 || errno == EAGAIN
-# endif
-# ifdef EINTR
-			 || errno == EINTR
-# endif
-			 ))
-	{ QUIT; continue; }
-
-      if (!dp) break;
+      if (!dp)
+	{
+	  if (errno == EAGAIN || errno == EINTR)
+	    {
+	      QUIT;
+	      continue;
+	    }
+	  break;
+	}
 
       len = dirent_namelen (dp);
 

=== modified file 'src/fileio.c'
--- src/fileio.c	2012-11-21 21:06:52 +0000
+++ src/fileio.c	2012-11-23 08:56:17 +0000
@@ -1995,10 +1995,8 @@
     {
       if (!(S_ISREG (st.st_mode)) && !(S_ISLNK (st.st_mode)))
 	{
-#if defined (EISDIR)
 	  /* Get a better looking error message. */
 	  errno = EISDIR;
-#endif /* EISDIR */
 	  report_file_error ("Non-regular file", Fcons (file, Qnil));
 	}
     }

=== modified file 'src/gmalloc.c'
--- src/gmalloc.c	2012-10-01 06:36:54 +0000
+++ src/gmalloc.c	2012-11-23 08:56:17 +0000
@@ -1645,14 +1645,6 @@
   return result;
 }
 
-#ifndef ENOMEM
-#define ENOMEM 12
-#endif
-
-#ifndef EINVAL
-#define EINVAL 22
-#endif
-
 int
 posix_memalign (void **memptr, size_t alignment, size_t size)
 {

=== modified file 'src/gnutls.c'
--- src/gnutls.c	2012-09-23 19:36:31 +0000
+++ src/gnutls.c	2012-11-23 08:56:17 +0000
@@ -359,12 +359,7 @@
 
   if (proc->gnutls_initstage != GNUTLS_STAGE_READY)
     {
-#ifdef EWOULDBLOCK
-      errno = EWOULDBLOCK;
-#endif
-#ifdef EAGAIN
       errno = EAGAIN;
-#endif
       return 0;
     }
 
@@ -384,14 +379,7 @@
 		 appropriately so that send_process retries the
 		 correct way instead of erroring out. */
 	      if (rtnval == GNUTLS_E_AGAIN)
-		{
-#ifdef EWOULDBLOCK
-		  errno = EWOULDBLOCK;
-#endif
-#ifdef EAGAIN
-		  errno = EAGAIN;
-#endif
-		}
+		errno = EAGAIN;
 	      break;
 	    }
 	}

=== modified file 'src/keyboard.c'
--- src/keyboard.c	2012-11-17 22:12:47 +0000
+++ src/keyboard.c	2012-11-23 08:56:17 +0000
@@ -6986,10 +6986,7 @@
             an EAGAIN error.  Does anybody know of a situation
             where a retry is actually needed?  */
 #if 0
-         nread < 0 && (errno == EAGAIN
-#ifdef EFAULT
-                       || errno == EFAULT
-#endif
+         nread < 0 && (errno == EAGAIN || errno == EFAULT
 #ifdef EBADSLT
                        || errno == EBADSLT
 #endif

=== modified file 'src/lread.c'
--- src/lread.c	2012-11-20 20:06:17 +0000
+++ src/lread.c	2012-11-23 08:56:17 +0000
@@ -440,7 +440,6 @@
   block_input ();
   c = getc (instream);
 
-#ifdef EINTR
   /* Interrupted reads have been observed while reading over the network.  */
   while (c == EOF && ferror (instream) && errno == EINTR)
     {
@@ -450,7 +449,6 @@
       clearerr (instream);
       c = getc (instream);
     }
-#endif
 
   unblock_input ();
 

=== modified file 'src/process.c'
--- src/process.c	2012-11-17 22:12:47 +0000
+++ src/process.c	2012-11-23 08:56:17 +0000
@@ -4432,14 +4432,8 @@
 		  total_nread += nread;
 		  got_some_input = 1;
 		}
-#ifdef EIO
-	      else if (nread == -1 && EIO == errno)
-		break;
-#endif
-#ifdef EAGAIN
-	      else if (nread == -1 && EAGAIN == errno)
-		break;
-#endif
+	      else if (nread == -1 && (errno == EIO || errno == EAGAIN))
+		break;
 #ifdef EWOULDBLOCK
 	      else if (nread == -1 && EWOULDBLOCK == errno)
 		break;
@@ -5517,13 +5511,10 @@
 
 	  if (rv < 0)
 	    {
-	      if (0
+	      if (errno == EAGAIN
 #ifdef EWOULDBLOCK
 		  || errno == EWOULDBLOCK
 #endif
-#ifdef EAGAIN
-		  || errno == EAGAIN
-#endif
 		  )
 		/* Buffer is full.  Wait, accepting input;
 		   that may allow the program

=== modified file 'src/unexcoff.c'
--- src/unexcoff.c	2012-09-15 07:06:56 +0000
+++ src/unexcoff.c	2012-11-23 08:56:17 +0000
@@ -332,11 +332,7 @@
 	 a gap between the old text segment and the old data segment.
 	 This gap has probably been remapped into part of the text segment.
 	 So write zeros for it.  */
-      if (ret == -1
-#ifdef EFAULT
-	  && errno == EFAULT
-#endif
-	  )
+      if (ret == -1 && errno == EFAULT)
 	{
 	  /* Write only a page of zeros at once,
 	     so that we don't overshoot the start





This bug report was last modified 12 years and 180 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.