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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? file_cdb.c

?? 打魔獸戰(zhàn)網(wǎng)的都知道他是什么
?? C
字號:
/* * Copyright (C) 2003,2004 Dizzy  * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. */#include "common/setup_before.h"#include <stdio.h>#ifdef HAVE_STDDEF_H# include <stddef.h>#else# ifndef NULL#  define NULL ((void *)0)# endif#endif#ifdef STDC_HEADERS# include <stdlib.h>#else# ifdef HAVE_MALLOC_H#  include <malloc.h># endif#endif#ifdef HAVE_STRING_H# include <string.h>#else# ifdef HAVE_STRINGS_H#  include <strings.h># endif#endif#include "compat/strchr.h"#include "compat/strdup.h"#include "compat/strcasecmp.h"#include "compat/strncasecmp.h"#include <ctype.h>#ifdef HAVE_LIMITS_H# include <limits.h>#endif#include "compat/char_bit.h"#ifdef TIME_WITH_SYS_TIME# include <sys/time.h># include <time.h>#else# ifdef HAVE_SYS_TIME_H#  include <sys/time.h># else#  include <time.h># endif#endif#include <errno.h>#include "compat/strerror.h"#ifdef HAVE_SYS_TYPES_H# include <sys/types.h>#endif#ifdef HAVE_UNISTD_H# include <unistd.h>#else# ifdef WIN32#  include <io.h># endif#endif#include "compat/pdir.h"#include "common/eventlog.h"#include "prefs.h"#include "common/util.h"#include "common/field_sizes.h"#include "common/bnethash.h"#include "common/introtate.h"#define CLAN_INTERNAL_ACCESS#include "account.h"#include "common/hashtable.h"#include "storage.h"#include "storage_file.h"#include "common/list.h"#include "common/xalloc.h"#include "connection.h"#include "watch.h"#include "clan.h"#undef CLAN_INTERNAL_ACCESS#include "common/tag.h"#ifdef HAVE_FCNTL_H# include <fcntl.h>#else# ifdef HAVE_SYS_FILE_H#  include <sys/file.h># endif#endif#include "tinycdb/cdb.h"#include "common/elist.h"#include "attr.h"#include "common/setup_after.h"/* cdb file storage API functions */static int cdb_read_attrs(const char *filename, t_read_attr_func cb, void *data);static t_attr * cdb_read_attr(const char *filename, const char *key);static int cdb_write_attrs(const char *filename, const t_hlist *attributes);/* file_engine struct populated with the functions above */t_file_engine file_cdb = {    cdb_read_attr,    cdb_read_attrs,    cdb_write_attrs};/* start of actual cdb file storage code *///#define CDB_ON_DEMAND	1static int cdb_write_attrs(const char *filename, const t_hlist *attributes){    FILE           *cdbfile;    t_hlist	   *curr;    t_attr         *attr;    struct cdb_make cdbm;    if ((cdbfile = fopen(filename, "w+b")) == NULL) {	eventlog(eventlog_level_error, __FUNCTION__, "unable to open file \"%s\" for writing ",filename);	return -1;    }    cdb_make_start(&cdbm, cdbfile);    hlist_for_each(curr,attributes) {	attr = hlist_entry(curr, t_attr, link);	if (attr_get_key(attr) && attr_get_val(attr)) {	    if (strncmp("BNET\\CharacterDefault\\", attr_get_key(attr), 20) == 0) {		eventlog(eventlog_level_debug, __FUNCTION__, "skipping attribute key=\"%s\"",attr_get_key(attr));	    } else {		eventlog(eventlog_level_debug, __FUNCTION__, "saving attribute key=\"%s\" val=\"%s\"",attr_get_key(attr),attr_get_val(attr));		if (cdb_make_add(&cdbm, attr_get_key(attr), strlen(attr_get_key(attr)), attr_get_val(attr), strlen(attr_get_val(attr)))<0)		{		    eventlog(eventlog_level_error, __FUNCTION__, "got error on cdb_make_add ('%s' = '%s')", attr_get_key(attr), attr_get_val(attr));		    cdb_make_finish(&cdbm); /* try to bail out nicely */		    fclose(cdbfile);		    return -1;		}	    }	} else eventlog(eventlog_level_error, __FUNCTION__,"could not save attribute key=\"%s\"",attr_get_key(attr));	attr_clear_dirty(attr);    }    if (cdb_make_finish(&cdbm)<0) {	eventlog(eventlog_level_error, __FUNCTION__, "got error on cdb_make_finish");	fclose(cdbfile);	return -1;    }    if (fclose(cdbfile)<0) {	eventlog(eventlog_level_error, __FUNCTION__, "got error on fclose()");	return -1;    }    return 0;}#ifndef CDB_ON_DEMAND/* code adapted from tinycdb-0.73/cdb.c */static int fget(FILE * fd, unsigned char *b, cdbi_t len, cdbi_t *posp, cdbi_t limit){    if (posp && limit - *posp < len) {	eventlog(eventlog_level_error, __FUNCTION__, "invalid cdb database format");	return -1;    }    if (fread(b, 1, len, fd) != len) {	if (ferror(fd)) {	    eventlog(eventlog_level_error, __FUNCTION__, "got error reading from db file");	    return -1;	}	eventlog(eventlog_level_error, __FUNCTION__, "unable to read from cdb file, incomplete file");	return -1;    }    if (posp) *posp += len;    return 0;}static const char * fcpy(FILE *fd, cdbi_t len, cdbi_t *posp, cdbi_t limit, unsigned char * buf){    static char *str;    static unsigned strl;    unsigned int res = 0, no = 0;    if (strl < len + 1) {	char *tmp;	tmp = xmalloc(len + 1);	if (str) xfree((void*)str);	str = tmp;	strl = len + 1;    }    while(len - res > 0) {	if (len > 2048) no = 2048;	else no = len;	if (fget(fd, buf, no, posp, limit)) return NULL;	memmove(str + res, buf, no);	res += no;    }    if (res > strl - 1) {	eventlog(eventlog_level_error, __FUNCTION__, "BUG, this should not happen");	return NULL;    }    str[res] = '\0';    return str;}static int cdb_read_attrs(const char *filename, t_read_attr_func cb, void *data){    cdbi_t eod, klen, vlen;    cdbi_t pos = 0;    const char *key;    const char *val;    unsigned char buf[2048];    FILE *f;    if ((f = fopen(filename, "rb")) == NULL) {	eventlog(eventlog_level_error, __FUNCTION__, "got error opening file '%s'", filename);	return -1;    }    if (fget(f, buf, 2048, &pos, 2048)) goto err_fd;    eod = cdb_unpack(buf);    while(pos < eod) {	if (fget(f, buf, 8, &pos, eod)) goto err_fd;	klen = cdb_unpack(buf);	vlen = cdb_unpack(buf + 4);	if ((key = fcpy(f, klen, &pos, eod, buf)) == NULL) {	    eventlog(eventlog_level_error, __FUNCTION__, "error reading attribute key");	    goto err_fd;	}	key = xstrdup(key);	if ((val = fcpy(f, vlen, &pos, eod, buf)) == NULL) {	    eventlog(eventlog_level_error, __FUNCTION__, "error reading attribute val");	    goto err_key;	}//	eventlog(eventlog_level_trace, __FUNCTION__, "read atribute : '%s' -> '%s'", key, val);	if (cb(key, val, data))	    eventlog(eventlog_level_error, __FUNCTION__, "got error from callback on account file '%s'", filename);	xfree((void *)key);    }    fclose(f);    return 0;err_key:    xfree((void *)key);err_fd:    fclose(f);    return -1;}#else /* CDB_ON_DEMAND */static int cdb_read_attrs(const char *filename, t_read_attr_func cb, void *data){    return 0;}#endifstatic t_attr * cdb_read_attr(const char *filename, const char *key){#ifdef CDB_ON_DEMAND    FILE	*cdbfile;    t_attr	*attr;    char	*val;    unsigned	vlen = 1;//    eventlog(eventlog_level_trace, __FUNCTION__, "reading key '%s'", key);    if ((cdbfile = fopen(filename, "rb")) == NULL) {//	eventlog(eventlog_level_debug, __FUNCTION__, "unable to open file \"%s\" for reading ",filename);	return NULL;    }    if (cdb_seek(cdbfile, key, strlen(key), &vlen) <= 0) {//	eventlog(eventlog_level_debug, __FUNCTION__, "could not find key '%s'", key);	fclose(cdbfile);	return NULL;    }    /* FIXME: use attr_* API */    attr = xmalloc(sizeof(t_attr));    attr->key = xstrdup(key);    val = xmalloc(vlen + 1);    cdb_bread(cdbfile, val, vlen);    fclose(cdbfile);    val[vlen] = '\0';    attr->val = val;    attr->dirty = 0;//    eventlog(eventlog_level_trace, __FUNCTION__, "read key '%s' value '%s'", attr->key, attr->val);    return attr;#else    return NULL;#endif}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产综合一区二区| 成人教育av在线| 最新日韩在线视频| 日韩午夜激情视频| 欧美性xxxxx极品少妇| 国产精品1区2区3区在线观看| 亚洲嫩草精品久久| 久久精品这里都是精品| 91精品在线一区二区| 色综合婷婷久久| 国产麻豆日韩欧美久久| 一区二区视频在线看| 国产视频一区在线观看| 制服丝袜亚洲色图| 欧亚一区二区三区| 99在线精品视频| 国产传媒日韩欧美成人| 老司机午夜精品99久久| 亚洲五月六月丁香激情| 亚洲私人黄色宅男| 国产欧美日韩久久| 久久久久九九视频| 精品成a人在线观看| 日韩一区二区麻豆国产| 欧美精品久久久久久久久老牛影院| 91在线观看下载| aaa国产一区| 成人国产电影网| 国产成人精品免费看| 国产一区二区毛片| 国产成人精品亚洲777人妖| 国产精品夜夜嗨| 国产精品中文字幕日韩精品 | 亚洲色图在线看| 中文字幕永久在线不卡| 中文字幕中文字幕中文字幕亚洲无线| 久久精品一区四区| 日本一区二区三区dvd视频在线| 久久众筹精品私拍模特| 亚洲精品在线一区二区| 日韩视频在线永久播放| 精品国产一区二区三区不卡 | 午夜精品视频在线观看| 香蕉成人伊视频在线观看| 亚洲18影院在线观看| 无码av免费一区二区三区试看| 亚洲国产成人tv| 日本欧美在线观看| 久久电影国产免费久久电影 | 国产aⅴ精品一区二区三区色成熟| 国产福利一区二区三区视频在线 | 99re这里只有精品视频首页| 成人免费视频播放| 91色.com| 777午夜精品视频在线播放| 日韩视频在线永久播放| 久久只精品国产| 国产精品美女久久福利网站| 亚洲你懂的在线视频| 午夜精品久久久久久久99樱桃| 美女网站视频久久| 福利一区福利二区| 99re亚洲国产精品| 欧美日韩二区三区| 久久蜜桃av一区精品变态类天堂| 国产精品久久久久久久久果冻传媒| 亚洲精品中文字幕乱码三区| 日本一不卡视频| 国产福利电影一区二区三区| 色噜噜狠狠色综合中国| 欧美一区二区三区免费视频| 国产香蕉久久精品综合网| 亚洲伦理在线精品| 青草国产精品久久久久久| 丁香啪啪综合成人亚洲小说| 欧美亚洲一区三区| 精品国产一区二区精华| 日韩美女视频一区二区 | 9人人澡人人爽人人精品| 欧美特级限制片免费在线观看| 精品国产一区二区三区久久影院 | 亚洲成人在线观看视频| 国产麻豆视频精品| 欧美日韩一区二区三区免费看| 久久色成人在线| 亚洲一线二线三线久久久| 激情深爱一区二区| 在线欧美日韩精品| 国产欧美一区二区精品秋霞影院 | 欧美亚洲一区二区在线| 久久人人超碰精品| 亚洲成人一区二区在线观看| 国产成都精品91一区二区三| 在线播放亚洲一区| 国产精品夫妻自拍| 国产自产高清不卡| 制服丝袜成人动漫| 亚洲人成影院在线观看| 国产精品自在在线| 欧美一级理论性理论a| 1024国产精品| 国产高清在线精品| 精品国产免费人成电影在线观看四季| 一区二区三区四区亚洲| 国产99久久精品| 欧美精品一区在线观看| 亚洲一二三专区| 99久久精品国产观看| 国产天堂亚洲国产碰碰| 精品亚洲国产成人av制服丝袜| 精品视频1区2区3区| 亚洲老司机在线| 不卡av电影在线播放| 久久亚洲精品小早川怜子| 日本成人超碰在线观看| 欧美日韩第一区日日骚| 亚洲一区二区高清| 日本黄色一区二区| 亚洲欧美视频一区| 97国产精品videossex| 中文字幕av一区二区三区| 国内一区二区视频| 精品少妇一区二区三区日产乱码| 亚洲成人一区在线| 欧美日韩国产另类一区| 亚洲午夜久久久久久久久电影院| 不卡的av在线| 亚洲欧美日韩国产一区二区三区| 成人福利在线看| 综合av第一页| 色婷婷综合久久久中文一区二区 | 欧美亚一区二区| 亚洲一卡二卡三卡四卡| 欧美日韩亚洲另类| 亚洲成国产人片在线观看| 欧美日韩国产高清一区| 丝袜亚洲另类丝袜在线| 欧美一级精品在线| 国产一区二区中文字幕| 国产日韩欧美麻豆| aaa欧美大片| 一级女性全黄久久生活片免费| 欧洲av一区二区嗯嗯嗯啊| 午夜电影一区二区三区| 欧美成人一区二区| 国产精品综合久久| 1024成人网色www| 欧美综合一区二区三区| 日韩电影在线一区二区三区| 日韩视频免费观看高清完整版在线观看 | 韩国理伦片一区二区三区在线播放| 精品日产卡一卡二卡麻豆| 国产精品69毛片高清亚洲| 最近日韩中文字幕| 欧美日韩国产精品自在自线| 麻豆91精品91久久久的内涵| 久久久久亚洲蜜桃| 91麻豆免费观看| 日韩和欧美一区二区三区| 精品国产免费人成在线观看| 成人在线视频一区二区| 一区二区三区欧美| 日韩免费视频一区二区| 成人深夜在线观看| 亚洲伊人色欲综合网| 精品国产网站在线观看| 91浏览器入口在线观看| 日本欧美在线观看| 国产精品女人毛片| 欧美乱熟臀69xxxxxx| 国产九色sp调教91| 一区二区三区四区视频精品免费| 欧美一区二区三区四区视频| 成人在线视频首页| 天堂成人免费av电影一区| 久久久精品国产免费观看同学| 日本精品裸体写真集在线观看| 久久精品国产精品青草| 亚洲人成7777| 精品国产伦一区二区三区免费| 99久久久免费精品国产一区二区| 天天av天天翘天天综合网色鬼国产| 国产欧美日韩亚州综合| 69久久99精品久久久久婷婷| 成人伦理片在线| 蜜桃一区二区三区四区| 亚洲日本欧美天堂| 欧美成人精品1314www| 在线视频国内自拍亚洲视频| 国产高清精品网站| 日韩高清在线一区| 一区二区成人在线| 国产精品入口麻豆九色| 日韩三级视频在线看| 欧美亚洲高清一区二区三区不卡| 国产麻豆日韩欧美久久| 日韩成人免费电影| 亚洲一区二区三区激情| 中文字幕一区二区三区不卡| 精品国产露脸精彩对白 |