OSDN Git Service

* pa-host.c (MAP_FAILED): Define if not defined.
authordanglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 14 Dec 2004 22:48:53 +0000 (22:48 +0000)
committerdanglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 14 Dec 2004 22:48:53 +0000 (22:48 +0000)
(pa_gt_pch_use_address): Handle short reads.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@92166 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/pa/pa-host.c

index c6a5746..bb38fc8 100644 (file)
@@ -1,3 +1,8 @@
+2004-12-14  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+
+       * pa-host.c (MAP_FAILED): Define if not defined.
+       (pa_gt_pch_use_address): Handle short reads.
+
 2004-12-14  Richard Henderson  <rth@redhat.com>
 
        PR target/17990
index fed18f9..0d86e58 100644 (file)
 #include "hosthooks.h"
 #include "hosthooks-def.h"
 
+#ifndef MAP_FAILED
+#define MAP_FAILED (void *)-1L
+#endif
+
 static void *pa_gt_pch_get_address (size_t, int);
 static int pa_gt_pch_use_address (void *, size_t, int, size_t);
 
@@ -114,8 +118,16 @@ pa_gt_pch_use_address (void *base, size_t size, int fd, size_t offset)
   if (lseek (fd, offset, SEEK_SET) == (off_t)-1)
     return -1;
 
-  if (read (fd, base, size) == -1)
-    return -1;
+  while (size)
+    {
+      ssize_t nbytes;
+
+      nbytes = read (fd, base, MIN (size, SSIZE_MAX));
+      if (nbytes <= 0)
+        return -1;
+      base = (char *) base + nbytes;
+      size -= nbytes;
+    }
 
   return 1;
 }