home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / TELECOM / OS9_Unix.lzh / RSHSRC / io.c < prev    next >
Text File  |  1992-09-07  |  2KB  |  87 lines

  1. /*
  2.  * Read "n" bytes from a descriptor.
  3.  * Use in place of read() when fd is a stream socket.
  4.  */
  5.  
  6. int
  7. readn(fd, ptr, nbytes)
  8. register int    fd;
  9. register char    *ptr;
  10. register int    nbytes;
  11. {
  12.     int    nleft, nread;
  13.  
  14.     nleft = nbytes;
  15.     while (nleft > 0) {
  16.         nread = read(fd, ptr, nleft);
  17.         if (nread < 0)
  18.             return(nread);        /* error, return < 0 */
  19.         else if (nread == 0)
  20.             break;            /* EOF */
  21.  
  22.         nleft -= nread;
  23.         ptr   += nread;
  24.     }
  25.     return(nbytes - nleft);        /* return >= 0 */
  26. }
  27. /*
  28.  * Write "n" bytes to a descriptor.
  29.  * Use in place of write() when fd is a stream socket.
  30.  */
  31.  
  32. int
  33. writen(fd, ptr, nbytes)
  34. register int    fd;
  35. register char    *ptr;
  36. register int    nbytes;
  37. {
  38.     int    nleft, nwritten;
  39.  
  40.     nleft = nbytes;
  41.     while (nleft > 0) {
  42.         nwritten = write(fd, ptr, nleft);
  43.         if (nwritten <= 0)
  44.             return(nwritten);        /* error */
  45.  
  46.         nleft -= nwritten;
  47.         ptr   += nwritten;
  48.     }
  49.     return(nbytes - nleft);
  50. }
  51. /*
  52.  * Read a line from a descriptor.  Read the line one byte at a time,
  53.  * looking for the newline.  We store the newline in the buffer,
  54.  * then follow it with a null (the same as fgets(3)).
  55.  * We return the number of characters up to, but not including,
  56.  * the null (the same as strlen(3)). There is a \n conversion included.
  57.  */
  58.  
  59. int
  60. readline(fd, ptr, maxlen)
  61. register int    fd;
  62. register char    *ptr;
  63. register int    maxlen;
  64. {
  65.     int    n, rc;
  66.     char    c;
  67.  
  68.     for (n = 1; n < maxlen; n++) {
  69.         if ( (rc = read(fd, &c, 1)) == 1) {
  70.             *ptr++ = c;
  71.             if (c == '\l' || c == '\r'){
  72.                 *(ptr-1)='\n';
  73.                 break;
  74.             }
  75.         } else if (rc == 0) {
  76.             if (n == 1)
  77.                 return(0);    /* EOF, no data read */
  78.             else
  79.                 break;        /* EOF, some data was read */
  80.         } else
  81.             return(-1);    /* error */
  82.     }
  83.  
  84.     *ptr = 0;
  85.     return(n);
  86. }
  87.