From 3c828b453ae978b8fc0b5e38fdcdbc77b4d8a950 Mon Sep 17 00:00:00 2001 From: Slava Monich Date: Sun, 20 Feb 2022 02:31:56 +0200 Subject: [PATCH] [gbinder] Housekeeping. JB#54354 --- include/gbinder_reader.h | 6 +++--- include/gbinder_writer.h | 6 +++--- src/gbinder_reader.c | 13 ++++++------- src/gbinder_writer.c | 32 ++++++++++++++++++++------------ 4 files changed, 32 insertions(+), 25 deletions(-) diff --git a/include/gbinder_reader.h b/include/gbinder_reader.h index ad18c60..2b630ee 100644 --- a/include/gbinder_reader.h +++ b/include/gbinder_reader.h @@ -1,6 +1,6 @@ /* - * Copyright (C) 2018-2021 Jolla Ltd. - * Copyright (C) 2018-2021 Slava Monich + * Copyright (C) 2018-2022 Jolla Ltd. + * Copyright (C) 2018-2022 Slava Monich * * You may use this file under the terms of BSD license as follows: * @@ -145,7 +145,7 @@ gbinder_reader_read_buffer( const void* gbinder_reader_read_parcelable( GBinderReader* reader, - gsize* size); /* Since 1.1.XX */ + gsize* size); /* Since 1.1.19 */ const void* gbinder_reader_read_hidl_struct1( diff --git a/include/gbinder_writer.h b/include/gbinder_writer.h index 79b6414..63e5e94 100644 --- a/include/gbinder_writer.h +++ b/include/gbinder_writer.h @@ -1,6 +1,6 @@ /* - * Copyright (C) 2018-2021 Jolla Ltd. - * Copyright (C) 2018-2021 Slava Monich + * Copyright (C) 2018-2022 Jolla Ltd. + * Copyright (C) 2018-2022 Slava Monich * * You may use this file under the terms of BSD license as follows: * @@ -152,7 +152,7 @@ void gbinder_writer_append_parcelable( GBinderWriter* writer, const void* buf, - gsize len); /* Since 1.1.XX */ + gsize len); /* Since 1.1.19 */ void gbinder_writer_append_hidl_vec( diff --git a/src/gbinder_reader.c b/src/gbinder_reader.c index 3bea3cc..8b37d7d 100644 --- a/src/gbinder_reader.c +++ b/src/gbinder_reader.c @@ -1,6 +1,6 @@ /* - * Copyright (C) 2018-2021 Jolla Ltd. - * Copyright (C) 2018-2021 Slava Monich + * Copyright (C) 2018-2022 Jolla Ltd. + * Copyright (C) 2018-2022 Slava Monich * * You may use this file under the terms of BSD license as follows: * @@ -427,17 +427,16 @@ gbinder_reader_skip_buffer( const void* gbinder_reader_read_parcelable( GBinderReader* reader, - gsize* size) /* Since 1.1.XX */ + gsize* size) /* Since 1.1.19 */ { GBinderReaderPriv* p = gbinder_reader_cast(reader); gint32 non_null, payload_size = 0; const void* out = NULL; - if (gbinder_reader_read_int32(reader, &non_null) && non_null - && gbinder_reader_read_int32(reader, &payload_size)) { - /* We have already read the size integer, and we don't need it anymore */ + if (gbinder_reader_read_int32(reader, &non_null) && non_null && + gbinder_reader_read_int32(reader, &payload_size)) { + /* We have already read the size integer */ payload_size -= sizeof(gint32); - if (p->ptr + payload_size <= p->end) { out = p->ptr; p->ptr += payload_size; diff --git a/src/gbinder_writer.c b/src/gbinder_writer.c index b9d6418..bdf28b4 100644 --- a/src/gbinder_writer.c +++ b/src/gbinder_writer.c @@ -1,6 +1,6 @@ /* - * Copyright (C) 2018-2021 Jolla Ltd. - * Copyright (C) 2018-2021 Slava Monich + * Copyright (C) 2018-2022 Jolla Ltd. + * Copyright (C) 2018-2022 Slava Monich * * You may use this file under the terms of BSD license as follows: * @@ -762,7 +762,7 @@ void gbinder_writer_append_parcelable( GBinderWriter* self, const void* buf, - gsize len) /* Since 1.1.XX */ + gsize len) /* Since 1.1.19 */ { GBinderWriterData* data = gbinder_writer_data(self); @@ -771,24 +771,32 @@ gbinder_writer_append_parcelable( } } +/* + * This is compatible with aidl parcelables, and is not guaranteed to work + * with any other kind of parcelable. + */ void gbinder_writer_data_append_parcelable( GBinderWriterData* data, const void* ptr, gsize size) { - if (!ptr) { + if (ptr) { + /* Non-null */ + gbinder_writer_data_append_int32(data, 1); + + /* + * Write the parcelable size, taking in account the size of this + * integer as well. + */ + gbinder_writer_data_append_int32(data, size + sizeof(gint32)); + + /* Append the parcelable data */ + g_byte_array_append(data->bytes, ptr, size); + } else { /* Null */ gbinder_writer_data_append_int32(data, 0); - return; } - - /* Non-null */ - gbinder_writer_data_append_int32(data, 1); - /* Write the parcelable size, taking in account the size of this integer as well */ - gbinder_writer_data_append_int32(data, size + sizeof(gint32)); - /* Append the parcelable data */ - g_byte_array_append(data->bytes, ptr, size); } void