From cf39c23d1476feceba45f12f00584e97236ae939 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fredrik=20H=C3=BCbinette=20=28Hubbe=29?= <hubbe@hubbe.net>
Date: Mon, 18 Nov 1996 15:13:35 -0800
Subject: [PATCH] all calls to open(2) now handles EINTR

Rev: src/interpret.c:1.10
Rev: src/modules/files/file.c:1.13
Rev: src/modules/image/font.c:1.7
Rev: src/modules/spider/sharedmem.c:1.5
Rev: src/program.c:1.8
Rev: src/rusage.c:1.3
---
 src/interpret.c                | 11 ++++++++---
 src/modules/files/file.c       | 10 ++++------
 src/modules/image/font.c       |  7 +++++--
 src/modules/spider/sharedmem.c |  4 +++-
 src/program.c                  | 12 ++++++++----
 src/rusage.c                   |  9 +++------
 6 files changed, 31 insertions(+), 22 deletions(-)

diff --git a/src/interpret.c b/src/interpret.c
index 084ba11401..7b70d411a8 100644
--- a/src/interpret.c
+++ b/src/interpret.c
@@ -4,7 +4,7 @@
 ||| See the files COPYING and DISCLAIMER for more information.
 \*/
 #include "global.h"
-RCSID("$Id: interpret.c,v 1.9 1996/11/14 01:24:09 hubbe Exp $");
+RCSID("$Id: interpret.c,v 1.10 1996/11/18 23:12:31 hubbe Exp $");
 #include "interpret.h"
 #include "object.h"
 #include "program.h"
@@ -83,8 +83,13 @@ void init_interpreter()
 #define MAP_ANONYMOUS 0
   if(fd == -1)
   {
-    fd=open("/dev/zero",O_RDONLY);
-    if(fd < 0) fatal("Failed to open /dev/zero.\n");
+    while(1)
+    {
+      fd=open("/dev/zero",O_RDONLY);
+      if(fd >= 0) break;
+      if(errno != EINTR)
+	fatal("Failed to open /dev/zero.\n");
+    }
   }
 #endif
 
diff --git a/src/modules/files/file.c b/src/modules/files/file.c
index 233680c2f5..31913f3bf5 100644
--- a/src/modules/files/file.c
+++ b/src/modules/files/file.c
@@ -6,7 +6,7 @@
 #define READ_BUFFER 16384
 
 #include "global.h"
-RCSID("$Id: file.c,v 1.12 1996/11/16 05:17:11 hubbe Exp $");
+RCSID("$Id: file.c,v 1.13 1996/11/18 23:13:05 hubbe Exp $");
 #include "types.h"
 #include "interpret.h"
 #include "svalue.h"
@@ -491,9 +491,10 @@ static void file_open(INT32 args)
   if(!( flags &  (FILE_READ | FILE_WRITE)))
     error("Must open file for at least one of read and write.\n");
 
- retry:
   THREADS_ALLOW();
-  fd=open(str->str,map(flags), 00666);
+  do {
+    fd=open(str->str,map(flags), 00666);
+  } while(fd < 0 && errno == EINTR);
   THREADS_DISALLOW();
 
   if(!fp->current_object->prog)
@@ -507,9 +508,6 @@ static void file_open(INT32 args)
   }
   else if(fd < 0)
   {
-    if(errno == EINTR)
-      goto retry;
-
     ERRNO=EBADF;
   }
   else
diff --git a/src/modules/image/font.c b/src/modules/image/font.c
index af8e4ae128..29b12e990a 100644
--- a/src/modules/image/font.c
+++ b/src/modules/image/font.c
@@ -1,4 +1,4 @@
-/* $Id: font.c,v 1.6 1996/11/14 12:34:57 law Exp $ */
+/* $Id: font.c,v 1.7 1996/11/18 23:13:21 hubbe Exp $ */
 
 #include "global.h"
 
@@ -165,8 +165,11 @@ void font_load(INT32 args)
       free_font_struct(THIS);
       THIS=NULL;
    }
+   do {
+     fd = open(sp[-args].u.string->str,O_RDONLY);
+   } while(fd < 0 && errno == EINTR);
 
-   if ( (fd = open(sp[-args].u.string->str,O_RDONLY)) > -1)
+   if (fd >= 0)
    {
       long size;
       size = file_size(fd);
diff --git a/src/modules/spider/sharedmem.c b/src/modules/spider/sharedmem.c
index 0ec9f24f89..2184b9baf5 100644
--- a/src/modules/spider/sharedmem.c
+++ b/src/modules/spider/sharedmem.c
@@ -60,7 +60,9 @@ static void new_shared_chunk(int len)
 
   sprintf(fname, "/tmp/.spinnerlock_%d", (int)getuid());
   unlink(fname);
-  fd = open(fname, O_RDWR|O_CREAT, 0777);
+  do {
+    fd = open(fname, O_RDWR|O_CREAT, 0777);
+  } while(fd < 0 && errno == EINTR);
   unlink(fname);
 
   lseek(fd, len, SEEK_SET);
diff --git a/src/program.c b/src/program.c
index 20b88befcf..a55a05ced2 100644
--- a/src/program.c
+++ b/src/program.c
@@ -4,7 +4,7 @@
 ||| See the files COPYING and DISCLAIMER for more information.
 \*/
 #include "global.h"
-RCSID("$Id: program.c,v 1.7 1996/11/16 05:17:10 hubbe Exp $");
+RCSID("$Id: program.c,v 1.8 1996/11/18 23:12:32 hubbe Exp $");
 #include "program.h"
 #include "object.h"
 #include "dynamic_buffer.h"
@@ -1292,9 +1292,13 @@ struct program *compile_file(struct pike_string *file_name)
   int fd;
   struct program *p;
 
-  fd=open(file_name->str,O_RDONLY);
-  if(fd < 0)
-    error("Couldn't open file '%s'.\n",file_name->str);
+  while(1)
+  {
+    fd=open(file_name->str,O_RDONLY);
+    if(fd >= 0) break;
+    if(errno != EINTR)
+      error("Couldn't open file '%s'.\n",file_name->str);
+  }
 
 #define FILE_STATE
 #define PUSH
diff --git a/src/rusage.c b/src/rusage.c
index 01b946f810..225279a046 100644
--- a/src/rusage.c
+++ b/src/rusage.c
@@ -34,17 +34,14 @@ INT32 *low_rusage()
   prusage_t  pru;
   prstatus_t prs;
 
-  if(proc_fd < 0)
+  while(proc_fd < 0)
   {
     char proc_name[30];
 
     sprintf(proc_name, "/proc/%05ld", (long)getpid());
     proc_fd = open(proc_name, O_RDONLY);
-    if(proc_fd < 0)
-    {
-      /* fprintf(stderr, "Couldn't open %s\n", proc_name); */
-      return 0;
-    }
+    if(proc_fd >= 0) break;
+    if(errno != EINTR) return 0;
   }
 
   while(ioctl(proc_fd, PIOCUSAGE, &pru) < 0)
-- 
GitLab