Add some notes to git-export-release.sh.
[metze/wireshark/wip.git] / dftest.c
1 /* dftest.c
2  * Shows display filter byte-code, for debugging dfilter routines.
3  *
4  * Wireshark - Network traffic analyzer
5  * By Gerald Combs <gerald@wireshark.org>
6  * Copyright 1998 Gerald Combs
7  *
8  * SPDX-License-Identifier: GPL-2.0-or-later
9  */
10
11 #include <config.h>
12
13 #include <stdlib.h>
14 #include <stdio.h>
15 #include <locale.h>
16 #include <string.h>
17 #include <errno.h>
18
19 #include <glib.h>
20
21 #include <epan/epan.h>
22 #include <epan/timestamp.h>
23 #include <epan/prefs.h>
24 #include <epan/dfilter/dfilter.h>
25
26 #ifdef HAVE_PLUGINS
27 #include <wsutil/plugins.h>
28 #endif
29 #include <wsutil/filesystem.h>
30 #include <wsutil/privileges.h>
31 #include <wsutil/report_message.h>
32
33 #include <wiretap/wtap.h>
34
35 #include "ui/util.h"
36 #include "epan/register.h"
37
38 static void failure_warning_message(const char *msg_format, va_list ap);
39 static void open_failure_message(const char *filename, int err,
40         gboolean for_writing);
41 static void read_failure_message(const char *filename, int err);
42 static void write_failure_message(const char *filename, int err);
43
44 int
45 main(int argc, char **argv)
46 {
47         char            *init_progfile_dir_error;
48         char            *text;
49         dfilter_t       *df;
50         gchar           *err_msg;
51
52         /*
53          * Get credential information for later use.
54          */
55         init_process_policies();
56
57         /*
58          * Attempt to get the pathname of the directory containing the
59          * executable file.
60          */
61         init_progfile_dir_error = init_progfile_dir(argv[0], main);
62         if (init_progfile_dir_error != NULL) {
63                 fprintf(stderr, "dftest: Can't get pathname of directory containing the dftest program: %s.\n",
64                         init_progfile_dir_error);
65                 g_free(init_progfile_dir_error);
66         }
67
68         init_report_message(failure_warning_message, failure_warning_message,
69                             open_failure_message, read_failure_message,
70                             write_failure_message);
71
72         timestamp_set_type(TS_RELATIVE);
73         timestamp_set_seconds_type(TS_SECONDS_DEFAULT);
74
75         wtap_init(TRUE);
76
77         /* Register all dissectors; we must do this before checking for the
78            "-g" flag, as the "-g" flag dumps a list of fields registered
79            by the dissectors, and we must do it before we read the preferences,
80            in case any dissectors register preferences. */
81         if (!epan_init(register_all_protocols, register_all_protocol_handoffs,
82             NULL, NULL))
83                 return 2;
84
85         /* set the c-language locale to the native environment. */
86         setlocale(LC_ALL, "");
87
88         /* Load libwireshark settings from the current profile. */
89         epan_load_settings();
90
91         /* notify all registered modules that have had any of their preferences
92         changed either from one of the preferences file or from the command
93         line that its preferences have changed. */
94         prefs_apply_all();
95
96         /* Check for filter on command line */
97         if (argc <= 1) {
98                 fprintf(stderr, "Usage: dftest <filter>\n");
99                 exit(1);
100         }
101
102         /* Get filter text */
103         text = get_args_as_string(argc, argv, 1);
104
105         printf("Filter: \"%s\"\n", text);
106
107         /* Compile it */
108         if (!dfilter_compile(text, &df, &err_msg)) {
109                 fprintf(stderr, "dftest: %s\n", err_msg);
110                 g_free(err_msg);
111                 epan_cleanup();
112                 exit(2);
113         }
114
115         printf("\n");
116
117         if (df == NULL)
118                 printf("Filter is empty\n");
119         else
120                 dfilter_dump(df);
121
122         dfilter_free(df);
123         epan_cleanup();
124         exit(0);
125 }
126
127 /*
128  * General errors and warnings are reported with an console message
129  * in "dftest".
130  */
131 static void
132 failure_warning_message(const char *msg_format, va_list ap)
133 {
134         fprintf(stderr, "dftest: ");
135         vfprintf(stderr, msg_format, ap);
136         fprintf(stderr, "\n");
137 }
138
139 /*
140  * Open/create errors are reported with an console message in "dftest".
141  */
142 static void
143 open_failure_message(const char *filename, int err, gboolean for_writing)
144 {
145         fprintf(stderr, "dftest: ");
146         fprintf(stderr, file_open_error_message(err, for_writing), filename);
147         fprintf(stderr, "\n");
148 }
149
150 /*
151  * Read errors are reported with an console message in "dftest".
152  */
153 static void
154 read_failure_message(const char *filename, int err)
155 {
156         fprintf(stderr, "dftest: An error occurred while reading from the file \"%s\": %s.\n",
157                 filename, g_strerror(err));
158 }
159
160 /*
161  * Write errors are reported with an console message in "dftest".
162  */
163 static void
164 write_failure_message(const char *filename, int err)
165 {
166         fprintf(stderr, "dftest: An error occurred while writing to the file \"%s\": %s.\n",
167                 filename, g_strerror(err));
168 }
169
170 /*
171  * Editor modelines  -  http://www.wireshark.org/tools/modelines.html
172  *
173  * Local variables:
174  * c-basic-offset: 8
175  * tab-width: 8
176  * indent-tabs-mode: t
177  * End:
178  *
179  * vi: set shiftwidth=8 tabstop=8 noexpandtab:
180  * :indentSize=8:tabSize=8:noTabs=false:
181  */