aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/libiberty
diff options
context:
space:
mode:
authorBen Cheng <bccheng@google.com>2014-04-22 13:33:12 -0700
committerBen Cheng <bccheng@google.com>2014-04-22 13:33:12 -0700
commite3cc64dec20832769406aa38cde83c7dd4194bf4 (patch)
treeef8e39be37cfe0cb69d850043b7924389ff17164 /gcc-4.9/libiberty
parentf33c7b3122b1d7950efa88067c9a156229ba647b (diff)
downloadtoolchain_gcc-e3cc64dec20832769406aa38cde83c7dd4194bf4.tar.gz
toolchain_gcc-e3cc64dec20832769406aa38cde83c7dd4194bf4.tar.bz2
toolchain_gcc-e3cc64dec20832769406aa38cde83c7dd4194bf4.zip
[4.9] GCC 4.9.0 official release refresh
Change-Id: Ic99a7da8b44b789a48aeec93b33e93944d6e6767
Diffstat (limited to 'gcc-4.9/libiberty')
-rw-r--r--gcc-4.9/libiberty/ChangeLog14
-rw-r--r--gcc-4.9/libiberty/simple-object.c50
2 files changed, 48 insertions, 16 deletions
diff --git a/gcc-4.9/libiberty/ChangeLog b/gcc-4.9/libiberty/ChangeLog
index 9dab384cc..5b78c2e72 100644
--- a/gcc-4.9/libiberty/ChangeLog
+++ b/gcc-4.9/libiberty/ChangeLog
@@ -1,3 +1,17 @@
+2014-04-22 Release Manager
+
+ * GCC 4.9.0 released.
+
+2014-04-01 Richard Biener <rguenther@suse.de>
+
+ * simple-object.c (simple_object_internal_write): Handle
+ EINTR and short writes.
+
+2014-03-28 Richard Biener <rguenther@suse.de>
+
+ * simple-object.c (simple_object_internal_read): Handle
+ EINTR and short reads.
+
2014-03-13 Uros Bizjak <ubizjak@gmail.com>
* regex.c (bzero) [!_LIBC]: Define without coma expression.
diff --git a/gcc-4.9/libiberty/simple-object.c b/gcc-4.9/libiberty/simple-object.c
index fde3454dd..5d379d053 100644
--- a/gcc-4.9/libiberty/simple-object.c
+++ b/gcc-4.9/libiberty/simple-object.c
@@ -63,8 +63,6 @@ simple_object_internal_read (int descriptor, off_t offset,
unsigned char *buffer, size_t size,
const char **errmsg, int *err)
{
- ssize_t got;
-
if (lseek (descriptor, offset, SEEK_SET) < 0)
{
*errmsg = "lseek";
@@ -72,15 +70,26 @@ simple_object_internal_read (int descriptor, off_t offset,
return 0;
}
- got = read (descriptor, buffer, size);
- if (got < 0)
+ do
{
- *errmsg = "read";
- *err = errno;
- return 0;
+ ssize_t got = read (descriptor, buffer, size);
+ if (got == 0)
+ break;
+ else if (got > 0)
+ {
+ buffer += got;
+ size -= got;
+ }
+ else if (errno != EINTR)
+ {
+ *errmsg = "read";
+ *err = errno;
+ return 0;
+ }
}
+ while (size > 0);
- if ((size_t) got < size)
+ if (size > 0)
{
*errmsg = "file too short";
*err = 0;
@@ -98,8 +107,6 @@ simple_object_internal_write (int descriptor, off_t offset,
const unsigned char *buffer, size_t size,
const char **errmsg, int *err)
{
- ssize_t wrote;
-
if (lseek (descriptor, offset, SEEK_SET) < 0)
{
*errmsg = "lseek";
@@ -107,15 +114,26 @@ simple_object_internal_write (int descriptor, off_t offset,
return 0;
}
- wrote = write (descriptor, buffer, size);
- if (wrote < 0)
+ do
{
- *errmsg = "write";
- *err = errno;
- return 0;
+ ssize_t wrote = write (descriptor, buffer, size);
+ if (wrote == 0)
+ break;
+ else if (wrote > 0)
+ {
+ buffer += wrote;
+ size -= wrote;
+ }
+ else if (errno != EINTR)
+ {
+ *errmsg = "write";
+ *err = errno;
+ return 0;
+ }
}
+ while (size > 0);
- if ((size_t) wrote < size)
+ if (size > 0)
{
*errmsg = "short write";
*err = 0;