Changeset View
Changeset View
Standalone View
Standalone View
stand/libsa/gets.c
Show First 20 Lines • Show All 86 Lines • ▼ Show 20 Lines | |||||
} | } | ||||
int | int | ||||
fgetstr(char *buf, int size, int fd) | fgetstr(char *buf, int size, int fd) | ||||
{ | { | ||||
char c; | char c; | ||||
int err, len; | int err, len; | ||||
size--; /* leave space for terminator */ | |||||
len = 0; | len = 0; | ||||
while (size != 0) { | while (--size > 0) { /* leave space for terminator */ | ||||
err = read(fd, &c, sizeof(c)); | err = read(fd, &c, sizeof(c)); | ||||
if (err < 0) /* read error */ | if (err < 0) /* read error */ | ||||
return(-1); | return (-1); | ||||
if (err == 0) { /* EOF */ | if (err == 0) { /* EOF */ | ||||
if (len == 0) | if (len == 0) | ||||
return(-1); /* nothing to read */ | return (-1); /* nothing to read */ | ||||
break; | break; | ||||
} | } | ||||
if ((c == '\r') || /* line terminators */ | if ((c == '\r') || /* line terminators */ | ||||
(c == '\n')) | (c == '\n')) | ||||
break; | break; | ||||
*buf++ = c; /* keep char */ | *buf++ = c; /* keep char */ | ||||
size--; | |||||
len++; | len++; | ||||
} | } | ||||
*buf = 0; | *buf = '\0'; | ||||
return(len); | return (len); | ||||
} | } | ||||