Re: [PATCH 2/4] obexd: Fix setting message folder for relative folder in ListMessages

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Christian,

On Fri, Sep 13, 2013 at 12:23 PM, Christian Fetzer
<christian.fetzer@xxxxxxxxxxxxxxxx> wrote:
> From: Christian Fetzer <christian.fetzer@xxxxxxxxxxxx>
>
> The method ListMessages allows to specify a relative subfolder.
> This subfolder needs to be added to the current path when registering
> a new message interface.
> ---
>  obexd/client/map.c | 19 +++++++++++++++++--
>  1 file changed, 17 insertions(+), 2 deletions(-)
>
> diff --git a/obexd/client/map.c b/obexd/client/map.c
> index 9a1b140..54011d8 100644
> --- a/obexd/client/map.c
> +++ b/obexd/client/map.c
> @@ -96,6 +96,7 @@ static const char * const filter_list[] = {
>  struct map_data {
>         struct obc_session *session;
>         DBusMessage *msg;
> +       char *folder;
>         GHashTable *messages;
>         int16_t mas_instance_id;
>         uint8_t supported_message_types;
> @@ -1058,8 +1059,7 @@ static void msg_element(GMarkupParseContext *ctxt, const char *element,
>
>         msg = g_hash_table_lookup(data->messages, values[i]);
>         if (msg == NULL) {
> -               msg = map_msg_create(data, values[i],
> -                                       obc_session_get_folder(data->session));
> +               msg = map_msg_create(data, values[i], data->folder);
>                 if (msg == NULL)
>                         return;
>         }
> @@ -1153,6 +1153,19 @@ static void message_listing_cb(struct obc_session *session,
>  done:
>         g_dbus_send_message(conn, reply);
>         dbus_message_unref(map->msg);
> +       g_free(map->folder);
> +       map->folder = NULL;
> +}
> +
> +static char *get_absolute_folder(const char *root, const char *subfolder)
> +{
> +       if (!subfolder || strlen(subfolder) == 0)
> +               return g_strdup(root);
> +       else
> +               if (g_str_has_suffix(root, "/"))
> +                       return g_strconcat(root, subfolder, NULL);
> +               else
> +                       return g_strconcat(root, "/", subfolder, NULL);
>  }
>
>  static DBusMessage *get_message_listing(struct map_data *map,
> @@ -1175,6 +1188,8 @@ static DBusMessage *get_message_listing(struct map_data *map,
>         if (obc_session_queue(map->session, transfer, message_listing_cb, map,
>                                                                 &err)) {
>                 map->msg = dbus_message_ref(message);
> +               map->folder = get_absolute_folder(obc_session_get_folder(
> +                                                       map->session), folder);
>                 return NULL;
>         }
>
> --
> 1.8.3.4

This will probably not work in case of multiple outstanding requests
the last will always overwrite the folder, which btw will leak, so
probably we need a per request data.


-- 
Luiz Augusto von Dentz
--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux