]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/libbsd/libbsd/lib/contrib/src/fpurge.c
Update
[l4.git] / l4 / pkg / libbsd / libbsd / lib / contrib / src / fpurge.c
1 /*
2  * Copyright © 2011 Guillem Jover <guillem@hadrons.org>
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  * 3. The name of the author may not be used to endorse or promote products
13  *    derived from this software without specific prior written permission.
14  *
15  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
16  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
17  * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
18  * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
21  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
22  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
23  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
24  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  */
26
27 #include <errno.h>
28 #include <stdio.h>
29 #include <stdio_ext.h>
30
31 #ifdef HAVE___FPURGE
32 int
33 fpurge(FILE *fp)
34 {
35         if (fp == NULL || fileno(fp) < 0) {
36                 errno = EBADF;
37                 return EOF;
38         }
39
40         __fpurge(fp);
41
42         return 0;
43 }
44 #else
45 #error "Function fpurge() needs to be ported."
46 #endif
47
48 #ifdef TEST
49 int
50 main()
51 {
52         static FILE fp_bad;
53         FILE *fp;
54
55         if (fpurge(&fp_bad) == 0)
56                 return 1;
57
58         fp = fopen("/dev/zero", "r");
59         if (fpurge(fp) < 0)
60                 return 1;
61
62         fclose(fp);
63
64         return 0;
65 }
66 #endif