"Fossies" - the Fresh Open Source Software Archive

Member "scanssh-2.1/atomicio.c" (18 Feb 2001, 1834 Bytes) of package /linux/privat/old/scanssh-2.1.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file.

    1 /*
    2  * Copyright (c) 1999 Theo de Raadt
    3  * All rights reserved.
    4  *
    5  * Redistribution and use in source and binary forms, with or without
    6  * modification, are permitted provided that the following conditions
    7  * are met:
    8  * 1. Redistributions of source code must retain the above copyright
    9  *    notice, this list of conditions and the following disclaimer.
   10  * 2. Redistributions in binary form must reproduce the above copyright
   11  *    notice, this list of conditions and the following disclaimer in the
   12  *    documentation and/or other materials provided with the distribution.
   13  *
   14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
   15  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   16  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   17  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
   18  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   19  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   20  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   21  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
   23  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   24  */
   25 
   26 #include <sys/types.h>
   27 #include <sys/uio.h>
   28 #include <unistd.h>
   29 #include <errno.h>
   30 
   31 #include "config.h"
   32 
   33 /*
   34  * ensure all of data on socket comes through. f==read || f==write
   35  */
   36 ssize_t
   37 atomicio(f, fd, _s, n)
   38     ssize_t (*f) ();
   39     int fd;
   40     void *_s;
   41     size_t n;
   42 {
   43     char *s = _s;
   44     ssize_t res, pos = 0;
   45 
   46     while (n > pos) {
   47         res = (f) (fd, s + pos, n - pos);
   48         switch (res) {
   49         case -1:
   50             if (errno == EINTR || errno == EAGAIN)
   51                 continue;
   52         case 0:
   53             return (res);
   54         default:
   55             pos += res;
   56         }
   57     }
   58     return (pos);
   59 }