⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 options.c

📁 来自网络的iaxclient的协议栈源码
💻 C
字号:
/* * Snomphone: IAX software for SNOM 100 Phone * * IAX Support for talking to Asterisk and other Gnophone clients * * Copyright (C) 1999, Linux Support Services, Inc. * * Mark Spencer <markster@linux-support.net> * * This program is free software, distributed under the terms of * the GNU General Public License */#define CONFIG_FILE "/etc/miniphone.conf"#define USER_FILE "%s/.miniphone-conf"#include <stdio.h>#include <errno.h>#include <string.h>#include <stdlib.h>char regpeer[256];char regsecret[256];char server[256];int refresh = 60;char context[256];char language[256];#define TYPE_STRING 0#define TYPE_INT    1struct opt {	char *name;	void *where;	int len;	int type;};static struct opt opts[] =  {	{ "regpeer", regpeer, sizeof(regpeer), TYPE_STRING },	{ "regsecret", regsecret, sizeof(regsecret), TYPE_STRING },	{ "server", server, sizeof(server), TYPE_STRING },	{ "context", context, sizeof(context), TYPE_STRING },	{ "language", language, sizeof(language), TYPE_STRING },	{ "refresh", &refresh, sizeof(refresh), TYPE_INT },};static int __load_options(char *filename){	FILE *f;	int lineno = 0;	char buf[256];	char *var, *value;	int x;	char *c;	f = fopen(filename, "r");	if (!f) {		fprintf(stderr, "Failed to open '%s': %s\n", filename, strerror(errno));		return -1;	}	while(!feof(f)) {		fgets(buf, sizeof(buf), f);		if (!feof(f)) {			/* Ditch comments */			if ((c = strchr(buf, '#')))				*c = 0;			lineno++;			/* Strip CR */			buf[strlen(buf)-1] = '\0';			if (strlen(buf)) {				var = strtok(buf, "=");				value = strtok(NULL, "=");				if (!var || !value) {					fprintf(stderr, "Syntax error line %d\n", lineno);					continue;				}				for (x=0;x<sizeof(opts) / sizeof(opts[0]); x++) {					if (!strcasecmp(var, opts[x].name)) {						switch(opts[x].type) {						case TYPE_STRING:							strncpy((char *)opts[x].where, value, opts[x].len);							break;						case TYPE_INT:							if (sscanf(value, "%i", (int *)opts[x].where) != 1) {								fprintf(stderr, "Not a number at line %d\n", lineno);							}							break;						default:							fprintf(stderr, "Don't know what to do about type %d\n", opts[x].type);						}						break;					}				}				if (!(x < sizeof(opts) / sizeof(opts[0]))) {					fprintf(stderr, "Dunno keyword '%s'\n", var);					continue;				}			}		}	}	fclose(f);	return 0;}int load_options(void){	char fn[256];	__load_options(CONFIG_FILE);	if (getenv("HOME")) {		snprintf(fn, sizeof(fn), USER_FILE, getenv("HOME"));		__load_options(fn);	}	return 0;}static int __save_options(char *filename){	FILE *f;	f = fopen(filename, "w");	if (!f) {		fprintf(stderr, "Failed to open '%s': %s\n", filename, strerror(errno));		return -1;	}	fclose(f);	return 0;}int save_options(void){	char fn[256];	if (getenv("HOME")) {		snprintf(fn, sizeof(fn), USER_FILE, getenv("HOME"));		return __save_options(fn);	} else		return __save_options(CONFIG_FILE);	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -