From b6e0bf4c5e17d438b26e0e5cab6ae37bbbbd0814 Mon Sep 17 00:00:00 2001 From: Takashi Sakamoto Date: Tue, 31 May 2022 10:41:31 +0900 Subject: [PATCH] rawmidi: query: rewrite public API to return gboolean according to GNOME convention In GNOME convention, the throw function to report error at GError argument should return gboolean value to report the overall operation finishes successfully or not. This commit rewrite such public APIs with loss of backward compatibility. Signed-off-by: Takashi Sakamoto --- samples/rawmidi | 7 +-- src/rawmidi/alsarawmidi.map | 16 ++++--- src/rawmidi/privates.h | 2 +- src/rawmidi/query.c | 96 ++++++++++++++++++++++++------------- src/rawmidi/query.h | 37 +++++++------- src/rawmidi/stream-pair.c | 6 +-- 6 files changed, 97 insertions(+), 67 deletions(-) diff --git a/samples/rawmidi b/samples/rawmidi index 8b5da22..b4c669c 100755 --- a/samples/rawmidi +++ b/samples/rawmidi @@ -13,10 +13,11 @@ from signal import SIGINT # is available in the same subdevice ID. _, card_id_list = ALSACtl.get_card_id_list() for card_id in card_id_list: - for device_id in ALSARawmidi.get_device_id_list(card_id): - outputs = ALSARawmidi.get_subdevice_id_list(card_id, device_id, + _, device_id_list = ALSARawmidi.get_device_id_list(card_id) + for device_id in device_id_list: + _, outputs = ALSARawmidi.get_subdevice_id_list(card_id, device_id, ALSARawmidi.StreamDirection.OUTPUT) - inputs = ALSARawmidi.get_subdevice_id_list(card_id, device_id, + _, inputs = ALSARawmidi.get_subdevice_id_list(card_id, device_id, ALSARawmidi.StreamDirection.OUTPUT) for subdevice_id in outputs: if subdevice_id in inputs: diff --git a/src/rawmidi/alsarawmidi.map b/src/rawmidi/alsarawmidi.map index b1045ee..67f77c6 100644 --- a/src/rawmidi/alsarawmidi.map +++ b/src/rawmidi/alsarawmidi.map @@ -3,12 +3,6 @@ ALSA_GOBJECT_0_0_0 { "alsarawmidi_stream_direction_get_type"; "alsarawmidi_stream_pair_info_flag_get_type"; - "alsarawmidi_get_device_id_list"; - "alsarawmidi_get_rawmidi_sysname"; - "alsarawmidi_get_rawmidi_devnode"; - "alsarawmidi_get_subdevice_id_list"; - "alsarawmidi_get_substream_info"; - "alsarawmidi_substream_info_get_type"; "alsarawmidi_stream_pair_get_type"; @@ -34,6 +28,16 @@ ALSA_GOBJECT_0_0_0 { }; ALSA_GOBJECT_0_2_0 { + global: "alsarawmidi_stream_pair_error_get_type"; "alsarawmidi_stream_pair_error_quark"; } ALSA_GOBJECT_0_0_0; + +ALSA_GOBJECT_0_3_0 { + global: + "alsarawmidi_get_device_id_list"; + "alsarawmidi_get_rawmidi_sysname"; + "alsarawmidi_get_rawmidi_devnode"; + "alsarawmidi_get_subdevice_id_list"; + "alsarawmidi_get_substream_info"; +} ALSA_GOBJECT_0_2_0; diff --git a/src/rawmidi/privates.h b/src/rawmidi/privates.h index 74367c2..ebd9e40 100644 --- a/src/rawmidi/privates.h +++ b/src/rawmidi/privates.h @@ -9,7 +9,7 @@ G_BEGIN_DECLS void rawmidi_substream_info_refer_private(ALSARawmidiSubstreamInfo *self, struct snd_rawmidi_info **info); -void rawmidi_select_subdevice(guint card_id, guint subdevice_id, int *ctl_fd, GError **error); +gboolean rawmidi_select_subdevice(guint card_id, guint subdevice_id, int *ctl_fd, GError **error); void rawmidi_substream_params_refer_private(ALSARawmidiSubstreamParams *self, struct snd_rawmidi_params **params); diff --git a/src/rawmidi/query.c b/src/rawmidi/query.c index b9b275f..6be6acd 100644 --- a/src/rawmidi/query.c +++ b/src/rawmidi/query.c @@ -15,19 +15,25 @@ * Get the list of numeric identifier for available rawmidi devices of sound card. * * Nodes under sound subsystem in sysfs are used to gather the information. + * + * Returns: %TRUE when the overall operation finishes successfully, else %FALSE. */ -void alsarawmidi_get_device_id_list(guint card_id, guint **entries, - gsize *entry_count, GError **error) +gboolean alsarawmidi_get_device_id_list(guint card_id, guint **entries, gsize *entry_count, + GError **error) { int err; - g_return_if_fail(entries != NULL); - g_return_if_fail(entry_count != NULL); - g_return_if_fail(error == NULL || *error == NULL); + g_return_val_if_fail(entries != NULL, FALSE); + g_return_val_if_fail(entry_count != NULL, FALSE); + g_return_val_if_fail(error == NULL || *error == NULL, FALSE); err = generate_rawmidi_sysnum_list(entries, entry_count, card_id); - if (err < 0) + if (err < 0) { generate_file_error(error, -err, "Fail to generate list of rawmidi sysnum"); + return FALSE; + } + + return TRUE; } /** @@ -40,18 +46,24 @@ void alsarawmidi_get_device_id_list(guint card_id, guint **entries, * Allocate sysname for rawmidi device and return it when it exists. * * Nodes under sound subsystem in sysfs are used to gather the information. + * + * Returns: %TRUE when the overall operation finishes successfully, else %FALSE. */ -void alsarawmidi_get_rawmidi_sysname(guint card_id, guint device_id, - char **sysname, GError **error) +gboolean alsarawmidi_get_rawmidi_sysname(guint card_id, guint device_id, char **sysname, + GError **error) { int err; - g_return_if_fail(sysname != NULL); - g_return_if_fail(error == NULL || *error == NULL); + g_return_val_if_fail(sysname != NULL, FALSE); + g_return_val_if_fail(error == NULL || *error == NULL, FALSE); err = lookup_and_allocate_rawmidi_sysname(sysname, card_id, device_id); - if (err < 0) + if (err < 0) { generate_file_error(error, -err, "Fail to generate rawmidi sysname"); + return FALSE; + } + + return TRUE; } /** @@ -64,18 +76,24 @@ void alsarawmidi_get_rawmidi_sysname(guint card_id, guint device_id, * Allocate devnode string for rawmidi device and return it when exists. * * Nodes under sound subsystem in sysfs are used to gather the information. + * + * Returns: %TRUE when the overall operation finishes successfully, else %FALSE. */ -void alsarawmidi_get_rawmidi_devnode(guint card_id, guint device_id, - char **devnode, GError **error) +gboolean alsarawmidi_get_rawmidi_devnode(guint card_id, guint device_id, char **devnode, + GError **error) { int err; - g_return_if_fail(devnode != NULL); - g_return_if_fail(error == NULL || *error == NULL); + g_return_val_if_fail(devnode != NULL, FALSE); + g_return_val_if_fail(error == NULL || *error == NULL, FALSE); err = lookup_and_allocate_rawmidi_devname(devnode, card_id, device_id); - if (err < 0) + if (err < 0) { generate_file_error(error, -err, "Fail to generate rawmidi devname"); + return FALSE; + } + + return TRUE; } /** @@ -92,11 +110,13 @@ void alsarawmidi_get_rawmidi_devnode(guint card_id, guint device_id, * * The call of function executes `open(2)`, `close(2)`, and `ioctl(2)` system call with * `SNDRV_CTL_IOCTL_RAWMIDI_INFO` command for ALSA control character device. + * + * Returns: %TRUE when the overall operation finishes successfully, else %FALSE. */ -void alsarawmidi_get_subdevice_id_list(guint card_id, guint device_id, - ALSARawmidiStreamDirection direction, - guint **entries, gsize *entry_count, - GError **error) +gboolean alsarawmidi_get_subdevice_id_list(guint card_id, guint device_id, + ALSARawmidiStreamDirection direction, + guint **entries, gsize *entry_count, + GError **error) { struct snd_rawmidi_info info = { .card = card_id, @@ -107,14 +127,14 @@ void alsarawmidi_get_subdevice_id_list(guint card_id, guint device_id, int i; int err; - g_return_if_fail(entries != NULL); - g_return_if_fail(entry_count != NULL); - g_return_if_fail(error == NULL || *error == NULL); + g_return_val_if_fail(entries != NULL, FALSE); + g_return_val_if_fail(entry_count != NULL, FALSE); + g_return_val_if_fail(error == NULL || *error == NULL, FALSE); err = request_ctl_ioctl(card_id, SNDRV_CTL_IOCTL_RAWMIDI_INFO, &info); if (err < 0) { generate_file_error(error, -err, "RAWMIDI_INFO"); - return; + return FALSE; } *entries = g_malloc0_n(info.subdevices_count, sizeof(guint)); @@ -122,6 +142,8 @@ void alsarawmidi_get_subdevice_id_list(guint card_id, guint device_id, for (i = 0; i < info.subdevices_count; ++i) (*entries)[i] = i; *entry_count = info.subdevices_count; + + return TRUE; } /** @@ -138,18 +160,19 @@ void alsarawmidi_get_subdevice_id_list(guint card_id, guint device_id, * * The call of function executes `open(2)`, `close(2)`, and `ioctl(2)` system call with * `SNDRV_CTL_IOCTL_RAWMIDI_INFO` command for ALSA control character device. + * + * Returns: %TRUE when the overall operation finishes successfully, else %FALSE. */ -void alsarawmidi_get_substream_info(guint card_id, guint device_id, - ALSARawmidiStreamDirection direction, - guint subdevice_id, - ALSARawmidiSubstreamInfo **substream_info, - GError **error) +gboolean alsarawmidi_get_substream_info(guint card_id, guint device_id, + ALSARawmidiStreamDirection direction, + guint subdevice_id, + ALSARawmidiSubstreamInfo **substream_info, GError **error) { struct snd_rawmidi_info *info; int err; - g_return_if_fail(substream_info != NULL); - g_return_if_fail(error == NULL || *error == NULL); + g_return_val_if_fail(substream_info != NULL, FALSE); + g_return_val_if_fail(error == NULL || *error == NULL, FALSE); *substream_info = g_object_new(ALSARAWMIDI_TYPE_SUBSTREAM_INFO, NULL); @@ -163,15 +186,22 @@ void alsarawmidi_get_substream_info(guint card_id, guint device_id, if (err < 0) { g_object_unref(*substream_info); generate_file_error(error, -err, "RAWMIDI_INFO"); + return FALSE; } + + return TRUE; } -void rawmidi_select_subdevice(guint card_id, guint subdevice_id, int *ctl_fd, GError **error) +gboolean rawmidi_select_subdevice(guint card_id, guint subdevice_id, int *ctl_fd, GError **error) { guint data = subdevice_id; int err; err = request_ctl_ioctl_opened(ctl_fd, card_id, SNDRV_CTL_IOCTL_RAWMIDI_PREFER_SUBDEVICE, &data); - if (err < 0) + if (err < 0) { generate_file_error(error, -err, "RAWMIDI_PREFER_SUBDEVICE"); + return FALSE; + } + + return TRUE; } diff --git a/src/rawmidi/query.h b/src/rawmidi/query.h index 28ac915..ba58846 100644 --- a/src/rawmidi/query.h +++ b/src/rawmidi/query.h @@ -6,26 +6,23 @@ G_BEGIN_DECLS -void alsarawmidi_get_device_id_list(guint card_id, - guint **entries, gsize *entry_count, - GError **error); - -void alsarawmidi_get_rawmidi_sysname(guint card_id, guint device_id, - char **sysname, GError **error); - -void alsarawmidi_get_rawmidi_devnode(guint card_id, guint device_id, - char **devnode, GError **error); - -void alsarawmidi_get_subdevice_id_list(guint card_id, guint device_id, - ALSARawmidiStreamDirection direction, - guint **entries, gsize *entry_count, - GError **error); - -void alsarawmidi_get_substream_info(guint card_id, guint device_id, - ALSARawmidiStreamDirection direction, - guint subdevice_id, - ALSARawmidiSubstreamInfo **substream_info, - GError **error); +gboolean alsarawmidi_get_device_id_list(guint card_id, guint **entries, gsize *entry_count, + GError **error); + +gboolean alsarawmidi_get_rawmidi_sysname(guint card_id, guint device_id, char **sysname, + GError **error); + +gboolean alsarawmidi_get_rawmidi_devnode(guint card_id, guint device_id, char **devnode, + GError **error); + +gboolean alsarawmidi_get_subdevice_id_list(guint card_id, guint device_id, + ALSARawmidiStreamDirection direction, + guint **entries, gsize *entry_count, GError **error); + +gboolean alsarawmidi_get_substream_info(guint card_id, guint device_id, + ALSARawmidiStreamDirection direction, + guint subdevice_id, + ALSARawmidiSubstreamInfo **substream_info, GError **error); G_END_DECLS diff --git a/src/rawmidi/stream-pair.c b/src/rawmidi/stream-pair.c index af35642..2b31268 100644 --- a/src/rawmidi/stream-pair.c +++ b/src/rawmidi/stream-pair.c @@ -224,12 +224,10 @@ void alsarawmidi_stream_pair_open(ALSARawmidiStreamPair *self, guint card_id, else g_return_if_reached(); - alsarawmidi_get_rawmidi_devnode(card_id, device_id, &devnode, error); - if (*error != NULL) + if (!alsarawmidi_get_rawmidi_devnode(card_id, device_id, &devnode, error)) return; - rawmidi_select_subdevice(card_id, subdevice_id, &ctl_fd, error); - if (*error != NULL) { + if (!rawmidi_select_subdevice(card_id, subdevice_id, &ctl_fd, error)) { g_free(devnode); return; } -- 2.47.3