[retro-gtk/auto-goodness: 35/36] core-descriptor: Use auto cleanups and throws where possible
- From: Adrien Plazas <aplazas src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [retro-gtk/auto-goodness: 35/36] core-descriptor: Use auto cleanups and throws where possible
- Date: Mon, 23 Mar 2020 21:28:16 +0000 (UTC)
commit 3af9a3d8624eb44378be5d2e77f24784bea51e24
Author: Adrien Plazas <kekun plazas laposte net>
Date: Mon Mar 23 21:47:03 2020 +0100
core-descriptor: Use auto cleanups and throws where possible
retro-gtk/retro-core-descriptor.c | 332 ++++++++++----------------------------
1 file changed, 84 insertions(+), 248 deletions(-)
---
diff --git a/retro-gtk/retro-core-descriptor.c b/retro-gtk/retro-core-descriptor.c
index 5e3dae2..ce8b704 100644
--- a/retro-gtk/retro-core-descriptor.c
+++ b/retro-gtk/retro-core-descriptor.c
@@ -2,6 +2,8 @@
#include "retro-core-descriptor.h"
+#include "retro-error-private.h"
+
struct _RetroCoreDescriptor
{
GObject parent_instance;
@@ -73,17 +75,14 @@ has_group_prefixed (RetroCoreDescriptor *self,
const gchar *group_prefix,
const gchar *group_suffix)
{
- gchar *group;
- gboolean result;
+ g_autofree gchar *group = NULL;
g_assert (group_prefix != NULL);
g_assert (group_suffix != NULL);
group = g_strconcat (group_prefix, group_suffix, NULL);
- result = g_key_file_has_group (self->key_file, group);
- g_free (group);
- return result;
+ return g_key_file_has_group (self->key_file, group);
}
static gboolean
@@ -93,9 +92,9 @@ has_key_prefixed (RetroCoreDescriptor *self,
const gchar *key,
GError **error)
{
- gchar *group;
+ g_autofree gchar *group = NULL;
gboolean result;
- GError *tmp_error = NULL;
+ g_autoptr (RetroError) tmp_error = NULL;
g_assert (group_prefix != NULL);
g_assert (group_suffix != NULL);
@@ -106,14 +105,7 @@ has_key_prefixed (RetroCoreDescriptor *self,
group,
key,
&tmp_error);
- if (G_UNLIKELY (tmp_error != NULL)) {
- g_free (group);
- g_propagate_error (error, tmp_error);
-
- return FALSE;
- }
-
- g_free (group);
+ retro_propagate_val_if_error (error, tmp_error, FALSE);
return result;
}
@@ -125,9 +117,9 @@ get_string_prefixed (RetroCoreDescriptor *self,
const gchar *key,
GError **error)
{
- gchar *group;
- gchar *result;
- GError *tmp_error = NULL;
+ g_autofree gchar *group = NULL;
+ g_autofree gchar *result = NULL;
+ g_autoptr (RetroError) tmp_error = NULL;
g_assert (group_prefix != NULL);
g_assert (group_suffix != NULL);
@@ -139,16 +131,9 @@ get_string_prefixed (RetroCoreDescriptor *self,
group,
key,
&tmp_error);
- if (G_UNLIKELY (tmp_error != NULL)) {
- g_free (group);
- g_propagate_error (error, tmp_error);
+ retro_propagate_val_if_error (error, tmp_error, NULL);
- return NULL;
- }
-
- g_free (group);
-
- return result;
+ return g_steal_pointer (&result);
}
static gchar **
@@ -159,9 +144,9 @@ get_string_list_prefixed (RetroCoreDescriptor *self,
gsize *length,
GError **error)
{
- gchar *group;
- gchar **result;
- GError *tmp_error = NULL;
+ g_autofree gchar *group = NULL;
+ g_auto (GStrv) result = NULL;
+ g_autoptr (RetroError) tmp_error = NULL;
g_assert (group_prefix != NULL);
g_assert (group_suffix != NULL);
@@ -174,16 +159,9 @@ get_string_list_prefixed (RetroCoreDescriptor *self,
key,
length,
&tmp_error);
- if (G_UNLIKELY (tmp_error != NULL)) {
- g_free (group);
- g_propagate_error (error, tmp_error);
+ retro_propagate_val_if_error (error, tmp_error, NULL);
- return NULL;
- }
-
- g_free (group);
-
- return result;
+ return g_steal_pointer (&result);
}
static void
@@ -193,7 +171,7 @@ check_has_required_key (RetroCoreDescriptor *self,
GError **error)
{
gboolean has_key;
- GError *tmp_error = NULL;
+ g_autoptr (RetroError) tmp_error = NULL;
g_assert (group != NULL);
g_assert (key != NULL);
@@ -202,68 +180,44 @@ check_has_required_key (RetroCoreDescriptor *self,
RETRO_CORE_DESCRIPTOR_LIBRETRO_GROUP,
RETRO_CORE_DESCRIPTOR_TYPE_KEY,
&tmp_error);
- if (G_UNLIKELY (tmp_error != NULL)) {
- g_propagate_error (error, tmp_error);
+ retro_propagate_if_error (error, tmp_error);
- return;
- }
-
- if (!has_key)
- g_set_error (error,
- RETRO_CORE_DESCRIPTOR_ERROR,
- RETRO_CORE_DESCRIPTOR_ERROR_REQUIRED_KEY_NOT_FOUND,
- "%s isn't a valid Libretro core descriptor: "
- "required key %s not found in group [%s].",
- self->filename,
- key,
- group);
+ retro_throw_if_fail (error,
+ has_key,
+ RETRO_CORE_DESCRIPTOR_ERROR, RETRO_CORE_DESCRIPTOR_ERROR_REQUIRED_KEY_NOT_FOUND,
+ "%s isn't a valid Libretro core descriptor: required key %s not found in group [%s].",
+ self->filename, key, group);
}
static void
check_libretro_group (RetroCoreDescriptor *self,
GError **error)
{
- GError *tmp_error = NULL;
+ g_autoptr (RetroError) tmp_error = NULL;
check_has_required_key (self,
RETRO_CORE_DESCRIPTOR_LIBRETRO_GROUP,
RETRO_CORE_DESCRIPTOR_TYPE_KEY,
&tmp_error);
- if (G_UNLIKELY (tmp_error != NULL)) {
- g_propagate_error (error, tmp_error);
-
- return;
- }
+ retro_propagate_if_error (error, tmp_error);
check_has_required_key (self,
RETRO_CORE_DESCRIPTOR_LIBRETRO_GROUP,
RETRO_CORE_DESCRIPTOR_NAME_KEY,
&tmp_error);
- if (G_UNLIKELY (tmp_error != NULL)) {
- g_propagate_error (error, tmp_error);
-
- return;
- }
+ retro_propagate_if_error (error, tmp_error);
check_has_required_key (self,
RETRO_CORE_DESCRIPTOR_LIBRETRO_GROUP,
RETRO_CORE_DESCRIPTOR_MODULE_KEY,
&tmp_error);
- if (G_UNLIKELY (tmp_error != NULL)) {
- g_propagate_error (error, tmp_error);
-
- return;
- }
+ retro_propagate_if_error (error, tmp_error);
check_has_required_key (self,
RETRO_CORE_DESCRIPTOR_LIBRETRO_GROUP,
RETRO_CORE_DESCRIPTOR_LIBRETRO_VERSION_KEY,
&tmp_error);
- if (G_UNLIKELY (tmp_error != NULL)) {
- g_propagate_error (error, tmp_error);
-
- return;
- }
+ retro_propagate_if_error (error, tmp_error);
}
static void
@@ -272,10 +226,8 @@ check_platform_group (RetroCoreDescriptor *self,
GError **error)
{
gboolean has_key;
- gchar **firmwares;
- gchar **firmware_p;
- gchar *firmware_group;
- GError *tmp_error = NULL;
+ g_auto (GStrv) firmwares = NULL;
+ g_autoptr (RetroError) tmp_error = NULL;
g_assert (group != NULL);
@@ -288,11 +240,7 @@ check_platform_group (RetroCoreDescriptor *self,
group,
RETRO_CORE_DESCRIPTOR_PLATFORM_FIRMWARES_KEY,
&tmp_error);
- if (G_UNLIKELY (tmp_error != NULL)) {
- g_propagate_error (error, tmp_error);
-
- return;
- }
+ retro_propagate_if_error (error, tmp_error);
if (!has_key)
return;
@@ -302,34 +250,16 @@ check_platform_group (RetroCoreDescriptor *self,
RETRO_CORE_DESCRIPTOR_PLATFORM_FIRMWARES_KEY,
NULL,
&tmp_error);
- if (G_UNLIKELY (tmp_error != NULL)) {
- g_propagate_error (error, tmp_error);
-
- return;
+ retro_propagate_if_error (error, tmp_error);
+
+ for (GStrv firmware_p = firmwares; *firmware_p != NULL; firmware_p++) {
+ g_autofree gchar *firmware_group = g_strconcat (RETRO_CORE_DESCRIPTOR_FIRMWARE_GROUP_PREFIX,
*firmware_p, NULL);
+ retro_throw_if_fail (error,
+ g_key_file_has_group (self->key_file, firmware_group),
+ RETRO_CORE_DESCRIPTOR_ERROR, RETRO_CORE_DESCRIPTOR_ERROR_FIRMWARE_NOT_FOUND,
+ "%s isn't a valid Libretro core descriptor: [%s] mentioned in [%s] not found.",
+ self->filename, firmware_group, group);
}
-
- for (firmware_p = firmwares; *firmware_p != NULL; firmware_p++) {
- firmware_group = g_strconcat (RETRO_CORE_DESCRIPTOR_FIRMWARE_GROUP_PREFIX, *firmware_p, NULL);
- if (!g_key_file_has_group (self->key_file, firmware_group)) {
- g_set_error (error,
- RETRO_CORE_DESCRIPTOR_ERROR,
- RETRO_CORE_DESCRIPTOR_ERROR_FIRMWARE_NOT_FOUND,
- "%s isn't a valid Libretro core descriptor:"
- "[%s] mentioned in [%s] not found.",
- self->filename,
- firmware_group,
- group);
-
- g_free (firmware_group);
- g_strfreev (firmwares);
-
- return;
- }
-
- g_free (firmware_group);
- }
-
- g_strfreev (firmwares);
}
static void
@@ -337,7 +267,7 @@ check_firmware_group (RetroCoreDescriptor *self,
const gchar *group,
GError **error)
{
- GError *tmp_error = NULL;
+ g_autoptr (RetroError) tmp_error = NULL;
g_assert (group != NULL);
@@ -345,21 +275,13 @@ check_firmware_group (RetroCoreDescriptor *self,
group,
RETRO_CORE_DESCRIPTOR_FIRMWARE_PATH_KEY,
&tmp_error);
- if (G_UNLIKELY (tmp_error != NULL)) {
- g_propagate_error (error, tmp_error);
-
- return;
- }
+ retro_propagate_if_error (error, tmp_error);
check_has_required_key (self,
group,
RETRO_CORE_DESCRIPTOR_FIRMWARE_MANDATORY_KEY,
&tmp_error);
- if (G_UNLIKELY (tmp_error != NULL)) {
- g_propagate_error (error, tmp_error);
-
- return;
- }
+ retro_propagate_if_error (error, tmp_error);
}
/* Public */
@@ -378,7 +300,7 @@ retro_core_descriptor_has_icon (RetroCoreDescriptor *self,
GError **error)
{
gboolean has_icon;
- GError *tmp_error = NULL;
+ g_autoptr (RetroError) tmp_error = NULL;
g_return_val_if_fail (RETRO_IS_CORE_DESCRIPTOR (self), FALSE);
@@ -386,11 +308,7 @@ retro_core_descriptor_has_icon (RetroCoreDescriptor *self,
RETRO_CORE_DESCRIPTOR_LIBRETRO_GROUP,
RETRO_CORE_DESCRIPTOR_ICON_KEY,
&tmp_error);
- if (G_UNLIKELY (tmp_error != NULL)) {
- g_propagate_error (error, tmp_error);
-
- return FALSE;
- }
+ retro_propagate_val_if_error (error, tmp_error, FALSE);
return has_icon;
}
@@ -406,16 +324,13 @@ retro_core_descriptor_has_icon (RetroCoreDescriptor *self,
gchar *
retro_core_descriptor_get_uri (RetroCoreDescriptor *self)
{
- gchar *result;
- GFile *file;
+ g_autoptr (GFile) file = NULL;
g_return_val_if_fail (RETRO_IS_CORE_DESCRIPTOR (self), NULL);
file = g_file_new_for_path (self->filename);
- result = g_file_get_uri (file);
- g_object_unref (file);
- return result;
+ return g_file_get_uri (file);
}
/**
@@ -447,9 +362,8 @@ gboolean
retro_core_descriptor_get_is_game (RetroCoreDescriptor *self,
GError **error)
{
- gchar *type;
- gboolean is_game;
- GError *tmp_error = NULL;
+ g_autofree gchar *type = NULL;
+ g_autoptr (RetroError) tmp_error = NULL;
g_return_val_if_fail (RETRO_IS_CORE_DESCRIPTOR (self), FALSE);
@@ -457,16 +371,9 @@ retro_core_descriptor_get_is_game (RetroCoreDescriptor *self,
RETRO_CORE_DESCRIPTOR_LIBRETRO_GROUP,
RETRO_CORE_DESCRIPTOR_TYPE_KEY,
&tmp_error);
- if (G_UNLIKELY (tmp_error != NULL)) {
- g_propagate_error (error, tmp_error);
-
- return FALSE;
- }
+ retro_propagate_val_if_error (error, tmp_error, FALSE);
- is_game = g_strcmp0 (type, RETRO_CORE_DESCRIPTOR_TYPE_GAME) == 0;
- g_free (type);
-
- return is_game;
+ return g_strcmp0 (type, RETRO_CORE_DESCRIPTOR_TYPE_GAME) == 0;
}
/**
@@ -482,9 +389,8 @@ gboolean
retro_core_descriptor_get_is_emulator (RetroCoreDescriptor *self,
GError **error)
{
- gchar *type;
- gboolean is_game;
- GError *tmp_error = NULL;
+ g_autofree gchar *type = NULL;
+ g_autoptr (RetroError) tmp_error = NULL;
g_return_val_if_fail (RETRO_IS_CORE_DESCRIPTOR (self), FALSE);
@@ -492,16 +398,9 @@ retro_core_descriptor_get_is_emulator (RetroCoreDescriptor *self,
RETRO_CORE_DESCRIPTOR_LIBRETRO_GROUP,
RETRO_CORE_DESCRIPTOR_TYPE_KEY,
&tmp_error);
- if (G_UNLIKELY (tmp_error != NULL)) {
- g_propagate_error (error, tmp_error);
-
- return FALSE;
- }
+ retro_propagate_val_if_error (error, tmp_error, FALSE);
- is_game = g_strcmp0 (type, RETRO_CORE_DESCRIPTOR_TYPE_EMULATOR) == 0;
- g_free (type);
-
- return is_game;
+ return g_strcmp0 (type, RETRO_CORE_DESCRIPTOR_TYPE_EMULATOR) == 0;
}
/**
@@ -536,9 +435,8 @@ GIcon *
retro_core_descriptor_get_icon (RetroCoreDescriptor *self,
GError **error)
{
- gchar *icon_name;
- GIcon *icon;
- GError *tmp_error = NULL;
+ g_autofree gchar *icon_name = NULL;
+ g_autoptr (RetroError) tmp_error = NULL;
g_return_val_if_fail (RETRO_IS_CORE_DESCRIPTOR (self), NULL);
@@ -546,16 +444,9 @@ retro_core_descriptor_get_icon (RetroCoreDescriptor *self,
RETRO_CORE_DESCRIPTOR_LIBRETRO_GROUP,
RETRO_CORE_DESCRIPTOR_ICON_KEY,
&tmp_error);
- if (G_UNLIKELY (tmp_error != NULL)) {
- g_propagate_error (error, tmp_error);
-
- return NULL;
- }
-
- icon = G_ICON (g_themed_icon_new (icon_name));
- g_free (icon_name);
+ retro_propagate_val_if_error (error, tmp_error, NULL);
- return icon;
+ return G_ICON (g_themed_icon_new (icon_name));
}
/**
@@ -592,41 +483,27 @@ GFile *
retro_core_descriptor_get_module_file (RetroCoreDescriptor *self,
GError **error)
{
- GFile *file;
- GFile *dir;
- gchar *module;
- GFile *module_file;
- GError *tmp_error = NULL;
+ g_autoptr (GFile) file = NULL;
+ g_autoptr (GFile) dir = NULL;
+ g_autofree gchar *module = NULL;
+ g_autoptr (GFile) module_file = NULL;
+ g_autoptr (RetroError) tmp_error = NULL;
g_return_val_if_fail (RETRO_IS_CORE_DESCRIPTOR (self), NULL);
file = g_file_new_for_path (self->filename);
dir = g_file_get_parent (file);
- g_object_unref (file);
if (dir == NULL)
return NULL;
module = retro_core_descriptor_get_module (self, &tmp_error);
- if (G_UNLIKELY (tmp_error != NULL)) {
- g_propagate_error (error, tmp_error);
- g_object_unref (dir);
-
- return NULL;
- }
+ retro_propagate_val_if_error (error, tmp_error, NULL);
module_file = g_file_get_child (dir, module);
- if (!g_file_query_exists (module_file, NULL)) {
- g_object_unref (dir);
- g_free (module);
- g_object_unref (module_file);
-
+ if (!g_file_query_exists (module_file, NULL))
return NULL;
- }
- g_object_unref (dir);
- g_free (module);
-
- return module_file;
+ return g_steal_pointer (&module_file);
}
/**
@@ -850,9 +727,9 @@ retro_core_descriptor_get_is_firmware_mandatory (RetroCoreDescriptor *self,
const gchar *firmware,
GError **error)
{
- gchar *group;
+ g_autofree gchar *group = NULL;
gboolean result;
- GError *tmp_error = NULL;
+ g_autoptr (RetroError) tmp_error = NULL;
g_return_val_if_fail (RETRO_IS_CORE_DESCRIPTOR (self), FALSE);
g_return_val_if_fail (firmware != NULL, FALSE);
@@ -862,14 +739,7 @@ retro_core_descriptor_get_is_firmware_mandatory (RetroCoreDescriptor *self,
group,
RETRO_CORE_DESCRIPTOR_FIRMWARE_MANDATORY_KEY,
&tmp_error);
- if (G_UNLIKELY (tmp_error != NULL)) {
- g_free (group);
- g_propagate_error (error, tmp_error);
-
- return FALSE;
- }
-
- g_free (group);
+ retro_propagate_val_if_error (error, tmp_error, FALSE);
return result;
}
@@ -891,9 +761,9 @@ retro_core_descriptor_get_platform_supports_mime_types (RetroCoreDescriptor *se
const gchar * const *mime_types,
GError **error)
{
- gchar **supported_mime_types;
+ g_auto (GStrv) supported_mime_types = NULL;
gsize supported_mime_types_length;
- GError *tmp_error = NULL;
+ g_autoptr (RetroError) tmp_error = NULL;
g_return_val_if_fail (RETRO_IS_CORE_DESCRIPTOR (self), FALSE);
g_return_val_if_fail (platform != NULL, FALSE);
@@ -904,21 +774,12 @@ retro_core_descriptor_get_platform_supports_mime_types (RetroCoreDescriptor *se
platform,
&supported_mime_types_length,
&tmp_error);
- if (G_UNLIKELY (tmp_error != NULL)) {
- g_propagate_error (error, tmp_error);
-
- return FALSE;
- }
+ retro_propagate_val_if_error (error, tmp_error, FALSE);
for (; *mime_types != NULL; mime_types++)
if (!g_strv_contains ((const char * const *) supported_mime_types,
- *mime_types)) {
- g_strfreev (supported_mime_types);
-
+ *mime_types))
return FALSE;
- }
-
- g_strfreev (supported_mime_types);
return TRUE;
}
@@ -936,11 +797,10 @@ RetroCoreDescriptor *
retro_core_descriptor_new (const gchar *filename,
GError **error)
{
- RetroCoreDescriptor *self;
- gchar ** groups;
+ g_autoptr (RetroCoreDescriptor) self = NULL;
+ g_auto (GStrv) groups = NULL;
gsize groups_length;
- gsize i;
- GError *tmp_error = NULL;
+ g_autoptr (RetroError) tmp_error = NULL;
g_return_val_if_fail (filename != NULL, NULL);
@@ -951,48 +811,24 @@ retro_core_descriptor_new (const gchar *filename,
filename,
G_KEY_FILE_NONE,
&tmp_error);
- if (G_UNLIKELY (tmp_error != NULL)) {
- g_object_unref (self);
- g_propagate_error (error, tmp_error);
-
- return NULL;
- }
+ retro_propagate_val_if_error (error, tmp_error, NULL);
check_libretro_group (self, &tmp_error);
- if (G_UNLIKELY (tmp_error != NULL)) {
- g_object_unref (self);
- g_propagate_error (error, tmp_error);
-
- return NULL;
- }
+ retro_propagate_val_if_error (error, tmp_error, NULL);
groups = g_key_file_get_groups (self->key_file, &groups_length);
- for (i = 0; i < groups_length; i++) {
+ for (gsize i = 0; i < groups_length; i++) {
if (g_str_has_prefix (groups[i],
RETRO_CORE_DESCRIPTOR_PLATFORM_GROUP_PREFIX)) {
check_platform_group (self, groups[i], &tmp_error);
- if (G_UNLIKELY (tmp_error != NULL)) {
- g_strfreev (groups);
- g_object_unref (self);
- g_propagate_error (error, tmp_error);
-
- return NULL;
- }
+ retro_propagate_val_if_error (error, tmp_error, NULL);
}
else if (g_str_has_prefix (groups[i],
RETRO_CORE_DESCRIPTOR_FIRMWARE_GROUP_PREFIX)) {
check_firmware_group (self, groups[i], &tmp_error);
- if (G_UNLIKELY (tmp_error != NULL)) {
- g_strfreev (groups);
- g_object_unref (self);
- g_propagate_error (error, tmp_error);
-
- return NULL;
- }
+ retro_propagate_val_if_error (error, tmp_error, NULL);
}
}
- g_strfreev (groups);
-
- return self;
+ return g_steal_pointer (&self);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]