Re: microblaze getchar() not functioning properly

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 08/24/2011 03:51 AM, Andrew Bennett wrote:
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;
}

This corrected version is identical to read() in libgloss/read.c in Newlib.

--
Michael Eager	 eager@xxxxxxxxxxxx
1960 Park Blvd., Palo Alto, CA 94306  650-325-8077


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux