Merge branch 'master' of ssh://git.kernel.dk/data/git/blktrace
[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                 ASSERT(i == 2);
41
42                 if ((mjr == MAJOR(t->device) && (mnr == MINOR(t->device))))
43                         return 1;
44
45                 p = strchr(p, ';');
46                 if (!p)
47                         break;
48                 p++;
49         }
50
51         return 0;
52 }
53
54 void add_file(struct file_info **fipp, FILE *fp, char *oname)
55 {
56         struct file_info *fip;
57         
58         fip = malloc(sizeof(struct file_info) + strlen(oname) + 1);
59
60         fip->next = *fipp;
61         *fipp = fip;
62
63         fip->ofp = fp;
64         strcpy(fip->oname, oname);
65 }
66
67 void clean_files(struct file_info **fipp)
68 {
69         struct stat buf;
70         struct file_info *fip;
71
72         while ((fip = *fipp) != NULL) {
73                 *fipp = fip->next;
74
75                 fclose(fip->ofp);
76                 if (!stat(fip->oname, &buf) && (buf.st_size == 0))
77                         unlink(fip->oname);
78                 free(fip);
79         }
80 }
81
82 void dbg_ping(void) {}