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