From 2ab3d99967d68c79351fe2a3df22c445447e3010 Mon Sep 17 00:00:00 2001 From: Michał Cichoń Date: Tue, 15 Nov 2011 22:28:48 +0100 Subject: Initial import. --- libao/src/src/config.c | 111 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 libao/src/src/config.c (limited to 'libao/src/src/config.c') diff --git a/libao/src/src/config.c b/libao/src/src/config.c new file mode 100644 index 0000000..9693730 --- /dev/null +++ b/libao/src/src/config.c @@ -0,0 +1,111 @@ +/* + * + * config.c + * + * Copyright (C) Stan Seibert - July 2000 + * Copyright (C) Monty - Mar 2010 + * + * This file is part of libao, a cross-platform audio output library. See + * README for a history of this source code. + * + * libao is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * libao is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Make; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * + ******************************************************************** + + last mod: $Id: config.c 17763 2010-12-17 11:28:29Z xiphmont $ + + ********************************************************************/ + +#include "ao/ao.h" +#include "ao/ao_private.h" +#include +#include +#include +#include +#include + +#define LINE_LEN 100 + +static char *trim(char *p){ + char *t; + while(*p && isspace(*p))p++; + if(*p){ + t=p+strlen(p); + while(t>p && isspace(*(t-1))){ + t--; + *t='\0'; + } + } + return p; +} + +static int ao_read_config_file(ao_config *config, const char *config_file) +{ + FILE *fp; + char line[LINE_LEN]; + int end; + + if ( !(fp = fopen(config_file, "r")) ) + return 0; /* Can't open file */ + + while (fgets(line, LINE_LEN, fp)) { + /* All options are key=value */ + + if (strncmp(line, "default_driver=", 15) == 0) { + free(config->default_driver); + end = strlen(line); + if (line[end-1] == '\n') + line[end-1] = 0; /* Remove trailing newline */ + + config->default_driver = _strdup(line+15); + }else{ + /* entries in the config file that don't parse as + directives to AO at large are treated as driver + options */ + char *key=trim(line); + if(key && *key){ + char *val=strchr(key,'='); + if(val){ + *val='\0'; + val++; + } + ao_append_global_option(key,val); + } + } + } + + fclose(fp); + + return 1; +} + +void ao_read_config_files (ao_config *config) +{ + char userfile[FILENAME_MAX+1]; + char *homedir = getenv("HOME"); + + /* Read the system-wide config file */ + ao_read_config_file(config, AO_SYSTEM_CONFIG); + + /* Read the user config file */ + if ( homedir!=NULL && + strlen(homedir) <= FILENAME_MAX - strlen(AO_USER_CONFIG) ) + { + strncpy(userfile, homedir, FILENAME_MAX); + strcat(userfile, AO_USER_CONFIG); + ao_read_config_file(config, userfile); + } +} + -- cgit v1.2.3