- print_spaces_filtered (2 * recurse, stream);
- }
-}
-
-/* Read LEN bytes of target memory at address MEMADDR, placing the
- results in GDB's memory at MYADDR. Returns a count of the bytes
- actually read, and optionally a target_xfer_status value in the
- location pointed to by ERRPTR if ERRPTR is non-null. */
-
-/* FIXME: cagney/1999-10-14: Only used by val_print_string. Can this
- function be eliminated. */
-
-static int
-partial_memory_read (CORE_ADDR memaddr, gdb_byte *myaddr,
- int len, int *errptr)
-{
- int nread; /* Number of bytes actually read. */
- int errcode; /* Error from last read. */
-
- /* First try a complete read. */
- errcode = target_read_memory (memaddr, myaddr, len);
- if (errcode == 0)
- {
- /* Got it all. */
- nread = len;
- }
- else
- {
- /* Loop, reading one byte at a time until we get as much as we can. */
- for (errcode = 0, nread = 0; len > 0 && errcode == 0; nread++, len--)
- {
- errcode = target_read_memory (memaddr++, myaddr++, 1);
- }
- /* If an error, the last read was unsuccessful, so adjust count. */
- if (errcode != 0)
- {
- nread--;
- }
- }
- if (errptr != NULL)
- {
- *errptr = errcode;
- }
- return (nread);
-}
-
-/* Read a string from the inferior, at ADDR, with LEN characters of
- WIDTH bytes each. Fetch at most FETCHLIMIT characters. BUFFER
- will be set to a newly allocated buffer containing the string, and
- BYTES_READ will be set to the number of bytes read. Returns 0 on
- success, or a target_xfer_status on failure.
-
- If LEN > 0, reads the lesser of LEN or FETCHLIMIT characters
- (including eventual NULs in the middle or end of the string).
-
- If LEN is -1, stops at the first null character (not necessarily
- the first null byte) up to a maximum of FETCHLIMIT characters. Set
- FETCHLIMIT to UINT_MAX to read as many characters as possible from
- the string.
-
- Unless an exception is thrown, BUFFER will always be allocated, even on
- failure. In this case, some characters might have been read before the
- failure happened. Check BYTES_READ to recognize this situation. */
-
-int
-read_string (CORE_ADDR addr, int len, int width, unsigned int fetchlimit,
- enum bfd_endian byte_order, gdb::unique_xmalloc_ptr<gdb_byte> *buffer,
- int *bytes_read)
-{
- int errcode; /* Errno returned from bad reads. */
- unsigned int nfetch; /* Chars to fetch / chars fetched. */
- gdb_byte *bufptr; /* Pointer to next available byte in
- buffer. */
-
- /* Loop until we either have all the characters, or we encounter
- some error, such as bumping into the end of the address space. */
-
- buffer->reset (nullptr);
-
- if (len > 0)
- {
- /* We want fetchlimit chars, so we might as well read them all in
- one operation. */
- unsigned int fetchlen = std::min ((unsigned) len, fetchlimit);
-
- buffer->reset ((gdb_byte *) xmalloc (fetchlen * width));
- bufptr = buffer->get ();
-
- nfetch = partial_memory_read (addr, bufptr, fetchlen * width, &errcode)
- / width;
- addr += nfetch * width;
- bufptr += nfetch * width;