1e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat#include <stdio.h> 2e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat#include <stdlib.h> 3e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat#include <fcntl.h> 4e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat#include <string.h> 5e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat#include <unistd.h> 6e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat 7e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat#define MAX_CPUS (512) 8e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat 9e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehatint main(int argc, char *argv[]) 10e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat{ 11e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat double this_time, last_time; 12e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat char line[256], last_line[256], *p; 13e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat int major, minor, cpu, nr, alias; 14e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat unsigned long long total_entries; 15e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat unsigned int last_seq[MAX_CPUS], seq; 16e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat FILE *f; 17e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat 18e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat for (nr = 0; nr < MAX_CPUS; nr++) 19e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat last_seq[nr] = -1; 20e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat 21e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat if (argc < 2) { 22e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat fprintf(stderr, "%s: file\n", argv[0]); 23e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat return 1; 24e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat } 25e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat 26e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat f = fopen(argv[1], "r"); 27e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat if (!f) { 28e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat perror("fopen"); 29e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat return 1; 30e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat } 31e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat 32e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat last_time = 0; 33e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat alias = nr = 0; 34e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat total_entries = 0; 35e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat while ((p = fgets(line, sizeof(line), f)) != NULL) { 36e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat if (sscanf(p, "%3d,%3d %2d %8d %lf", &major, &minor, &cpu, &seq, &this_time) != 5) 37e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat break; 38e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat 39e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat if (this_time < last_time) { 40e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat fprintf(stdout, "last: %s", last_line); 41e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat fprintf(stdout, "this: %s", p); 42e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat nr++; 43e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat } 44e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat 45e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat last_time = this_time; 46e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat 47e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat if (cpu >= MAX_CPUS) { 48e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat fprintf(stderr, "cpu%d too large\n", cpu); 49e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat break; 50e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat } 51e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat 52e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat if (last_seq[cpu] == seq) { 53e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat fprintf(stdout, "alias on sequence %u\n", seq); 54e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat alias++; 55e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat } 56e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat 57e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat last_seq[cpu] = seq; 58e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat total_entries++; 59e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat strcpy(last_line, line); 60e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat } 61e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat 62e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat fprintf(stdout, "Events %Lu: %d unordered, %d aliases\n", total_entries, nr, alias); 63e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat fclose(f); 64e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat 65e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat return nr != 0; 66e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat} 67