Move linux_find_memory_regions_full & co.
[deliverable/binutils-gdb.git] / gdb / target / target-utils.c
index 4e8fae7bb5b119171f862040b4b2d7f4f87ca9d2..cdfa6e698036162c67833b1126a7d26757fd2479 100644 (file)
 
 #include "common-defs.h"
 #include "target/target-utils.h"
+
+LONGEST
+read_alloc (gdb_byte **buf_p, int handle, read_alloc_pread_ftype *pread_func,
+           int padding)
+{
+  size_t buf_alloc, buf_pos;
+  gdb_byte *buf;
+  LONGEST n;
+  int target_errno;
+
+  /* Start by reading up to 4K at a time.  The target will throttle
+     this number down if necessary.  */
+  buf_alloc = 4096;
+  buf = xmalloc (buf_alloc);
+  buf_pos = 0;
+  while (1)
+    {
+      n = pread_func (handle, &buf[buf_pos], buf_alloc - buf_pos - padding,
+                     buf_pos, &target_errno);
+      if (n <= 0)
+       {
+         if (n < 0 || (n == 0 && buf_pos == 0))
+           xfree (buf);
+         else
+           *buf_p = buf;
+         if (n < 0)
+           {
+             /* An error occurred.  */
+             return -1;
+           }
+         else
+           {
+             /* Read all there was.  */
+             return buf_pos;
+           }
+       }
+
+      buf_pos += n;
+
+      /* If the buffer is filling up, expand it.  */
+      if (buf_alloc < buf_pos * 2)
+       {
+         buf_alloc *= 2;
+         buf = xrealloc (buf, buf_alloc);
+       }
+    }
+}
+
+char *
+read_stralloc (struct inferior *inf, const char *filename,
+              read_stralloc_func_ftype *func)
+{
+  gdb_byte *buffer;
+  char *bufstr;
+  LONGEST i, transferred;
+
+  transferred = func (inf, filename, &buffer, 1);
+  bufstr = (char *) buffer;
+
+  if (transferred < 0)
+    return NULL;
+
+  if (transferred == 0)
+    return xstrdup ("");
+
+  bufstr[transferred] = 0;
+
+  /* Check for embedded NUL bytes; but allow trailing NULs.  */
+  for (i = strlen (bufstr); i < transferred; i++)
+    if (bufstr[i] != 0)
+      {
+       warning (_("target file %s "
+                  "contained unexpected null characters"),
+                filename);
+       break;
+      }
+
+  return bufstr;
+}
This page took 0.024258 seconds and 4 git commands to generate.