亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? apr_buckets.h

?? Apache_2.0.59-Openssl_0.9 配置tomcat. Apache_2.0.59-Openssl_0.9 配置tomcat.
?? H
?? 第 1 頁 / 共 4 頁
字號:
 * destroy the bucket it points to, then APR_BRIGADE_FOREACH
 * will have no way to find out what bucket to use for its next
 * iteration.  The reason for this can be seen by looking closely
 * at the equivalent loops given in the tip above.  So, for example,
 * if you are writing a loop that empties out a brigade one bucket
 * at a time, APR_BRIGADE_FOREACH just won't work for you.  Do it
 * by hand, like so:
 * <pre>
 *      while (!APR_BRIGADE_EMPTY(b)) {
 *          e = APR_BRIGADE_FIRST(b);
 *          ...
 *          apr_bucket_delete(e);
 *      }
 * </pre>
 * @deprecated This macro causes more headaches than it's worth.  Use
 * one of the alternatives documented here instead; the clarity gained
 * in what's really going on is well worth the extra line or two of code.
 * This macro will be removed at some point in the future.
 */
#define APR_BRIGADE_FOREACH(e, b)					\
	APR_RING_FOREACH((e), &(b)->list, apr_bucket, link)

/**
 * Insert a list of buckets at the front of a brigade
 * @param b The brigade to add to
 * @param e The first bucket in a list of buckets to insert
 */
#define APR_BRIGADE_INSERT_HEAD(b, e) do {				\
	apr_bucket *ap__b = (e);                                        \
	APR_RING_INSERT_HEAD(&(b)->list, ap__b, apr_bucket, link);	\
        APR_BRIGADE_CHECK_CONSISTENCY((b));				\
    } while (0)

/**
 * Insert a list of buckets at the end of a brigade
 * @param b The brigade to add to
 * @param e The first bucket in a list of buckets to insert
 */
#define APR_BRIGADE_INSERT_TAIL(b, e) do {				\
	apr_bucket *ap__b = (e);					\
	APR_RING_INSERT_TAIL(&(b)->list, ap__b, apr_bucket, link);	\
        APR_BRIGADE_CHECK_CONSISTENCY((b));				\
    } while (0)

/**
 * Concatenate brigade b onto the end of brigade a, leaving brigade b empty
 * @param a The first brigade
 * @param b The second brigade
 */
#define APR_BRIGADE_CONCAT(a, b) do {					\
        APR_RING_CONCAT(&(a)->list, &(b)->list, apr_bucket, link);	\
        APR_BRIGADE_CHECK_CONSISTENCY((a));				\
    } while (0)

/**
 * Prepend brigade b onto the beginning of brigade a, leaving brigade b empty
 * @param a The first brigade
 * @param b The second brigade
 */
#define APR_BRIGADE_PREPEND(a, b) do {					\
        APR_RING_PREPEND(&(a)->list, &(b)->list, apr_bucket, link);	\
        APR_BRIGADE_CHECK_CONSISTENCY((a));				\
    } while (0)

/**
 * Insert a list of buckets before a specified bucket
 * @param a The bucket to insert before
 * @param b The buckets to insert
 */
#define APR_BUCKET_INSERT_BEFORE(a, b) do {				\
	apr_bucket *ap__a = (a), *ap__b = (b);				\
	APR_RING_INSERT_BEFORE(ap__a, ap__b, link);			\
        APR_BUCKET_CHECK_CONSISTENCY(ap__a);				\
    } while (0)

/**
 * Insert a list of buckets after a specified bucket
 * @param a The bucket to insert after
 * @param b The buckets to insert
 */
#define APR_BUCKET_INSERT_AFTER(a, b) do {				\
	apr_bucket *ap__a = (a), *ap__b = (b);				\
	APR_RING_INSERT_AFTER(ap__a, ap__b, link);			\
        APR_BUCKET_CHECK_CONSISTENCY(ap__a);				\
    } while (0)

/**
 * Get the next bucket in the list
 * @param e The current bucket
 * @return The next bucket
 */
#define APR_BUCKET_NEXT(e)	APR_RING_NEXT((e), link)
/**
 * Get the previous bucket in the list
 * @param e The current bucket
 * @return The previous bucket
 */
#define APR_BUCKET_PREV(e)	APR_RING_PREV((e), link)

/**
 * Remove a bucket from its bucket brigade
 * @param e The bucket to remove
 */
#define APR_BUCKET_REMOVE(e)	APR_RING_REMOVE((e), link)

/**
 * Initialize a new bucket's prev/next pointers
 * @param e The bucket to initialize
 */
#define APR_BUCKET_INIT(e)	APR_RING_ELEM_INIT((e), link)

/**
 * Determine if a bucket contains metadata.  An empty bucket is
 * safe to arbitrarily remove if and only if this is false.
 * @param e The bucket to inspect
 * @return true or false
 */
#define APR_BUCKET_IS_METADATA(e)    ((e)->type->is_metadata)

/**
 * Determine if a bucket is a FLUSH bucket
 * @param e The bucket to inspect
 * @return true or false
 */
#define APR_BUCKET_IS_FLUSH(e)       ((e)->type == &apr_bucket_type_flush)
/**
 * Determine if a bucket is an EOS bucket
 * @param e The bucket to inspect
 * @return true or false
 */
#define APR_BUCKET_IS_EOS(e)         ((e)->type == &apr_bucket_type_eos)
/**
 * Determine if a bucket is a FILE bucket
 * @param e The bucket to inspect
 * @return true or false
 */
#define APR_BUCKET_IS_FILE(e)        ((e)->type == &apr_bucket_type_file)
/**
 * Determine if a bucket is a PIPE bucket
 * @param e The bucket to inspect
 * @return true or false
 */
#define APR_BUCKET_IS_PIPE(e)        ((e)->type == &apr_bucket_type_pipe)
/**
 * Determine if a bucket is a SOCKET bucket
 * @param e The bucket to inspect
 * @return true or false
 */
#define APR_BUCKET_IS_SOCKET(e)      ((e)->type == &apr_bucket_type_socket)
/**
 * Determine if a bucket is a HEAP bucket
 * @param e The bucket to inspect
 * @return true or false
 */
#define APR_BUCKET_IS_HEAP(e)        ((e)->type == &apr_bucket_type_heap)
/**
 * Determine if a bucket is a TRANSIENT bucket
 * @param e The bucket to inspect
 * @return true or false
 */
#define APR_BUCKET_IS_TRANSIENT(e)   ((e)->type == &apr_bucket_type_transient)
/**
 * Determine if a bucket is a IMMORTAL bucket
 * @param e The bucket to inspect
 * @return true or false
 */
#define APR_BUCKET_IS_IMMORTAL(e)    ((e)->type == &apr_bucket_type_immortal)
#if APR_HAS_MMAP
/**
 * Determine if a bucket is a MMAP bucket
 * @param e The bucket to inspect
 * @return true or false
 */
#define APR_BUCKET_IS_MMAP(e)        ((e)->type == &apr_bucket_type_mmap)
#endif
/**
 * Determine if a bucket is a POOL bucket
 * @param e The bucket to inspect
 * @return true or false
 */
#define APR_BUCKET_IS_POOL(e)        ((e)->type == &apr_bucket_type_pool)

/*
 * General-purpose reference counting for the various bucket types.
 *
 * Any bucket type that keeps track of the resources it uses (i.e.
 * most of them except for IMMORTAL, TRANSIENT, and EOS) needs to
 * attach a reference count to the resource so that it can be freed
 * when the last bucket that uses it goes away. Resource-sharing may
 * occur because of bucket splits or buckets that refer to globally
 * cached data. */

/** @see apr_bucket_refcount */
typedef struct apr_bucket_refcount apr_bucket_refcount;
/**
 * The structure used to manage the shared resource must start with an
 * apr_bucket_refcount which is updated by the general-purpose refcount
 * code. A pointer to the bucket-type-dependent private data structure
 * can be cast to a pointer to an apr_bucket_refcount and vice versa.
 */
struct apr_bucket_refcount {
    /** The number of references to this bucket */
    int          refcount;
};

/*  *****  Reference-counted bucket types  *****  */

/** @see apr_bucket_heap */
typedef struct apr_bucket_heap apr_bucket_heap;
/**
 * A bucket referring to data allocated off the heap.
 */
struct apr_bucket_heap {
    /** Number of buckets using this memory */
    apr_bucket_refcount  refcount;
    /** The start of the data actually allocated.  This should never be
     * modified, it is only used to free the bucket.
     */
    char    *base;
    /** how much memory was allocated */
    apr_size_t  alloc_len;
    /** function to use to delete the data */
    void (*free_func)(void *data);
};

/** @see apr_bucket_pool */
typedef struct apr_bucket_pool apr_bucket_pool;
/**
 * A bucket referring to data allocated from a pool
 */
struct apr_bucket_pool {
    /** The pool bucket must be able to be easily morphed to a heap
     * bucket if the pool gets cleaned up before all references are
     * destroyed.  This apr_bucket_heap structure is populated automatically
     * when the pool gets cleaned up, and subsequent calls to pool_read()
     * will result in the apr_bucket in question being morphed into a
     * regular heap bucket.  (To avoid having to do many extra refcount
     * manipulations and b->data manipulations, the apr_bucket_pool
     * struct actually *contains* the apr_bucket_heap struct that it
     * will become as its first element; the two share their
     * apr_bucket_refcount members.)
     */
    apr_bucket_heap  heap;
    /** The block of data actually allocated from the pool.
     * Segments of this block are referenced by adjusting
     * the start and length of the apr_bucket accordingly.
     * This will be NULL after the pool gets cleaned up.
     */
    const char *base;
    /** The pool the data was allocated from.  When the pool
     * is cleaned up, this gets set to NULL as an indicator
     * to pool_read() that the data is now on the heap and
     * so it should morph the bucket into a regular heap
     * bucket before continuing.
     */
    apr_pool_t *pool;
    /** The freelist this structure was allocated from, which is
     * needed in the cleanup phase in order to allocate space on the heap
     */
    apr_bucket_alloc_t *list;
};

#if APR_HAS_MMAP
/** @see apr_bucket_mmap */
typedef struct apr_bucket_mmap apr_bucket_mmap;
/**
 * A bucket referring to an mmap()ed file
 */
struct apr_bucket_mmap {
    /** Number of buckets using this memory */
    apr_bucket_refcount  refcount;
    /** The mmap this sub_bucket refers to */
    apr_mmap_t *mmap;
};
#endif

/** @see apr_bucket_file */
typedef struct apr_bucket_file apr_bucket_file;
/**
 * A bucket referring to an file
 */
struct apr_bucket_file {
    /** Number of buckets using this memory */
    apr_bucket_refcount  refcount;
    /** The file this bucket refers to */
    apr_file_t *fd;
    /** The pool into which any needed structures should
     *  be created while reading from this file bucket */
    apr_pool_t *readpool;
#if APR_HAS_MMAP
    /** Whether this bucket should be memory-mapped if
     *  a caller tries to read from it */
    int can_mmap;
#endif /* APR_HAS_MMAP */
};

/** @see apr_bucket_structs */
typedef union apr_bucket_structs apr_bucket_structs;
/**
 * A union of all bucket structures so we know what
 * the max size is.
 */
union apr_bucket_structs {
    apr_bucket      b;      /**< Bucket */
    apr_bucket_heap heap;   /**< Heap */
    apr_bucket_pool pool;   /**< Pool */
#if APR_HAS_MMAP
    apr_bucket_mmap mmap;   /**< MMap */
#endif
    apr_bucket_file file;   /**< File */
};

/**
 * The amount that apr_bucket_alloc() should allocate in the common case.
 * Note: this is twice as big as apr_bucket_structs to allow breathing
 * room for third-party bucket types.
 */
#define APR_BUCKET_ALLOC_SIZE  APR_ALIGN_DEFAULT(2*sizeof(apr_bucket_structs))

/*  *****  Bucket Brigade Functions  *****  */
/**
 * Create a new bucket brigade.  The bucket brigade is originally empty.
 * @param p The pool to associate with the brigade.  Data is not allocated out
 *          of the pool, but a cleanup is registered.
 * @param list The bucket allocator to use
 * @return The empty bucket brigade
 */
APU_DECLARE(apr_bucket_brigade *) apr_brigade_create(apr_pool_t *p,
                                                     apr_bucket_alloc_t *list);

/**
 * destroy an entire bucket brigade.  This includes destroying all of the
 * buckets within the bucket brigade's bucket list. 
 * @param b The bucket brigade to destroy
 */
APU_DECLARE(apr_status_t) apr_brigade_destroy(apr_bucket_brigade *b);

/**
 * empty out an entire bucket brigade.  This includes destroying all of the
 * buckets within the bucket brigade's bucket list.  This is similar to
 * apr_brigade_destroy(), except that it does not deregister the brigade's
 * pool cleanup function.
 * @param data The bucket brigade to clean up
 * @remark Generally, you should use apr_brigade_destroy().  This function
 *         can be useful in situations where you have a single brigade that
 *         you wish to reuse many times by destroying all of the buckets in
 *         the brigade and putting new buckets into it later.
 */
APU_DECLARE(apr_status_t) apr_brigade_cleanup(void *data);

/**
 * Split a bucket brigade into two, such that the given bucket is the
 * first in the new bucket brigade. This function is useful when a
 * filter wants to pass only the initial part of a brigade to the next
 * filter.
 * @param b The brigade to split
 * @param e The first element of the new brigade
 * @return The new brigade
 */
APU_DECLARE(apr_bucket_brigade *) apr_brigade_split(apr_bucket_brigade *b,
                                                    apr_bucket *e);

/**
 * Partition a bucket brigade at a given offset (in bytes from the start of
 * the brigade).  This is useful whenever a filter wants to use known ranges
 * of bytes from the brigade; the ranges can even overlap.
 * @param b The brigade to partition
 * @param point The offset at which to partition the brigade
 * @param after_point Returns a pointer to the first bucket after the partition
 */
APU_DECLARE(apr_status_t) apr_brigade_partition(apr_bucket_brigade *b,
                                                apr_off_t point,
                                                apr_bucket **after_point);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美视频你懂的| 日韩二区在线观看| 国产91富婆露脸刺激对白| 精品国产一区二区三区不卡| 激情五月婷婷综合| 亚洲国产精品成人综合色在线婷婷 | 亚洲欧洲色图综合| 色综合天天综合狠狠| 亚洲一线二线三线久久久| 欧美日韩在线免费视频| 久久av资源网| 国产精品久久看| 欧美日韩精品电影| 国产在线精品一区二区三区不卡 | www国产精品av| 成人国产亚洲欧美成人综合网| 最新久久zyz资源站| 欧美肥胖老妇做爰| 国产suv精品一区二区883| 亚洲午夜在线视频| 久久久久久一二三区| 色哟哟一区二区三区| 久久狠狠亚洲综合| 国产精品家庭影院| 日韩三级视频在线观看| 成人av网站大全| 天堂成人国产精品一区| 日本一区二区三区四区 | 欧美大度的电影原声| 成人a免费在线看| 日本大胆欧美人术艺术动态| 国产精品无遮挡| 欧美一区二区视频在线观看2022| 国产91精品露脸国语对白| 亚洲综合成人网| 欧美国产一区二区在线观看| 欧美日韩高清一区二区| 国产成人精品免费网站| 日本欧美一区二区三区乱码| 亚洲精品免费一二三区| 久久久美女毛片| 日韩一区二区三区三四区视频在线观看 | 欧美精品一区二区三区蜜臀| 在线观看亚洲一区| 国产91露脸合集magnet| 日本一不卡视频| 伊人夜夜躁av伊人久久| 国产人成一区二区三区影院| 日韩免费高清电影| 欧美在线观看18| 一本久久a久久精品亚洲| 狠狠色综合播放一区二区| 亚洲成人精品一区| 有码一区二区三区| ...中文天堂在线一区| 久久综合成人精品亚洲另类欧美| 51精品秘密在线观看| 欧美性感一区二区三区| youjizz国产精品| 国产超碰在线一区| 在线电影欧美成精品| 99久久99久久综合| 成人网在线免费视频| 国产一区二区在线看| 精品综合免费视频观看| 日韩成人精品在线观看| 亚瑟在线精品视频| 亚洲高清免费一级二级三级| 一区二区欧美国产| 亚洲与欧洲av电影| 亚洲综合网站在线观看| 亚洲欧洲综合另类在线| 中文字幕一区在线| 中文字幕一区av| 中文字幕在线不卡一区二区三区| 中文乱码免费一区二区| 中文字幕不卡在线播放| 国产精品污www在线观看| 26uuu久久综合| 久久精品欧美日韩| 中文字幕久久午夜不卡| 成人欧美一区二区三区黑人麻豆| 国产精品蜜臀在线观看| 国产精品电影一区二区| 亚洲色图一区二区三区| 亚洲免费在线观看| 亚州成人在线电影| 麻豆91精品视频| 国产高清精品久久久久| 成人免费毛片嘿嘿连载视频| 一本大道久久a久久精二百| 91成人在线精品| 3751色影院一区二区三区| 日韩欧美黄色影院| 国产欧美日韩精品在线| 日韩美女视频19| 亚洲国产三级在线| 精彩视频一区二区| 成人app软件下载大全免费| 色婷婷亚洲精品| 欧美一区三区四区| 国产午夜亚洲精品午夜鲁丝片| 中文字幕亚洲一区二区va在线| 亚洲精品视频免费看| 爽好多水快深点欧美视频| 精品一区二区在线播放| 成人一级黄色片| 欧美午夜精品一区二区蜜桃| 91精品综合久久久久久| 久久精品日产第一区二区三区高清版| 中文字幕在线播放不卡一区| 午夜免费久久看| 高清久久久久久| 欧美日韩成人综合在线一区二区 | 国产夫妻精品视频| 欧美私模裸体表演在线观看| 日韩欧美三级在线| 亚洲色图丝袜美腿| 美女一区二区三区| 95精品视频在线| 日韩欧美中文字幕制服| 亚洲乱码国产乱码精品精的特点 | 色视频一区二区| 久久青草国产手机看片福利盒子 | 欧美性xxxxxx少妇| 亚洲一区二区欧美激情| 国产毛片精品国产一区二区三区| 91天堂素人约啪| 亚洲精品在线免费观看视频| 一区二区三区中文字幕| 国产一区二区三区综合| 欧美区视频在线观看| 中文字幕一区二区三区蜜月 | 91网址在线看| 欧美精品一区二区三区在线播放| 一区二区三区资源| 国产精品亚洲人在线观看| 欧美日韩精品福利| 亚洲女性喷水在线观看一区| 韩国一区二区在线观看| 欧美日韩成人综合天天影院| 亚洲欧洲日韩在线| 国产一区二区三区久久久| 欧美高清性hdvideosex| 亚洲人成亚洲人成在线观看图片 | 蜜乳av一区二区三区| 91久久一区二区| 亚洲欧洲日韩av| 国产河南妇女毛片精品久久久| 91精品国产91久久综合桃花| 夜夜嗨av一区二区三区| 99久久久国产精品免费蜜臀| 精品国产乱码久久久久久老虎 | 成人精品鲁一区一区二区| 精品国产一区二区三区久久久蜜月| 亚洲h动漫在线| 欧美日韩国产成人在线免费| 亚洲综合偷拍欧美一区色| 色哟哟精品一区| 亚洲色图清纯唯美| 99久久精品免费看国产| 久久亚洲一区二区三区四区| 久久99精品久久久久久久久久久久| 欧美日韩亚洲综合在线| 亚洲香肠在线观看| 欧美日韩一区二区电影| 午夜精品成人在线视频| 在线播放91灌醉迷j高跟美女| 亚洲午夜久久久久久久久电影网| 91精品办公室少妇高潮对白| 亚洲精品日日夜夜| 欧美日韩你懂的| 日本视频中文字幕一区二区三区| 国产精品入口麻豆九色| 国产精品伊人色| 国产精品久久久久婷婷二区次| 波多野结衣中文字幕一区| 国产精品网站导航| 91论坛在线播放| 一区二区激情小说| 欧美人牲a欧美精品| 久久精品国产一区二区| 精品国产一区二区三区久久影院| 国产高清亚洲一区| 国产精品电影一区二区| 欧美在线|欧美| 久久精品国产99国产| 久久久久久久网| 99久久99精品久久久久久| 亚洲人成7777| 欧美一级欧美三级在线观看| 久久69国产一区二区蜜臀| 国产亚洲1区2区3区| 99国产精品久久| 午夜欧美电影在线观看| 精品国产伦一区二区三区观看方式| 成人小视频免费观看| 亚洲综合清纯丝袜自拍| 精品国产一区二区在线观看| 99久久精品国产导航|