24 #if defined(APR_BUCKET_DEBUG) && !defined(APR_RING_DEBUG)
25 #define APR_RING_DEBUG
29 #include "apr_network_io.h"
30 #include "apr_file_io.h"
31 #include "apr_general.h"
33 #include "apr_errno.h"
36 #if APR_HAVE_SYS_UIO_H
54 #define APR_BUCKET_BUFF_SIZE 8000
289 #ifdef APR_BUCKET_DEBUG
291 #define APR_BRIGADE_CHECK_CONSISTENCY(b) \
292 APR_RING_CHECK_CONSISTENCY(&(b)->list, apr_bucket, link)
294 #define APR_BUCKET_CHECK_CONSISTENCY(e) \
295 APR_RING_CHECK_ELEM_CONSISTENCY((e), apr_bucket, link)
304 #define APR_BRIGADE_CHECK_CONSISTENCY(b)
311 #define APR_BUCKET_CHECK_CONSISTENCY(e)
331 #define APR_BRIGADE_SENTINEL(b) APR_RING_SENTINEL(&(b)->list, apr_bucket, link)
338 #define APR_BRIGADE_EMPTY(b) APR_RING_EMPTY(&(b)->list, apr_bucket, link)
345 #define APR_BRIGADE_FIRST(b) APR_RING_FIRST(&(b)->list)
351 #define APR_BRIGADE_LAST(b) APR_RING_LAST(&(b)->list)
358 #define APR_BRIGADE_INSERT_HEAD(b, e) do { \
359 apr_bucket *ap__b = (e); \
360 APR_RING_INSERT_HEAD(&(b)->list, ap__b, apr_bucket, link); \
361 APR_BRIGADE_CHECK_CONSISTENCY((b)); \
369 #define APR_BRIGADE_INSERT_TAIL(b, e) do { \
370 apr_bucket *ap__b = (e); \
371 APR_RING_INSERT_TAIL(&(b)->list, ap__b, apr_bucket, link); \
372 APR_BRIGADE_CHECK_CONSISTENCY((b)); \
380 #define APR_BRIGADE_CONCAT(a, b) do { \
381 APR_RING_CONCAT(&(a)->list, &(b)->list, apr_bucket, link); \
382 APR_BRIGADE_CHECK_CONSISTENCY((a)); \
390 #define APR_BRIGADE_PREPEND(a, b) do { \
391 APR_RING_PREPEND(&(a)->list, &(b)->list, apr_bucket, link); \
392 APR_BRIGADE_CHECK_CONSISTENCY((a)); \
400 #define APR_BUCKET_INSERT_BEFORE(a, b) do { \
401 apr_bucket *ap__a = (a), *ap__b = (b); \
402 APR_RING_INSERT_BEFORE(ap__a, ap__b, link); \
403 APR_BUCKET_CHECK_CONSISTENCY(ap__a); \
411 #define APR_BUCKET_INSERT_AFTER(a, b) do { \
412 apr_bucket *ap__a = (a), *ap__b = (b); \
413 APR_RING_INSERT_AFTER(ap__a, ap__b, link); \
414 APR_BUCKET_CHECK_CONSISTENCY(ap__a); \
422 #define APR_BUCKET_NEXT(e) APR_RING_NEXT((e), link)
428 #define APR_BUCKET_PREV(e) APR_RING_PREV((e), link)
434 #define APR_BUCKET_REMOVE(e) APR_RING_REMOVE((e), link)
440 #define APR_BUCKET_INIT(e) APR_RING_ELEM_INIT((e), link)
448 #define APR_BUCKET_IS_METADATA(e) ((e)->type->is_metadata)
455 #define APR_BUCKET_IS_FLUSH(e) ((e)->type == &apr_bucket_type_flush)
461 #define APR_BUCKET_IS_EOS(e) ((e)->type == &apr_bucket_type_eos)
467 #define APR_BUCKET_IS_FILE(e) ((e)->type == &apr_bucket_type_file)
473 #define APR_BUCKET_IS_PIPE(e) ((e)->type == &apr_bucket_type_pipe)
479 #define APR_BUCKET_IS_SOCKET(e) ((e)->type == &apr_bucket_type_socket)
485 #define APR_BUCKET_IS_HEAP(e) ((e)->type == &apr_bucket_type_heap)
491 #define APR_BUCKET_IS_TRANSIENT(e) ((e)->type == &apr_bucket_type_transient)
497 #define APR_BUCKET_IS_IMMORTAL(e) ((e)->type == &apr_bucket_type_immortal)
504 #define APR_BUCKET_IS_MMAP(e) ((e)->type == &apr_bucket_type_mmap)
511 #define APR_BUCKET_IS_POOL(e) ((e)->type == &apr_bucket_type_pool)
553 void (*free_func)(
void *data);
648 #define APR_BUCKET_ALLOC_SIZE APR_ALIGN_DEFAULT(2*sizeof(apr_bucket_structs))
788 struct iovec *vec,
int *nvec);
828 const
char *str, apr_size_t nbyte);
842 const struct iovec *vec,
894 const
char *fmt, ...)
895 __attribute__((format(printf,4,5)));
910 const
char *fmt, va_list va);
985 #define apr_bucket_destroy(e) do { \
986 (e)->type->destroy((e)->data); \
1001 #define apr_bucket_delete(e) do { \
1002 APR_BUCKET_REMOVE(e); \
1003 apr_bucket_destroy(e); \
1073 #define apr_bucket_read(e,str,len,block) (e)->type->read(e, str, len, block)
1081 #define apr_bucket_setaside(e,p) (e)->type->setaside(e,p)
1093 #define apr_bucket_split(e,point) (e)->type->split(e, point)
1100 #define apr_bucket_copy(e,c) (e)->type->copy(e, c)
1416 void (*free_func)(
void *data),
1429 void (*free_func)(
void *data));
1501 apr_socket_t *thissock);
1519 apr_file_t *thispipe);
1555 apr_size_t len, apr_pool_t *p);