/* * * $Header: /ub/chuck/work/class/533/proj2/lib/RCS/xfgets.c,v 1.2 90/10/14 23:44:26 chuck Exp $ * * Charles D. Cranor * Department of Computer Science * Washington University * * REVISION HISTORY: * * $Revision: 1.2 $ * * $Log: xfgets.c,v $ * Revision 1.2 90/10/14 23:44:26 chuck * First working version. * * Revision 1.1 90/10/14 21:42:17 chuck * Initial revision * * */ /* * xfgets.c Chuck Cranor CS-533 project lib * * get a line! */ #include #include #include int xfgets(fd, buf, sz) int fd, sz; char *buf; { int res = 0; int rd = 0; char *nln ; /* zero out buffer first */ memset(buf, 0, sz) ; while (res < sz - 1) { if ((res = recv(fd, buf, sz - 1, MSG_PEEK)) < 0) return -1 ; if ((nln = strchr(buf, '\n')) != NULL) { *(nln+1) = 0 ; rd = strlen(buf) ; recv(fd, buf, rd, 0) ; *nln = 0 ; return rd - 1 ; } } return res ; /* buffer fulled */ }