@@ -85,99 +85,39 @@ void InstallCrashHandler(const char* logFileName)
8585 sigaction (SIGILL , & sa , NULL );
8686}
8787
88- static char * LoadEndOfFile (const char * logFileName , OsConfigLogHandle log )
88+ void CheckForPreviousCrash (const char * logFileName , OsConfigLogHandle log )
8989{
90- const int maxSize = 2048 ;
91- int size = 0 ;
92- long offset = 0 ;
93- size_t sizeRead = 0 ;
94- FILE * file = NULL ;
95- char * string = NULL ;
96-
97- if (false == FileExists (logFileName ))
98- {
99- return string ;
100- }
101-
102- if (NULL != (file = fopen (logFileName , "r" )))
103- {
104- if (LockFile (file , log ))
105- {
106- fseek (file , 0 , SEEK_END );
107- size = (int )ftell (file );
108-
109- if (size > maxSize )
110- {
111- size = maxSize ;
112- }
113-
114- offset = (long )(ftell (file ) - size );
115- fseek (file , offset , SEEK_SET );
116-
117- if (NULL != (string = (char * )malloc (size + 1 )))
118- {
119- memset (string , 0 , size + 1 );
120- sizeRead = fread (string , sizeof (char ), size , file );
121- UNUSED (sizeRead );
122- }
123- else
124- {
125- OsConfigLogError (log , "LoadEndOfFile: unable to allocate memory" );
126- }
127-
128- UnlockFile (file , log );
129- }
130-
131- fclose (file );
132- }
133-
134- OsConfigLogDebug (log , "LoadEndOfFile: '%s' ends in '%s'" , logFileName , string );
135-
136- return string ;
137- }
138-
139- void ParseLogForPreviousCrashIfAny (const char * logFileName , char * * marker , char * * stack , OsConfigLogHandle log )
140- {
141- const char * crashDueToMarker = "[ERROR] Crash due to" ;
142- const char * stackTraceMarker = "[ERROR] Stack trace:" ;
14390 char * endOfFile = NULL ;
14491 char * crashStart = NULL ;
145- char * stackStart = NULL ;
14692 char * endOfLine = NULL ;
93+ char * p = NULL ;
14794
14895 if ((NULL == logFileName ) || (false == FileExists (logFileName )) || (NULL == marker ) || (NULL == stack ))
14996 {
15097 return ;
15198 }
15299
153- * marker = NULL ;
154- * stack = NULL ;
155-
156- if (NULL != (endOfFile = LoadEndOfFile (logFileName , log )))
100+ if (NULL != (endOfFile = ReadEndOfFile (logFileName , log )))
157101 {
158- if (NULL != (crashStart = strstr (endOfFile , crashDueToMarker )))
102+ if (NULL != (crashStart = strstr (endOfFile , CRASH_PREFIX )))
159103 {
160- // Search for stack trace before mutating crashStart
161- stackStart = strstr ( endOfFile , stackTraceMarker );
104+ OsConfigLogError ( log , "Previous crash detected:" );
105+ OsConfigLogError ( log , "%s" , crashStart );
162106
163- // Null-terminate the crash header line
164- if ( NULL != ( endOfLine = strchr ( crashStart , '\n' )) )
107+ p = crashStart ;
108+ while ( * p )
165109 {
166- endOfLine [0 ] = 0 ;
110+ if (EOL == * p )
111+ {
112+ * p = ';' ;
113+ }
114+ p ++ ;
167115 }
168116
169- * marker = DuplicateString (crashStart );
170- * stack = DuplicateString (stackStart );
171- }
172- else
173- {
174- OsConfigLogError (log , "ParseLogForPreviousCrashIfAny: '%s' not found in '%s'" , crashDueToMarker , logFileName );
117+
118+ OSConfigTelemetryStatusTrace (crashStart , EFAULT );
175119 }
176120 }
177- else
178- {
179- OsConfigLogError (log , "ParseLogForPreviousCrashIfAny: could not open '%s' (%d, %s)" , logFileName , errno , strerror (errno ));
180- }
181121
182122 FREE_MEMORY (endOfFile );
183123}
0 commit comments