[BACK]Return to atomicio.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / ssh

Diff for /src/usr.bin/ssh/atomicio.c between version 1.12 and 1.12.6.1

version 1.12, 2003/07/31 15:50:16 version 1.12.6.1, 2005/09/02 03:44:59
Line 1 
Line 1 
 /*  /*
    * Copyright (c) 2005 Anil Madhavapeddy. All rights reserved.
  * Copyright (c) 1995,1999 Theo de Raadt.  All rights reserved.   * Copyright (c) 1995,1999 Theo de Raadt.  All rights reserved.
  * All rights reserved.   * All rights reserved.
  *   *
Line 31 
Line 32 
 /*  /*
  * ensure all of data on socket comes through. f==read || f==vwrite   * ensure all of data on socket comes through. f==read || f==vwrite
  */   */
 ssize_t  size_t
 atomicio(f, fd, _s, n)  atomicio(f, fd, _s, n)
         ssize_t (*f) (int, void *, size_t);          ssize_t (*f) (int, void *, size_t);
         int fd;          int fd;
Line 39 
Line 40 
         size_t n;          size_t n;
 {  {
         char *s = _s;          char *s = _s;
         ssize_t res, pos = 0;          size_t pos = 0;
           ssize_t res;
   
         while (n > pos) {          while (n > pos) {
                 res = (f) (fd, s + pos, n - pos);                  res = (f) (fd, s + pos, n - pos);
Line 47 
Line 49 
                 case -1:                  case -1:
                         if (errno == EINTR || errno == EAGAIN)                          if (errno == EINTR || errno == EAGAIN)
                                 continue;                                  continue;
                           return 0;
                 case 0:                  case 0:
                         return (res);                          errno = EPIPE;
                           return pos;
                 default:                  default:
                         pos += res;                          pos += (u_int)res;
                 }                  }
         }          }
         return (pos);          return (pos);

Legend:
Removed from v.1.12  
changed lines
  Added in v.1.12.6.1