diff options
author | midipix <writeonce@midipix.org> | 2019-09-09 05:06:17 +0000 |
---|---|---|
committer | midipix <writeonce@midipix.org> | 2019-09-09 05:07:27 +0000 |
commit | f8ee0138e4c3b517d6cfe42cd34287835dc98a45 (patch) | |
tree | ea33d95906726952a3856cc3151862d529f1a58c | |
parent | b095cb097904fbebb7ce8879f46dbe34988bfcc8 (diff) | |
download | chainport-f8ee0138e4c3b517d6cfe42cd34287835dc98a45.tar.bz2 chainport-f8ee0138e4c3b517d6cfe42cd34287835dc98a45.tar.xz |
mgdb: winnt_xfer_partial((): initial implementation.
-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) |