* remote.c (remote_xfer_partial): Handle TARGET_OBJECT_MEMORY.
authorDaniel Jacobowitz <drow@false.org>
Tue, 5 Oct 2004 19:52:04 +0000 (19:52 +0000)
committerDaniel Jacobowitz <drow@false.org>
Tue, 5 Oct 2004 19:52:04 +0000 (19:52 +0000)
gdb/ChangeLog
gdb/remote.c

index bb3abd0..702dbe7 100644 (file)
@@ -1,3 +1,7 @@
+2004-10-05  Daniel Jacobowitz  <dan@debian.org>
+
+       * remote.c (remote_xfer_partial): Handle TARGET_OBJECT_MEMORY.
+
 2004-10-05  Andrew Cagney  <cagney@gnu.org>
 
        * version.in: Bump to version 6.2.50_YYYY-MM-DD-cvs.
index 5ea5d12..7cbbbd8 100644 (file)
@@ -4864,6 +4864,31 @@ remote_xfer_partial (struct target_ops *ops, enum target_object object,
   char *p2 = &buf2[0];
   char query_type;
 
+  /* Handle memory using remote_xfer_memory.  */
+  if (object == TARGET_OBJECT_MEMORY)
+    {
+      int xfered;
+      errno = 0;
+
+      if (writebuf != NULL)
+       {
+         void *buffer = xmalloc (len);
+         struct cleanup *cleanup = make_cleanup (xfree, buffer);
+         memcpy (buffer, writebuf, len);
+         xfered = remote_xfer_memory (offset, buffer, len, 1, NULL, ops);
+         do_cleanups (cleanup);
+       }
+      else
+       xfered = remote_xfer_memory (offset, readbuf, len, 0, NULL, ops);
+
+      if (xfered > 0)
+       return xfered;
+      else if (xfered == 0 && errno == 0)
+       return 0;
+      else
+       return -1;
+    }
+
   /* Only handle reads.  */
   if (writebuf != NULL || readbuf == NULL)
     return -1;