Subversion Repositories shark

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1093 pj 1
#include <stdio.h>
2
#include <string.h>
3
#include <fcntl.h>
4
#include <unistd.h>
5
 
6
#include "types.h"
7
#include <trace.h>
8
#include <types.h>
9
 
10
static char *names[]={
11
  "reserved",
12
  "hoops",
13
  /*--*/
14
  "create",
15
  "activate",
16
  "schedule",
17
  "delay",
18
  "sleep",
19
  "endcycle",
20
  "destroy",
21
  "intactiv",
22
  /*--*/
23
  "user0",
24
  "user1",
25
  "user2",
26
  "user3",
27
  "user4",
28
  "user5",
29
  "user6",
30
  "user7",
31
  /*--*/    
32
  "wait",
33
  "waitnb",
34
  "signal"
35
};
36
 
37
int classtable[TRC_NUMCLASSES+1]={
38
  TRC_F_TRACER,
39
  TRC_F_SYSTEM,
40
  TRC_F_USER,
41
  TRC_F_SEM,
42
  TRC_F_LAST
43
};
44
 
45
int event_class(int ev)
46
{
47
  int i;
48
  if (ev<0||ev>=TRC_NUMEVENTS) return -1;
49
  for (i=0;i<TRC_NUMCLASSES;i++)
50
    if (ev>=classtable[i]&&ev<classtable[i+1]) return i;
51
  return -1;
52
}
53
 
54
char *event_name(int ev)
55
{
56
  if (ev<0||ev>=TRC_NUMEVENTS) return "unknown";
57
  return names[ev];
58
}
59
 
60
char *event_hexdump(u_int8_t *ptr,int maxsize)
61
{
62
  static char buffer[256];
63
  int i;
64
  for (i=0;i<maxsize;i++) sprintf(buffer+i*2,"%02x",*(ptr+i));
65
  buffer[maxsize*2]='\0';
66
  return buffer;
67
}
68
 
69
char *event_strdump(u_int8_t *ptr, int maxsize)
70
{
71
  static char buffer[256];
72
  memcpy(buffer,ptr,maxsize);
73
  buffer[maxsize]='\0';
74
  return buffer;
75
}
76
 
77
 
78
char *format_time(long time)
79
{
80
  static char buffer[256];
81
 
82
  if (time<1000l) {
83
    sprintf(buffer,"%li",time);
84
    return buffer;
85
  }
86
  if (time<1000000l) {
87
    sprintf(buffer,"%li,%03li",time/1000l,time%1000l);
88
    return buffer;
89
  }
90
  sprintf(buffer,"%li,%03li,%03li",
91
          (time/1000000l),
92
          (time%1000000l)/1000l,
93
          time%1000l);
94
  return buffer;         
95
}
96
 
97
#ifndef O_BINARY
98
#define O_BINARY 0
99
#endif
100
 
101
int read_trace(char *filename,int (*func)(trc_event_t *))
102
{
103
  trc_event_t buffer;
104
  int fin;
105
  int res;
106
 
107
  fin=open(filename,O_RDONLY|O_BINARY);
108
  if (fin==-1) return -1;
109
  for (;;) {
110
    res=read(fin,&buffer,sizeof(trc_event_t));
111
    if (res!=sizeof(trc_event_t)) {
112
      close(fin);
113
      return res==0?0:-2;
114
    }
115
    res=(*func)(&buffer);
116
    if (res!=0) {
117
      close(fin);
118
      return res;
119
    }
120
  }
121
  close(fin);
122
  return 0;
123
}