267 lines
6.6 KiB
C
267 lines
6.6 KiB
C
/*
|
|
* Copyright (C) 2018-2022 Jolla Ltd.
|
|
* Copyright (C) 2018-2024 Slava Monich <slava@monich.com>
|
|
*
|
|
* You may use this file under the terms of BSD license as follows:
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
* 3. Neither the names of the copyright holders nor the names of its
|
|
* contributors may be used to endorse or promote products derived
|
|
* from this software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
|
|
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
|
* THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
#ifndef GBINDER_READER_H
|
|
#define GBINDER_READER_H
|
|
|
|
#include "gbinder_types.h"
|
|
|
|
G_BEGIN_DECLS
|
|
|
|
/*
|
|
* Normally, the reader is initialized by gbinder_remote_reply_init_reader or
|
|
* gbinder_remote_request_init_reader function. Note that the reader doesn't
|
|
* copy the data nor does it reference the object which initialized it. The
|
|
* caller must make sure that the data outlive the reader.
|
|
*
|
|
* Also, these functions are not NULL tolerant. The reader is normally
|
|
* allocated on stack.
|
|
*/
|
|
|
|
struct gbinder_reader {
|
|
gconstpointer d[6];
|
|
};
|
|
|
|
gboolean
|
|
gbinder_reader_at_end(
|
|
const GBinderReader* reader);
|
|
|
|
gboolean
|
|
gbinder_reader_read_byte(
|
|
GBinderReader* reader,
|
|
guchar* value);
|
|
|
|
gboolean
|
|
gbinder_reader_read_bool(
|
|
GBinderReader* reader,
|
|
gboolean* value);
|
|
|
|
gboolean
|
|
gbinder_reader_read_int8(
|
|
GBinderReader* reader,
|
|
gint8* value); /* Since 1.1.15 */
|
|
|
|
gboolean
|
|
gbinder_reader_read_uint8(
|
|
GBinderReader* reader,
|
|
guint8* value); /* Since 1.1.15 */
|
|
|
|
gboolean
|
|
gbinder_reader_read_int16(
|
|
GBinderReader* reader,
|
|
gint16* value); /* Since 1.1.15 */
|
|
|
|
gboolean
|
|
gbinder_reader_read_uint16(
|
|
GBinderReader* reader,
|
|
guint16* value); /* Since 1.1.15 */
|
|
|
|
gboolean
|
|
gbinder_reader_read_int32(
|
|
GBinderReader* reader,
|
|
gint32* value);
|
|
|
|
gboolean
|
|
gbinder_reader_read_uint32(
|
|
GBinderReader* reader,
|
|
guint32* value);
|
|
|
|
gboolean
|
|
gbinder_reader_read_int64(
|
|
GBinderReader* reader,
|
|
gint64* value);
|
|
|
|
gboolean
|
|
gbinder_reader_read_uint64(
|
|
GBinderReader* reader,
|
|
guint64* value);
|
|
|
|
gboolean
|
|
gbinder_reader_read_float(
|
|
GBinderReader* reader,
|
|
gfloat* value);
|
|
|
|
gboolean
|
|
gbinder_reader_read_double(
|
|
GBinderReader* reader,
|
|
gdouble* value);
|
|
|
|
int
|
|
gbinder_reader_read_fd(
|
|
GBinderReader* reader); /* Since 1.0.18 */
|
|
|
|
int
|
|
gbinder_reader_read_dup_fd(
|
|
GBinderReader* reader) /* Since 1.0.18 */
|
|
G_GNUC_WARN_UNUSED_RESULT;
|
|
|
|
gboolean
|
|
gbinder_reader_read_nullable_object(
|
|
GBinderReader* reader,
|
|
GBinderRemoteObject** obj);
|
|
|
|
GBinderRemoteObject*
|
|
gbinder_reader_read_object(
|
|
GBinderReader* reader)
|
|
G_GNUC_WARN_UNUSED_RESULT;
|
|
|
|
#define gbinder_reader_skip_object(reader) \
|
|
gbinder_reader_read_nullable_object(reader, NULL)
|
|
|
|
GBinderBuffer*
|
|
gbinder_reader_read_buffer(
|
|
GBinderReader* reader)
|
|
G_GNUC_WARN_UNUSED_RESULT;
|
|
|
|
const void*
|
|
gbinder_reader_read_parcelable(
|
|
GBinderReader* reader,
|
|
gsize* size); /* Since 1.1.19 */
|
|
|
|
const void*
|
|
gbinder_reader_read_hidl_struct1(
|
|
GBinderReader* reader,
|
|
gsize size); /* Since 1.0.9 */
|
|
|
|
#define gbinder_reader_read_hidl_struct(reader,type) \
|
|
((const type*)gbinder_reader_read_hidl_struct1(reader, sizeof(type)))
|
|
|
|
const void*
|
|
gbinder_reader_read_hidl_vec(
|
|
GBinderReader* reader,
|
|
gsize* count,
|
|
gsize* elemsize);
|
|
|
|
const void*
|
|
gbinder_reader_read_hidl_vec1(
|
|
GBinderReader* reader,
|
|
gsize* count,
|
|
guint expected_elemsize); /* Since 1.0.9 */
|
|
|
|
#define gbinder_reader_read_hidl_type_vec(reader,type,count) \
|
|
((const type*)gbinder_reader_read_hidl_vec1(reader, count, sizeof(type)))
|
|
#define gbinder_reader_read_hidl_byte_vec(reader,count) /* vec<uint8_t> */ \
|
|
gbinder_reader_read_hidl_type_vec(reader,guint8,count)
|
|
|
|
char*
|
|
gbinder_reader_read_hidl_string(
|
|
GBinderReader* reader)
|
|
G_GNUC_WARN_UNUSED_RESULT;
|
|
|
|
const char*
|
|
gbinder_reader_read_hidl_string_c(
|
|
GBinderReader* reader); /* Since 1.0.23 */
|
|
|
|
#define gbinder_reader_skip_hidl_string(reader) \
|
|
(gbinder_reader_read_hidl_string_c(reader) != NULL)
|
|
|
|
char**
|
|
gbinder_reader_read_hidl_string_vec(
|
|
GBinderReader* reader);
|
|
|
|
gboolean
|
|
gbinder_reader_skip_buffer(
|
|
GBinderReader* reader);
|
|
|
|
const char*
|
|
gbinder_reader_read_string8(
|
|
GBinderReader* reader);
|
|
|
|
gboolean
|
|
gbinder_reader_read_nullable_string8(
|
|
GBinderReader* reader,
|
|
const char** out,
|
|
gsize* out_len); /* Since 1.1.41 */
|
|
|
|
#define gbinder_reader_skip_nullable_string8(reader) \
|
|
gbinder_reader_read_nullable_string8(reader, NULL, NULL)
|
|
|
|
char*
|
|
gbinder_reader_read_string16(
|
|
GBinderReader* reader)
|
|
G_GNUC_WARN_UNUSED_RESULT;
|
|
|
|
gboolean
|
|
gbinder_reader_read_nullable_string16(
|
|
GBinderReader* reader,
|
|
char** out);
|
|
|
|
gboolean
|
|
gbinder_reader_read_nullable_string16_utf16(
|
|
GBinderReader* reader,
|
|
const gunichar2** out,
|
|
gsize* len); /* Since 1.0.17 */
|
|
|
|
const gunichar2*
|
|
gbinder_reader_read_string16_utf16(
|
|
GBinderReader* reader,
|
|
gsize* len); /* Since 1.0.26 */
|
|
|
|
gboolean
|
|
gbinder_reader_skip_string16(
|
|
GBinderReader* reader);
|
|
|
|
const void*
|
|
gbinder_reader_read_byte_array(
|
|
GBinderReader* reader,
|
|
gsize* len); /* Since 1.0.12 */
|
|
|
|
const void*
|
|
gbinder_reader_get_data(
|
|
const GBinderReader* reader,
|
|
gsize* size); /* Since 1.1.14 */
|
|
|
|
gsize
|
|
gbinder_reader_bytes_read(
|
|
const GBinderReader* reader);
|
|
|
|
gsize
|
|
gbinder_reader_bytes_remaining(
|
|
const GBinderReader* reader);
|
|
|
|
void
|
|
gbinder_reader_copy(
|
|
GBinderReader* dest,
|
|
const GBinderReader* src); /* Since 1.0.16 */
|
|
|
|
G_END_DECLS
|
|
|
|
#endif /* GBINDER_READER_H */
|
|
|
|
/*
|
|
* Local Variables:
|
|
* mode: C
|
|
* c-basic-offset: 4
|
|
* indent-tabs-mode: nil
|
|
* End:
|
|
*/
|