prefs.c
来自「打魔兽战网的都知道他是什么」· C语言 代码 · 共 555 行
C
555 行
/* * Copyright (C) 2000,2001 Onlyer (onlyer@263.net) * Copyright (C) 2005 Olaf Freyer (aaron@cs.tu-berlin.de) * * 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 "setup.h"#ifdef HAVE_STDDEF_H# include <stddef.h>#else# ifndef NULL# define NULL ((void *)0)# endif#endif#ifdef HAVE_STRING_H# include <string.h>#else# ifdef HAVE_STRINGS_H# include <strings.h># endif# ifdef HAVE_MEMORY_H# include <memory.h># endif#endif#include "compat/memset.h"#include "common/conf.h"#include "prefs.h"#include "common/eventlog.h"#include "common/setup_after.h"static struct{ char const * logfile; char const * logfile_gs; char const * servaddrs; char const * charsave_dir; char const * charinfo_dir; char const * charsave_bak_dir; char const * charinfo_bak_dir; char const * ladder_dir; char const * d2gs_list; unsigned int laddersave_interval; unsigned int ladderinit_time; char const * loglevels; char const * pidfile; unsigned int shutdown_delay; unsigned int shutdown_decr; unsigned int idletime; unsigned int keepalive_interval; unsigned int timeout_checkinterval; unsigned int XML_output_ladder; unsigned int ladderupdate_threshold; unsigned int ladder_chars_only; unsigned int difficulty_hack; } prefs_conf;static int conf_set_logfile(const char* valstr);static int conf_setdef_logfile(void);static int conf_set_logfile_gs(const char* valstr);static int conf_setdef_logfile_gs(void);static int conf_set_servaddrs(const char* valstr);static int conf_setdef_servaddrs(void);static int conf_set_charsave_dir(const char* valstr);static int conf_setdef_charsave_dir(void);static int conf_set_charinfo_dir(const char* valstr);static int conf_setdef_charinfo_dir(void);static int conf_set_charsave_bak_dir(const char* valstr);static int conf_setdef_charsave_bak_dir(void);static int conf_set_charinfo_bak_dir(const char* valstr);static int conf_setdef_charinfo_bak_dir(void);static int conf_set_ladder_dir(const char* valstr);static int conf_setdef_ladder_dir(void);static int conf_set_d2gs_list(const char* valstr);static int conf_setdef_d2gs_list(void);static int conf_set_laddersave_interval(const char* valstr);static int conf_setdef_laddersave_interval(void);static int conf_set_ladderinit_time(const char* valstr);static int conf_setdef_ladderinit_time(void);static int conf_set_loglevels(const char* valstr);static int conf_setdef_loglevels(void);static int conf_set_pidfile(const char* valstr);static int conf_setdef_pidfile(void);static int conf_set_shutdown_delay(const char* valstr);static int conf_setdef_shutdown_delay(void);static int conf_set_shutdown_decr(const char* valstr);static int conf_setdef_shutdown_decr(void);static int conf_set_idletime(const char* valstr);static int conf_setdef_idletime(void);static int conf_set_keepalive_interval(const char* valstr);static int conf_setdef_keepalive_interval(void);static int conf_set_timeout_checkinterval(const char* valstr);static int conf_setdef_timeout_checkinterval(void);static int conf_set_XML_output_ladder(const char* valstr);static int conf_setdef_XML_output_ladder(void);static int conf_set_ladderupdate_threshold(const char* valstr);static int conf_setdef_ladderupdate_threshold(void);static int conf_set_ladder_chars_only(const char* valstr);static int conf_setdef_ladder_chars_only(void);static int conf_set_difficulty_hack(const char* valstr);static int conf_setdef_difficulty_hack(void);static t_conf_entry prefs_conf_table[]={ { "logfile", conf_set_logfile, NULL, conf_setdef_logfile }, { "logfile-gs", conf_set_logfile_gs, NULL, conf_setdef_logfile_gs }, { "servaddrs", conf_set_servaddrs, NULL, conf_setdef_servaddrs }, { "charsavedir", conf_set_charsave_dir, NULL, conf_setdef_charsave_dir }, { "charinfodir", conf_set_charinfo_dir, NULL, conf_setdef_charinfo_dir }, { "bak_charsavedir", conf_set_charsave_bak_dir, NULL, conf_setdef_charsave_bak_dir }, { "bak_charinfodir", conf_set_charinfo_bak_dir, NULL, conf_setdef_charinfo_bak_dir }, { "ladderdir", conf_set_ladder_dir, NULL, conf_setdef_ladder_dir }, { "gameservlist", conf_set_d2gs_list, NULL, conf_setdef_d2gs_list }, { "laddersave_interval", conf_set_laddersave_interval, NULL, conf_setdef_laddersave_interval }, { "ladderinit_time", conf_set_ladderinit_time, NULL, conf_setdef_ladderinit_time }, { "loglevels", conf_set_loglevels, NULL, conf_setdef_loglevels }, { "pidfile", conf_set_pidfile, NULL, conf_setdef_pidfile}, { "shutdown_delay", conf_set_shutdown_delay, NULL, conf_setdef_shutdown_delay }, { "shutdown_decr", conf_set_shutdown_decr, NULL, conf_setdef_shutdown_decr }, { "idletime", conf_set_idletime, NULL, conf_setdef_idletime }, { "keepalive_interval", conf_set_keepalive_interval, NULL, conf_setdef_keepalive_interval }, { "timeout_checkinterval", conf_set_timeout_checkinterval, NULL, conf_setdef_timeout_checkinterval }, { "XML_ladder_output", conf_set_XML_output_ladder, NULL, conf_setdef_XML_output_ladder }, { "ladderupdate_threshold", conf_set_ladderupdate_threshold, NULL, conf_setdef_ladderupdate_threshold }, { "ladder_chars_only", conf_set_ladder_chars_only, NULL, conf_setdef_ladder_chars_only }, { "difficulty_hack", conf_set_difficulty_hack, NULL, conf_setdef_difficulty_hack }, { NULL, NULL, NULL, NULL }};extern int d2dbs_prefs_load(char const * filename){ FILE *fd; if (!filename) { eventlog(eventlog_level_error,__FUNCTION__,"got NULL filename"); return -1; } fd = fopen(filename,"rt"); if (!fd) { eventlog(eventlog_level_error,__FUNCTION__,"could not open file '%s'",filename); return -1; } if (conf_load_file(fd,prefs_conf_table)) { eventlog(eventlog_level_error,__FUNCTION__,"error loading config file '%s'",filename); fclose(fd); return -1; } fclose(fd); return 0;}extern int d2dbs_prefs_reload(char const * filename){ d2dbs_prefs_unload(); if (d2dbs_prefs_load(filename)<0) return -1; return 0;}extern int d2dbs_prefs_unload(void){ conf_unload(prefs_conf_table); return 0;}extern char const * d2dbs_prefs_get_servaddrs(void){ return prefs_conf.servaddrs;}static int conf_set_servaddrs(const char* valstr){ return conf_set_str(&prefs_conf.servaddrs,valstr,NULL);}static int conf_setdef_servaddrs(void){ return conf_set_str(&prefs_conf.servaddrs,NULL,D2DBS_SERVER_ADDRS);}extern char const * d2dbs_prefs_get_logfile(void){ return prefs_conf.logfile;}static int conf_set_logfile(const char * valstr){ return conf_set_str(&prefs_conf.logfile,valstr,NULL);}static int conf_setdef_logfile(void){ return conf_set_str(&prefs_conf.logfile,NULL,DEFAULT_LOG_FILE);}extern char const * prefs_get_logfile_gs(void){ return prefs_conf.logfile_gs;}static int conf_set_logfile_gs(const char * valstr){ return conf_set_str(&prefs_conf.logfile_gs,valstr,NULL);}static int conf_setdef_logfile_gs(void){ return conf_set_str(&prefs_conf.logfile_gs,NULL,DEFAULT_LOG_FILE);}extern char const * d2dbs_prefs_get_charsave_dir(void){ return prefs_conf.charsave_dir;}static int conf_set_charsave_dir(const char * valstr){ return conf_set_str(&prefs_conf.charsave_dir,valstr,NULL);}static int conf_setdef_charsave_dir(void){ return conf_set_str(&prefs_conf.charsave_dir,NULL,D2DBS_CHARSAVE_DIR);}extern char const * d2dbs_prefs_get_charinfo_dir(void){ return prefs_conf.charinfo_dir;}static int conf_set_charinfo_dir(const char * valstr){ return conf_set_str(&prefs_conf.charinfo_dir,valstr,NULL);}static int conf_setdef_charinfo_dir(void){ return conf_set_str(&prefs_conf.charinfo_dir,NULL,D2DBS_CHARINFO_DIR);}extern char const * prefs_get_charsave_bak_dir(void){ return prefs_conf.charsave_bak_dir;}static int conf_set_charsave_bak_dir(const char * valstr){ return conf_set_str(&prefs_conf.charsave_bak_dir,valstr,NULL);}static int conf_setdef_charsave_bak_dir(void){ return conf_set_str(&prefs_conf.charsave_bak_dir,NULL,D2DBS_CHARSAVEBAK_DIR);}extern char const * prefs_get_charinfo_bak_dir(void){ return prefs_conf.charinfo_bak_dir;}static int conf_set_charinfo_bak_dir(const char * valstr){ return conf_set_str(&prefs_conf.charinfo_bak_dir,valstr,NULL);}static int conf_setdef_charinfo_bak_dir(void){ return conf_set_str(&prefs_conf.charinfo_bak_dir,NULL,D2DBS_CHARINFOBAK_DIR);}extern char const * d2dbs_prefs_get_ladder_dir(void){ return prefs_conf.ladder_dir;}static int conf_set_ladder_dir(const char * valstr){ return conf_set_str(&prefs_conf.ladder_dir,valstr,NULL);}static int conf_setdef_ladder_dir(void){ return conf_set_str(&prefs_conf.ladder_dir,NULL,D2DBS_LADDER_DIR);}extern char const * d2dbs_prefs_get_d2gs_list(void){ return prefs_conf.d2gs_list;}static int conf_set_d2gs_list(const char * valstr){ return conf_set_str(&prefs_conf.d2gs_list,valstr,NULL);}static int conf_setdef_d2gs_list(void){ return conf_set_str(&prefs_conf.d2gs_list,NULL,D2GS_SERVER_LIST);}extern unsigned int prefs_get_laddersave_interval(void){ return prefs_conf.laddersave_interval;}static int conf_set_laddersave_interval(char const * valstr){ return conf_set_int(&prefs_conf.laddersave_interval,valstr,0);}static int conf_setdef_laddersave_interval(void){ return conf_set_int(&prefs_conf.laddersave_interval,NULL,3600);}extern unsigned int prefs_get_ladderinit_time(void){ return prefs_conf.ladderinit_time;}static int conf_set_ladderinit_time(char const * valstr){ return conf_set_int(&prefs_conf.ladderinit_time,valstr,0);}static int conf_setdef_ladderinit_time(void){ return conf_set_int(&prefs_conf.ladderinit_time,NULL,0);}extern char const * d2dbs_prefs_get_loglevels(void){ return prefs_conf.loglevels;}static int conf_set_loglevels(const char* valstr){ return conf_set_str(&prefs_conf.loglevels,valstr,NULL);}static int conf_setdef_loglevels(void){ return conf_set_str(&prefs_conf.loglevels,NULL,DEFAULT_LOG_LEVELS);}extern char const * d2dbs_prefs_get_pidfile(void){ return prefs_conf.pidfile;}static int conf_set_pidfile(const char* valstr){ return conf_set_str(&prefs_conf.pidfile,valstr,NULL);}static int conf_setdef_pidfile(void){ return conf_set_str(&prefs_conf.pidfile,NULL,"");}extern unsigned int d2dbs_prefs_get_shutdown_delay(void){ return prefs_conf.shutdown_delay;}static int conf_set_shutdown_delay(const char * valstr){ return conf_set_int(&prefs_conf.shutdown_delay,valstr,0);}static int conf_setdef_shutdown_delay(void){ return conf_set_int(&prefs_conf.shutdown_delay,NULL,DEFAULT_SHUTDOWN_DELAY);}extern unsigned int d2dbs_prefs_get_shutdown_decr(void){ return prefs_conf.shutdown_decr;}static int conf_set_shutdown_decr(const char * valstr){ return conf_set_int(&prefs_conf.shutdown_decr,valstr,0);}static int conf_setdef_shutdown_decr(void){ return conf_set_int(&prefs_conf.shutdown_decr,NULL,DEFAULT_SHUTDOWN_DECR);}extern unsigned int d2dbs_prefs_get_idletime(void){ return prefs_conf.idletime;}static int conf_set_idletime(const char * valstr){ return conf_set_int(&prefs_conf.idletime,valstr,0);}static int conf_setdef_idletime(void){ return conf_set_int(&prefs_conf.idletime,NULL,DEFAULT_IDLETIME);}extern unsigned int prefs_get_keepalive_interval(void){ return prefs_conf.keepalive_interval;}static int conf_set_keepalive_interval(const char * valstr){ return conf_set_int(&prefs_conf.keepalive_interval,valstr,0);}static int conf_setdef_keepalive_interval(void){ return conf_set_int(&prefs_conf.keepalive_interval,NULL,DEFAULT_KEEPALIVE_INTERVAL);}extern unsigned int d2dbs_prefs_get_timeout_checkinterval(void){ return prefs_conf.timeout_checkinterval;}static int conf_set_timeout_checkinterval(const char * valstr){ return conf_set_int(&prefs_conf.timeout_checkinterval,valstr,0);}static int conf_setdef_timeout_checkinterval(void){ return conf_set_int(&prefs_conf.timeout_checkinterval,NULL,DEFAULT_TIMEOUT_CHECKINTERVAL);}extern unsigned int d2dbs_prefs_get_XML_output_ladder(void){ return prefs_conf.XML_output_ladder;}static int conf_set_XML_output_ladder(const char * valstr){ return conf_set_bool(&prefs_conf.XML_output_ladder,valstr,0);}static int conf_setdef_XML_output_ladder(void){ return conf_set_bool(&prefs_conf.XML_output_ladder,NULL,0);}extern unsigned int prefs_get_ladderupdate_threshold(void){ return prefs_conf.ladderupdate_threshold;}static int conf_set_ladderupdate_threshold(const char * valstr){ return conf_set_int(&prefs_conf.ladderupdate_threshold,valstr,0);}static int conf_setdef_ladderupdate_threshold(void){ return conf_set_int(&prefs_conf.ladderupdate_threshold,NULL,DEFAULT_LADDERUPDATE_THRESHOLD);}extern unsigned int prefs_get_ladder_chars_only(void){ return prefs_conf.ladder_chars_only;}static int conf_set_ladder_chars_only(const char * valstr){ return conf_set_bool(&prefs_conf.ladder_chars_only,valstr,0);}static int conf_setdef_ladder_chars_only(void){ return conf_set_bool(&prefs_conf.ladder_chars_only,NULL,0);}extern unsigned int prefs_get_difficulty_hack(void){ return prefs_conf.difficulty_hack;}static int conf_set_difficulty_hack(const char * valstr){ return conf_set_int(&prefs_conf.difficulty_hack,valstr,0);}static int conf_setdef_difficulty_hack(void){ return conf_set_int(&prefs_conf.difficulty_hack,NULL,0);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?