VirtualBox

source: vbox/trunk/src/bldprogs/VBoxCompilerPlugIns.h@ 77887

Last change on this file since 77887 was 76585, checked in by vboxsync, 5 years ago

*: scm --fix-header-guard-endif

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.0 KB
Line 
1/* $Id: VBoxCompilerPlugIns.h 76585 2019-01-01 06:31:29Z vboxsync $ */
2/** @file
3 * VBoxCompilerPlugIns - Types, Prototypes and Macros common to the VBox compiler plug-ins.
4 */
5
6/*
7 * Copyright (C) 2006-2019 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18#ifndef VBOX_INCLUDED_SRC_bldprogs_VBoxCompilerPlugIns_h
19#define VBOX_INCLUDED_SRC_bldprogs_VBoxCompilerPlugIns_h
20#ifndef RT_WITHOUT_PRAGMA_ONCE
21# pragma once
22#endif
23
24#include <iprt/types.h>
25#include <stdio.h>
26
27
28/** @def dprintf
29 * Macro for debug printing using fprintf. Only active when DEBUG is defined.
30 */
31#ifdef DEBUG
32# define dprintf(...) do { fprintf(stderr, __VA_ARGS__); } while (0)
33#else
34# define dprintf(...) do { } while (0)
35#endif
36
37
38/**
39 * Checker state.
40 */
41typedef struct VFMTCHKSTATE
42{
43 long iFmt;
44 long iArgs;
45 const char *pszFmt;
46 bool fMaybeNull;
47#if defined(__GNUC__) && !defined(VBOX_COMPILER_PLUG_IN_AGNOSTIC)
48# if RT_GNUC_PREREQ(6, 0)
49 gimple const *hStmt;
50# else
51 gimple hStmt;
52# endif
53 location_t hFmtLoc;
54#endif
55} VFMTCHKSTATE;
56/** Pointer to my checker state. */
57typedef VFMTCHKSTATE *PVFMTCHKSTATE;
58
59#define MYSTATE_FMT_FILE(a_pState) VFmtChkGetFmtLocFile(a_pState)
60#define MYSTATE_FMT_LINE(a_pState) VFmtChkGetFmtLocLine(a_pState)
61#define MYSTATE_FMT_COLUMN(a_pState) VFmtChkGetFmtLocColumn(a_pState)
62
63const char *VFmtChkGetFmtLocFile(PVFMTCHKSTATE pState);
64
65unsigned int VFmtChkGetFmtLocLine(PVFMTCHKSTATE pState);
66
67unsigned int VFmtChkGetFmtLocColumn(PVFMTCHKSTATE pState);
68
69/**
70 * Implements checking format string replacement (%M).
71 *
72 * Caller will have checked all that can be checked. This means that there is a
73 * string argument present, or it won't make the call.
74 *
75 * @param pState The format string checking state.
76 * @param pszPctM The position of the '%M'.
77 * @param iArg The next argument number.
78 */
79void VFmtChkHandleReplacementFormatString(PVFMTCHKSTATE pState, const char *pszPctM, unsigned iArg);
80
81/**
82 * Warning.
83 *
84 * @returns
85 * @param pState .
86 * @param pszLoc .
87 * @param pszFormat .
88 * @param ... .
89 */
90void VFmtChkWarnFmt(PVFMTCHKSTATE pState, const char *pszLoc, const char *pszFormat, ...);
91
92/**
93 * Error.
94 *
95 * @returns
96 * @param pState .
97 * @param pszLoc .
98 * @param pszFormat .
99 * @param ... .
100 */
101void VFmtChkErrFmt(PVFMTCHKSTATE pState, const char *pszLoc, const char *pszFormat, ...);
102
103/**
104 * Checks that @a iFmtArg isn't present or a valid final dummy argument.
105 *
106 * Will issue warning/error if there are more arguments at @a iFmtArg.
107 *
108 * @param pState The format string checking state.
109 * @param iArg The index of the end of arguments, this is
110 * relative to VFMTCHKSTATE::iArgs.
111 */
112void VFmtChkVerifyEndOfArgs(PVFMTCHKSTATE pState, unsigned iArg);
113
114bool VFmtChkRequirePresentArg(PVFMTCHKSTATE pState, const char *pszLoc, unsigned iArg, const char *pszMessage);
115
116bool VFmtChkRequireIntArg(PVFMTCHKSTATE pState, const char *pszLoc, unsigned iArg, const char *pszMessage);
117
118bool VFmtChkRequireStringArg(PVFMTCHKSTATE pState, const char *pszLoc, unsigned iArg, const char *pszMessage);
119
120bool VFmtChkRequireVaListPtrArg(PVFMTCHKSTATE pState, const char *pszLoc, unsigned iArg, const char *pszMessage);
121
122/* VBoxCompilerPlugInsCommon.cpp */
123void MyCheckFormatCString(PVFMTCHKSTATE pState, const char *pszFmt);
124
125
126#endif /* !VBOX_INCLUDED_SRC_bldprogs_VBoxCompilerPlugIns_h */
127
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use