source: tools/tracesplit/tracesplit_dir.c @ 171cc28

4.0.1-hotfixescachetimestampsdevelopdpdk-ndagetsilivegetfragoffhelplibtrace4ndag_formatpfringrc-4.0.1rc-4.0.2rc-4.0.3rc-4.0.4ringdecrementfixringperformanceringtimestampfixes
Last change on this file since 171cc28 was 171cc28, checked in by Perry Lorier <perry@…>, 14 years ago

Improve error handling of tools w.r.t bad output formats.
Fixes #244

  • Property mode set to 100644
File size: 1.9 KB
RevLine 
[548da5c]1#include "libtrace.h"
[5ad7ad0]2#include <stdio.h>
[548da5c]3
4
[a7282fb]5static struct libtrace_out_t *create_output(char *uri) {
[548da5c]6        struct libtrace_out_t *output = NULL;
7        libtrace_err_t trace_err;
8        output = trace_create_output(uri);
9        if (trace_is_err_output(output)) {
[171cc28]10                trace_perror_output(output,"%s",uri);
11                trace_destroy_output(output);
[548da5c]12                return NULL;
13        }
14        /* Default values for now */
15        trace_start_output(output);
[171cc28]16        if (trace_is_err_output(output)) {
17                trace_perror_output(output,"%s",uri);
18                trace_destroy_output(output);
19                return NULL;
20        }
[548da5c]21        return output;
22}
23
[a7282fb]24static void usage(char*argv0) {
25        printf("%s inputuri outputuri_incoming outputuri_outgoing\n",argv0);
[548da5c]26}
27
28int main(int argc, char *argv[]) {
29        struct libtrace_t *input = NULL;
30        struct libtrace_out_t *in_write = NULL;
31        struct libtrace_out_t *out_write = NULL;
32        libtrace_err_t trace_err;
33        struct libtrace_packet_t *packet = trace_create_packet();
34       
35        if (argc < 3) {
36                usage(argv[0]);
37                return 1;
38        }
39
40        input = trace_create(argv[1]);
41        if (trace_is_err(input)) {
42                trace_err = trace_get_err(input);
43                printf("Problem reading input trace: %s\n", trace_err.problem);
44                return 1;
45        }
[fc0f131]46        if (trace_start(input)==-1) {
[171cc28]47                trace_perror(input,argv[1]);
[fc0f131]48                return 1;
49        }
[548da5c]50       
51        while(1) {
52                if (trace_read_packet(input, packet) < 1)
53                        break;
54
55                switch(trace_get_direction(packet)) {
56                        case 0:
57                                if (!out_write) {
58                                        out_write = create_output(argv[3]);
[171cc28]59                                        if (!out_write)
[548da5c]60                                                return 1;
61                                }
[5ad7ad0]62                                if (trace_write_packet(out_write, packet)==-1){
63                                        trace_perror_output(in_write,"write");
64                                        return 1;
65                                }
[548da5c]66                                break;
67                        case 1:
68                                if (!in_write) {
69                                        in_write = create_output(argv[2]);
70                                        if (!in_write)
71                                                return 1;
72                                }
[5ad7ad0]73                                if (trace_write_packet(in_write, packet)==-1) {
74                                        trace_perror_output(in_write,"write");
75                                        return 1;
76                                }
[548da5c]77                                break;
78                }
79
80        }
81        if (out_write)
82                trace_destroy_output(out_write);
83        if (in_write)
84                trace_destroy_output(in_write);
85        trace_destroy(input);
[853603a]86        trace_destroy_packet(packet);
[548da5c]87       
88        return 0;
89}
90       
Note: See TracBrowser for help on using the repository browser.