1 mike 1.1 /*
2 **==============================================================================
3 **
4 ** Open Management Infrastructure (OMI)
5 **
6 ** Copyright (c) Microsoft Corporation
7 **
|
8 krisbash 1.3 ** Licensed under the Apache License, Version 2.0 (the "License"); you may not
9 ** use this file except in compliance with the License. You may obtain a copy
10 ** of the License at
11 **
12 ** http://www.apache.org/licenses/LICENSE-2.0
|
13 mike 1.1 **
14 ** THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
15 krisbash 1.3 ** KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
16 ** WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
17 ** MERCHANTABLITY OR NON-INFRINGEMENT.
|
18 mike 1.1 **
|
19 krisbash 1.3 ** See the Apache 2 License for the specific language governing permissions
|
20 mike 1.1 ** and limitations under the License.
21 **
22 **==============================================================================
23 */
24
25 #include "mofcxx.h"
26 #include <mof/mof.h>
27
28 #ifndef _MSC_VER
29 # include <pthread.h>
30 #endif
31
32 extern "C" void MOF_PrintClassDecl(
33 const MI_ClassDecl* self,
34 FILE* file);
35
36 extern "C" void MOF_PrintInstanceDecl(
37 const MI_InstanceDecl* self,
38 FILE* file);
39
40 using namespace mofcxx;
41 mike 1.1
42 //==============================================================================
43 //
44 // Mutex
45 //
46 //==============================================================================
47
48 #ifndef _MSC_VER
49 static pthread_mutex_t _mutex = PTHREAD_MUTEX_INITIALIZER;
50 #endif
51
52 //==============================================================================
53 //
54 // Callbacks
55 //
56 //==============================================================================
57
58 extern "C" void errorCallback(
|
59 krisbash 1.3 const char* msg,
60 const wchar_t* wmsg,
|
61 mike 1.1 void* data)
62 {
63 MOFParserHandler* handler = (MOFParserHandler*)data;
64 handler->HandleError(msg);
65 }
66
67 extern "C" void warningCallback(
|
68 krisbash 1.3 const char* msg,
69 const wchar_t* wmsg,
|
70 mike 1.1 void* data)
71 {
72 MOFParserHandler* handler = (MOFParserHandler*)data;
|
73 krisbash 1.3 handler->HandleWarning(msg);
|
74 mike 1.1 }
75
76 extern "C" void pragmaCallback(
|
77 krisbash 1.3 const char* name,
78 const char* value,
|
79 mike 1.1 void* data)
80 {
81 MOFParserHandler* handler = (MOFParserHandler*)data;
82 handler->HandlePragma(name, value);
83 }
84
85 extern "C" void classDeclCallback(const MI_ClassDecl* decl, void* data)
86 {
87 MOFParserHandler* handler = (MOFParserHandler*)data;
88 handler->HandleClassDecl(decl);
89 }
90
91 extern "C" void instanceDeclCallback(const MI_InstanceDecl* decl, void* data)
92 {
93 MOFParserHandler* handler = (MOFParserHandler*)data;
94 handler->HandleInstanceDecl(decl);
95 }
96
|
97 krisbash 1.3 extern "C" void qualifierDeclCallback(const MI_QualifierDecl* decl, void* data)
|
98 mike 1.1 {
99 MOFParserHandler* handler = (MOFParserHandler*)data;
|
100 krisbash 1.3 handler->HandleQualifierDecl(decl);
|
101 mike 1.1 }
102
103 //==============================================================================
104 //
105 // MOFParserHandler
106 //
107 //==============================================================================
108
109 MOFCXX_BEGIN
110
111 MOFParserHandler::~MOFParserHandler()
112 {
113 }
114
115 void MOFParserHandler::HandleError(const char* msg)
116 {
117 }
118
119 void MOFParserHandler::HandleWarning(const char* msg)
120 {
121 }
122 mike 1.1
123 void MOFParserHandler::HandlePragma(const char* name, const char* value)
124 {
125 }
126
127 void MOFParserHandler::HandleClassDecl(const MI_ClassDecl* decl)
128 {
129 }
130
131 void MOFParserHandler::HandleInstanceDecl(const MI_InstanceDecl* decl)
132 {
133 }
134
135 void MOFParserHandler::HandleQualifierDecl(const MI_QualifierDecl* decl)
136 {
137 }
138
139 MOFCXX_END
140
141 //==============================================================================
142 //
143 mike 1.1 // MOFParser
144 //
145 //==============================================================================
146
147 MOFCXX_BEGIN
148
149 MOFParser::MOFParser(
150 std::vector<std::string>& paths,
151 MOFParserHandler* handler) : m_handler(handler)
152 {
153 char** tmp = new char*[paths.size()];
154
155 for (size_t i = 0; i < paths.size(); i++)
156 tmp[i] = (char*)paths[i].c_str();
157
158 m_parser = MOF_Parser_New(tmp, paths.size());
159 delete [] tmp;
160
|
161 krisbash 1.3 MOF_Parser_EnableExtensions(m_parser, MI_TRUE);
162
|
163 mike 1.1 MOF_Parser_SetPragmaCallback(
|
164 krisbash 1.3 m_parser,
165 (MOF_PragmaCallback)pragmaCallback,
|
166 mike 1.1 m_handler);
167
168 MOF_Parser_SetErrorCallback(
|
169 krisbash 1.3 m_parser,
170 (MOF_ErrorCallback)errorCallback,
|
171 mike 1.1 m_handler);
172
173 MOF_Parser_SetWarningCallback(
|
174 krisbash 1.3 m_parser,
175 (MOF_WarningCallback)warningCallback,
|
176 mike 1.1 m_handler);
177
178 MOF_Parser_SetClassDeclCallback(
|
179 krisbash 1.3 m_parser,
180 (MOF_ClassDeclCallback)classDeclCallback,
|
181 mike 1.1 m_handler);
182
183 MOF_Parser_SetInstanceDeclCallback(
|
184 krisbash 1.3 m_parser,
185 (MOF_InstanceDeclCallback)instanceDeclCallback,
|
186 mike 1.1 m_handler);
187
188 MOF_Parser_SetQualifierDeclCallback(
|
189 krisbash 1.3 m_parser,
190 (MOF_QualifierDeclCallback)qualifierDeclCallback,
|
191 mike 1.1 m_handler);
192 }
193
194 MOFParser::~MOFParser()
195 {
196 MOF_Parser_Delete(m_parser);
197 }
198
199 int MOFParser::Parse(const char* path)
200 {
201 #ifndef _MSC_VER
202 /* Acquire mutex to synchronize access to global Lex/Yacc state */
203 pthread_mutex_lock(&_mutex);
204 #endif
205
|
206 krisbash 1.3 int r = -1;
207 try
208 {
209 r = MOF_Parser_Parse(m_parser, path);
210 }
211 catch(...)
212 {
213 // Not really sure what to do here, but it should probably be something
214 }
215
216 #ifndef _MSC_VER
217 /* Release mutex */
218 pthread_mutex_unlock(&_mutex);
219 #endif
220
221 return r;
222 }
223
224 int MOFParser::ParseString(const char* mof_string)
225 {
226 #ifndef _MSC_VER
227 krisbash 1.3 /* Acquire mutex to synchronize access to global Lex/Yacc state */
228 pthread_mutex_lock(&_mutex);
229 #endif
230 int r = -1;
231 try
232 {
233 r = MOF_Parser_ParseString(m_parser, mof_string);
234 }
235 catch(...)
236 {
237 // Not really sure what to do here, but it should probably be something
238 }
|
239 mike 1.1
240 #ifndef _MSC_VER
241 /* Release mutex */
242 pthread_mutex_unlock(&_mutex);
243 #endif
244
245 return r;
246 }
247
248 void MOFParser::Dump(FILE* os)
249 {
250 return MOF_Parser_Dump(m_parser, os);
251 }
252
253 void MOFParser::DumpClassDecl(const MI_ClassDecl* decl, FILE* os)
254 {
255 MOF_PrintClassDecl(decl, os);
256 }
257
258 void MOFParser::DumpInstanceDecl(const MI_InstanceDecl* decl, FILE* os)
259 {
260 mike 1.1 MOF_PrintInstanceDecl(decl, os);
261 }
262
263 MOFCXX_END
|