summaryrefslogtreecommitdiff
path: root/gdb/inf-child.c
diff options
context:
space:
mode:
authorUlrich Weigand <uweigand@de.ibm.com>2012-08-02 15:52:24 +0000
committerUlrich Weigand <uweigand@de.ibm.com>2012-08-02 15:52:24 +0000
commit715c3c9de50a7008f1297d6d64f79135a23c3b50 (patch)
treeea0a7d8096491a2a08f04df20827c858aeccf28d /gdb/inf-child.c
parent638a452d3c11f61ac374ae155e611deac48bfbd9 (diff)
downloadgdb-715c3c9de50a7008f1297d6d64f79135a23c3b50.tar.gz
ChangeLog:
* inf-child.c (inf_child_fileio_pwrite): If pwrite fails, fall back to attempting lseek/write. (inf_child_fileio_pread): Likewise for pread. gdbserver/ChangeLog: * hostio.c (handle_pread): If pread fails, fall back to attempting lseek/read. (handle_pwrite): Likewise for pwrite.
Diffstat (limited to 'gdb/inf-child.c')
-rw-r--r--gdb/inf-child.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/gdb/inf-child.c b/gdb/inf-child.c
index 54e65c5fbae..ae2dd1e1012 100644
--- a/gdb/inf-child.c
+++ b/gdb/inf-child.c
@@ -265,10 +265,15 @@ inf_child_fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
#ifdef HAVE_PWRITE
ret = pwrite (fd, write_buf, len, (long) offset);
#else
- ret = lseek (fd, (long) offset, SEEK_SET);
- if (ret != -1)
- ret = write (fd, write_buf, len);
+ ret = -1;
#endif
+ /* If we have no pwrite or it failed for this file, use lseek/write. */
+ if (ret == -1)
+ {
+ ret = lseek (fd, (long) offset, SEEK_SET);
+ if (ret != -1)
+ ret = write (fd, write_buf, len);
+ }
if (ret == -1)
*target_errno = inf_child_errno_to_fileio_error (errno);
@@ -288,10 +293,15 @@ inf_child_fileio_pread (int fd, gdb_byte *read_buf, int len,
#ifdef HAVE_PREAD
ret = pread (fd, read_buf, len, (long) offset);
#else
- ret = lseek (fd, (long) offset, SEEK_SET);
- if (ret != -1)
- ret = read (fd, read_buf, len);
+ ret = -1;
#endif
+ /* If we have no pread or it failed for this file, use lseek/read. */
+ if (ret == -1)
+ {
+ ret = lseek (fd, (long) offset, SEEK_SET);
+ if (ret != -1)
+ ret = read (fd, read_buf, len);
+ }
if (ret == -1)
*target_errno = inf_child_errno_to_fileio_error (errno);