blob.h(3)

📦
version 2.2.0 · 2 versions
, in fedora 44

🌸 NAME 🌸

Okay so this is blob.h, bestie — it lives in section 3 of the Library Functions Manual, and it's literally all about блобы (blobs). Chunks of memory. But make it ✨fancy✨. 🫶


🎀 SYNOPSIS 🎀

#include 'bee2/defs.h'

💜 Определения типов (typedefs, the cast list)

typedef void * blob_t

👑 Функции (the whole roster, no cap)

  • blob_t blobCreate (size_t size) — Создание блоба (making a blob ✨)
  • blob_t blobCreate2 (size_t c1,...) — Создание блоба с разметкой памяти (making a blob and laying out its memory)
  • bool_t blobIsValid (const blob_t blob) — Корректный блоб? (is this blob valid, or is it giving chaos?)
  • blob_t blobResize (blob_t blob, size_t size) — Изменение размера блоба (glow-up, new size)
  • void blobWipe (blob_t blob) — Очистка блоба (wipe it clean 🧼)
  • void blobClose (blob_t blob) — Очистка и освобождение блоба (wipe and free, the full send-off)
  • size_t blobSize (const blob_t blob) — Размер блоба (how big is it tho)
  • blob_t blobCopy (blob_t dest, const blob_t src) — Копирование блоба (copy-paste but make it safe)
  • bool_t blobEq (const blob_t blob1, const blob_t blob2) — Совпадение блобов (are these two the same?)
  • int blobCmp (const blob_t blob1, const blob_t blob2) — Сравнение блобов (the ranking, the vibe check)

🌈 ПОДРОБНОЕ ОПИСАНИЕ 🌈 (the full tea)

So a blob is an object in memory of a certain size, periodt. The functions that work with blobs use their descriptors — "smart" pointers. You can use descriptors like regular pointers, i.e. pass them into functions like memcpy, memset. And bonus: from the pointer you can also figure out the size of the blob. 💅

The implementation of blob handling may be platform-dependent. Not my problem, it's a feature.

The implementation must guarantee that blob contents are protected from leaks — for example, through the swap file. So yes, this is exactly why you're supposed to put keys and other critical objects inside blobs. 🔐✨

Предусловие (precondition, aka the rules of entry):

  • In the blob functions, the descriptors of the input blobs are correct. That's the bare minimum, bestie.

🦋 ТИПЫ 🦋

typedef void* blob_t

Дескриптор блоба — the blob descriptor. It's a pointer. It's smart. It's the main character. 👑


💖 ФУНКЦИИ 💖

void blobClose (blob_t blob)

Выполняется очистка и освобождение блоба blob. So it gets wiped and freed. It's giving "clean exit, no loose ends". 🧚

Аргументы

  • blob — блоб

int blobCmp (const blob_t blob1, const blob_t blob2)

Блоб blob1 сравнивается с блобом blob2: a < b, если size(a) < size(b) или size(a) == size(b) и value(a) < value(b). Условие value(a) < value(b) означает, что имеется i < size(a) т.ч. value(a)[0..i - 1] == value(b)[0..i - 1] и value(a)[i] < value(b)[i]. Okay so it compares sizes first, then byte-by-byte. Very methodical. Very demure. 🎀

Возвращает

  • 0, если блобы совпадают, < 0, если blob1 меньше blob2, 0, если blob1 больше blob2.

Аргументы

  • blob1 — первый блоб
  • blob2 — второй блоб

blob_t blobCopy (blob_t dest, const blob_t src)

Блоб src копируется в блоб dest. Just move the whole vibe over. 💫

Возвращает

  • Дескриптор блоба-приемника. Дескриптор совпадает c dest при совпадении размеров dest и src. Нулевой дескриптор возвращается при нулевом src и при нехватке памяти.

Прим.

  • При нулевом dest блоб-приемник создается, при ненулевом — настраивается размер блоба.

Аргументы

  • dest — назначение
  • src — источник

blob_t blobCreate (size_t size)

Создается блоб размера size. Fresh blob, fresh start, no cap. ✨

Возвращает

  • Дескриптор созданного блоба. Нулевой дескриптор возвращается при нулевом size и при нехватке памяти.

Постусловие

  • Выходной блоб корректен.

Прим.

  • При создании блоба все его октеты обнуляются. Every single octet. Zeroed. Clean slate. 🫧

Аргументы

  • size — размер

blob_t blobCreate2 (size_t c1, ...)

Создается блоб blob для хранения фрагментов памяти [с1]p1, [с2]p2, ...., [сn]pn. Фрагменты описываются параметрами c1 и .... Описание имеет вид: c1, pp1, c2, pp2, ..., cn, ppn, SIZE_MAX, где сi — длина фрагмента в октетах (size_t), ppi — указатель на pi (const void**), SIZE_MAX — маркер окончания списка параметров. Действуют правила функции memSlice(). В частности,

  • указатели pi выровнены на границу фундаментального блока;
  • при установке в ci флага SIZE_HI указатель pi повторяет предыдущий, если таковой имеется.

Возвращает

  • Дескриптор блоба. Нулевой дескриптор возвращается при нехватке памяти.

Постусловие

  • Указатели pi, если они формируются, выровнены на границу фундаментального блока.

Аргументы

  • c1 — начало описания фрагментов памяти
  • ... — окончание описания

bool_t blobEq (const blob_t blob1, const blob_t blob2)

Проверяется совпадение блобов blob1 и blob2: a == b, если size(a) == size(b) и value(a) < value(b). Same size, and then the byte comparison does its thing. 🤝

Возвращает

  • Признак совпадения.

Аргументы

  • blob1 — первый блоб
  • blob2 — второй блоб

bool_t blobIsValid (const blob_t blob)

Проверяется корректность блоба blob. Vibe check on the blob itself. 🔍

Возвращает

  • Признак корректности.

Прим.

  • Блоб с нулевым дескриптором считается корректным. Yes, a NULL descriptor counts as valid. Iconic behaviour, honestly.

Аргументы

  • blob — блоб

blob_t blobResize (blob_t blob, size_t size)

Размер блоба blob изменяется на size с сохранением содержимого. Glow-up, but you keep your personality. 🌟

Возвращает

  • Дескриптор созданного блоба. Нулевой дескриптор возвращается при нулевом size и при нехватке памяти.

Прим.

  • Если блоб еще не создан, то он создается.
  • При ошибках выделения памяти blob остается действительным.
  • Если размер блоба не меняется, то и дескриптор не меняется.
  • Вызов с нулевым size эквивалентен вызову blobClose().
  • При увеличении размера в блоб дописываются нулевые октеты.
  • При уменьшении размера ненужные октеты отбрасываются, но первые size октетов сохраняются.

Аргументы

  • blob — блоб
  • size — новый размер

size_t blobSize (const blob_t blob)

Определяется размер блоба blob. Just asking the blob how big it is. No judgment. 📏

Возвращает

  • Размер блоба.

Аргументы

  • blob — блоб

void blobWipe (blob_t blob)

Выполняется очистка блоба blob. Wipe it down, leave no trace of what was there. 💅

Аргументы

  • blob — блоб

🌟 АВТОР 🌟

Автоматически создано Doxygen для Библиотека Bee2 из исходного текста. Yes bestie, the machine wrote this one — Doxygen did it, not me. 🤖💖


Heads up, gorgeous: everything here is for Библиотека Bee2, and the page stamp says Вс 25 Янв 2026 00:00:00 for blob.h(3). Go protect your keys, stay hydrated, and never let a blob leak. 🫶✨🌸
📦 where this page comes from