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

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

?? dbm.c

?? apache服務器源代碼(版本號:2.2.2)
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as * applicable. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *     http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *//*** DAV extension module for Apache 2.0.***  - Database support using DBM-style databases,**    part of the filesystem repository implementation*//*** This implementation uses a SDBM database per file and directory to** record the properties. These databases are kept in a subdirectory (of** the directory in question or the directory that holds the file in** question) named by the macro DAV_FS_STATE_DIR (.DAV). The filename of the** database is equivalent to the target filename, and is** DAV_FS_STATE_FILE_FOR_DIR (.state_for_dir) for the directory itself.*/#include "apr_strings.h"#include "apr_file_io.h"#include "apr_dbm.h"#define APR_WANT_BYTEFUNC#include "apr_want.h"       /* for ntohs and htons */#include "mod_dav.h"#include "repos.h"struct dav_db {    apr_pool_t *pool;    apr_dbm_t *file;    /* when used as a property database: */    int version;                /* *minor* version of this db */    dav_buffer ns_table;        /* table of namespace URIs */    short ns_count;             /* number of entries in table */    int ns_table_dirty;         /* ns_table was modified */    apr_hash_t *uri_index;      /* map URIs to (1-based) table indices */    dav_buffer wb_key;          /* work buffer for dav_gdbm_key */    apr_datum_t iter;           /* iteration key */};/* ------------------------------------------------------------------------- * * GENERIC DBM ACCESS * * For the most part, this just uses the APR DBM functions. They are wrapped * a bit with some error handling (using the mod_dav error functions). */void dav_dbm_get_statefiles(apr_pool_t *p, const char *fname,                            const char **state1, const char **state2){    if (fname == NULL)        fname = DAV_FS_STATE_FILE_FOR_DIR;    apr_dbm_get_usednames(p, fname, state1, state2);}static dav_error * dav_fs_dbm_error(dav_db *db, apr_pool_t *p,                                    apr_status_t status){    int save_errno = errno;    int errcode;    const char *errstr;    dav_error *err;    char errbuf[200];    if (status == APR_SUCCESS)        return NULL;    p = db ? db->pool : p;    /* There might not be a <db> if we had problems creating it. */    if (db == NULL) {        errcode = 1;        errstr = "Could not open property database.";    }    else {        (void) apr_dbm_geterror(db->file, &errcode, errbuf, sizeof(errbuf));        errstr = apr_pstrdup(p, errbuf);    }    err = dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, errcode, errstr);    err->save_errno = save_errno;    return err;}/* ensure that our state subdirectory is present *//* ### does this belong here or in dav_fs_repos.c ?? */void dav_fs_ensure_state_dir(apr_pool_t * p, const char *dirname){    const char *pathname = apr_pstrcat(p, dirname, "/" DAV_FS_STATE_DIR, NULL);    /* ### do we need to deal with the umask? */    /* just try to make it, ignoring any resulting errors */    (void) apr_dir_make(pathname, APR_OS_DEFAULT, p);}/* dav_dbm_open_direct:  Opens a *dbm database specified by path. *    ro = boolean read-only flag. */dav_error * dav_dbm_open_direct(apr_pool_t *p, const char *pathname, int ro,                                dav_db **pdb){    apr_status_t status;    apr_dbm_t *file;    *pdb = NULL;    if ((status = apr_dbm_open(&file, pathname,                               ro ? APR_DBM_READONLY : APR_DBM_RWCREATE,                               APR_OS_DEFAULT, p))                != APR_SUCCESS        && !ro) {        /* ### do something with 'status' */        /* we can't continue if we couldn't open the file           and we need to write */        return dav_fs_dbm_error(NULL, p, status);    }    /* may be NULL if we tried to open a non-existent db as read-only */    if (file != NULL) {        /* we have an open database... return it */        *pdb = apr_pcalloc(p, sizeof(**pdb));        (*pdb)->pool = p;        (*pdb)->file = file;    }    return NULL;}static dav_error * dav_dbm_open(apr_pool_t * p, const dav_resource *resource,                                int ro, dav_db **pdb){    const char *dirpath;    const char *fname;    const char *pathname;    /* Get directory and filename for resource */    /* ### should test this result value... */    (void) dav_fs_dir_file_name(resource, &dirpath, &fname);    /* If not opening read-only, ensure the state dir exists */    if (!ro) {        /* ### what are the perf implications of always checking this? */        dav_fs_ensure_state_dir(p, dirpath);    }    pathname = apr_pstrcat(p, dirpath, "/" DAV_FS_STATE_DIR "/",                              fname ? fname : DAV_FS_STATE_FILE_FOR_DIR,                              NULL);    /* ### readers cannot open while a writer has this open; we should       ### perform a few retries with random pauses. */    /* ### do we need to deal with the umask? */    return dav_dbm_open_direct(p, pathname, ro, pdb);}void dav_dbm_close(dav_db *db){    apr_dbm_close(db->file);}dav_error * dav_dbm_fetch(dav_db *db, apr_datum_t key, apr_datum_t *pvalue){    apr_status_t status = apr_dbm_fetch(db->file, key, pvalue);    return dav_fs_dbm_error(db, NULL, status);}dav_error * dav_dbm_store(dav_db *db, apr_datum_t key, apr_datum_t value){    apr_status_t status = apr_dbm_store(db->file, key, value);    return dav_fs_dbm_error(db, NULL, status);}dav_error * dav_dbm_delete(dav_db *db, apr_datum_t key){    apr_status_t status = apr_dbm_delete(db->file, key);    return dav_fs_dbm_error(db, NULL, status);}int dav_dbm_exists(dav_db *db, apr_datum_t key){    return apr_dbm_exists(db->file, key);}static dav_error * dav_dbm_firstkey(dav_db *db, apr_datum_t *pkey){    apr_status_t status = apr_dbm_firstkey(db->file, pkey);    return dav_fs_dbm_error(db, NULL, status);}static dav_error * dav_dbm_nextkey(dav_db *db, apr_datum_t *pkey){    apr_status_t status = apr_dbm_nextkey(db->file, pkey);    return dav_fs_dbm_error(db, NULL, status);}void dav_dbm_freedatum(dav_db *db, apr_datum_t data){    apr_dbm_freedatum(db->file, data);}/* ------------------------------------------------------------------------- * * PROPERTY DATABASE FUNCTIONS */#define DAV_GDBM_NS_KEY         "METADATA"#define DAV_GDBM_NS_KEY_LEN     8typedef struct {    unsigned char major;#define DAV_DBVSN_MAJOR         4    /*    ** V4 -- 0.9.9 ..    **       Prior versions could have keys or values with invalid    **       namespace prefixes as a result of the xmlns="" form not    **       resetting the default namespace to be "no namespace". The    **       namespace would be set to "" which is invalid; it should    **       be set to "no namespace".    **    ** V3 -- 0.9.8    **       Prior versions could have values with invalid namespace    **       prefixes due to an incorrect mapping of input to propdb    **       namespace indices. Version bumped to obsolete the old    **       values.    **    ** V2 -- 0.9.7    **       This introduced the xml:lang value into the property value's    **       record in the propdb.    **    ** V1 -- .. 0.9.6    **       Initial version.    */    unsigned char minor;#define DAV_DBVSN_MINOR         0    short ns_count;} dav_propdb_metadata;struct dav_deadprop_rollback {    apr_datum_t key;    apr_datum_t value;};struct dav_namespace_map {    int *ns_map;};/*** Internal function to build a key**** WARNING: returns a pointer to a "static" buffer holding the key. The**          value must be copied or no longer used if this function is**          called again.*/static apr_datum_t dav_build_key(dav_db *db, const dav_prop_name *name){    char nsbuf[20];    apr_size_t l_ns, l_name = strlen(name->name);    apr_datum_t key = { 0 };    /*     * Convert namespace ID to a string. "no namespace" is an empty string,     * so the keys will have the form ":name". Otherwise, the keys will     * have the form "#:name".     */    if (*name->ns == '\0') {        nsbuf[0] = '\0';        l_ns = 0;    }    else {        long ns_id = (long)apr_hash_get(db->uri_index, name->ns,                                      APR_HASH_KEY_STRING);        if (ns_id == 0) {            /* the namespace was not found(!) */            return key;         /* zeroed */        }        l_ns = sprintf(nsbuf, "%ld", ns_id - 1);    }    /* assemble: #:name */    dav_set_bufsize(db->pool, &db->wb_key, l_ns + 1 + l_name + 1);    memcpy(db->wb_key.buf, nsbuf, l_ns);    db->wb_key.buf[l_ns] = ':';    memcpy(&db->wb_key.buf[l_ns + 1], name->name, l_name + 1);    /* build the database key */    key.dsize = l_ns + 1 + l_name + 1;    key.dptr = db->wb_key.buf;    return key;}static void dav_append_prop(apr_pool_t *pool,                            const char *name, const char *value,                            apr_text_header *phdr){    const char *s;    const char *lang = value;    /* skip past the xml:lang value */    value += strlen(lang) + 1;    if (*value == '\0') {        /* the property is an empty value */        if (*name == ':') {            /* "no namespace" case */            s = apr_psprintf(pool, "<%s/>" DEBUG_CR, name+1);        }        else {            s = apr_psprintf(pool, "<ns%s/>" DEBUG_CR, name);        }    }    else if (*lang != '\0') {        if (*name == ':') {            /* "no namespace" case */            s = apr_psprintf(pool, "<%s xml:lang=\"%s\">%s</%s>" DEBUG_CR,                             name+1, lang, value, name+1);        }        else {            s = apr_psprintf(pool, "<ns%s xml:lang=\"%s\">%s</ns%s>" DEBUG_CR,                             name, lang, value, name);        }    }    else if (*name == ':') {        /* "no namespace" case */        s = apr_psprintf(pool, "<%s>%s</%s>" DEBUG_CR, name+1, value, name+1);    }    else {        s = apr_psprintf(pool, "<ns%s>%s</ns%s>" DEBUG_CR, name, value, name);    }    apr_text_append(pool, phdr, s);}static dav_error * dav_propdb_open(apr_pool_t *pool,                                   const dav_resource *resource, int ro,                                   dav_db **pdb){

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜臀精品一区二区三区在线观看 | a美女胸又www黄视频久久| 99国产精品久久久久久久久久 | 精品无人码麻豆乱码1区2区| 色婷婷av一区二区三区之一色屋| 日韩一区二区三区在线| 一区二区三区91| 成人影视亚洲图片在线| 日韩一区二区免费在线电影| 亚洲综合小说图片| www.久久精品| 国产精品理论在线观看| 国产米奇在线777精品观看| 欧美蜜桃一区二区三区| 亚洲欧美日韩在线播放| 暴力调教一区二区三区| 国产亚洲短视频| 国产麻豆精品视频| 精品国产免费视频| 麻豆传媒一区二区三区| 欧美一区二区在线免费观看| 一区二区高清免费观看影视大全| 波多野结衣亚洲| 日韩一区日韩二区| 成人app下载| 国产精品视频你懂的| 国产精品一区二区视频| 欧美mv日韩mv亚洲| 激情综合五月婷婷| 精品福利一二区| 美腿丝袜亚洲综合| 欧美成人猛片aaaaaaa| 精品一区二区三区免费播放| 精品人在线二区三区| 精品亚洲porn| 中日韩av电影| 99精品国产视频| 亚洲一区二区三区免费视频| 91豆麻精品91久久久久久| 一区二区三区在线视频观看 | 性感美女极品91精品| 欧美群妇大交群的观看方式| 日本怡春院一区二区| 日韩欧美国产电影| 国产成人在线视频网址| 国产精品国产三级国产专播品爱网 | 悠悠色在线精品| 欧美艳星brazzers| 久久se这里有精品| 国产亚洲1区2区3区| 95精品视频在线| 日本欧美肥老太交大片| 欧美精品一区二区三区四区| 成人国产视频在线观看| 亚洲综合色丁香婷婷六月图片| 欧美日韩视频在线第一区| 欧美bbbbb| 国产精品国产三级国产aⅴ中文 | 日韩专区中文字幕一区二区| 日韩精品一区在线| 成人毛片在线观看| 五月婷婷久久综合| 欧美国产丝袜视频| 欧美三级视频在线播放| 国内一区二区在线| 亚洲色图.com| 精品成人一区二区三区| 91片黄在线观看| 久久黄色级2电影| 一区二区在线电影| 91精品国产手机| 97久久人人超碰| 老司机精品视频在线| **性色生活片久久毛片| 精品国产免费人成在线观看| 91丨九色丨国产丨porny| 美女视频一区在线观看| 亚洲黄一区二区三区| 精品国产亚洲一区二区三区在线观看| 一本一道综合狠狠老| 国产精品一区二区三区网站| 亚洲国产精品久久久久婷婷884| 久久精品亚洲一区二区三区浴池| 在线免费观看视频一区| 国产精品一区在线| 日韩极品在线观看| 亚洲男人都懂的| 成人午夜视频网站| 日韩电影免费在线| 亚洲欧美国产三级| 久久久噜噜噜久久中文字幕色伊伊| 91年精品国产| 懂色av中文字幕一区二区三区| 日本不卡中文字幕| 午夜成人在线视频| 亚洲老妇xxxxxx| 亚洲欧洲国产日本综合| 欧美国产日本韩| www国产亚洲精品久久麻豆| 欧美肥胖老妇做爰| 欧美视频在线观看一区| 色88888久久久久久影院野外| 国产99一区视频免费| 加勒比av一区二区| 久久精品国产精品青草| 蜜桃av一区二区| 免费成人在线观看| 免费黄网站欧美| 免费看黄色91| 奇米色一区二区三区四区| 亚洲444eee在线观看| 亚洲aaa精品| 婷婷综合久久一区二区三区| 一区二区高清在线| 亚洲高清视频中文字幕| 一卡二卡欧美日韩| 亚洲国产精品人人做人人爽| 一区二区在线观看免费| 一区二区三区高清| 亚洲不卡一区二区三区| 日韩精品免费视频人成| 日本大胆欧美人术艺术动态| 久久99精品视频| 国产精品18久久久久| 粉嫩绯色av一区二区在线观看| 国产一二精品视频| 99久久婷婷国产综合精品电影| 日本高清不卡一区| 在线电影欧美成精品| 欧美成人三级在线| 欧美高清在线一区| 亚洲精品国产成人久久av盗摄| 亚洲成av人在线观看| 老司机精品视频线观看86| 国产a级毛片一区| 色就色 综合激情| 日韩一级免费观看| 国产精品久久久一本精品 | 久久蜜桃av一区二区天堂 | 91在线云播放| 在线观看精品一区| 日韩精品专区在线| 中文字幕一区三区| 日本免费新一区视频| 国产成人综合精品三级| 欧美午夜视频网站| 精品美女在线观看| 国产精品传媒入口麻豆| 日韩国产在线观看| 成人午夜激情片| 69av一区二区三区| 综合电影一区二区三区| 视频一区中文字幕| 国产成人精品一区二| 91麻豆精品国产91久久久资源速度| 亚洲精品在线免费播放| 国产精品第13页| 韩日精品视频一区| 欧美在线|欧美| 国产精品日韩成人| 丝袜国产日韩另类美女| 福利91精品一区二区三区| 91精品国产欧美一区二区18| 国产精品污www在线观看| 日韩成人dvd| 欧美最猛黑人xxxxx猛交| 国产性天天综合网| 视频一区视频二区中文| 91久久精品网| 国产午夜精品福利| 经典三级在线一区| 欧美久久久久久蜜桃| 亚洲日本欧美天堂| 国产精品亚洲人在线观看| 福利一区二区在线| 2020日本不卡一区二区视频| 天天综合色天天综合| 在线亚洲欧美专区二区| 国产精品拍天天在线| 国产一区在线看| 日韩欧美国产一二三区| 午夜伦理一区二区| 欧美性猛交一区二区三区精品| 国产精品水嫩水嫩| 国产成人精品一区二| 久久精品亚洲乱码伦伦中文| 精品一区二区久久久| 日韩欧美一区二区免费| 爽好久久久欧美精品| 欧美日韩国产免费一区二区| 亚洲一区二区精品久久av| 色八戒一区二区三区| 亚洲黄色片在线观看| 91成人在线精品| 亚洲国产中文字幕| 欧美日韩国产天堂| 免费看黄色91| 精品三级在线观看| 国产福利视频一区二区三区| 久久老女人爱爱|