MCPcopy Create free account
hub / github.com/apache/httpd / read_table

Function read_table

modules/cache/mod_cache_socache.c:195–246  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

193}
194
195static apr_status_t read_table(cache_handle_t *handle, request_rec *r,
196 apr_table_t *table, unsigned char *buffer, apr_size_t buffer_len,
197 apr_size_t *slider)
198{
199 apr_size_t key = *slider, colon = 0, len = 0;
200
201 while (*slider < buffer_len) {
202 if (buffer[*slider] == ':') {
203 if (!colon) {
204 colon = *slider;
205 }
206 (*slider)++;
207 }
208 else if (buffer[*slider] == '\r') {
209 len = colon;
210 if (key == *slider) {
211 (*slider)++;
212 if (buffer[*slider] == '\n') {
213 (*slider)++;
214 }
215 return APR_SUCCESS;
216 }
217 if (!colon || buffer[colon++] != ':') {
218 ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(02344)
219 "Premature end of cache headers.");
220 return APR_EGENERAL;
221 }
222 /* Do not go past the \r from above as apr_isspace('\r') is true */
223 while (apr_isspace(buffer[colon]) && (colon < *slider)) {
224 colon++;
225 }
226 apr_table_addn(table, apr_pstrmemdup(r->pool, (const char *) buffer
227 + key, len - key), apr_pstrmemdup(r->pool,
228 (const char *) buffer + colon, *slider - colon));
229 (*slider)++;
230 if (buffer[*slider] == '\n') {
231 (*slider)++;
232 }
233 key = *slider;
234 colon = 0;
235 }
236 else if (buffer[*slider] == '\0') {
237 (*slider)++;
238 return APR_SUCCESS;
239 }
240 else {
241 (*slider)++;
242 }
243 }
244
245 return APR_EOF;
246}
247
248static apr_status_t store_table(apr_table_t *table, unsigned char *buffer,
249 apr_size_t buffer_len, apr_size_t *slider)

Callers 1

open_entityFunction · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected