Added -X option - generate easily parseable file
[blktrace.git] / btt / misc.c
1 /*
2  * blktrace output analysis: generate a timeline & gather statistics
3  *
4  * Copyright (C) 2006 Alan D. Brunelle <Alan.Brunelle@hp.com>
5  *
6  *  This program is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation; either version 2 of the License, or
9  *  (at your option) any later version.
10  *
11  *  This program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with this program; if not, write to the Free Software
18  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  */
21 #include <stdio.h>
22 #include <string.h>
23 #include <sys/types.h>
24 #include <sys/stat.h>
25 #include <unistd.h>
26
27 #define INLINE_DECLARE
28 #include "globals.h"
29
30 int in_devices(struct blk_io_trace *t)
31 {
32         int i;
33         unsigned int mjr, mnr;
34         char *p = devices;
35
36         if (p == NULL) return 1;        /* Allow anything */
37
38         for (;;) {
39                 i = sscanf(p, "%u,%u;", &mjr, &mnr);
40                 if ((mjr == MAJOR(t->device) && (mnr == MINOR(t->device))))
41                         return 1;
42
43                 p = strchr(p, ';');
44                 if (!p)
45                         break;
46                 p++;
47         }
48
49         return 0;
50 }
51
52 void add_file(struct file_info **fipp, FILE *fp, char *oname)
53 {
54         struct file_info *fip = malloc(sizeof(*fip));
55
56         fip->ofp = fp;
57         fip->oname = oname;
58         fip->next = *fipp;
59         *fipp = fip;
60 }
61
62 void clean_files(struct file_info **fipp)
63 {
64         struct stat buf;
65         struct file_info *fip;
66
67         while ((fip = *fipp) != NULL) {
68                 *fipp = fip->next;
69
70                 fclose(fip->ofp);
71                 if (!stat(fip->oname, &buf) && (buf.st_size == 0))
72                         unlink(fip->oname);
73
74                 free(fip->oname);
75                 free(fip);
76         }
77 }
78
79 struct buf_info {
80         struct buf_info *next;
81         void *buf;
82 } *all_bufs;
83 void add_buf(void *buf)
84 {
85         struct buf_info *bip = malloc(sizeof(*bip));
86
87         bip->buf = buf;
88         bip->next = all_bufs;
89         all_bufs = bip;
90 }
91
92 void clean_bufs(void)
93 {
94         struct buf_info *bip;
95
96         while ((bip = all_bufs) != NULL) {
97                 all_bufs = bip->next;
98                 free(bip->buf);
99                 free(bip);
100         }
101 }
102
103 void dbg_ping(void) {}