diff --git a/src/interpret.c b/src/interpret.c index 084ba11401e533fd549430fbd586850d475bb13e..7b70d411a8720801de48f4837375873a76949bfa 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 233680c2f5709408075a60693731204e6adddf1a..31913f3bf561b927b45bb46a6aa8542865e1efcc 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 af8e4ae12873acb5b0cc0b480f9ed1237ad12b07..29b12e990a0df8b69cb682071f405b1a5f7128f9 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 0ec9f24f899806e24ccdd367801d06795b7761c7..2184b9baf59cf6646327c161f20d8ca3c3337565 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 20b88befcf20246b9148448e714a29b63a91ec6f..a55a05ced28a049969d25889dd66812759bd645b 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 01b946f810f79dc5dd256aabb0ef492a88d27159..225279a0460b25ba88a572316db52a16eb2c98c3 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)