Clarify serialization limits, cleanup and error codes
This commit is contained in:
1 parent
ecd5b9fc9d
commit
f31b34d0f0
1 file changed
+8
-6
+8
-6
@@ -24,10 +24,12 @@
|
||||
* • Для linked list в буфере сохраняется только количество узлов + сырые данные узлов
|
||||
* (включая байты next/padding; decode заменяет next восстановленными ссылками).
|
||||
* • serialize_decode принимает буфер БЕЗ заголовка.
|
||||
* • serialize_free освобождает ВСЮ структуру и все вложенные динамические объекты.
|
||||
* • serialize_free освобождает структуру, динамические поля схемы и узлы списков; обнуляет указатель на структуру.
|
||||
* Указатели внутри элементов массивов и узлов списков рекурсивно не освобождаются.
|
||||
* • Поля кодируются в порядке schema.fields; фиксированные данные копируются без смены endian.
|
||||
* • max_size (если > 0) — лимит encode; header при header_len > 0 обязателен.
|
||||
* • Переменные counts ограничены 65535; elem_size=1 добавляет NUL и для byte-массивов.
|
||||
* • При encode counts больше 65535 молча усекаются: сохраняются первые 65535 элементов массива/списка или байтов строки.
|
||||
* • elem_size=1 добавляет NUL и для byte-массивов.
|
||||
* • Linked nodes копируются целиком, без рекурсивного кодирования вложенных указателей.
|
||||
* • Этот формат зависит от ABI сырых полей; сериализация не нормализует размер/выравнивание структур.
|
||||
*
|
||||
@@ -103,7 +105,7 @@ struct SerializeField {
|
||||
uint16_t offset; ///< смещение поля в структуре
|
||||
uint8_t elem_size; ///< размер элемента (для fixed = размер данных, для array/linked = размер одного элемента)
|
||||
uint8_t type; ///< SERIALIZE_TYPE_*
|
||||
uint16_t len_offset; ///< смещение поля-счётчика (игнорируется для type 0,1,2)
|
||||
uint16_t len_offset; ///< type 3–5: смещение счётчика в структуре; type 6: смещение next в узле; type 0–2: игнорируется
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -118,10 +120,10 @@ struct SerializeSchema {
|
||||
};
|
||||
|
||||
#define SERIALIZE_ERR_OK 0 ///< успех
|
||||
#define SERIALIZE_ERR_BUF -1 ///< ошибка выделения памяти
|
||||
#define SERIALIZE_ERR_BUF -1 ///< нехватка памяти; decode также: обрезанные данные или неизвестный тип поля
|
||||
#define SERIALIZE_ERR_NULL -2 ///< NULL-указатель
|
||||
#define SERIALIZE_ERR_SIZE -3 ///< превышен max_size
|
||||
#define SERIALIZE_ERR_NOTSUP -4 ///< неподдерживаемый тип
|
||||
#define SERIALIZE_ERR_SIZE -3 ///< encode: превышен max_size
|
||||
#define SERIALIZE_ERR_NOTSUP -4 ///< encode: неподдерживаемый тип поля
|
||||
|
||||
int serialize_encode(const void* structure,
|
||||
const struct SerializeSchema* schema,
|
||||
|
||||
Reference in new issue
Block a user