aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/pa/pa-host.c16
2 files changed, 19 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c6a5746..bb38fc8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/config/pa/pa-host.c b/gcc/config/pa/pa-host.c
index fed18f9..0d86e58 100644
--- a/gcc/config/pa/pa-host.c
+++ b/gcc/config/pa/pa-host.c
@@ -26,6 +26,10 @@
#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;
}