コード例 #1
0
/**
 * gst_validate_media_info_load: (skip):
 */
GstValidateMediaInfo *
gst_validate_media_info_load (const gchar * path, GError ** err)
{
  GKeyFile *kf = g_key_file_new ();
  GstValidateMediaInfo *mi;
  gchar *str;

  if (!g_key_file_load_from_file (kf, path, G_KEY_FILE_NONE, err)) {
    g_key_file_free (kf);
    return NULL;
  }

  mi = g_new (GstValidateMediaInfo, 1);
  gst_validate_media_info_init (mi);

  mi->uri = g_key_file_get_string (kf, "file-info", "uri", err);
  if (err && *err)
    goto end;
  mi->file_size = g_key_file_get_uint64 (kf, "file-info", "file-size", err);
  if (err && *err)
    goto end;

  mi->duration =
      g_key_file_get_uint64 (kf, "media-info", "file-duration", NULL);
  mi->seekable = g_key_file_get_boolean (kf, "media-info", "seekable", NULL);
  mi->is_image = g_key_file_get_boolean (kf, "media-info", "is-image", NULL);

  str = g_key_file_get_string (kf, "media-info", "caps", NULL);
  if (str) {
    mi->stream_info = gst_validate_stream_info_from_caps_string (str);
    g_free (str);
  }

  mi->playback_error =
      g_key_file_get_string (kf, "playback-tests", "playback-error", NULL);
  mi->reverse_playback_error =
      g_key_file_get_string (kf, "playback-tests", "reverse-playback-error",
      NULL);
  mi->track_switch_error =
      g_key_file_get_string (kf, "playback-tests", "track-switch-error", NULL);
  if (mi->playback_error && strlen (mi->playback_error) == 0) {
    g_free (mi->playback_error);
    mi->playback_error = NULL;
  }
  if (mi->reverse_playback_error && strlen (mi->reverse_playback_error) == 0) {
    g_free (mi->reverse_playback_error);
    mi->reverse_playback_error = NULL;
  }
  if (mi->track_switch_error && strlen (mi->track_switch_error) == 0) {
    g_free (mi->track_switch_error);
    mi->track_switch_error = NULL;
  }

end:
  g_key_file_free (kf);
  return mi;
}
コード例 #2
0
bool PluginInfoCache::getPluginInfo(const String& pluginPath, PluginModuleInfo& plugin)
{
    CString pluginGroup = pluginPath.utf8();
    if (!g_key_file_has_group(m_cacheFile.get(), pluginGroup.data()))
        return false;

    time_t lastModified;
    if (!WebCore::getFileModificationTime(pluginPath, lastModified))
        return false;
    time_t cachedLastModified = static_cast<time_t>(g_key_file_get_uint64(m_cacheFile.get(), pluginGroup.data(), "mtime", nullptr));
    if (lastModified != cachedLastModified)
        return false;

    plugin.path = pluginPath;
    plugin.info.file = WebCore::pathGetFileName(pluginPath);

    GUniquePtr<char> stringValue(g_key_file_get_string(m_cacheFile.get(), pluginGroup.data(), "name", nullptr));
    plugin.info.name = String::fromUTF8(stringValue.get());

    stringValue.reset(g_key_file_get_string(m_cacheFile.get(), pluginGroup.data(), "description", nullptr));
    plugin.info.desc = String::fromUTF8(stringValue.get());

#if PLUGIN_ARCHITECTURE(X11)
    stringValue.reset(g_key_file_get_string(m_cacheFile.get(), pluginGroup.data(), "mime-description", nullptr));
    NetscapePluginModule::parseMIMEDescription(String::fromUTF8(stringValue.get()), plugin.info.mimes);
#endif

    plugin.requiresGtk2 = g_key_file_get_boolean(m_cacheFile.get(), pluginGroup.data(), "requires-gtk2", nullptr);

    return true;
}
コード例 #3
0
ファイル: state.c プロジェクト: tripcodeuser/piiptyyt
struct piiptyyt_state *state_read(GError **err_p)
{
	gchar *contents = NULL;
	gsize length = 0;
	GError *err = NULL;
	if(!g_file_get_contents(state_path(), &contents, &length, &err)) {
		if(err->code != ENOENT) {
			g_propagate_error(err_p, err);
			return NULL;
		} else {
			g_error_free(err);
			contents = g_strdup("");
		}
	}

	struct piiptyyt_state *st = NULL;
	GKeyFile *kf = g_key_file_new();
	gboolean ok = g_key_file_load_from_data(kf, contents, length, 0, err_p);
	if(ok) {
		st = g_new(struct piiptyyt_state, 1);
		st->username = g_key_file_get_string(kf, "auth", "username", NULL);
		st->auth_token = g_key_file_get_string(kf, "auth", "auth_token", NULL);
		st->auth_secret = g_key_file_get_string(kf, "auth", "auth_secret", NULL);
		st->userid = g_key_file_get_uint64(kf, "auth", "userid", NULL);
	}
	g_key_file_free(kf);
	g_free(contents);

	return st;
}
コード例 #4
0
ファイル: fm-folder-config.c プロジェクト: dforsi/libfm
/**
 * fm_folder_config_get_uint64
 * @fc: a configuration descriptor
 * @key: a key to search
 * @val: (out): location to save the value
 *
 * Returns the value associated with @key as an unsigned integer.
 *
 * Returns: %TRUE if key was found and value is an unsigned integer.
 *
 * Since: 1.2.0
 */
gboolean fm_folder_config_get_uint64(FmFolderConfig *fc, const char *key,
                                     guint64 *val)
{
    GError *error = NULL;
#if GLIB_CHECK_VERSION(2, 26, 0)
    guint64 ret = g_key_file_get_uint64(fc->kf, fc->group, key, &error);
#else
    gchar *s, *end;
    guint64 ret;

    s = g_key_file_get_value(fc->kf, fc->group, key, &error);
#endif
    if (error)
    {
        g_error_free(error);
        return FALSE;
    }
#if !GLIB_CHECK_VERSION(2, 26, 0)
    ret = g_ascii_strtoull(s, &end, 10);
    if (*s == '\0' || *end != '\0')
    {
        g_free(s);
        return FALSE;
    }
    g_free(s);
#endif
    *val = ret;
    return TRUE;
}
コード例 #5
0
ファイル: ph-config.c プロジェクト: schutte/plastichunt
/*
 * Interpret a [Map provider ...] section from the application configuration
 * file and add it to the given list store.  The settings for default providers,
 * such as OpenStreetMap, are automatically completed.
 */
static void
ph_config_read_map_provider(GtkListStore *list,
                            const gchar *group)
{
    const gchar *name = group + PH_CONFIG_PREFIX_MAP_PROVIDER_LENGTH;
    GtkTreeIter iter;
    PHMapProvider *provider = NULL;
    gsize i;

    gtk_list_store_append(list, &iter);

    for (i = 0; i < G_N_ELEMENTS(ph_config_default_map_providers); ++i) {
        const PHMapProvider *def = &ph_config_default_map_providers[i];
        if (strcmp(def->name, name) == 0)
            provider = ph_map_provider_copy(def);
    }

    if (provider == NULL) {
        /* not one of the default providers */
        provider = g_new0(PHMapProvider, 1);
        provider->name = g_strdup(name);
    }

    if (g_key_file_has_key(ph_config->key_file, group, "url", NULL)) {
        g_free(provider->url);
        provider->url = g_key_file_get_string(ph_config->key_file,
                group, "url", NULL);
    }

    if (g_key_file_has_key(ph_config->key_file, group, "tile-size", NULL))
        provider->tile_size = (guint) g_key_file_get_uint64(ph_config->key_file,
                group, "tile-size", NULL);
    if (g_key_file_has_key(ph_config->key_file, group, "zoom-min", NULL))
        provider->zoom_min = (guint) g_key_file_get_uint64(ph_config->key_file,
                group, "zoom-min", NULL);
    if (g_key_file_has_key(ph_config->key_file, group, "zoom-max", NULL))
        provider->zoom_max = (guint) g_key_file_get_uint64(ph_config->key_file,
                group, "zoom-max", NULL);
    if (g_key_file_has_key(ph_config->key_file, group, "zoom-detail", NULL))
        provider->zoom_detail = (guint) g_key_file_get_uint64(
                ph_config->key_file, group, "zoom-detail", NULL);

    ph_map_provider_to_list(provider, list, &iter);

    ph_map_provider_free(provider);
}
コード例 #6
0
static gboolean
gst_dvb_base_bin_conf_set_uint (GstElement * dvbbasebin, const gchar * property,
    GKeyFile * kf, const gchar * channel_name, const gchar * key)
{
  guint64 v;

  v = g_key_file_get_uint64 (kf, channel_name, key, NULL);
  g_object_set (dvbbasebin, property, (guint) v, NULL);
  return TRUE;
}
コード例 #7
0
ファイル: sensors.c プロジェクト: SteveJones/j4status
static J4statusPluginContext *
_j4status_sensors_init(J4statusCoreInterface *core)
{
    gchar **sensors = NULL;
    gboolean show_details = FALSE;
    guint64 interval = 0;

    if ( sensors_init(NULL) != 0 )
        return NULL;

    GKeyFile *key_file;
    key_file = j4status_config_get_key_file("Sensors");
    if ( key_file != NULL )
    {
        sensors = g_key_file_get_string_list(key_file, "Sensors", "Sensors", NULL, NULL);
        show_details = g_key_file_get_boolean(key_file, "Sensors", "ShowDetails", NULL);
        interval = g_key_file_get_uint64(key_file, "Sensors", "Interval", NULL);
        g_key_file_free(key_file);
    }

    J4statusPluginContext *context;
    context = g_new0(J4statusPluginContext, 1);
    context->core = core;

    context->config.show_details = show_details;


    if ( sensors == NULL )
        _j4status_sensors_add_sensors(context, NULL);
    else
    {
        sensors_chip_name chip;
        gchar **sensor;
        for ( sensor = sensors ; *sensor != NULL ; ++sensor )
        {
            if ( sensors_parse_chip_name(*sensor, &chip) != 0 )
                continue;
            _j4status_sensors_add_sensors(context, &chip);
            sensors_free_chip_name(&chip);
        }
    }
    g_strfreev(sensors);

    if ( context->sections == NULL )
    {
        g_message("Missing configuration: No sensor to monitor, aborting");
        _j4status_sensors_uninit(context);
        return NULL;
    }

    g_timeout_add_seconds(MAX(2, interval), _j4status_sensors_update, context);

    return context;
}
コード例 #8
0
ファイル: ph-config.c プロジェクト: schutte/plastichunt
/*
 * Get the maximum total size, in megabytes, of the tile cache directory.  This
 * is an unsigned integer value.
 */
void
ph_config_get_max_tile_cache_size(GValue *value)
{
    guint max_size;

    g_return_if_fail(ph_config != NULL);
    g_return_if_fail(G_VALUE_HOLDS_UINT(value));

    max_size = g_key_file_get_uint64(ph_config->key_file,
                                     "tile-cache", "max-size",
                                     NULL);

    g_value_set_uint(value, (max_size != 0) ? max_size : 100);
}
コード例 #9
0
ファイル: config_file.c プロジェクト: ukleinek/rauc
gboolean load_config(const gchar *filename, RaucConfig **config, GError **error)
{
	GError *ierror = NULL;
	g_autoptr(RaucConfig) c = g_new0(RaucConfig, 1);
	gboolean res = FALSE;
	g_autoptr(GKeyFile) key_file = NULL;
	gchar **groups;
	gsize group_count;
	GList *slotlist = NULL;
	GHashTable *slots = NULL;
	GList *l;
	gchar *bootloader;
	const gchar **pointer;
	gboolean dtbvariant;
	gchar *variant_data;

	key_file = g_key_file_new();

	res = g_key_file_load_from_file(key_file, filename, G_KEY_FILE_NONE, &ierror);
	if (!res) {
		g_propagate_error(error, ierror);
		goto free;
	}

	/* parse [system] section */
	c->system_compatible = key_file_consume_string(key_file, "system", "compatible", &ierror);
	if (!c->system_compatible) {
		g_propagate_error(error, ierror);
		res = FALSE;
		goto free;
	}
	bootloader = key_file_consume_string(key_file, "system", "bootloader", NULL);
	if (!bootloader) {
		g_set_error_literal(
				error,
				R_CONFIG_ERROR,
				R_CONFIG_ERROR_BOOTLOADER,
				"No bootloader selected in system config");
		res = FALSE;
		goto free;
	}

	pointer = &supported_bootloaders[0];
	while (*pointer) {
		if (g_strcmp0(bootloader, *pointer) == 0) {
			c->system_bootloader = bootloader;
			break;
		}
		pointer++;
	}

	if (!c->system_bootloader) {
		g_set_error(
				error,
				R_CONFIG_ERROR,
				R_CONFIG_ERROR_BOOTLOADER,
				"Unsupported bootloader '%s' selected in system config", bootloader);
		res = FALSE;
		goto free;
	}

	if (g_strcmp0(c->system_bootloader, "barebox") == 0) {
		c->system_bb_statename = key_file_consume_string(key_file, "system", "barebox-statename", NULL);
	}

	c->max_bundle_download_size = g_key_file_get_uint64(key_file, "system", "max-bundle-download-size", &ierror);
	if (g_error_matches(ierror, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) {
		g_debug("No value for key \"max-bundle-download-size\" in [system] defined "
				"- using default value of %d bytes.", DEFAULT_MAX_BUNDLE_DOWNLOAD_SIZE);
		c->max_bundle_download_size = DEFAULT_MAX_BUNDLE_DOWNLOAD_SIZE;
		g_clear_error(&ierror);
	} else if (ierror) {
		g_propagate_error(error, ierror);
		res = FALSE;
		goto free;
	}
	if (c->max_bundle_download_size == 0) {
		g_set_error(
				error,
				R_CONFIG_ERROR,
				R_CONFIG_ERROR_MAX_BUNDLE_DOWNLOAD_SIZE,
				"Invalid value (%" G_GUINT64_FORMAT ") for key \"max-bundle-download-size\" in system config", c->max_bundle_download_size);
		res = FALSE;
		goto free;
	}
	g_key_file_remove_key(key_file, "system", "max-bundle-download-size", NULL);

	c->mount_prefix = key_file_consume_string(key_file, "system", "mountprefix", NULL);
	if (!c->mount_prefix) {
		g_debug("No mount prefix provided, using /mnt/rauc/ as default");
		c->mount_prefix = g_strdup("/mnt/rauc/");
	}

	if (g_strcmp0(c->system_bootloader, "grub") == 0) {
		c->grubenv_path = resolve_path(filename,
				key_file_consume_string(key_file, "system", "grubenv", NULL));
		if (!c->grubenv_path) {
			g_debug("No grubenv path provided, using /boot/grub/grubenv as default");
			c->grubenv_path = g_strdup("/boot/grub/grubenv");
		}
	}

	c->activate_installed = g_key_file_get_boolean(key_file, "system", "activate-installed", &ierror);
	if (g_error_matches(ierror, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) {
		c->activate_installed = TRUE;
		g_clear_error(&ierror);
	} else if (ierror) {
		g_propagate_error(error, ierror);
		res = FALSE;
		goto free;
	}
	g_key_file_remove_key(key_file, "system", "activate-installed", NULL);

	c->system_variant_type = R_CONFIG_SYS_VARIANT_NONE;

	/* parse 'variant-dtb' key */
	dtbvariant = g_key_file_get_boolean(key_file, "system", "variant-dtb", &ierror);
	if (g_error_matches(ierror, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) {
		dtbvariant = FALSE;
		g_clear_error(&ierror);
	} else if (ierror) {
		g_propagate_error(error, ierror);
		res = FALSE;
		goto free;
	}
	g_key_file_remove_key(key_file, "system", "variant-dtb", NULL);
	if (dtbvariant)
		c->system_variant_type = R_CONFIG_SYS_VARIANT_DTB;

	/* parse 'variant-file' key */
	variant_data = key_file_consume_string(key_file, "system", "variant-file", &ierror);
	if (g_error_matches(ierror, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) {
		variant_data = NULL;
		g_clear_error(&ierror);
	} else if (ierror) {
		g_propagate_error(error, ierror);
		res = FALSE;
		goto free;
	}
	if (variant_data) {
		if (c->system_variant_type != R_CONFIG_SYS_VARIANT_NONE) {
			g_set_error(
					error,
					R_CONFIG_ERROR,
					R_CONFIG_ERROR_INVALID_FORMAT,
					"Only one of the keys 'variant-file', variant-dtb','variant-name' is allowed");
			res = FALSE;
			goto free;
		}

		c->system_variant_type = R_CONFIG_SYS_VARIANT_FILE;
		c->system_variant = variant_data;
	}

	/* parse 'variant-name' key */
	variant_data = key_file_consume_string(key_file, "system", "variant-name", &ierror);
	if (g_error_matches(ierror, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) {
		variant_data = NULL;
		g_clear_error(&ierror);
	} else if (ierror) {
		g_propagate_error(error, ierror);
		res = FALSE;
		goto free;
	}
	if (variant_data) {
		if (c->system_variant_type != R_CONFIG_SYS_VARIANT_NONE) {
			g_set_error(
					error,
					R_CONFIG_ERROR,
					R_CONFIG_ERROR_INVALID_FORMAT,
					"Only one of the keys 'variant-file', variant-dtb','variant-name' is allowed");
			res = FALSE;
			goto free;
		}

		c->system_variant_type = R_CONFIG_SYS_VARIANT_NAME;
		c->system_variant = variant_data;
	}

	c->statusfile_path = resolve_path(filename,
			key_file_consume_string(key_file, "system", "statusfile", NULL));
	if (!check_remaining_keys(key_file, "system", &ierror)) {
		g_propagate_error(error, ierror);
		res = FALSE;
		goto free;
	}
	g_key_file_remove_group(key_file, "system", NULL);

	/* parse [keyring] section */
	c->keyring_path = resolve_path(filename,
			key_file_consume_string(key_file, "keyring", "path", NULL));

	c->use_bundle_signing_time = g_key_file_get_boolean(key_file, "keyring", "use-bundle-signing-time", &ierror);
	if (g_error_matches(ierror, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND) ||
	    g_error_matches(ierror, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND)) {
		c->use_bundle_signing_time = FALSE;
		g_clear_error(&ierror);
	} else if (ierror) {
		g_propagate_error(error, ierror);
		res = FALSE;
		goto free;
	}
	g_key_file_remove_key(key_file, "keyring", "use-bundle-signing-time", NULL);

	if (!check_remaining_keys(key_file, "keyring", &ierror)) {
		g_propagate_error(error, ierror);
		res = FALSE;
		goto free;
	}
	g_key_file_remove_group(key_file, "keyring", NULL);

	/* parse [casync] section */
	c->store_path = key_file_consume_string(key_file, "casync", "storepath", NULL);
	if (!check_remaining_keys(key_file, "casync", &ierror)) {
		g_propagate_error(error, ierror);
		res = FALSE;
		goto free;
	}
	g_key_file_remove_group(key_file, "casync", NULL);

	/* parse [autoinstall] section */
	c->autoinstall_path = resolve_path(filename,
			key_file_consume_string(key_file, "autoinstall", "path", NULL));
	if (!check_remaining_keys(key_file, "autoinstall", &ierror)) {
		g_propagate_error(error, ierror);
		res = FALSE;
		goto free;
	}
	g_key_file_remove_group(key_file, "autoinstall", NULL);

	/* parse [handlers] section */
	c->systeminfo_handler = resolve_path(filename,
			key_file_consume_string(key_file, "handlers", "system-info", NULL));

	c->preinstall_handler = resolve_path(filename,
			key_file_consume_string(key_file, "handlers", "pre-install", NULL));

	c->postinstall_handler = resolve_path(filename,
			key_file_consume_string(key_file, "handlers", "post-install", NULL));
	if (!check_remaining_keys(key_file, "handlers", &ierror)) {
		g_propagate_error(error, ierror);
		res = FALSE;
		goto free;
	}
	g_key_file_remove_group(key_file, "handlers", NULL);

	/* parse [slot.*.#] sections */
	slots = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, r_free_slot);

	groups = g_key_file_get_groups(key_file, &group_count);
	for (gsize i = 0; i < group_count; i++) {
		RaucSlot *slot = g_new0(RaucSlot, 1);
		gchar **groupsplit;

		groupsplit = g_strsplit(groups[i], ".", -1);

		/* We treat sections starting with "slot." as slots */
		if (g_str_equal(groupsplit[0], RAUC_SLOT_PREFIX)) {
			gchar* value;

			/* Assure slot strings consist of 3 parts, delimited by dots */
			if (g_strv_length(groupsplit) != 3) {
				g_set_error(
						error,
						R_CONFIG_ERROR,
						R_CONFIG_ERROR_INVALID_FORMAT,
						"Invalid slot name format: %s", groups[i]);
				res = FALSE;
				goto free;
			}

			value = g_strconcat(groupsplit[1], ".", groupsplit[2], NULL);
			if (!value) {
				g_set_error(
						error,
						R_CONFIG_ERROR,
						R_CONFIG_ERROR_INVALID_FORMAT,
						"Invalid slot name");
				res = FALSE;
				goto free;
			}
			slot->name = g_intern_string(value);
			g_free(value);

			slot->description = key_file_consume_string(key_file, groups[i], "description", NULL);
			if (!slot->description)
				slot->description = g_strdup("");

			slot->sclass = g_intern_string(groupsplit[1]);

			value = resolve_path(filename,
					key_file_consume_string(key_file, groups[i], "device", &ierror));
			if (!value) {
				g_propagate_error(error, ierror);
				res = FALSE;
				goto free;
			}
			slot->device = value;

			value = key_file_consume_string(key_file, groups[i], "type", NULL);
			if (!value)
				value = g_strdup("raw");
			slot->type = value;

			value = key_file_consume_string(key_file, groups[i], "bootname", NULL);
			slot->bootname = value;

			slot->readonly = g_key_file_get_boolean(key_file, groups[i], "readonly", &ierror);
			if (g_error_matches(ierror, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) {
				slot->readonly = FALSE;
				g_clear_error(&ierror);
			} else if (ierror) {
				g_propagate_error(error, ierror);
				res = FALSE;
				goto free;
			}
			g_key_file_remove_key(key_file, groups[i], "readonly", NULL);

			slot->force_install_same = g_key_file_get_boolean(key_file, groups[i], "force-install-same", &ierror);
			if (g_error_matches(ierror, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) {
				g_clear_error(&ierror);
				/* try also deprecatet flag ignore-checksum */
				slot->force_install_same = g_key_file_get_boolean(key_file, groups[i], "ignore-checksum", &ierror);
				if (g_error_matches(ierror, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) {
					slot->force_install_same = FALSE;
					g_clear_error(&ierror);
				}
				else if (ierror) {
					g_propagate_error(error, ierror);
					res = FALSE;
					goto free;
				}
			}
			else if (ierror) {
				g_propagate_error(error, ierror);
				res = FALSE;
				goto free;
			}
			g_key_file_remove_key(key_file, groups[i], "force-install-same", NULL);
			g_key_file_remove_key(key_file, groups[i], "ignore-checksum", NULL);

			slot->extra_mount_opts = key_file_consume_string(key_file, groups[i], "extra-mount-opts", NULL);

			g_hash_table_insert(slots, (gchar*)slot->name, slot);
		}
		g_strfreev(groupsplit);
	}

	/* Add parent pointers */
	slotlist = g_hash_table_get_keys(slots);
	for (l = slotlist; l != NULL; l = l->next) {
		RaucSlot *s;
		g_autofree gchar* group_name = NULL;
		gchar* value;

		group_name = g_strconcat(RAUC_SLOT_PREFIX ".", l->data, NULL);
		value = key_file_consume_string(key_file, group_name, "parent", NULL);
		if (!value) {
			g_key_file_remove_group(key_file, group_name, NULL);
			continue;
		}

		s = g_hash_table_lookup(slots, value);
		if (!s) {
			g_set_error(
					error,
					R_CONFIG_ERROR,
					R_CONFIG_ERROR_PARENT,
					"Parent slot '%s' not found!", value);
			res = FALSE;
			goto free;
		}

		((RaucSlot*)g_hash_table_lookup(slots, l->data))->parent = s;


		if (!check_remaining_keys(key_file, group_name, &ierror)) {
			g_propagate_error(error, ierror);
			res = FALSE;
			goto free;
		}
		g_key_file_remove_group(key_file, group_name, NULL);
	}
	g_list_free(slotlist);

	c->slots = slots;

	if (!check_remaining_groups(key_file, &ierror)) {
		g_propagate_error(error, ierror);
		res = FALSE;
		goto free;
	}

	g_strfreev(groups);

	res = TRUE;
free:
	if (res)
		*config = g_steal_pointer(&c);
	else
		*config = NULL;
	return res;
}
コード例 #10
0
ファイル: config_file.c プロジェクト: ukleinek/rauc
static void status_file_get_slot_status(GKeyFile *key_file, const gchar *group, RaucSlotStatus *slotstatus)
{
	GError *ierror = NULL;
	gchar *digest;
	guint64 count;

	if (!g_key_file_has_group(key_file, group))
		g_debug("Group %s not found in key file.", group);

	g_free(slotstatus->bundle_compatible);
	g_free(slotstatus->bundle_version);
	g_free(slotstatus->bundle_description);
	g_free(slotstatus->bundle_build);
	g_free(slotstatus->status);
	g_clear_pointer(&slotstatus->checksum.digest, g_free);
	g_free(slotstatus->installed_timestamp);
	g_free(slotstatus->activated_timestamp);

	slotstatus->bundle_compatible = key_file_consume_string(key_file, group, "bundle.compatible", NULL);
	slotstatus->bundle_version = key_file_consume_string(key_file, group, "bundle.version", NULL);
	slotstatus->bundle_description = key_file_consume_string(key_file, group, "bundle.description", NULL);
	slotstatus->bundle_build = key_file_consume_string(key_file, group, "bundle.build", NULL);
	slotstatus->status = key_file_consume_string(key_file, group, "status", NULL);

	digest = key_file_consume_string(key_file, group, "sha256", NULL);
	if (digest) {
		slotstatus->checksum.type = G_CHECKSUM_SHA256;
		slotstatus->checksum.digest = digest;
		slotstatus->checksum.size = g_key_file_get_uint64(key_file, group, "size", NULL);
	}

	slotstatus->installed_timestamp = key_file_consume_string(key_file, group, "installed.timestamp", NULL);
	count = g_key_file_get_uint64(key_file, group, "installed.count", &ierror);
	if (g_error_matches(ierror, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE))
		g_message("Value of key \"installed.count\" in group [%s] "
				"is no valid unsigned integer - setting to zero.", group);
	else if (ierror && !g_error_matches(ierror, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND))
		g_message("Unexpected error while trying to read key \"installed.count\" in group [%s] "
				"- setting to zero: %s", group, ierror->message);
	g_clear_error(&ierror);
	if (count > G_MAXUINT32) {
		g_message("Value of key \"installed.count\" in group [%s] "
				"is greater than G_MAXUINT32 - setting to zero.", group);
		count = 0;
	}
	slotstatus->installed_count = count;

	slotstatus->activated_timestamp = key_file_consume_string(key_file, group, "activated.timestamp", NULL);
	count = g_key_file_get_uint64(key_file, group, "activated.count", &ierror);
	if (g_error_matches(ierror, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE))
		g_message("Value of key \"activated.count\" in group [%s] "
				"is no valid unsigned integer - setting to zero.", group);
	else if (ierror && !g_error_matches(ierror, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND))
		g_message("Unexpected error while trying to read key \"activated.count\" in group [%s] "
				"- setting to zero: %s", group, ierror->message);
	g_clear_error(&ierror);
	if (count > G_MAXUINT32) {
		g_message("Value of key \"activated.count\" in group [%s] "
				"is greater than G_MAXUINT32 - setting to zero.", group);
		count = 0;
	}
	slotstatus->activated_count = count;
}
コード例 #11
0
ファイル: preferences.c プロジェクト: arievanleyen/xpen
// load preferences from file
void load_preferences (char *filepad) {
    char txt[100];
    GString *label = g_string_new_len("", 20);
    int i, p, choice = -1;
    GdkDevice *device, *nodevice;
    GList *list;
    TS keus;

    if (settings == NULL) settings = g_key_file_new();
    if (g_key_file_load_from_file(settings, filepad, G_KEY_FILE_NONE, NULL) == FALSE) {	// set defaults
        gchar *data;
        gsize len;

		// default settings when xpen.cfg not found
		g_key_file_set_integer (settings, "display", "x", -1);
		g_key_file_set_integer (settings, "display", "y", -1);
		g_key_file_set_integer (settings, "display", "lx", -1);
		g_key_file_set_integer (settings, "display", "ly", -1);
		g_key_file_set_integer (settings, "display", "dx", 300);
		g_key_file_set_integer (settings, "display", "dy", 400);
        g_key_file_set_double (settings, "display", "opacity", 0.7);
        g_key_file_set_string (settings, "display", "font", gtk_font_button_get_font_name(GTK_FONT_BUTTON(fontbutton)));
        g_key_file_set_boolean (settings, "display", "tooltips", TRUE);
        g_key_file_set_string (settings, "reader", "device", "stylus");
        g_key_file_set_integer (settings, "reader", "speed", 6);
        g_key_file_set_uint64 (settings, "reader", "lijnkleur", 0x514942);
        g_key_file_set_uint64 (settings, "reader", "rasterkleur", 0xAB8C6D);
        g_key_file_set_boolean (settings, "reader", "raster", TRUE);
        g_key_file_set_boolean (settings, "reader", "speech", FALSE);
        g_key_file_set_string (settings, "reader", "command", "aplay -q");
        g_key_file_set_integer (settings, "reader", "voice", 0);
        g_key_file_set_integer (settings, "keys", "paste0", 37);
        g_key_file_set_integer (settings, "keys", "paste1", 55);
        g_key_file_set_integer (settings, "keys", "backspace0", 0);
        g_key_file_set_integer (settings, "keys", "backspace1", 22);

        g_key_file_set_integer (settings, "GB1", "key", 0);
        g_key_file_set_integer (settings, "GB1", "mode", 0);
        g_key_file_set_integer (settings, "BIG5", "key", CTRL_R);
        g_key_file_set_integer (settings, "BIG5", "mode", BIG5);
        g_key_file_set_integer (settings, "DIGITS", "key", ALT_L);
        g_key_file_set_integer (settings, "DIGITS", "mode", DIGITS);
        g_key_file_set_integer (settings, "LOWERCASE", "key", ALT_L);
        g_key_file_set_integer (settings, "LOWERCASE", "mode", LOWERCASE);
        g_key_file_set_integer (settings, "UPPERCASE", "key", 0);
        g_key_file_set_integer (settings, "UPPERCASE", "mode", 0);
        g_key_file_set_integer (settings, "PUNC", "key", 0);
        g_key_file_set_integer (settings, "PUNC", "mode", 0);
        g_key_file_set_integer (settings, "DEFAULT", "key", ESC);
        g_key_file_set_integer (settings, "DEFAULT", "mode", (GB1|GB2|DIGITS));

		g_key_file_set_string (settings, "keydefs", "label1", "Control-Left");
		g_key_file_set_integer (settings, "keydefs", "key1", CTRL_L);
		g_key_file_set_string (settings, "keydefs", "label2", "Control-Right");
		g_key_file_set_integer (settings, "keydefs", "key2", CTRL_R);
		g_key_file_set_string (settings, "keydefs", "label3", "Shift-Left");
		g_key_file_set_integer (settings, "keydefs", "key3", SHIFT_L);
		g_key_file_set_string (settings, "keydefs", "label4", "Shift-Right");
		g_key_file_set_integer (settings, "keydefs", "key4", SHIFT_R);
		g_key_file_set_string (settings, "keydefs", "label5", "Alt-Left");
		g_key_file_set_integer (settings, "keydefs", "key5", ALT_L);
		g_key_file_set_string (settings, "keydefs", "label6", "Alt-Right");
		g_key_file_set_integer (settings, "keydefs", "key6", ALT_R);
		g_key_file_set_string (settings, "keydefs", "label7", "Escape");
		g_key_file_set_integer (settings, "keydefs", "key7", ESC);
		g_key_file_set_string (settings, "keydefs", "label8", "Caps-Lock");
		g_key_file_set_integer (settings, "keydefs", "key8", CAPS);
		g_key_file_set_string (settings, "keydefs", "label9", "Num-Lock");
		g_key_file_set_integer (settings, "keydefs", "key9", NUMS);
		g_key_file_set_string (settings, "keydefs", "label10", "Scroll-Lock");
		g_key_file_set_integer (settings, "keydefs", "key10", SCROLLS);
		g_key_file_set_string (settings, "keydefs", "label11", "Pause/Break");
		g_key_file_set_integer (settings, "keydefs", "key11", PAUSE);
		g_key_file_set_string (settings, "keydefs", "label12", "not set");
		g_key_file_set_integer (settings, "keydefs", "key12", 0);
		g_key_file_set_string (settings, "keydefs", "label13", "not set");
		g_key_file_set_integer (settings, "keydefs", "key13", 0);

        data = g_key_file_to_data (settings, &len, NULL);	// save defaults
        g_file_set_contents (filepad, data, len, NULL);
        g_free(data);
    }
    // fill the preferences structure
    conf.x 				= g_key_file_get_integer (settings, "display", "x", NULL);
    conf.y 				= g_key_file_get_integer (settings, "display", "y", NULL);
    conf.lx 			= g_key_file_get_integer (settings, "display", "lx", NULL);
    conf.ly 			= g_key_file_get_integer (settings, "display", "ly", NULL);
    conf.dx 			= g_key_file_get_integer (settings, "display", "dx", NULL);
    conf.dy 			= g_key_file_get_integer (settings, "display", "dy", NULL);
    conf.opacity 		= g_key_file_get_double (settings, "display", "opacity", NULL);
    conf.tips			= g_key_file_get_boolean (settings, "display", "tooltips", NULL);
    conf.font 			= g_key_file_get_string (settings, "display", "font", NULL);
    conf.device 		= g_key_file_get_string (settings, "reader", "device", NULL);
    conf.speed 			= g_key_file_get_integer (settings, "reader", "speed", NULL);
    conf.lijnkleur		= g_key_file_get_uint64 (settings, "reader", "lijnkleur", NULL);
    conf.rasterkleur	= g_key_file_get_uint64 (settings, "reader", "rasterkleur", NULL);
    conf.raster 		= g_key_file_get_boolean (settings, "reader", "raster", NULL);
	conf.speech 		= g_key_file_get_boolean (settings, "reader", "speech", NULL);
	conf.voice	 		= g_key_file_get_integer (settings, "reader", "voice", NULL);
    conf.paste[0] 		= g_key_file_get_integer (settings, "keys", "paste0", NULL);
    conf.paste[1] 		= g_key_file_get_integer (settings, "keys", "paste1", NULL);
    conf.backspace[0]	= g_key_file_get_integer (settings, "keys", "backspace0", NULL);
    conf.backspace[1]	= g_key_file_get_integer (settings, "keys", "backspace1", NULL);
    conf.keymode[0].key	= g_key_file_get_integer (settings, "GB1", "key", NULL);
	conf.keymode[0].mode	= g_key_file_get_integer (settings, "GB1", "mode", NULL);
    conf.keymode[1].key	= g_key_file_get_integer (settings, "BIG5", "key", NULL);
	conf.keymode[1].mode	= g_key_file_get_integer (settings, "BIG5", "mode", NULL);
	conf.keymode[2].key	= g_key_file_get_integer (settings, "DIGITS", "key", NULL);
	conf.keymode[2].mode	= g_key_file_get_integer (settings, "DIGITS", "mode", NULL);
    conf.keymode[3].key	= g_key_file_get_integer (settings, "LOWERCASE", "key", NULL);
	conf.keymode[3].mode	= g_key_file_get_integer (settings, "LOWERCASE", "mode", NULL);
    conf.keymode[4].key	= g_key_file_get_integer (settings, "UPPERCASE", "key", NULL);
	conf.keymode[4].mode	= g_key_file_get_integer (settings, "UPPERCASE", "mode", NULL);
    conf.keymode[5].key	= g_key_file_get_integer (settings, "PUNC", "key", NULL);
	conf.keymode[5].mode	= g_key_file_get_integer (settings, "PUNC", "mode", NULL);
    conf.keymode[6].key	= g_key_file_get_integer (settings, "DEFAULT", "key", NULL);
	conf.keymode[6].mode	= g_key_file_get_integer (settings, "DEFAULT", "mode", NULL);

	// set speech + command
	GTK_TOGGLE_BUTTON(checkbutton9)->active = conf.speech;

	gtk_combo_box_set_active(GTK_COMBO_BOX(combobox1), conf.voice);

	for (i=0; i<13; i++) {
		g_string_sprintf(label, "key%d", i+1);
		conf.defkey[i].key = g_key_file_get_integer (settings, "keydefs", label->str, NULL);
		g_string_sprintf(label, "label%d", i+1);
		conf.defkey[i].label = g_key_file_get_string (settings, "keydefs", label->str, NULL);
	}

	// start setting all widgets with the values from the configuration (conf)

	// set tooltips
    GTK_TOGGLE_BUTTON(checkbutton8)->active = conf.tips;

	// set the 13 buttons/entries in preferences
	for (i=0; i<13; i++) {
		if (conf.defkey[i].key > 0) {
			g_string_sprintf(label, "key = %d", conf.defkey[i].key);
			gtk_button_set_label(GTK_BUTTON(conf.defkey[i].button), label->str);
			gtk_entry_set_text(GTK_ENTRY(conf.defkey[i].entry), conf.defkey[i].label);
		} else {
			gtk_button_set_label(GTK_BUTTON(conf.defkey[i].button), "not set");
			gtk_entry_set_text(GTK_ENTRY(conf.defkey[i].entry), "");
		}
	}
	g_string_free(label, TRUE);

	// set the default recognition mode
	mode = conf.keymode[6].mode;
	keus = (mode & BIG5) ? Traditional : Simplified;
	selecteer(keus);

	// set the labels of the hotkeys (preferences)
	for (i=0; i<7; i++) {
		bool found;

		hotkey[conf.keymode[i].key] |= conf.keymode[i].mode;		// set the hotkeys
		found = FALSE;
		for (p=0; p<13; p++) {
			if (conf.defkey[p].key > 0) {
				if (conf.keymode[i].key == conf.defkey[p].key) {
					strcpy(txt, conf.defkey[p].label);
					found = TRUE;
					break;
				}
			}
		}
		if (found == FALSE) {
			if (conf.keymode[i].key > 0)
				sprintf(txt, "key = %d", conf.keymode[i].key);
			else
				strcpy(txt, "not set");
		}
		gtk_button_set_label(GTK_BUTTON(modebits[i].button), txt);

		// set the default checkboxes (preferences)
		if (conf.keymode[6].mode & GB1)
			gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(modebits[0].check), TRUE);
		if (conf.keymode[6].mode & BIG5)
			gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(modebits[1].check), TRUE);
		if (conf.keymode[6].mode & DIGITS)
			gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(modebits[2].check), TRUE);
		if (conf.keymode[6].mode & LOWERCASE)
			gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(modebits[3].check), TRUE);
		if (conf.keymode[6].mode & UPPERCASE)
			gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(modebits[4].check), TRUE);
		if (conf.keymode[6].mode & PUNC)
			gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(modebits[5].check), TRUE);
	}

    // fill combobox with input-devices
    list = gdk_devices_list();
    device = (GdkDevice *) list->data;	// default device
    nodevice = NULL;
    for (p=0; list->next; p++) {
        strcpy(txt, gdk_device_get_name((GdkDevice *)list->data));
        gtk_combo_box_append_text(GTK_COMBO_BOX(combo), txt);
        if (strstr(txt, conf.device)) {
            device = (GdkDevice *) list->data;
            choice = p;
        }
        nodevice = (GdkDevice *) list->data;
        list = list->next;
    }
    if (choice == -1) {		// prefered device not found
		choice = p-1;
		device = nodevice;
    }

    //g_list_free(list);
    gtk_combo_box_set_active(GTK_COMBO_BOX(combo), choice);
    gdk_device_set_source (device, GDK_SOURCE_PEN);
    gdk_device_set_mode(device, GDK_MODE_SCREEN);

    // set line color
    lijnkleur.pixel = conf.lijnkleur;
    sprintf(txt, "#%.6X", lijnkleur.pixel);
    gdk_color_parse(txt, &lijnkleur);
    gtk_color_button_set_color(GTK_COLOR_BUTTON(colorbutton1),  &lijnkleur);

    // set raster color
    rasterkleur.pixel = conf.rasterkleur;
    sprintf(txt, "#%.6X", rasterkleur.pixel);
    gdk_color_parse(txt, &rasterkleur);
    gtk_color_button_set_color(GTK_COLOR_BUTTON(colorbutton2),  &rasterkleur);

    // set raster on/off check button
    GTK_TOGGLE_BUTTON(checkbutton1)->active = conf.raster;

    // set main window opacity slider
    gtk_adjustment_set_value(opacity, conf.opacity);

    // set the 9 candidate buttons with a default font
    for (i=0; i< 9; i++) {
		PangoFontDescription *pfont;
    	pfont = pango_font_description_from_string(conf.font);
        gtk_widget_modify_font (GTK_WIDGET(knop[i]), pfont );
        pango_font_description_free(pfont);
    }

    // set the font selection button with the font title
    gtk_font_button_set_font_name(GTK_FONT_BUTTON(fontbutton), conf.font);

    // set the recognize speed slider
    gtk_adjustment_set_value(speed, conf.speed);
    WTSetSpeed(conf.speed);

    // set the default paste and backspace entry fields
    gtk_entry_set_text(GTK_ENTRY(entry1), key2string(conf.paste[1], conf.paste[0]));
    gtk_entry_set_text(GTK_ENTRY(entry2), key2string(conf.backspace[1], conf.backspace[0]));
}