2 * Copyright (c) 2018 Samsung Electronics Co., Ltd.
4 * Licensed under the Flora License, Version 1.1 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://floralicense.org/license/
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include "messages/writer.h"
23 int writer_init_sized(writer_t *writer, size_t length)
25 writer->data = malloc(length);
29 return writer->data ? 0 : -1;
32 static int _writer_resize_buffer(writer_t *writer, size_t new_size)
34 writer->data = realloc(writer->data, new_size);
35 writer->cap = new_size;
37 return writer->data ? 0 : -1;
40 static int _writer_bytes_append(writer_t *writer, void *buf, size_t len)
42 if (writer->length + len >= writer->cap)
43 if (_writer_resize_buffer(writer, writer->cap + len))
46 memcpy(&writer->data[writer->length], (char*)buf, len);
47 writer->length += len;
51 void writer_shutdown(writer_t *writer)
56 void writer_reset(writer_t *writer, size_t position)
58 writer->length = position > writer->cap ? writer->cap : position;
61 int writer_write_int32(writer_t *writer, int32_t value)
63 int32_t converted = htobe32(value);
64 return _writer_bytes_append(writer, &converted, sizeof(converted));
67 int writer_write_int64(writer_t *writer, int64_t value)
69 int64_t converted = htobe64(value);
70 return _writer_bytes_append(writer, &converted, sizeof(converted));
73 int writer_write_bool(writer_t *writer, bool value)
75 return writer_write_char(writer, value ? 1 : 0);
78 int writer_write_char(writer_t *writer, char value)
80 return _writer_bytes_append(writer, &value, sizeof(value));
83 int writer_write_string(writer_t *writer, const char *value)
85 size_t len = strlen(value);
86 if (writer_write_int32(writer, len)) {
89 return _writer_bytes_append(writer, (void*)value, sizeof(char) * len);