Lines Matching defs:parser
25 #include "ndk-stack-parser.h"
27 /* Enumerates states of the crash parser.
30 /* Parser expects the beginning of the crash dump. */
32 /* Parser expects the build fingerprint, or process and thread information. */
34 /* Parser expects the process and thread information. */
36 /* Parser expects the signal information, or the first crash frame. */
38 /* Parser expects a crash frame. */
42 /* Crash parser descriptor.
51 /* Current state of the parser. */
84 * parser - NdkCrashParser descriptor, created and initialized with a call to
91 static int ParseFrame(NdkCrashParser* parser, const char* frame);
130 NdkCrashParser* parser;
132 parser = (NdkCrashParser*)calloc(sizeof(*parser), 1);
133 if (parser == NULL)
136 parser->out_handle = out_handle;
137 parser->state = EXPECTS_CRASH_DUMP;
139 parser->sym_root = strdup(sym_root);
140 if (!parser->sym_root)
143 if (regcomp(&parser->re_pid_header, _pid_header, REG_EXTENDED | REG_NEWLINE) ||
144 regcomp(&parser->re_sig_header, _sig_header, REG_EXTENDED | REG_NEWLINE) ||
145 regcomp(&parser->re_frame_header, _frame_header, REG_EXTENDED | REG_NEWLINE))
148 return parser;
151 DestroyNdkCrashParser(parser);
156 DestroyNdkCrashParser(NdkCrashParser* parser)
158 if (parser != NULL) {
160 regfree(&parser->re_frame_header);
161 regfree(&parser->re_sig_header);
162 regfree(&parser->re_pid_header);
164 free(parser->sym_root);
165 /* Release parser itself */
166 free(parser);
171 ParseLine(NdkCrashParser* parser, const char* line)
182 if (parser->state != EXPECTS_CRASH_DUMP) {
184 fprintf(parser->out_handle, "Crash dump is completed\n\n");
188 fprintf(parser->out_handle, "********** Crash dump: **********\n");
189 parser->state = EXPECTS_BUILD_FINGREPRINT_OR_PID;
194 switch (parser->state) {
197 fprintf(parser->out_handle, "%s\n",
199 parser->state = EXPECTS_PID;
204 if (MatchRegex(line, &parser->re_pid_header, &match)) {
205 fprintf(parser->out_handle, "%s\n", line + match.rm_so);
206 parser->state = EXPECTS_SIGNAL_OR_FRAME;
213 if (MatchRegex(line, &parser->re_sig_header, &match)) {
214 fprintf(parser->out_handle, "%s\n", line + match.rm_so);
215 parser->state = EXPECTS_FRAME;
220 if (MatchRegex(line, &parser->re_frame_header, &match)) {
221 parser->state = EXPECTS_FRAME;
222 return ParseFrame(parser, line + match.rm_so);
277 ParseFrame(NdkCrashParser* parser, const char* frame)
289 fprintf(parser->out_handle, "Stack frame %s", frame);
298 fprintf(parser->out_handle,
299 "Parser is unable to locate instruction pointer token.\n");
329 strncpy(sym_file, parser->sym_root, sizeof(sym_file));
338 fprintf(parser->out_handle, "\n");
340 fprintf(parser->out_handle,
349 fprintf(parser->out_handle, ": Routine %s in %s/%s:%d\n",
353 fprintf(parser->out_handle, ": Routine %s in %s:%d\n",
360 fprintf(parser->out_handle,