On Tue, Aug 4, 2009 at 23:29, Brandon
Casey[off-list ref] wrote:
Alex Riesen wrote:
quoted
+ if (c == '\n' && len > 1 && buf[len - 2] == '\r')
+ buf[--len - 1] = '\n';
buf[len] = '\0';
return len;
What if \r lands at character 99 and \n is at character 100? If buf has
exactly 100 characters available for writing. ...
Ah, yes. You're right.
I have strong dislike towards unget, though. How about this, instead:
int read_line_with_nul(char *buf, int size, FILE *in)
{
int len = 0, c;
while (len < size) {
c = getc(in);
if (c == EOF)
break;
buf[len++] = c;
if (c == '\n')
break;
else if (len == size)
c = 0;
}
if (c == '\n' && len > 1 && buf[len - 2] == '\r')
buf[--len - 1] = '\n';
buf[len] = '\0';
return len;
}