2 * Copyright (c) 2014 Ian Sutton <ian@kremlin.cc>
4 * Permission to use, copy, modify, and distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
21 static GKeyFile
*config
;
23 static const gchar
*CONFIG_KEYS
[] = {
29 /* NULL if key doesn't exist */
30 gchar
*get_option(gchar
*key
, gchar
*group
) {
35 return g_key_file_get_string(config
, group
, key
, NULL
);
38 /* false if key isn't already defined or value is invalid */
39 gboolean
set_option(gchar
*key
, gchar
*value
, gchar
*group
) {
44 if(!g_key_file_get_string(config
, group
, key
, NULL
))
47 //TODO safteycheck value
48 g_key_file_set_string(config
, group
, key
, value
);
52 /* initial load/check */
53 gboolean
config_init() {
56 return TRUE
; //already init'd
58 config
= g_key_file_new();
60 const gchar
*config_path
;
61 GStatBuf
*config_lstat
;
63 config_path
= "/etc/systemd_compat.conf";
65 /* does conf exist? */
66 if(g_lstat(config_path
, config_lstat
)) {
68 /* if not, can we write it */
69 if(g_access("/etc/", W_OK
)) {
70 g_printf("%s\n", "no write permissions for /etc/! exiting..");
75 config_descr
= g_open(config_path
, O_CREAT
, 644);
77 gchar
*posix_hostname
;
78 posix_hostname
= g_malloc(255);
80 gethostname(posix_hostname
, 255);
82 g_key_file_set_string(config
, "hostnamed", "Hostname", posix_hostname
);
83 g_key_file_set_string(config
, "hostnamed", "PrettyHostname", "");
84 g_key_file_set_string(config
, "hostnamed", "IconName", "Computer");
85 g_key_file_set_string(config
, "hostnamed", "ChassisType", "laptop"); //TODO set these correctly
87 if(!g_key_file_save_to_file(config
, config_path
, NULL
)) {
88 g_printf("failed to write config to %s!\n", config_path
);
89 g_free(posix_hostname
);
93 g_printf("wrote config to %s\n", config_path
);
95 g_free(posix_hostname
);
99 /* it does exist, read it */
102 if(!g_access(config_path
, W_OK
)) {
103 g_printf("%s\n", "no write permissions for /etc/! exiting..");
105 } else if(g_key_file_load_from_file(config
, config_path
, G_KEY_FILE_KEEP_COMMENTS
, NULL
))
108 g_printf("could not read config at %s! exiting..", config_path
);