Prex Home / Browse Source - Prex Version: 0.9.0

root/usr/lib/libc/stdio/fflush.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. fflush
  2. __sflush

   1 /*-
   2  * Copyright (c) 1990, 1993
   3  *      The Regents of the University of California.  All rights reserved.
   4  *
   5  * This code is derived from software contributed to Berkeley by
   6  * Chris Torek.
   7  *
   8  * Redistribution and use in source and binary forms, with or without
   9  * modification, are permitted provided that the following conditions
  10  * are met:
  11  * 1. Redistributions of source code must retain the above copyright
  12  *    notice, this list of conditions and the following disclaimer.
  13  * 2. Redistributions in binary form must reproduce the above copyright
  14  *    notice, this list of conditions and the following disclaimer in the
  15  *    documentation and/or other materials provided with the distribution.
  16  * 3. Neither the name of the University nor the names of its contributors
  17  *    may be used to endorse or promote products derived from this software
  18  *    without specific prior written permission.
  19  *
  20  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  21  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  23  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  24  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  25  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  26  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  27  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  28  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  29  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  30  * SUCH DAMAGE.
  31  */
  32 
  33 #include <errno.h>
  34 #include <stdio.h>
  35 #include "local.h"
  36 
  37 /* Flush a single file, or (if fp is NULL) all files.  */
  38 int
  39 fflush(fp)
  40         FILE *fp;
  41 {
  42 
  43         if (fp == NULL)
  44                 return (_fwalk(__sflush));
  45         if ((fp->_flags & (__SWR | __SRW)) == 0) {
  46                 errno = EBADF;
  47                 return (EOF);
  48         }
  49         return (__sflush(fp));
  50 }
  51 
  52 int
  53 __sflush(fp)
  54         FILE *fp;
  55 {
  56         unsigned char *p;
  57         int n, t;
  58 
  59         t = fp->_flags;
  60         if ((t & __SWR) == 0)
  61                 return (0);
  62 
  63         if ((p = fp->_bf._base) == NULL)
  64                 return (0);
  65 
  66         n = fp->_p - p;         /* write this much */
  67 
  68         /*
  69          * Set these immediately to avoid problems with longjmp and to allow
  70          * exchange buffering (via setvbuf) in user write function.
  71          */
  72         fp->_p = p;
  73         fp->_w = t & (__SLBF|__SNBF) ? 0 : fp->_bf._size;
  74 
  75         for (; n > 0; n -= t, p += t) {
  76                 t = __swrite(fp, (char *)p, n);
  77                 if (t <= 0) {
  78                         fp->_flags |= __SERR;
  79                         return (EOF);
  80                 }
  81         }
  82         return (0);
  83 }

/* [<][>][^][v][top][bottom][index][help] */