int RFG_Groups_readDefFile( RFG_Groups* groups ) { FILE* f; char* orgline; uint32_t lineno = 0; uint8_t parse_err = 0; if( !groups ) return 0; if( !groups->deffile ) return 1; /* open group definition file */ f = fopen( groups->deffile, "r" ); if( !f ) { fprintf( stderr, "RFG_Groups_readDefFile(): Error: Could not open file '%s'\n", groups->deffile ); return 0; } orgline = ( char* )malloc( MAX_LINE_LEN * sizeof( char ) ); if( orgline == NULL ) { fclose( f ); return 0; } /* read lines */ while( !parse_err && fgets( orgline, MAX_LINE_LEN - 1, f ) ) { char group[STRBUF_SIZE]; char* p; char* line; /* remove newline */ chomp( orgline ); /* copy line so that the original line keep alive */ line = strdup( orgline ); lineno++; if( strlen( line ) == 0 ) { free( line ); continue; } trim( line ); if( line[0] == '#' ) { free( line ); continue; } /* search for '=' e.g. "GROUP=func1;func2;func3" p */ p = strchr( line, '=' ); if( p == NULL ) { parse_err = 1; free( line ); break; } /* cut group name from line e.g. "GROUP=func1;func2;func3" => "GROUP" */ *p = '\0'; strcpy( group, line ); trim( group ); /* split remaining line at ';' to get pattern */ p = strtok( p+1, ";" ); do { char pattern[STRBUF_SIZE]; if( !p ) { parse_err = 1; break; } strcpy( pattern, p ); trim( pattern ); /* add group assignment */ if( strlen( pattern ) > 0 ) RFG_Groups_addAssign( groups, group, pattern ); } while( ( p = strtok( 0, ";" ) ) ); free( line ); } if( parse_err ) { fprintf( stderr, "%s:%u: Could not parse line '%s'\n", groups->deffile, lineno, orgline ); } free( orgline ); fclose( f ); return parse_err ? 0 : 1; }
int RFG_Groups_readDefFile( RFG_Groups* groups ) { FILE* f; char* line; uint32_t lineno = 0; uint8_t parse_err = 0; if( !groups ) return 0; if( !groups->file_name ) return 1; /* open group definition file */ f = fopen( groups->file_name, "r" ); if( !f ) { fprintf( stderr, "RFG_Groups_readDefFile(): Error: Could not open file '%s'\n", groups->file_name ); return 0; } line = ( char* )malloc( MAX_LINE_LEN * sizeof( char ) ); if( !line ) { fclose( f ); return 0; } /* read lines */ while( !parse_err && fgets( line, MAX_LINE_LEN, f ) ) { char* group; char* p; /* increment line number */ lineno++; /* remove newline */ if( strlen( line ) > 0 && line[strlen(line)-1] == '\n' ) line[strlen(line)-1] = '\0'; /* remove leading and trailing spaces from line */ vt_strtrim( line ); /* cut possible comment from line */ p = strchr( line, '#' ); if( p ) *p = '\0'; /* continue if line is empty */ if( strlen( line ) == 0 ) continue; /* search for '=' e.g. "GROUP=func1;func2;func3" p */ p = strchr( line, '=' ); if( !p ) { parse_err = 1; break; } /* cut group name from line e.g. "GROUP=func1;func2;func3" => "GROUP" */ *p = '\0'; group = strdup( line ); vt_strtrim( group ); /* split remaining line at ';' to get pattern */ p = strtok( p+1, ";" ); do { char* pattern; if( !p ) { parse_err = 1; break; } pattern = strdup( p ); vt_strtrim( pattern ); /* add group assignment */ if( strlen( pattern ) > 0 ) RFG_Groups_addAssign( groups, group, pattern ); free( pattern ); } while( ( p = strtok( 0, ";" ) ) ); free( group ); } if( parse_err ) { fprintf( stderr, "%s:%u: Could not be parsed\n", groups->file_name, lineno ); } free( line ); fclose( f ); return parse_err ? 0 : 1; }