FreeCalypso > hg > freecalypso-tools
view rvinterf/ctracedec/processlog.c @ 815:bc1e150f5bd9
rvinterf/include/bsim_etm_cmd.h: copy from FC Tourmaline
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 14 May 2021 15:51:20 +0000 |
parents | e7502631a0f9 |
children |
line wrap: on
line source
/* * This module contains the code that processes rvtdump/rvinterf log files * at the high level and identifies which lines are compressed traces. */ #include <stdio.h> #include <ctype.h> #include <string.h> #include <strings.h> #include <stdlib.h> is_logline_ctrace(line) char *line; { char *cp = line; if (*cp++ != '[') return(0); if (!isdigit(*cp++)) return(0); if (!isdigit(*cp++)) return(0); if (*cp++ != ':') return(0); if (!isdigit(*cp++)) return(0); if (!isdigit(*cp++)) return(0); if (*cp++ != ':') return(0); if (!isdigit(*cp++)) return(0); if (!isdigit(*cp++)) return(0); if (strncmp(cp, "] GPF trace ", 12)) return(0); cp += 12; while (isalpha(*cp)) { while (*cp && !isspace(*cp)) cp++; if (isspace(*cp)) cp++; else return(0); } if (isdigit(*cp)) return(cp - line); else return(0); } process_log_file(filename) char *filename; { FILE *f; char linebuf[512], *cp; int lineno, i; f = fopen(filename, "r"); if (!f) { perror(filename); exit(1); } for (lineno = 1; fgets(linebuf, sizeof linebuf, f); lineno++) { cp = index(linebuf, '\n'); if (!cp) { fprintf(stderr, "error: %s line %d is too long or unterminated\n", filename, lineno); exit(1); } *cp = '\0'; i = is_logline_ctrace(linebuf); if (i) process_ctrace_line(linebuf, i, filename, lineno); else puts(linebuf); } fclose(f); return(0); }