My Project
programmer's documentation
bft_printf.h
Go to the documentation of this file.
1 #ifndef __BFT_PRINTF_H__
2 #define __BFT_PRINTF_H__
3 
4 /*============================================================================
5  * Base user-definable printf() wrapper or replacement
6  *============================================================================*/
7 
8 /*
9  This file is part of Code_Saturne, a general-purpose CFD tool.
10 
11  Copyright (C) 1998-2019 EDF S.A.
12 
13  This program is free software; you can redistribute it and/or modify it under
14  the terms of the GNU General Public License as published by the Free Software
15  Foundation; either version 2 of the License, or (at your option) any later
16  version.
17 
18  This program is distributed in the hope that it will be useful, but WITHOUT
19  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
20  FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
21  details.
22 
23  You should have received a copy of the GNU General Public License along with
24  this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
25  Street, Fifth Floor, Boston, MA 02110-1301, USA.
26 */
27 
28 /*----------------------------------------------------------------------------*/
29 
30 #include "cs_defs.h"
31 
32 /*----------------------------------------------------------------------------*/
33 
34 /*----------------------------------------------------------------------------
35  * Standard C library headers
36  *----------------------------------------------------------------------------*/
37 
38 #include <stdarg.h>
39 
40 /*----------------------------------------------------------------------------
41  * Local headers
42  *----------------------------------------------------------------------------*/
43 
44 /*-----------------------------------------------------------------------------*/
45 
47 
48 /*============================================================================
49  * Public types
50  *============================================================================*/
51 
52 /* Function pointers for printf() and fflush(stdout) type functions */
53 
54 typedef int (bft_printf_proxy_t) (const char *const format,
55  va_list arg_ptr);
56 
57 typedef int (bft_printf_flush_proxy_t) (void);
58 
59 /*============================================================================
60  * Public function prototypes
61  *============================================================================*/
62 
63 /*
64  * Replacement for printf() with modifiable behavior.
65  *
66  * This function calls vprintf() by default, or a function with similar
67  * arguments indicated by bft_printf_proxy_set().
68  *
69  * parameters:
70  * format: <-- format string, as printf() and family.
71  * ... : <-- variable arguments based on format string.
72  *
73  * returns:
74  * number of characters printed, not counting the trailing '\0' used
75  * to end output strings
76  */
77 
78 #if defined(__GNUC__)
79 
80 int
81 bft_printf(const char *const format,
82  ...)
83  __attribute__((format(printf, 1, 2)));
84 
85 #else
86 
87 int
88 bft_printf(const char *const format,
89  ...);
90 
91 #endif
92 
93 /*
94  * Flush for output of bft_printf() with modifiable behavior.
95  *
96  * This function calls fflush(stdout) if bft_printf()'s default behavior is
97  * used. If bft_printf's behavior is modified with bft_printf_proxy_set(),
98  * bft_printf_flush()'s behavior may have to be also adjusted with
99  * bft_printf_flush_proxy_set().
100  *
101  * returns:
102  * using the default behavior, the return value is that of
103  * fflush(stdout): O upon successful completion, EOF otherwise
104  * (with errno set to indicate the error).
105  */
106 
107 int
108 bft_printf_flush(void);
109 
110 /*
111  * Returns function associated with the bft_printf() function.
112  *
113  * returns:
114  * pointer to the vprintf() or replacement function.
115  */
116 
119 
120 /*
121  * Associates a vprintf() type function with the bft_printf() function.
122  *
123  * parameters:
124  * fct: <-- pointer to a vprintf() type function.
125  */
126 
127 void
129 
130 /*
131  * Returns function associated with bft_printf_flush().
132  *
133  * returns:
134  * pointer to the bft_printf_flush() proxy.
135  */
136 
139 
140 /*
141  * Associates a proxy function with bft_printf_flush().
142  *
143  * warning:
144  * bft_printf() is called by the default bft_error() error handler
145  * (so as to ensure that the error text appears at the end of the
146  * program output), so a bft_print_flush replacement must not itself
147  * call (directly or indirectly) bft_error() if the default error
148  * handler is used.
149  *
150  * parameter:
151  * fct <-- pointer to a function similar to {return fflush(stdout)}.
152  */
153 
154 void
156 
157 /*----------------------------------------------------------------------------*/
158 
160 
161 #endif /* __BFT_PRINTF_H__ */
cs_defs.h
bft_printf_flush_proxy_get
bft_printf_flush_proxy_t * bft_printf_flush_proxy_get(void)
Returns function associated with bft_printf_flush().
Definition: bft_printf.c:205
bft_printf
int bft_printf(const char *const format,...)
Replacement for printf() with modifiable behavior.
Definition: bft_printf.c:140
END_C_DECLS
#define END_C_DECLS
Definition: cs_defs.h:468
bft_printf_flush_proxy_set
void bft_printf_flush_proxy_set(bft_printf_flush_proxy_t *const fct)
Associates a proxy function with bft_printf_flush().
Definition: bft_printf.c:224
bft_printf_proxy_t
int() bft_printf_proxy_t(const char *const format, va_list arg_ptr)
Function pointer for printf() type functions.
Definition: bft_printf.h:54
bft_printf_proxy_set
void bft_printf_proxy_set(bft_printf_proxy_t *const fct)
Associates a vprintf() type function with the bft_printf() function.
Definition: bft_printf.c:193
BEGIN_C_DECLS
#define BEGIN_C_DECLS
Definition: cs_defs.h:467
bft_printf_proxy_get
bft_printf_proxy_t * bft_printf_proxy_get(void)
Returns function associated with the bft_printf() function.
Definition: bft_printf.c:181
bft_printf_flush_proxy_t
int() bft_printf_flush_proxy_t(void)
Function pointer for fflush(stdout) type functions.
Definition: bft_printf.h:57
bft_printf_flush
int bft_printf_flush(void)
Flush for output of bft_printf() with modifiable behavior.
Definition: bft_printf.c:169