// config.c
#include
<stdio.h> #include
<stdlib.h> #include
<string.h>
#include <ctype.h> #include
"config.h"
char *server_root; char *db_addr; char *db_user; char *db_passwd;
struct conf_info clist[]=
{
{"serverName",&server_root},
{"dbAddr",&db_addr},
{"dbUser",&db_user},
{"dbPasswd",&db_passwd}, };
void trim(char*s) {
char *c
= s + strlen(s)- 1;
while (isspace(*c)&&
c > s)
{
*c =
'\0';
--c;
}
if(c == s) //此处
*c = '\0'; }
struct conf_info *lookup_keyword(char*c) {
struct conf_info *p;
for (p
= clist; p < clist+
(sizeof(clist)
/ sizeof
(struct conf_info)); p++)
{
if (strcasecmp(c, p->name)==
0)
return p;
}
return NULL; }
static void apply_command(Cconf_info* p,
char *args) {
if (p->object){
if (*(char**)
p->object!=
NULL)
free(*(char**)
p->object);
*(char**) p->object=
strdup(args);
} } /* parse configure file */ void parse(FILE* fp) {
Cconf_info *p;
char buf[1024],*c;
int line
= 0;
while (fgets(buf, 1024, fp)!=
NULL)
{
++line;
if (buf[0]==
'\0' || buf[0]==
'#' || buf[0]==
'\n')
{
memset(buf, 0, 1024);
continue;
}
trim(buf);
if (buf[0]==
'\0')
continue;
c = buf;
while (!isspace(*c))
++c;
if (*c==
'\0')
{
c = NULL;
}
else {
*c ='\0';
++c;
}
p = lookup_keyword(buf);
if(p != NULL)
apply_command(p, c);
memset(buf, 0, 1024);
} }
|