| 168 | } |
| 169 | |
| 170 | static apr_status_t store_array(apr_array_header_t *arr, unsigned char *buffer, |
| 171 | apr_size_t buffer_len, apr_size_t *slider) |
| 172 | { |
| 173 | int i, len; |
| 174 | const char **elts; |
| 175 | |
| 176 | elts = (const char **) arr->elts; |
| 177 | |
| 178 | for (i = 0; i < arr->nelts; i++) { |
| 179 | apr_size_t e_len = strlen(elts[i]); |
| 180 | if (e_len + 3 >= buffer_len - *slider) { |
| 181 | return APR_EOF; |
| 182 | } |
| 183 | len = apr_snprintf(buffer ? (char *) buffer + *slider : NULL, |
| 184 | buffer ? buffer_len - *slider : 0, "%s" CRLF, elts[i]); |
| 185 | *slider += len; |
| 186 | } |
| 187 | if (buffer) { |
| 188 | memcpy(buffer + *slider, CRLF, sizeof(CRLF) - 1); |
| 189 | } |
| 190 | *slider += sizeof(CRLF) - 1; |
| 191 | |
| 192 | return APR_SUCCESS; |
| 193 | } |
| 194 | |
| 195 | static 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, |