diff options
Diffstat (limited to 'src/settings.c')
| -rw-r--r-- | src/settings.c | 95 | 
1 files changed, 95 insertions, 0 deletions
diff --git a/src/settings.c b/src/settings.c new file mode 100644 index 0000000..2b1c313 --- /dev/null +++ b/src/settings.c @@ -0,0 +1,95 @@ +/* +Copyright (c) 2008 Lars-Dominik Braun + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +#include <string.h> +#include <stdlib.h> +#include <stdio.h> + +#include "settings.h" + +/*	tries to guess your config dir; somehow conforming to + *	http://standards.freedesktop.org/basedir-spec/basedir-spec-0.6.html + *	@author PromyLOPh + *	@added 2008-06-15 + *	@param name of the config file (can contain subdirs too) + *	@param store the whole path here + *	@param but only up to this size + *	@return nothing + */ +void getXdgConfigDir (char *filename, char *retDir, size_t retDirN) { +	char *xdgConfigDir = NULL; + +	if ((xdgConfigDir = getenv ("XDG_CONFIG_HOME")) != NULL && +			strlen (xdgConfigDir) > 0) { +		/* special dir: $xdg_config_home */ +		snprintf (retDir, retDirN, "%s/%s", xdgConfigDir, filename); +	} else { +		if ((xdgConfigDir = getenv ("HOME")) != NULL && +				strlen (xdgConfigDir) > 0) { +			/* standard config dir: $home/.config */ +			snprintf (retDir, retDirN, "%s/.config/%s", xdgConfigDir, +					filename); +		} else { +			/* fallback: working dir */ +			snprintf (retDir, retDirN, "%s", filename); +		} +	} +} + +void BarSettingsInit (BarSettings_t *settings) { +	memset (settings, 0, sizeof (*settings)); +} + +void BarSettingsDestroy (BarSettings_t *settings) { +	free (settings->controlProxy); +	free (settings->username); +	free (settings->password); +} + +void readSettings (BarSettings_t *settings) { +	char configfile[1024], key[256], val[256]; +	FILE *configfd; + +	getXdgConfigDir (PACKAGE "/config", configfile, sizeof (configfile)); +	if ((configfd = fopen (configfile, "r")) == NULL) { +		printf ("config file at %s not found\n", configfile); +		return; +	} + +	while (!feof (configfd)) { +		memset (val, 0, sizeof (*val)); +		memset (key, 0, sizeof (*key)); +		if (fscanf (configfd, "%255s = %255[^\n]", key, val) < 2) { +			/* invalid config line */ +			continue; +		} +		if (strcmp ("control_proxy", key) == 0) { +			settings->controlProxy = strdup (val); +		} else if (strcmp ("user", key) == 0) { +			settings->username = strdup (val); +		} else if (strcmp ("password", key) == 0) { +			settings->password = strdup (val); +		} +	} + +	fclose (configfd); +}  | 
