diff options
Diffstat (limited to 'overlay')
-rw-r--r-- | overlay/mgdb/gdb/winnt-nat.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/overlay/mgdb/gdb/winnt-nat.c b/overlay/mgdb/gdb/winnt-nat.c index 4458878..bcb4c5b 100644 --- a/overlay/mgdb/gdb/winnt-nat.c +++ b/overlay/mgdb/gdb/winnt-nat.c @@ -191,8 +191,15 @@ static enum target_xfer_status winnt_xfer_partial( (void)t; (void)object; (void)annex; - (void)offset; - (void)len; + + ssize_t ret; + pid_t pid; + struct winnt_process * pidinfo; + + pid = inferior_ptid.pid; + + if (!(pidinfo = winnt_process_record(pid))) + winnt_perror("internal error: record not found",pid); if (readbuf && writebuf) winnt_error("internal error: both readbuf and writebuf are non-null."); @@ -203,7 +210,16 @@ static enum target_xfer_status winnt_xfer_partial( if (!nxfered) winnt_error("internal error: nxfered is null."); - return TARGET_XFER_E_IO; + ret = (readbuf) + ? __dbg_vm_read(pidinfo->pfd,readbuf,len,offset) + : __dbg_vm_write(pidinfo->pfd,writebuf,len,offset); + + if (ret < 0) + return TARGET_XFER_E_IO; + + *nxfered = ret; + + return TARGET_XFER_OK; } static int winnt_thread_alive (struct target_ops * t, ptid_t ptid) |