]> git.sur5r.net Git - bacula/bacula/blob - bacula/patches/testing/bregsed.c
Convert to pure GPL v2 license.
[bacula/bacula] / bacula / patches / testing / bregsed.c
1 /*
2  * Test program for testing regular expressions.
3  *
4  *  Kern Sibbald, MMVI
5  *
6  */
7 /*
8    Bacula® - 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® 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ü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    regex_t preg;
66    char prbuf[500];
67    char *fname = NULL;
68    char *expr = NULL;
69    int rc, ch;
70    char data[1000];
71    char pat[500];
72    FILE *fd;
73    bool match_only = true;
74    int lineno;
75    bool no_linenos = false;
76    
77
78    setlocale(LC_ALL, "");
79    bindtextdomain("bacula", LOCALEDIR);
80    textdomain("bacula");
81
82    while ((ch = getopt(argc, argv, "d:f:e:")) != -1) {
83       switch (ch) {
84       case 'd':                       /* set debug level */
85          debug_level = atoi(optarg);
86          if (debug_level <= 0) {
87             debug_level = 1;
88          }
89          break;
90
91       case 'f':                       /* data */
92          fname = optarg;
93          break;
94
95       case 'e':
96          expr = optarg;
97          break;
98
99       case '?':
100       default:
101          usage();
102
103       }
104    }
105    argc -= optind;
106    argv += optind;
107
108    if (!fname) {
109       printf("A data file must be specified.\n");
110       usage();
111    }
112
113    if (!expr) {
114       printf("An expression must be specified.\n");
115       usage();
116    }
117
118    OSDependentInit();
119
120    BREGEXP *reg;
121    
122    reg = new_bregexp(expr);
123    
124    if (!reg) {
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       reg->replace(data);
138       printf("%s\n", reg->result);
139    }
140    fclose(fd);
141    free_bregexp(reg);
142    exit(0);
143 }
144 /*
145   TODO: 
146    - ajout /g
147
148    - tests 
149    * test avec /i (visiblement il ne marche pas sur bregexp.c)
150    * test avec un sed et faire un diff
151    * test avec une boucle pour voir les fuites
152    * tester les cas possibles pour la compilation d'une expression
153      - manque le depart, le milieu, la fin, utilise des groupes sans
154        reference...
155
156 */