]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/tools/bregtest.c
ebl add bregtest tool
[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 plus additions
17    that are listed 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: bregex [-d debug_level] -f <data-file> -e /test/test2/\n"
54 "       -f          specify file of data to be matched\n"
55 "       -e          specify expression\n"
56 "       -?          print this message.\n"
57 "\n");
58
59    exit(1);
60 }
61
62
63 int main(int argc, char *const *argv)
64 {
65    char *fname = NULL;
66    char *expr = NULL;
67    int ch;
68    char data[1000];
69    FILE *fd;
70
71    setlocale(LC_ALL, "");
72    bindtextdomain("bacula", LOCALEDIR);
73    textdomain("bacula");
74
75    while ((ch = getopt(argc, argv, "d:f:e:")) != -1) {
76       switch (ch) {
77       case 'd':                       /* set debug level */
78          debug_level = atoi(optarg);
79          if (debug_level <= 0) {
80             debug_level = 1;
81          }
82          break;
83
84       case 'f':                       /* data */
85          fname = optarg;
86          break;
87
88       case 'e':
89          expr = optarg;
90          break;
91
92       case '?':
93       default:
94          usage();
95
96       }
97    }
98    argc -= optind;
99    argv += optind;
100
101    if (!fname) {
102       printf("A data file must be specified.\n");
103       usage();
104    }
105
106    if (!expr) {
107       printf("An expression must be specified.\n");
108       usage();
109    }
110
111    OSDependentInit();
112
113    alist *list;
114    char *p;
115    
116    list = get_bregexps(expr);
117
118    if (!list) {
119       printf("Can't use %s as 'sed' expression\n", expr);
120       exit (1);
121    }
122
123    fd = fopen(fname, "r");
124    if (!fd) {
125       printf(_("Could not open data file: %s\n"), fname);
126       exit(1);
127    }
128
129    while (fgets(data, sizeof(data)-1, fd)) {
130       strip_trailing_newline(data);
131       apply_bregexps(data, list, &p);
132       printf("%s => %s\n", data, p);
133    }
134    fclose(fd);
135    free_bregexps(list);
136    delete list;
137    exit(0);
138 }
139 /*
140   TODO: 
141    - ajout /g
142
143    - tests 
144    * test avec /i
145    * test avec un sed et faire un diff
146    * test avec une boucle pour voir les fuites
147
148 */