return len;
return origlen;
remote_read_bytes (memaddr, myaddr, len)     CORE_ADDR memaddr;     char *myaddr;     int len;{  char buf[PBUFSIZ];  int i;  char *p;  int done;  /* Chop transfer down if neccessary */#if 0  /* FIXME: This is wrong for larger packets */  if (len > PBUFSIZ / 2 - 1)    abort ();#endif  done = 0;  while (done < len)    {      int todo = len - done;      int cando = PBUFSIZ / 2 - 32; /* number of bytes that will fit. */      if (todo > cando)	todo = cando;      /* FIXME-32x64: Need a version of print_address_numeric which puts the	 result in a buffer like sprintf.  */      sprintf (buf, "m%lx,%x", (unsigned long) memaddr + done, todo);      putpkt (buf);      getpkt (buf, 0);      if (buf[0] == 'E')	{	  /* There is no correspondance between what the remote protocol uses	     for errors and errno codes.  We would like a cleaner way of	     representing errors (big enough to include errno codes, bfd_error	     codes, and others).  But for now just return EIO.  */	  errno = EIO;	  return 0;	}  /* Reply describes memory byte by byte,     each byte encoded as two hex characters.  */      p = buf;      for (i = 0; i < todo; i++)	{	  if (p[0] == 0 || p[1] == 0)	    /* Reply is short.  This means that we were able to read only part	       of what we wanted to.  */	    return i + done;	  myaddr[i + done] = fromhex (p[0]) * 16 + fromhex (p[1]);	  p += 2;	}      done += todo;    }  return len;}