ウォンツテック

そでやまのーと

・write関連続き

  • apr_brigade_writev
APU_DECLARE(apr_status_t) apr_brigade_writev(apr_bucket_brigade *b,                                          apr_brigade_flush flush,
void *ctx,
const struct iovec *vec,
apr_size_t nvec)

struct iovec *vec全てをbrigade(bucket)に書き込む関数で主に以下の事を行っている
1.vecの全データが大きすぎる場合(bucket一つのサイズAPR_BUCKET_BUFF_SIZEより大きい場合)vec一つずつnvec個のbucketを作成し?brigadeに連結している。
それ以外の場合)
2.brigadeの最後のbucketがHEAPである場合。
2.1 heapの残り領域がvecのtotal_lenより多い場合
全てmemcpyする。
2.2 heapの残り領域がvecのtotal_lenより少ない場合
新しくbucketを作成し

buf = apr_bucket_alloc(APR_BUCKET_BUFF_SIZE, b->bucket_alloc);
e = apr_bucket_heap_create(buf, APR_BUCKET_BUFF_SIZE,
apr_bucket_free, b->bucket_alloc);

brigadeの最後に連結する。

  • apr_brigade_puts
APU_DECLARE(apr_status_t) apr_brigade_puts(apr_bucket_brigade *bb,                                       apr_brigade_flush flush, void *ctx,
const char *str)

brigadeの最後のbucketがHEAPであり、十分な領域が残っていればそこに書き込む。
それ以外の場合はapr_brigade_writeを呼び出す。

  • apr_brigade_vputstrs
APU_DECLARE(apr_status_t) apr_brigade_vputstrs(apr_bucket_brigade *b,                                               apr_brigade_flush flush,                                               void *ctx,                                               va_list va)

可変長のvaに収められている文字列全てについてapr_brigade_writeを呼び出す。

  • apr_brigade_putc
APU_DECLARE(apr_status_t) apr_brigade_putc(apr_bucket_brigade *b,                                           apr_brigade_flush flush, void *ctx,                                           const char c)

1文字分apr_brigade_writeを呼び出す

  • apr_brigade_putstrs
APU_DECLARE_NONSTD(apr_status_t) apr_brigade_putstrs(apr_bucket_brigade *b,                                                     apr_brigade_flush flush,                                                     void *ctx, ...)

apr_brigade_vputstrsを呼び出す

  • apr_brigade_vprintf
  • apr_brigade_printf
APU_DECLARE(apr_status_t) apr_brigade_vprintf(apr_bucket_brigade *b,                                              apr_brigade_flush flush,                                              void *ctx,                                              const char *fmt, va_list va)

APU_DECLARE_NONSTD(apr_status_t) apr_brigade_printf(apr_bucket_brigade *b,                                                    apr_brigade_flush flush,                                                    void *ctx,                                                    const char *fmt, ...)

書式を変換してapr_brigade_writeを呼び出す。

  • brigade_flush

>|c
static apr_status_t brigade_flush(apr_vformatter_buff_t *buff)
|