microblaze getchar() not functioning properly

Andrew Bennett Andrew.Bennett@imgtec.com
Wed Aug 24 10:51:00 GMT 2011


> Can you please let me know whether the above change were correct..

I am assuming here that the code you pasted is correct.

If so, the read_macro function will only read and return one byte due to
the if statement being incorrectly bracketed.  If the function is called
with a buffer of more than 1 byte (ie. nbytes > 1) the buffer will only
contain 1 character rather than the number of characters given in
nbytes.  

I think the code should read:

int read_micro (int fd, char* buf, int nbytes)
{
  int i = 0;

  for (i = 0; i < nbytes; i++) {
    *(buf + i) = inbyte();
    if ((*(buf + i) == '\n' || *(buf + i) == '\r'))
    {
      i++;
      break;
    }
  }

  return i;
}

Regards,


Andrew



More information about the Gcc-help mailing list