ReactOS  0.4.15-dev-448-gd6c4411
log2lines.c File Reference
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "util.h"
#include "version.h"
#include "compat.h"
#include "options.h"
#include "image.h"
#include "cache.h"
#include "log2lines.h"
#include "help.h"
#include "cmd.h"
#include "match.h"
Include dependency graph for log2lines.c:

Go to the source code of this file.

Functions

static void clearLastLine (void)
 
static void log_file (FILE *outFile, char *fileName, int line)
 
static void logSource (FILE *outFile)
 
static void reportSource (FILE *outFile)
 
static void report (FILE *outFile)
 
static int print_offset (void *data, size_t offset, char *toString)
 
static int process_data (const void *FileData, size_t offset, char *toString)
 
static int process_file (const char *file_name, size_t offset, char *toString)
 
static int translate_file (const char *cpath, size_t offset, char *toString)
 
static void translate_char (int c, FILE *outFile)
 
static charremove_mark (char *Line)
 
static void translate_line (FILE *outFile, char *Line, char *path, char *LineOut)
 
static int translate_files (FILE *inFile, FILE *outFile)
 
int main (int argc, const char **argv)
 

Variables

static FILEdbgIn = NULL
 
static FILEdbgOut = NULL
 
static FILEconIn = NULL
 
static FILEconOut = NULL
 
static const charkdbg_prompt = KDBG_PROMPT
 
static const charkdbg_cont = KDBG_CONT
 
LIST sources
 
LINEINFO lastLine
 
FILElogFile = NULL
 
LIST cache
 
SUMM summ
 

Function Documentation

◆ clearLastLine()

static void clearLastLine ( void  )
static

Definition at line 40 of file log2lines.c.

41 {
42  memset(&lastLine, 0, sizeof(LINEINFO));
43 }
LINEINFO lastLine
Definition: log2lines.c:33
#define memset(x, y, z)
Definition: compat.h:39

Referenced by main(), and report().

◆ log_file()

static void log_file ( FILE outFile,
char fileName,
int  line 
)
static

Definition at line 46 of file log2lines.c.

47 {
48  int i = 0, min = 0, max = 0;
49  char s[LINESIZE];
50  FILE *src;
51 
53  strcat(s, fileName);
54 
55  max = line + opt_SrcPlus;
56  if ((src = fopen(s, "r")))
57  {
58  min = line - opt_Source;
59  min = (min < 0) ? 0 : min;
60  while (i < max && fgets(s, LINESIZE, src))
61  {
62  if (i >= min)
63  {
64  if (i == line)
65  log(outFile, "| ----\n");
66  log(outFile, "| %4.4d %s", i + 1, s);
67  }
68  i++;
69  }
70  fclose(src);
71  if ( i < min )
72  log(outFile, "| S--- source has only %d lines! (check source/revision)\n", i);
73  }
74  else
75  l2l_dbg(1, "Can't open: %s (check " SOURCES_ENV ")\n", s);
76 }
#define max(a, b)
Definition: svc.c:63
char * strcat(char *DstString, const char *SrcString)
Definition: utclib.c:568
#define SOURCES_ENV
Definition: config.h:9
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
int opt_SrcPlus
Definition: options.c:35
#define l2l_dbg(level,...)
Definition: util.h:35
Definition: parser.c:48
int opt_Source
Definition: options.c:34
GLdouble s
Definition: gl.h:2039
_Check_return_opt_ _CRTIMP int __cdecl fclose(_Inout_ FILE *_File)
_Check_return_ _CRTIMP FILE *__cdecl fopen(_In_z_ const char *_Filename, _In_z_ const char *_Mode)
GLenum src
Definition: glext.h:6340
_Check_return_opt_ _CRTIMP char *__cdecl fgets(_Out_writes_z_(_MaxCount) char *_Buf, _In_ int _MaxCount, _Inout_ FILE *_File)
#define min(a, b)
Definition: monoChain.cc:55
#define LINESIZE
Definition: chargen.c:18
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
#define log(outFile, fmt,...)
Definition: util.h:15
char opt_SourcesPath[LINESIZE]
Definition: options.c:45

Referenced by logSource().

◆ logSource()

static void logSource ( FILE outFile)
static

Definition at line 79 of file log2lines.c.

80 {
81  log_file(outFile, lastLine.file1, lastLine.nr1);
82  if (lastLine.nr2)
83  {
84  log(outFile, "| ---- [%u] ----\n", lastLine.nr2);
85  log_file(outFile, lastLine.file2, lastLine.nr2);
86  }
87 }
LINEINFO lastLine
Definition: log2lines.c:33
char file2[LINESIZE]
Definition: log2lines.h:18
char file1[LINESIZE]
Definition: log2lines.h:15
static void log_file(FILE *outFile, char *fileName, int line)
Definition: log2lines.c:46
#define log(outFile, fmt,...)
Definition: util.h:15

Referenced by reportSource().

◆ main()

int main ( int argc  ,
const char **  argv 
)

Definition at line 547 of file log2lines.c.

548 {
549  int res = 0;
550  int optInit = 0;
551  int optCount = 0;
552 
553  dbgIn = stdin;
554  conOut = stdout;
555  (void)conIn;
556  (void)dbgOut;
557 
558  memset(&cache, 0, sizeof(LIST));
559  memset(&sources, 0, sizeof(LIST));
560  stat_clear(&summ);
561  clearLastLine();
562 
563  optInit = optionInit(argc, argv);
564  optCount = optionParse(argc, argv);
565 
566  if (optCount < 0 || optInit < 0)
567  {
568  res = optCount;
569  goto cleanup;
570  }
571 
572  argc -= optCount;
573 
575  {
576  res = 3;
577  goto cleanup;
578  }
579 
581  if (opt_exit)
582  {
583  res = 0;
584  goto cleanup;
585  }
586 
587  read_cache();
588  l2l_dbg(4, "Cache read complete\n");
589 
590  if (set_LogFile(&logFile))
591  {
592  res = 2;
593  goto cleanup;
594  }
595  l2l_dbg(4, "opt_logFile processed\n");
596 
597  if (opt_Pipe)
598  {
599  l2l_dbg(3, "Command line: \"%s\"\n",opt_Pipe);
600 
601  if (!(dbgIn = POPEN(opt_Pipe, "r")))
602  {
603  dbgIn = stdin; //restore
604  l2l_dbg(0, "Could not popen '%s' (%s)\n", opt_Pipe, strerror(errno));
605  free(opt_Pipe);
606  opt_Pipe = NULL;
607  }
608  }
609  l2l_dbg(4, "opt_Pipe processed\n");
610 
611  if (argc > 1)
612  { // translate {<exefile> <offset>}
613  int i = 1;
614  const char *exefile = NULL;
615  const char *offset = NULL;
616  char Line[LINESIZE + 1];
617  char PathBuffer[LINESIZE + 1];
618  char LineOutBuffer[LINESIZE + 1];
619 
620  // TODO: Re-use one translate_files(), instead of repeated translate_line().
621  while (i < argc)
622  {
623  offset = argv[optCount + i++];
624  if (isOffset(offset))
625  {
626  if (exefile)
627  {
628  l2l_dbg(2, "translating %s %s\n", exefile, offset);
629 
630  snprintf(Line, LINESIZE, "<%s:%s>\n", exefile, offset);
631  translate_line(conOut, Line, PathBuffer, LineOutBuffer);
632  report(conOut);
633  }
634  else
635  {
636  l2l_dbg(0, "<exefile> expected\n");
637  res = 3;
638  break;
639  }
640  }
641  else
642  {
643  // Not an offset so must be an exefile:
644  exefile = offset;
645  }
646  }
647  }
648  else
649  { // translate logging from stdin
651  }
652 
653  if (logFile)
654  fclose(logFile);
655 
656  if (opt_Pipe)
657  PCLOSE(dbgIn);
658 
659 cleanup:
660  // See optionInit().
661  if (opt_Pipe)
662  {
663  free(opt_Pipe);
664  opt_Pipe = NULL;
665  }
666 
668  list_clear(&cache);
669 
670  return res;
671 }
Definition: cache.c:48
int optionInit(int argc, const char **argv)
Definition: options.c:50
static int argc
Definition: ServiceArgs.c:12
#define create_cache(iid)
Definition: domdoc.c:1230
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:49
static FILE * dbgIn
Definition: log2lines.c:25
#define free
Definition: debug_ros.c:5
GLintptr offset
Definition: glext.h:5920
static void translate_line(FILE *outFile, char *Line, char *path, char *LineOut)
Definition: log2lines.c:321
#define snprintf
Definition: wintirpc.h:48
FILE * stdin
int errno
static FILE * conIn
Definition: log2lines.c:27
#define PCLOSE
Definition: compat.h:22
#define argv
Definition: mplay32.c:18
const char * strerror(int err)
Definition: compat_str.c:23
FILE * stdout
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
void list_clear(PLIST list)
Definition: list.c:70
#define l2l_dbg(level,...)
Definition: util.h:35
int opt_force
Definition: options.c:23
static FILE * conOut
Definition: log2lines.c:28
smooth NULL
Definition: ftsmooth.c:416
GLsizei GLenum * sources
Definition: glext.h:7753
int read_cache(void)
Definition: cache.c:157
char * opt_Pipe
Definition: options.c:29
int opt_exit
Definition: options.c:24
void stat_clear(PSUMM psumm)
Definition: stat.c:41
int optionParse(int argc, const char **argv)
Definition: options.c:112
static void report(FILE *outFile)
Definition: log2lines.c:99
Definition: ncftp.h:79
int set_LogFile(FILE **plogFile)
Definition: util.c:19
_Check_return_opt_ _CRTIMP int __cdecl fclose(_Inout_ FILE *_File)
#define LINESIZE
Definition: chargen.c:18
FILE * logFile
Definition: log2lines.c:34
GLuint res
Definition: glext.h:9613
char * cleanup(char *str)
Definition: wpickclick.c:99
int isOffset(const char *a)
Definition: util.c:154
static int translate_files(FILE *inFile, FILE *outFile)
Definition: log2lines.c:409
static FILE * dbgOut
Definition: log2lines.c:26
SUMM summ
Definition: log2lines.c:36
int check_directory(int force)
Definition: cache.c:80
#define memset(x, y, z)
Definition: compat.h:39
static void clearLastLine(void)
Definition: log2lines.c:40
#define POPEN
Definition: compat.h:21

◆ print_offset()

static int print_offset ( void data,
size_t  offset,
char toString 
)
static

Definition at line 107 of file log2lines.c.

108 {
110  PROSSYM_ENTRY e = NULL;
111  PROSSYM_ENTRY e2 = NULL;
112  int bFileOffsetChanged = 0;
113  char fmt[LINESIZE];
114  char *Strings = (char *)data + RosSymHeader->StringsOffset;
115 
116  fmt[0] = '\0';
117  e = find_offset(data, offset);
118  if (opt_twice)
119  {
120  e2 = find_offset(data, offset - 1);
121 
122  if (e == e2)
123  e2 = NULL;
124  else
125  summ.diff++;
126 
127  if (opt_Twice && e2)
128  {
129  e = e2;
130  e2 = NULL;
131  /* replaced (transparantly), but updated stats */
132  }
133  }
134  if (e || e2)
135  {
136  strcpy(lastLine.file1, &Strings[e->FileOffset]);
137  strcpy(lastLine.func1, &Strings[e->FunctionOffset]);
138  lastLine.nr1 = e->SourceLine;
140  lastLine.valid = 1;
141  if (e2)
142  {
145  lastLine.nr2 = e2->SourceLine;
147  bFileOffsetChanged = e->FileOffset != e2->FileOffset;
148  if (e->FileOffset != e2->FileOffset || e->FunctionOffset != e2->FunctionOffset)
149  summ.majordiff++;
150 
151  /*
152  * - "%.0s" displays nothing, but processes argument
153  * - bFileOffsetChanged implies always display 2nd SourceLine even if the same
154  * - also for FunctionOffset
155  */
156  strcat(fmt, "%s");
157  if (bFileOffsetChanged)
158  strcat(fmt, "[%s]");
159  else
160  strcat(fmt, "%.0s");
161 
162  strcat(fmt, ":%u");
163  if (e->SourceLine != e2->SourceLine || bFileOffsetChanged)
164  strcat(fmt, "[%u]");
165  else
166  strcat(fmt, "%.0u");
167 
168  strcat(fmt, " (%s");
169  if (e->FunctionOffset != e2->FunctionOffset || bFileOffsetChanged)
170  strcat(fmt, "[%s])");
171  else
172  strcat(fmt, "%.0s)");
173 
174  if (toString)
175  { // put in toString if provided
176  snprintf(toString, LINESIZE, fmt,
177  &Strings[e->FileOffset],
178  &Strings[e2->FileOffset],
179  (unsigned int)e->SourceLine,
180  (unsigned int)e2->SourceLine,
181  &Strings[e->FunctionOffset],
182  &Strings[e2->FunctionOffset]);
183  }
184  else
185  {
186  strcat(fmt, "\n");
187  printf(fmt,
188  &Strings[e->FileOffset],
189  &Strings[e2->FileOffset],
190  (unsigned int)e->SourceLine,
191  (unsigned int)e2->SourceLine,
192  &Strings[e->FunctionOffset],
193  &Strings[e2->FunctionOffset]);
194  }
195  }
196  else
197  {
198  if (toString)
199  { // put in toString if provided
200  snprintf(toString, LINESIZE, "%s:%u (%s)",
201  &Strings[e->FileOffset],
202  (unsigned int)e->SourceLine,
203  &Strings[e->FunctionOffset]);
204  }
205  else
206  {
207  printf("%s:%u (%s)\n",
208  &Strings[e->FileOffset],
209  (unsigned int)e->SourceLine,
210  &Strings[e->FunctionOffset]);
211  }
212  }
213  return 0;
214  }
215  return 1;
216 }
int opt_Twice
Definition: options.c:37
int opt_twice
Definition: options.c:36
ULONG SourceLine
Definition: rossym.h:30
char * strcat(char *DstString, const char *SrcString)
Definition: utclib.c:568
GLintptr offset
Definition: glext.h:5920
char func1[NAMESIZE]
Definition: log2lines.h:16
ULONG StringsOffset
Definition: rsym.h:34
#define snprintf
Definition: wintirpc.h:48
Definition: rossym.h:26
struct _SYMBOLFILE_HEADER * PSYMBOLFILE_HEADER
int diff
Definition: stat.h:18
ULONG FileOffset
Definition: rossym.h:29
char func2[NAMESIZE]
Definition: log2lines.h:19
#define e
Definition: ke_i.h:82
smooth NULL
Definition: ftsmooth.c:416
GLsizei GLenum * sources
Definition: glext.h:7753
PLIST_MEMBER sources_entry_create(PLIST list, char *path, char *prefix)
Definition: list.c:173
LINEINFO lastLine
Definition: log2lines.c:33
static const WCHAR Strings[]
Definition: reg.c:35
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
#define SVN_PREFIX
Definition: config.h:12
char file2[LINESIZE]
Definition: log2lines.h:18
char file1[LINESIZE]
Definition: log2lines.h:15
int majordiff
Definition: stat.h:19
#define LINESIZE
Definition: chargen.c:18
PROSSYM_ENTRY find_offset(void *data, size_t offset)
Definition: image.c:38
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
ULONG FunctionOffset
Definition: rossym.h:28
SUMM summ
Definition: log2lines.c:36
Definition: dsound.c:943
#define printf
Definition: config.h:203

Referenced by process_data().

◆ process_data()

static int process_data ( const void FileData,
size_t  offset,
char toString 
)
static

Definition at line 219 of file log2lines.c.

220 {
221  int res;
222 
223  PIMAGE_SECTION_HEADER PERosSymSectionHeader = get_sectionheader((char *)FileData);
224  if (!PERosSymSectionHeader)
225  return 2;
226 
227  res = print_offset((char *)FileData + PERosSymSectionHeader->PointerToRawData, offset, toString);
228  if (res)
229  {
230  if (toString)
231  sprintf(toString, "??:0");
232  else
233  printf("??:0");
234  l2l_dbg(1, "Offset not found: %x\n", (unsigned int)offset);
236  }
237 
238  return res;
239 }
static FILEDATA FileData[MAX_FDS]
Definition: fs.c:51
static int print_offset(void *data, size_t offset, char *toString)
Definition: log2lines.c:107
int offset_errors
Definition: stat.h:22
GLintptr offset
Definition: glext.h:5920
DWORD PointerToRawData
Definition: pedump.c:290
#define sprintf(buf, format,...)
Definition: sprintf.c:55
#define l2l_dbg(level,...)
Definition: util.h:35
PIMAGE_SECTION_HEADER get_sectionheader(const void *FileData)
Definition: image.c:59
GLuint res
Definition: glext.h:9613
SUMM summ
Definition: log2lines.c:36
#define printf
Definition: config.h:203

Referenced by process_file().

◆ process_file()

static int process_file ( const char file_name,
size_t  offset,
char toString 
)
static

Definition at line 242 of file log2lines.c.

243 {
244  void *FileData;
245  size_t FileSize;
246  int res = 1;
247 
249  if (!FileData)
250  {
251  l2l_dbg(0, "An error occured loading '%s'\n", file_name);
252  }
253  else
254  {
255  res = process_data(FileData, offset, toString);
256  free(FileData);
257  }
258  return res;
259 }
static int process_data(const void *FileData, size_t offset, char *toString)
Definition: log2lines.c:219
static FILEDATA FileData[MAX_FDS]
Definition: fs.c:51
#define free
Definition: debug_ros.c:5
GLintptr offset
Definition: glext.h:5920
#define l2l_dbg(level,...)
Definition: util.h:35
static UINT load_file(MSIRECORD *row, LPVOID param)
Definition: action.c:1202
_Must_inspect_result_ _Out_ PLARGE_INTEGER FileSize
Definition: fsrtlfuncs.h:108
static LPCWSTR file_name
Definition: protocol.c:147
GLuint res
Definition: glext.h:9613

Referenced by translate_file().

◆ remove_mark()

static char* remove_mark ( char Line)
static

Definition at line 312 of file log2lines.c.

313 {
314  if (Line[1] == ' ' && Line[2] == '<')
315  if (Line[0] == '*' || Line[0] == '?')
316  return Line + 2;
317  return Line;
318 }
Definition: ncftp.h:79
struct Line Line

Referenced by translate_line().

◆ report()

static void report ( FILE outFile)
static

Definition at line 99 of file log2lines.c.

100 {
101  reportSource(outFile);
102  clearLastLine();
103 }
static void reportSource(FILE *outFile)
Definition: log2lines.c:90
static void clearLastLine(void)
Definition: log2lines.c:40

Referenced by main(), and translate_files().

◆ reportSource()

static void reportSource ( FILE outFile)
static

Definition at line 90 of file log2lines.c.

91 {
92  if (!opt_Source)
93  return;
94  if (lastLine.valid)
95  logSource(outFile);
96 }
LINEINFO lastLine
Definition: log2lines.c:33
int opt_Source
Definition: options.c:34
static void logSource(FILE *outFile)
Definition: log2lines.c:79

Referenced by report().

◆ translate_char()

static void translate_char ( int  c,
FILE outFile 
)
static

Definition at line 304 of file log2lines.c.

305 {
306  fputc(c, outFile);
307  if (logFile)
308  fputc(c, logFile);
309 }
_Check_return_opt_ _CRTIMP int __cdecl fputc(_In_ int _Ch, _Inout_ FILE *_File)
const GLubyte * c
Definition: glext.h:8905
FILE * logFile
Definition: log2lines.c:34

Referenced by translate_files().

◆ translate_file()

static int translate_file ( const char cpath,
size_t  offset,
char toString 
)
static

Definition at line 262 of file log2lines.c.

263 {
264  size_t base = 0;
265  LIST_MEMBER *pentry = NULL;
266  int res = 0;
267  char *path, *dpath;
268 
269  dpath = path = convert_path(cpath);
270  if (!path)
271  return 1;
272 
273  // The path could be absolute:
274  if (get_ImageBase(path, &base))
275  {
276  pentry = entry_lookup(&cache, path);
277  if (pentry)
278  {
279  path = pentry->path;
280  base = pentry->ImageBase;
281  if (base == INVALID_BASE)
282  {
283  l2l_dbg(1, "No, or invalid base address: %s\n", path);
284  res = 2;
285  }
286  }
287  else
288  {
289  l2l_dbg(1, "Not found in cache: %s\n", path);
290  res = 3;
291  }
292  }
293 
294  if (!res)
295  {
296  res = process_file(path, offset, toString);
297  }
298 
299  free(dpath);
300  return res;
301 }
Definition: cache.c:48
GLsizei const GLchar ** path
Definition: glext.h:7234
#define free
Definition: debug_ros.c:5
GLintptr offset
Definition: glext.h:5920
#define l2l_dbg(level,...)
Definition: util.h:35
smooth NULL
Definition: ftsmooth.c:416
PLIST_MEMBER entry_lookup(PLIST list, char *name)
Definition: list.c:19
static int process_file(const char *file_name, size_t offset, char *toString)
Definition: log2lines.c:242
size_t ImageBase
Definition: list.h:8
#define INVALID_BASE
Definition: config.h:5
char * convert_path(char *origpath)
Definition: rcopy.c:11
GLuint res
Definition: glext.h:9613
char * path
Definition: list.h:7
int get_ImageBase(char *fname, size_t *ImageBase)
Definition: image.c:101

Referenced by translate_line().

◆ translate_files()

static int translate_files ( FILE inFile,
FILE outFile 
)
static

Definition at line 409 of file log2lines.c.

410 {
411  char Line[LINESIZE + 1];
412  char path[LINESIZE + 1];
413  char LineOut[LINESIZE + 1];
414  int c;
415  unsigned char ch;
416  int i = 0;
417  const char *pc = kdbg_cont;
418  const char *p = kdbg_prompt;
419  const char *p_eos = p + sizeof(KDBG_PROMPT) - 1; //end of string pos
420 
421  memset(Line, '\0', LINESIZE + 1);
422  if (opt_console)
423  {
424  while ((c = fgetc(inFile)) != EOF)
425  {
426  if (opt_quit)break;
427 
428  ch = (unsigned char)c;
429  if (!opt_raw)
430  {
431  switch (ch)
432  {
433  case '\n':
434  if ( strncmp(Line, KDBG_DISCARD, sizeof(KDBG_DISCARD)-1) == 0 )
435  {
436  memset(Line, '\0', LINESIZE); // flushed
437  }
438  else
439  {
440  Line[1] = handle_escape_cmd(outFile, Line);
441  if (Line[1] != KDBG_ESC_CHAR)
442  {
443  if (p == p_eos)
444  {
445  // kdbg prompt, so already echoed char by char
446  memset(Line, '\0', LINESIZE);
447  translate_char(c, outFile);
448  }
449  else
450  {
451  if (match_line(outFile, Line))
452  {
453  translate_line(outFile, Line, path, LineOut);
454  translate_char(c, outFile);
455  report(outFile);
456  }
457  }
458  }
459  }
460  i = 0;
461  p = kdbg_prompt;
462  pc = kdbg_cont;
463  break;
464  case '<':
465  i = 0;
466  Line[i++] = ch;
467  break;
468  case '>':
469  if (ch == *p)
470  {
471  p = p_eos;
472  translate_line(outFile, Line, path, LineOut);
473  }
474 
475  if (p != p_eos)
476  {
477  if (i < LINESIZE)
478  {
479  Line[i++] = ch;
480  translate_line(outFile, Line, path, LineOut);
481  }
482  else
483  {
484  translate_line(outFile, Line, path, LineOut);
485  translate_char(c, outFile);
486  }
487  }
488  else
489  translate_char(c, outFile);
490  i = 0;
491  break;
492  default:
493  if (ch == *p)p++;
494  if (ch == *pc)pc++;
495  if (i < LINESIZE)
496  {
497  Line[i++] = ch;
498  if (p == p_eos)
499  {
500  translate_char(c, outFile);
501  }
502  else if (!*pc)
503  {
504  translate_line(outFile, Line, path, LineOut);
505  i = 0;
506  }
507  }
508  else
509  {
510  translate_line(outFile, Line, path, LineOut);
511  translate_char(c, outFile);
512  i = 0;
513  }
514  }
515  }
516  else
517  translate_char(c, outFile);
518  }
519  }
520  else
521  { // Line by line, slightly faster but less interactive
522  while (fgets(Line, LINESIZE, inFile) != NULL)
523  {
524  if (opt_quit)break;
525 
526  if (!opt_raw)
527  {
528  translate_line(outFile, Line, path, LineOut);
529  report(outFile);
530  }
531  else
532  log(outFile, "%s", Line);
533  }
534  }
535 
536  if (opt_stats)
537  {
538  stat_print(outFile, &summ);
539  if (logFile)
541  }
542  return 0;
543 }
static const char * kdbg_prompt
Definition: log2lines.c:29
static void translate_line(FILE *outFile, char *Line, char *path, char *LineOut)
Definition: log2lines.c:321
int opt_raw
Definition: options.c:32
static const char * kdbg_cont
Definition: log2lines.c:30
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
smooth NULL
Definition: ftsmooth.c:416
unsigned char
Definition: typeof.h:29
#define KDBG_PROMPT
Definition: cmd.h:17
int opt_stats
Definition: options.c:33
const GLubyte * c
Definition: glext.h:8905
int strncmp(const char *String1, const char *String2, ACPI_SIZE Count)
Definition: utclib.c:534
void stat_print(FILE *outFile, PSUMM psumm)
Definition: stat.c:17
static void report(FILE *outFile)
Definition: log2lines.c:99
Definition: ncftp.h:79
static void translate_char(int c, FILE *outFile)
Definition: log2lines.c:304
#define KDBG_ESC_CHAR
Definition: cmd.h:13
_Check_return_opt_ _CRTIMP char *__cdecl fgets(_Out_writes_z_(_MaxCount) char *_Buf, _In_ int _MaxCount, _Inout_ FILE *_File)
#define KDBG_DISCARD
Definition: cmd.h:19
#define LINESIZE
Definition: chargen.c:18
int match_line(FILE *outFile, char *Line)
Definition: match.c:72
FILE * logFile
Definition: log2lines.c:34
#define EOF
Definition: stdio.h:24
int opt_console
Definition: options.c:26
#define c
Definition: ke_i.h:80
int opt_quit
Definition: options.c:30
char handle_escape_cmd(FILE *outFile, char *Line)
Definition: cmd.c:138
GLfloat GLfloat p
Definition: glext.h:8902
SUMM summ
Definition: log2lines.c:36
#define memset(x, y, z)
Definition: compat.h:39
#define log(outFile, fmt,...)
Definition: util.h:15
_Check_return_opt_ _CRTIMP int __cdecl fgetc(_Inout_ FILE *_File)

Referenced by main().

◆ translate_line()

static void translate_line ( FILE outFile,
char Line,
char path,
char LineOut 
)
static

Definition at line 321 of file log2lines.c.

322 {
323  unsigned int offset;
324  int cnt, res;
325  char *sep, *tail, *mark, *s;
326  unsigned char ch;
327 
328  if (!*Line)
329  return;
330 
331  res = 1;
332  mark = "";
333  s = remove_mark(Line);
334  if (opt_undo)
335  {
336  /* Strip all lines added by this tool: */
337  char buf[NAMESIZE];
338  if (sscanf(s, "| %s", buf) == 1)
339  if (buf[0] == '0' || strcmp(buf, "----") == 0 || strcmp(buf, "L2L-") == 0 || strcmp(buf, "S---") == 0 || strcmp(buf, "R---") == 0 || atoi(buf))
340  res = 0;
341  }
342 
343  sep = strchr(s, ':');
344  if (sep)
345  {
346  *sep = ' ';
347  cnt = sscanf(s, "<%s %x%c", path, &offset, &ch);
348  if (opt_undo)
349  {
350  if (cnt == 3 && ch == ' ')
351  {
352  tail = strchr(s, '>');
353  tail = tail ? tail - 1 : tail;
354  if (tail && tail[0] == ')' && tail[1] == '>')
355  {
356  res = 0;
357  tail += 2;
358  mark = opt_mark ? "* " : "";
359  if (opt_redo && !(res = translate_file(path, offset, LineOut)))
360  {
361  log(outFile, "%s<%s:%x (%s)>%s", mark, path, offset, LineOut, tail);
362  summ.redo++;
363  }
364  else
365  {
366  log(outFile, "%s<%s:%x>%s", mark, path, offset, tail);
367  summ.undo++;
368  }
369  }
370  else
371  {
372  mark = opt_Mark ? "? " : "";
373  summ.skipped++;
374  }
375  summ.total++;
376  }
377  }
378 
379  if (!opt_undo || opt_redo)
380  {
381  if (cnt == 3 && ch == '>')
382  {
383  tail = strchr(s, '>') + 1;
384  if (!(res = translate_file(path, offset, LineOut)))
385  {
386  mark = opt_mark ? "* " : "";
387  log(outFile, "%s<%s:%x (%s)>%s", mark, path, offset, LineOut, tail);
388  summ.translated++;
389  }
390  else
391  {
392  mark = opt_Mark ? "? " : "";
393  summ.skipped++;
394  }
395  summ.total++;
396  }
397  }
398  }
399  if (res)
400  {
401  if (sep)
402  *sep = ':'; // restore because not translated
403  log(outFile, "%s%s", mark, s);
404  }
405  memset(Line, '\0', LINESIZE); // flushed
406 }
struct outqueuenode * tail
Definition: adnsresfilter.c:66
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
int opt_Mark
Definition: options.c:28
GLintptr offset
Definition: glext.h:5920
int opt_undo
Definition: options.c:38
static char * remove_mark(char *Line)
Definition: log2lines.c:312
int opt_mark
Definition: options.c:27
#define NAMESIZE
Definition: config.h:31
int skipped
Definition: stat.h:17
int opt_redo
Definition: options.c:39
_Check_return_ _CRTIMP int __cdecl sscanf(_In_z_ const char *_Src, _In_z_ _Scanf_format_string_ const char *_Format,...)
Definition: ncftp.h:79
int translated
Definition: stat.h:14
GLdouble s
Definition: gl.h:2039
int undo
Definition: stat.h:15
static int translate_file(const char *cpath, size_t offset, char *toString)
Definition: log2lines.c:262
#define LINESIZE
Definition: chargen.c:18
char * strchr(const char *String, int ch)
Definition: utclib.c:501
int redo
Definition: stat.h:16
_Check_return_ int __cdecl atoi(_In_z_ const char *_Str)
GLuint res
Definition: glext.h:9613
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
SUMM summ
Definition: log2lines.c:36
#define memset(x, y, z)
Definition: compat.h:39
int total
Definition: stat.h:23
#define log(outFile, fmt,...)
Definition: util.h:15

Referenced by main(), and translate_files().

Variable Documentation

◆ cache

Definition at line 35 of file log2lines.c.

◆ conIn

FILE* conIn = NULL
static

Definition at line 27 of file log2lines.c.

Referenced by main().

◆ conOut

FILE* conOut = NULL
static

Definition at line 28 of file log2lines.c.

Referenced by main().

◆ dbgIn

FILE* dbgIn = NULL
static

Definition at line 25 of file log2lines.c.

Referenced by main().

◆ dbgOut

FILE* dbgOut = NULL
static

Definition at line 26 of file log2lines.c.

Referenced by main().

◆ kdbg_cont

const char* kdbg_cont = KDBG_CONT
static

Definition at line 30 of file log2lines.c.

Referenced by translate_files().

◆ kdbg_prompt

const char* kdbg_prompt = KDBG_PROMPT
static

Definition at line 29 of file log2lines.c.

Referenced by translate_files().

◆ lastLine

LINEINFO lastLine

Definition at line 33 of file log2lines.c.

Referenced by clearLastLine(), logSource(), print_offset(), and reportSource().

◆ logFile

FILE* logFile = NULL

Definition at line 34 of file log2lines.c.

Referenced by main(), translate_char(), and translate_files().

◆ sources

Definition at line 32 of file log2lines.c.

◆ summ