|
1 /* |
|
2 * Copyright (c) 2005, 2008 Sun Microsystems, Inc. All Rights Reserved. |
|
3 * Use is subject to license terms. |
|
4 * |
|
5 * Copyright (c) 1984 AT&T |
|
6 * All Rights Reserved |
|
7 * |
|
8 * Licensed under the Apache License, Version 2.0 (the "License"); |
|
9 * you may not use this file except in compliance with the License. |
|
10 * You may obtain a copy of the License at |
|
11 * http://www.apache.org/licenses/LICENSE-2.0. |
|
12 * |
|
13 * Unless required by applicable law or agreed to in writing, software |
|
14 * distributed under the License is distributed on an "AS IS" BASIS, |
|
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express |
|
16 * or implied. |
|
17 * See the License for the specific language governing permissions and |
|
18 * limitations under the License. |
|
19 */ |
|
20 |
|
21 #ifndef LIBSED_H |
|
22 #define LIBSED_H |
|
23 |
|
24 #ifdef __cplusplus |
|
25 extern "C" { |
|
26 #endif |
|
27 |
|
28 #include <limits.h> |
|
29 |
|
30 #include "apr_file_io.h" |
|
31 #ifndef PATH_MAX |
|
32 #define PATH_MAX MAX_PATH |
|
33 #endif |
|
34 |
|
35 #define SED_NLINES 256 |
|
36 #define SED_DEPTH 20 |
|
37 #define SED_LABSIZE 50 |
|
38 #define SED_ABUFSIZE 20 |
|
39 |
|
40 typedef struct sed_reptr_s sed_reptr_t; |
|
41 |
|
42 struct sed_reptr_s { |
|
43 sed_reptr_t *next; |
|
44 char *ad1; |
|
45 char *ad2; |
|
46 char *re1; |
|
47 sed_reptr_t *lb1; |
|
48 char *rhs; |
|
49 int findex; |
|
50 char command; |
|
51 int gfl; |
|
52 char pfl; |
|
53 char negfl; |
|
54 int nrep; |
|
55 }; |
|
56 |
|
57 typedef struct sed_label_s sed_label_t; |
|
58 |
|
59 struct sed_label_s { |
|
60 char asc[9]; |
|
61 sed_reptr_t *chain; |
|
62 sed_reptr_t *address; |
|
63 }; |
|
64 |
|
65 typedef apr_status_t (sed_err_fn_t)(void *data, const char *error); |
|
66 typedef apr_status_t (sed_write_fn_t)(void *ctx, char *buf, int sz); |
|
67 |
|
68 typedef struct sed_commands_s sed_commands_t; |
|
69 #define NWFILES 11 /* 10 plus one for standard output */ |
|
70 |
|
71 struct sed_commands_s { |
|
72 sed_err_fn_t *errfn; |
|
73 void *data; |
|
74 |
|
75 unsigned lsize; |
|
76 char *linebuf; |
|
77 char *lbend; |
|
78 const char *saveq; |
|
79 |
|
80 char *cp; |
|
81 char *lastre; |
|
82 char *respace; |
|
83 char sseof; |
|
84 char *reend; |
|
85 const char *earg; |
|
86 int eflag; |
|
87 int gflag; |
|
88 int nflag; |
|
89 apr_int64_t tlno[SED_NLINES]; |
|
90 int nlno; |
|
91 int depth; |
|
92 |
|
93 char *fname[NWFILES]; |
|
94 int nfiles; |
|
95 |
|
96 sed_label_t ltab[SED_LABSIZE]; |
|
97 sed_label_t *labtab; |
|
98 sed_label_t *lab; |
|
99 sed_label_t *labend; |
|
100 |
|
101 sed_reptr_t **cmpend[SED_DEPTH]; |
|
102 sed_reptr_t *ptrspace; |
|
103 sed_reptr_t *ptrend; |
|
104 sed_reptr_t *rep; |
|
105 int nrep; |
|
106 apr_pool_t *pool; |
|
107 int canbefinal; |
|
108 }; |
|
109 |
|
110 typedef struct sed_eval_s sed_eval_t; |
|
111 |
|
112 struct sed_eval_s { |
|
113 sed_err_fn_t *errfn; |
|
114 sed_write_fn_t *writefn; |
|
115 void *data; |
|
116 |
|
117 sed_commands_t *commands; |
|
118 |
|
119 apr_int64_t lnum; |
|
120 void *fout; |
|
121 |
|
122 unsigned lsize; |
|
123 char *linebuf; |
|
124 char *lspend; |
|
125 |
|
126 unsigned hsize; |
|
127 char *holdbuf; |
|
128 char *hspend; |
|
129 |
|
130 unsigned gsize; |
|
131 char *genbuf; |
|
132 char *lcomend; |
|
133 |
|
134 apr_file_t *fcode[NWFILES]; |
|
135 sed_reptr_t *abuf[SED_ABUFSIZE]; |
|
136 sed_reptr_t **aptr; |
|
137 sed_reptr_t *pending; |
|
138 unsigned char *inar; |
|
139 int nrep; |
|
140 |
|
141 int dolflag; |
|
142 int sflag; |
|
143 int jflag; |
|
144 int delflag; |
|
145 int lreadyflag; |
|
146 int quitflag; |
|
147 int finalflag; |
|
148 int numpass; |
|
149 int nullmatch; |
|
150 int col; |
|
151 apr_pool_t *pool; |
|
152 }; |
|
153 |
|
154 apr_status_t sed_init_commands(sed_commands_t *commands, sed_err_fn_t *errfn, void *data, |
|
155 apr_pool_t *p); |
|
156 apr_status_t sed_compile_string(sed_commands_t *commands, const char *s); |
|
157 apr_status_t sed_compile_file(sed_commands_t *commands, apr_file_t *fin); |
|
158 char* sed_get_finalize_error(const sed_commands_t *commands, apr_pool_t* pool); |
|
159 int sed_canbe_finalized(const sed_commands_t *commands); |
|
160 void sed_destroy_commands(sed_commands_t *commands); |
|
161 |
|
162 apr_status_t sed_init_eval(sed_eval_t *eval, sed_commands_t *commands, |
|
163 sed_err_fn_t *errfn, void *data, |
|
164 sed_write_fn_t *writefn, apr_pool_t *p); |
|
165 apr_status_t sed_reset_eval(sed_eval_t *eval, sed_commands_t *commands, sed_err_fn_t *errfn, void *data); |
|
166 apr_status_t sed_eval_buffer(sed_eval_t *eval, const char *buf, int bufsz, void *fout); |
|
167 apr_status_t sed_eval_file(sed_eval_t *eval, apr_file_t *fin, void *fout); |
|
168 apr_status_t sed_finalize_eval(sed_eval_t *eval, void *f); |
|
169 void sed_destroy_eval(sed_eval_t *eval); |
|
170 |
|
171 #ifdef __cplusplus |
|
172 } |
|
173 #endif |
|
174 |
|
175 #endif /* LIBSED_H */ |