1 /*
2  * Copyright (c) 2014 Red Hat, Inc.
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 AND CONTRIBUTORS ``AS IS'' AND
15  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24  * SUCH DAMAGE.
25  */
26 /*
27 FUNCTION
28 <<__fsetlocking>>---set or query locking mode on FILE stream
29 
30 INDEX
31 	__fsetlocking
32 
33 SYNOPSIS
34 	#include <stdio.h>
35 	#include <stdio_ext.h>
36 	int __fsetlocking(FILE *<[fp]>, int <[type]>);
37 
38 DESCRIPTION
39 This function sets how the stdio functions handle locking of FILE <[fp]>.
40 The following values describe <[type]>:
41 
42 <<FSETLOCKING_INTERNAL>> is the default state, where stdio functions
43 automatically lock and unlock the stream.
44 
45 <<FSETLOCKING_BYCALLER>> means that automatic locking in stdio functions
46 is disabled. Applications which set this take all responsibility for file
47 locking themselves.
48 
49 <<FSETLOCKING_QUERY>> returns the current locking mode without changing it.
50 
51 RETURNS
52 <<__fsetlocking>> returns the current locking mode of <[fp]>.
53 
54 PORTABILITY
55 This function originates from Solaris and is also provided by GNU libc.
56 
57 No supporting OS subroutines are required.
58 */
59 
60 #ifndef __rtems__
61 
62 #define _DEFAULT_SOURCE
63 #include <_ansi.h>
64 #include <stdio.h>
65 #include <stdio_ext.h>
66 #include "local.h"
67 
68 int
__fsetlocking(FILE * fp,int type)69 __fsetlocking (FILE * fp,
70        int type)
71 {
72   int result;
73   CHECK_INIT(_REENT, fp);
74   result = (fp->_flags2 & __SNLK) ? FSETLOCKING_BYCALLER : FSETLOCKING_INTERNAL;
75   switch (type)
76     {
77     case FSETLOCKING_BYCALLER:
78       fp->_flags2 |= __SNLK;
79       break;
80     case FSETLOCKING_INTERNAL:
81       fp->_flags2 &= ~__SNLK;
82       break;
83     case FSETLOCKING_QUERY:
84     default:
85       break;
86     }
87   return result;
88 }
89 
90 #endif /* __rtems__ */
91