]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/tools/bregtest.c
Convert to pure GPL v2 license.
[bacula/bacula] / bacula / src / tools / bregtest.c
1 /*
2  * Test program for testing regular expressions.
3  *
4  *  Kern Sibbald, MMVI
5  *
6  */
7 /*
8    Bacula\81Â\81® - The Network Backup Solution
9
10    Copyright (C) 2006-2006 Free Software Foundation Europe e.V.
11
12    The main author of Bacula is Kern Sibbald, with contributions from
13    many others, a complete list can be found in the file AUTHORS.
14    This program is Free Software; you can redistribute it and/or
15    modify it under the terms of version two of the GNU General Public
16    License as published by the Free Software Foundation and included
17    in the file LICENSE.
18
19    This program is distributed in the hope that it will be useful, but
20    WITHOUT ANY WARRANTY; without even the implied warranty of
21    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22    General Public License for more details.
23
24    You should have received a copy of the GNU General Public License
25    along with this program; if not, write to the Free Software
26    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
27    02110-1301, USA.
28
29    Bacula\81Â\81® is a registered trademark of John Walker.
30    The licensor of Bacula is the Free Software Foundation Europe
31    (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Z\81Ã\81¼rich,
32    Switzerland, email:ftf@fsfeurope.org.
33 */
34
35 /*
36  *  If you define BACULA_REGEX, bregex will be built with the
37  *  Bacula bregex library, which is the same code that we
38  *  use on Win32, thus using Linux, you can test your Win32
39  *  expressions. Otherwise, this program will link with the
40  *  system library routines.
41  */
42 //#define BACULA_REGEX
43
44 #include "bacula.h"
45 #include <stdio.h>
46 #include "lib/breg.h"
47
48
49 static void usage()
50 {
51    fprintf(stderr,
52 "\n"
53 "Usage: bregtest [-d debug_level] [-s] -f <data-file> -e /test/test2/\n"
54 "       -f          specify file of data to be matched\n"
55 "       -e          specify expression\n"
56 "       -s          sed output\n"
57 "       -?          print this message.\n"
58 "\n");
59
60    exit(1);
61 }
62
63
64 int main(int argc, char *const *argv)
65 {
66    char *fname = NULL;
67    char *expr = NULL;
68    int ch;
69    bool sed=false;
70    char data[1000];
71    FILE *fd;
72
73    setlocale(LC_ALL, "");
74    bindtextdomain("bacula", LOCALEDIR);
75    textdomain("bacula");
76
77    while ((ch = getopt(argc, argv, "sd:f:e:")) != -1) {
78       switch (ch) {
79       case 'd':                       /* set debug level */
80          debug_level = atoi(optarg);
81          if (debug_level <= 0) {
82             debug_level = 1;
83          }
84          break;
85
86       case 'f':                       /* data */
87          fname = optarg;
88          break;
89
90       case 'e':
91          expr = optarg;
92          break;
93
94       case 's':
95          sed=true;
96          break;
97
98       case '?':
99       default:
100          usage();
101
102       }
103    }
104    argc -= optind;
105    argv += optind;
106
107    if (!fname) {
108       printf("A data file must be specified.\n");
109       usage();
110    }
111
112    if (!expr) {
113       printf("An expression must be specified.\n");
114       usage();
115    }
116
117    OSDependentInit();
118
119    alist *list;
120    char *p;
121    
122    list = get_bregexps(expr);
123
124    if (!list) {
125       printf("Can't use %s as 'sed' expression\n", expr);
126       exit (1);
127    }
128
129    fd = fopen(fname, "r");
130    if (!fd) {
131       printf(_("Could not open data file: %s\n"), fname);
132       exit(1);
133    }
134
135    while (fgets(data, sizeof(data)-1, fd)) {
136       strip_trailing_newline(data);
137       apply_bregexps(data, list, &p);
138       if (sed) {
139          printf("%s\n", p);
140       } else {
141          printf("%s => %s\n", data, p);
142       }
143    }
144    fclose(fd);
145    free_bregexps(list);
146    delete list;
147    exit(0);
148 }
149 /*
150   TODO: 
151    - ajout /g
152
153    - tests 
154    * test avec /i
155    * test avec un sed et faire un diff
156    * test avec une boucle pour voir les fuites
157
158 */