/*get a int value in config section - name of section key - name of key value - value of key */ int util_getinfo_int(char *section , char *key , int *nvalue , char * szFileName) { char szvalue[100]; memset( szvalue , 0 , sizeof( szvalue)); if( util_getinfo_str( section , key , szvalue , szFileName) == -1 ) { *nvalue = 0; return -1; } *nvalue = atoi( szvalue ); if( errno == EINVAL || errno == ERANGE) return -1; return 0; } /*get a section in configuation file*/ int util_getinfo_str(char *section ,char *key , char *value , char * szFileName) { FILE *fd; char buf[1024]; char cfile[100]; char line[100]; char thekey[100]; char thesection[100]; char thevalue[100]; char cursection[100]; char *env; memset( thekey , 0 , sizeof( thekey )); memset( thesection , 0 , sizeof( thesection )); memset( cursection , 0 , sizeof( cursection )); memset( thevalue , 0 , sizeof( thevalue )); memset(cfile,0,sizeof(cfile)); memset(buf, 0 , sizeof( buf )); memset(line , 0 , sizeof( line )); /* if( szInstallDir[ 0 ] != '/' ) { fprintf(stderr,"Can not get install dir/n"); return -1; } sprintf( cfile , "%s/etc/magic.ini" , szInstallDir); */ if(( fd = fopen(szFileName,"r")) == NULL) { util_err_log("open file error!" , __FILE__ , __LINE__ , errno ); return -1; } while( util_getline( fd , 1023 , line) != -1) { /*it is a section*/ memset( thekey , 0 ,sizeof(thekey)); memset( thevalue , 0 ,sizeof(thevalue)); memset( thesection , 0 , sizeof(thesection )); util_trim( line ); if( line[0] == '#' ) continue; if( util_getsection( line , thesection ) == 0 ) { memset( cursection , 0 , sizeof( cursection ) ); strcpy( cursection , thesection ); continue; } /*it is a key*/ else if( util_getkeyvalue( line , thekey , thevalue ) == 0 ) { /*it's the same with query value*/ if( strcasecmp( cursection , section ) == 0 && strcasecmp( thekey , key) == 0 ) { strcpy( value , thevalue ); fclose(fd ); return 0; } } else if ( strlen( line ) != 0 ) { util_log("an unrecognise format:%s /n" , line ); fclose(fd ); return -1; } memset( line , 0 ,sizeof(line)); } if(debug) util_log("can not find the key: %s section: %s " , key , section ); fclose(fd ); return -1; } /*pick out section name */ /*return -1 for error format*/ int util_getsection(char *line , char *section) { char *p1 , *p2; p1 = strchr( line , '[' ); p2 = strchr( line , ']' ); if( p1 == 0 || p2 == 0 ) { return -1; } else { memset( section , 0 , sizeof( section )); strncpy( section , p1 + 1 , p2 - p1 - 1); util_trim( section ); return 0; } } /*pick out section value */ /*return -1 for error format*/ int util_getkeyvalue(char *line ,char *thekey ,char *thevalue ) { char *p1; p1 = strchr( line , '=' ); if( p1 == 0 ) return -1; strncpy( thekey , line , p1 - line ); strcpy( thevalue , p1 + 1 ); util_trim( thekey ); util_trim( thevalue ); /*it's empty value*/ if( strlen( thekey ) == 0 || strlen( thevalue ) == 0 ) return -1; return 0; } /*pick out the key of line string(with out delete blank space) */ /*return -1 for error format*/ /*return 0 for success*/ int util_getkeyvalue_notrim(char *line ,char *thekey ,char *thevalue ) { char *p1; p1 = strchr( line , '=' ); if( p1 == 0 ) return -1; strncpy( thekey , line , p1 - line ); strcpy( thevalue , p1 + 1 ); /*empty value*/ if( strlen( thekey ) == 0 || strlen( thevalue ) == 0 ) return -1; return 0; } /*get one line in file /*done not check file format return -1 for end of file */ int util_getline( FILE *fd , int nLineLen , char *line) { int c; int i = 0; memset( line , 0 , sizeof( line) ); c = fgetc( fd ); if( c == EOF ) return -1; while( c == '/r' || c == '/n' ) { c = fgetc( fd ); if( c == EOF ) return -1; } while( c != '/r' && c != '/n' && c != EOF && i < nLineLen ) { line[ i++ ] = c; c = fgetc(fd ); } line[ i ] = '/0'; return i; } 配置文件格式 #注释 [section] key = value