blob: d8535078ab5cd2c098c94a0acd1262e0da69b549 [file] [log] [blame]
njn36a20fa2005-06-03 03:08:39 +00001
2/*--------------------------------------------------------------------*/
3/*--- Printing libc stuff. pub_tool_libcprint.h ---*/
4/*--------------------------------------------------------------------*/
5
6/*
7 This file is part of Valgrind, a dynamic binary instrumentation
8 framework.
9
sewardj4d474d02008-02-11 11:34:59 +000010 Copyright (C) 2000-2008 Julian Seward
njn36a20fa2005-06-03 03:08:39 +000011 jseward@acm.org
12
13 This program is free software; you can redistribute it and/or
14 modify it under the terms of the GNU General Public License as
15 published by the Free Software Foundation; either version 2 of the
16 License, or (at your option) any later version.
17
18 This program is distributed in the hope that it will be useful, but
19 WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21 General Public License for more details.
22
23 You should have received a copy of the GNU General Public License
24 along with this program; if not, write to the Free Software
25 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
26 02111-1307, USA.
27
28 The GNU General Public License is contained in the file COPYING.
29*/
30
31#ifndef __PUB_TOOL_LIBCPRINT_H
32#define __PUB_TOOL_LIBCPRINT_H
33
bartfe101bf2008-03-17 18:57:03 +000034
barta0b6b2c2008-07-07 06:49:24 +000035/* Enable compile-time format string checking by gcc.
bartfe101bf2008-03-17 18:57:03 +000036 This feature is supported since at least gcc version 2.95.
37 For more information about the format attribute, see also
38 http://gcc.gnu.org/onlinedocs/gcc-4.3.0/gcc/Function-Attributes.html.
39 */
40
barta0b6b2c2008-07-07 06:49:24 +000041#if defined(__GNUC__)
bartfe101bf2008-03-17 18:57:03 +000042#define PRINTF_CHECK(x, y) __attribute__((format(__printf__, x, y)))
43#else
44#define PRINTF_CHECK(x, y)
45#endif
46
47
njn36a20fa2005-06-03 03:08:39 +000048/* ---------------------------------------------------------------------
49 Basic printing
50 ------------------------------------------------------------------ */
51
52/* Note that they all output to the file descriptor given by the
53 * --log-fd/--log-file/--log-socket argument, which defaults to 2 (stderr).
54 * Hence no need for VG_(fprintf)().
55 */
bartfe101bf2008-03-17 18:57:03 +000056extern UInt VG_(printf) ( const HChar *format, ... ) PRINTF_CHECK(1, 2);
57extern UInt VG_(vprintf) ( const HChar *format, va_list vargs ) PRINTF_CHECK(1, 0);
58extern UInt VG_(sprintf) ( Char* buf, const HChar* format, ... ) PRINTF_CHECK(2, 3);
59extern UInt VG_(vsprintf) ( Char* buf, const HChar* format, va_list vargs ) PRINTF_CHECK(2, 0);
sewardj45f4e7c2005-09-27 19:20:21 +000060extern UInt VG_(snprintf) ( Char* buf, Int size,
bartfe101bf2008-03-17 18:57:03 +000061 const HChar *format, ... ) PRINTF_CHECK(3, 4);
sewardj45f4e7c2005-09-27 19:20:21 +000062extern UInt VG_(vsnprintf)( Char* buf, Int size,
bartfe101bf2008-03-17 18:57:03 +000063 const HChar *format, va_list vargs ) PRINTF_CHECK(3, 0);
njn36a20fa2005-06-03 03:08:39 +000064
njn7a5915e2005-07-17 16:12:59 +000065// Percentify n/m with d decimal places. Includes the '%' symbol at the end.
njn5eaff2f2005-09-25 19:11:45 +000066// Right justifies in 'buf'.
67extern void VG_(percentify)(ULong n, ULong m, UInt d, Int n_buf, char buf[]);
njn856c54e2005-06-26 18:43:40 +000068
njn36a20fa2005-06-03 03:08:39 +000069/* ---------------------------------------------------------------------
70 Messages for the user
71 ------------------------------------------------------------------ */
72
njn3e114522005-06-11 03:31:09 +000073/* No, really. I _am_ that strange. */
74#define OINK(nnn) VG_(message)(Vg_DebugMsg, "OINK %d",nnn)
75
njn36a20fa2005-06-03 03:08:39 +000076/* Print a message prefixed by "??<pid>?? "; '?' depends on the VgMsgKind.
77 Should be used for all user output. */
78
79typedef
80 enum { Vg_UserMsg, /* '?' == '=' */
81 Vg_DebugMsg, /* '?' == '-' */
82 Vg_DebugExtraMsg, /* '?' == '+' */
83 Vg_ClientMsg /* '?' == '*' */
84 }
85 VgMsgKind;
86
barta0b6b2c2008-07-07 06:49:24 +000087/* Send a single-part message. Appends a newline. The format
88 specification may contain any ISO C format specifier or %t.
89 No attempt is made to let the compiler verify consistency of the
90 format string and the argument list. */
91extern UInt VG_(message_no_f_c)( VgMsgKind kind, const HChar* format, ... );
92/* Send a single-part message. Appends a newline. The format
93 specification may contain any ISO C format specifier. The gcc compiler
94 will verify consistency of the format string and the argument list. */
95extern UInt VG_(message)( VgMsgKind kind, const HChar* format, ... )
96 PRINTF_CHECK(2, 3);
njn36a20fa2005-06-03 03:08:39 +000097
barta0b6b2c2008-07-07 06:49:24 +000098extern UInt VG_(vmessage)( VgMsgKind kind, const HChar* format, va_list vargs )
99 PRINTF_CHECK(2, 0);
100
101
102
njn36a20fa2005-06-03 03:08:39 +0000103#endif // __PUB_TOOL_LIBCPRINT_H
104
105/*--------------------------------------------------------------------*/
106/*--- end ---*/
107/*--------------------------------------------------------------------*/