[PATCH] Add Alan's btt tool
[blktrace.git] / btt / misc.c
CommitLineData
63eba147
JA
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 <unistd.h>
24
25#define INLINE_DECLARE
26#include "globals.h"
27
28int data_is_native = -1;
29
30struct blk_io_trace *convert_to_cpu(struct blk_io_trace *t)
31{
32 if (data_is_native == -1)
33 check_data_endianness(t->magic);
34
35 trace_to_cpu(t);
36
37 ASSERT(CHECK_MAGIC(t));
38 ASSERT((t->magic & 0xff) == SUPPORTED_VERSION);
39
40 return t;
41}
42
43int in_devices(struct blk_io_trace *t)
44{
45 int i;
46 unsigned int mjr, mnr;
47 char *p = devices;
48
49 if (p == NULL) return 1; /* Allow anything */
50
51 for (;;) {
52 i = sscanf(p, "%u,%u;", &mjr, &mnr);
53 ASSERT(i == 2);
54
55 if ((mjr == MAJOR(t->device) && (mnr == MINOR(t->device))))
56 return 1;
57
58 p = strchr(p, ';');
59 if (!p)
60 break;
61 p++;
62 }
63
64 return 0;
65}
66
67unsigned int do_read(int ifd, void *buf, int len)
68{
69 int n;
70
71 n = read(ifd, buf, len);
72 if (n < 0) {
73 perror(input_name);
74 return 1;
75 }
76 else if (0 < n && n < len) {
77 fprintf(stderr,"Short read on %s\n", input_name);
78 return 1;
79 }
80 else if (n == 0) /* EOF */
81 return 1;
82
83 return 0;
84}