diff options
author | kremlin- <ian@kremlin.cc> | 2014-06-13 10:01:30 +0800 |
---|---|---|
committer | kremlin- <ian@kremlin.cc> | 2014-06-13 10:01:30 +0800 |
commit | 1c38000a88055e0893fb0b6b41a490109348b950 (patch) | |
tree | 84f3b3fadeb76f3113a031158e9664745d3d589a /src/config.c | |
parent | 71e3eef18b982a31f57a90b850de612dd4b2d7f8 (diff) | |
download | systembsd-1c38000a88055e0893fb0b6b41a490109348b950.tar systembsd-1c38000a88055e0893fb0b6b41a490109348b950.tar.gz systembsd-1c38000a88055e0893fb0b6b41a490109348b950.tar.bz2 systembsd-1c38000a88055e0893fb0b6b41a490109348b950.tar.lz systembsd-1c38000a88055e0893fb0b6b41a490109348b950.tar.xz systembsd-1c38000a88055e0893fb0b6b41a490109348b950.tar.zst systembsd-1c38000a88055e0893fb0b6b41a490109348b950.zip |
fleshed out config and hostnamed more, structure for other 3 daemons..
Diffstat (limited to 'src/config.c')
-rw-r--r-- | src/config.c | 79 |
1 files changed, 78 insertions, 1 deletions
diff --git a/src/config.c b/src/config.c index b1b7161..189eb23 100644 --- a/src/config.c +++ b/src/config.c @@ -1 +1,78 @@ -init +#include <unistd.h> +#include <fcntl.h> +#include <gio/gio.h> + +static GKeyFile *config; + +static const gchar *CONFIG_KEYS[] = { + "PrettyHostname", + "IconName", + "ChassisType" +}; + +/* NULL if key doesn't exist */ +gchar *get_option(gchar *key, gchar *group) { + + if(!group) + group = "default"; + + return g_key_file_get_string(config, group, key, NULL); +} + +/* false if key isn't already defined or value is invalid */ +gboolean set_option(gchar *key, gchar *value, gchar *group) { + + if(!group) + group = "default"; + + if(!g_key_file_get_string(config, group, key, NULL)) + return FALSE; + + //TODO safteycheck value + g_key_file_set_string(config, group, key, value); + return TRUE; +} + +/* initial load/check */ + +gboolean config_init() { + + static gchar *config_path; + int tryopen = 0; + /* config is already good to go */ + if(config) + return TRUE; + + /* does config file exist? if not, write one */ + else if(!g_key_file_load_from_data(config, "systemd_compat.conf", &config_path, G_KEY_FILE_KEEP_COMMENTS, NULL)) { + + tryopen = g_open("/etc/systemd_compat.conf", O_CREAT, 644); + + //TODO clean this up, use g_data_dirs and g_exit + /* can we open it rw? */ + if(!g_access("/etc/systemd_compat.conf", W_OK) && !tryopen) { + g_printf("%s\n", "ERROR: cannot open systemd_compat.conf as read/write!"); + return FALSE; + } + + if(tryopen) { + config_path = "/etc/systemd_compat.conf"; + g_close(tryopen, NULL); + } + + //TODO set these properly + config = g_key_file_new(); + + g_key_file_set_string(config, "hostnamed", "PrettyHostname", ""); + g_key_file_set_string(config, "hostnamed", "IconName", "Computer"); + g_key_file_set_string(config, "hostnamed", "ChassisType", "laptop"); + + if(!g_key_file_save_to_file(config, config_path, NULL)) + return FALSE; + + return TRUE; + + /* it does it exist and was written to config var */ + } else + return TRUE; +} |