diff options
Diffstat (limited to 'lib/ini.c')
-rw-r--r-- | lib/ini.c | 104 |
1 files changed, 48 insertions, 56 deletions
@@ -1,4 +1,4 @@ - /********************************************************************\ +/********************************************************************\ * BitlBee -- An IRC to other IM-networks gateway * * * * Copyright 2002-2008 Wilmer van der Gaast and others * @@ -25,109 +25,101 @@ #define BITLBEE_CORE #include "bitlbee.h" -ini_t *ini_open( char *file ) +ini_t *ini_open(char *file) { int fd; ini_t *ini = NULL; struct stat fi; - - if( ( fd = open( file, O_RDONLY ) ) != -1 && - fstat( fd, &fi ) == 0 && + + if ((fd = open(file, O_RDONLY)) != -1 && + fstat(fd, &fi) == 0 && fi.st_size <= 16384 && - ( ini = g_malloc( sizeof( ini_t ) + fi.st_size + 1 ) ) && - read( fd, ini->file, fi.st_size ) == fi.st_size ) - { - memset( ini, 0, sizeof( ini_t ) ); + (ini = g_malloc(sizeof(ini_t) + fi.st_size + 1)) && + read(fd, ini->file, fi.st_size) == fi.st_size) { + memset(ini, 0, sizeof(ini_t)); ini->size = fi.st_size; ini->file[ini->size] = 0; ini->cur = ini->file; ini->c_section = ""; - - close( fd ); - + + close(fd); + return ini; } - if( fd >= 0 ) - close( fd ); - - ini_close( ini ); + if (fd >= 0) { + close(fd); + } + + ini_close(ini); return NULL; } /* Strips leading and trailing whitespace and returns a pointer to the first non-ws character of the given string. */ -static char *ini_strip_whitespace( char *in ) +static char *ini_strip_whitespace(char *in) { char *e; - while( g_ascii_isspace( *in ) ) + while (g_ascii_isspace(*in)) { in++; + } - e = in + strlen( in ) - 1; - while( e > in && g_ascii_isspace( *e ) ) + e = in + strlen(in) - 1; + while (e > in && g_ascii_isspace(*e)) { e--; + } e[1] = 0; - + return in; } -int ini_read( ini_t *file ) +int ini_read(ini_t *file) { char *s; - - while( file->cur && file->cur < file->file + file->size ) - { + + while (file->cur && file->cur < file->file + file->size) { char *e, *next; - + file->line++; /* Find the end of line */ - if( ( e = strchr( file->cur, '\n' ) ) != NULL ) - { + if ((e = strchr(file->cur, '\n')) != NULL) { *e = 0; next = e + 1; - } - else - { + } else { /* No more lines. */ - e = file->cur + strlen( file->cur ); + e = file->cur + strlen(file->cur); next = NULL; } - + /* Comment? */ - if( ( s = strchr( file->cur, '#' ) ) != NULL ) + if ((s = strchr(file->cur, '#')) != NULL) { *s = 0; - - file->cur = ini_strip_whitespace( file->cur ); - - if( *file->cur == '[' ) - { + } + + file->cur = ini_strip_whitespace(file->cur); + + if (*file->cur == '[') { file->cur++; - if( ( s = strchr( file->cur, ']' ) ) != NULL ) - { + if ((s = strchr(file->cur, ']')) != NULL) { *s = 0; file->c_section = file->cur; } - } - else if( ( s = strchr( file->cur, '=' ) ) != NULL ) - { + } else if ((s = strchr(file->cur, '=')) != NULL) { *s = 0; - file->key = ini_strip_whitespace( file->cur ); - file->value = ini_strip_whitespace( s + 1 ); - - if( ( s = strchr( file->key, '.' ) ) != NULL ) - { + file->key = ini_strip_whitespace(file->cur); + file->value = ini_strip_whitespace(s + 1); + + if ((s = strchr(file->key, '.')) != NULL) { *s = 0; file->section = file->key; file->key = s + 1; - } - else - { + } else { file->section = file->c_section; } - + file->cur = next; return 1; } @@ -135,11 +127,11 @@ int ini_read( ini_t *file ) file->cur = next; } - + return 0; } -void ini_close( ini_t *file ) +void ini_close(ini_t *file) { - g_free( file ); + g_free(file); } |