BufIterFromBuf
Description
Construct a BufIter over the bytes of b_. The iterator borrows b_’s storage and is invalidated by any growth of b_.
Success
Returns a BufIter covering [b_->data, b_->data + b_->length).
Failure
Macro cannot fail.
Usage example (Cross-references)
Usage examples (Cross-references)
- In
Pe.c:521:
PeContext ctx = {
.out = out,
.file = BufIterFromBuf(&out->data),
};- In
MachO.c:124:
return false;
}
BufIter c = BufIterFromBuf(&m->data);
u32 magic, cputype, cpusubtype, filetype, ncmds, sizeofcmds, flags, reserved;
if (!BufReadFmt(- In
MachO.c:296:
return false;
}
BufIter walker = BufIterFromBuf(&ctx->out->data);
// Must-precondition: the check above proves the file is at least
// `MH_HEADER_64_SIZE + sizeofcmds` bytes, so the header skip stays
- In
MachO.c:371:
}
const u8 *str_base = BufData(&ctx->out->data) + ctx->stroff;
BufIter tab = BufIterFromBuf(&ctx->out->data);
// Must-precondition: `tab_end > BufLength` was checked above, so
// `symoff <= tab_end <= BufLength` and the move stays in-bounds.
- In
Elf.c:161:
self->header.data = ELF_DATA_LSB;
BufIter iter = BufIterFromBuf(&self->data);
IterMustMove(&iter, EI_NIDENT);- In
Elf.c:221:
u64 shstr_size = 0;
{
BufIter iter = BufIterFromBuf(&self->data);
IterMustMove(&iter, shoff + (u64)self->header.shstrndx * SHDR64_SIZE);
u32 name = 0, type = 0, link = 0, info = 0;- In
Elf.c:234:
}
BufIter iter = BufIterFromBuf(&self->data);
IterMustMove(&iter, shoff);
for (u16 i = 0; i < n; ++i) {- In
Elf.c:273:
}
BufIter iter = BufIterFromBuf(&self->data);
IterMustMove(&iter, phoff);
for (u16 i = 0; i < n; ++i) {- In
Elf.c:340:
}
BufIter iter = BufIterFromBuf(&self->data);
IterMustMove(&iter, symtab->offset);
for (u64 i = 0; i < count; ++i) {- In
Buf.c:99:
BufWriteU64LE(&b, 0xFEEDFACECAFEBEEFull);
BufIter it = BufIterFromBuf(&b);
u16 v16;
u32 v32;- In
Buf.c:119:
BufWriteSLeb128(&b, -123456);
BufIter it = BufIterFromBuf(&b);
u64 uv;
i64 sv;- In
Buf.c:137:
BufWriteZstr(&b, "world");
BufIter it = BufIterFromBuf(&b);
Zstr s1 = BufReadZstr(&it);
Zstr s2 = BufReadZstr(&it);- In
Buf.c:220:
BufAppendFmt(&b, "{<2r}{>4r}{<8r}", (u16)0x1234, (u32)0xDEADBEEF, (u64)0x0102030405060708ull);
BufIter it = BufIterFromBuf(&b);
u16 v16;
u32 v32;- In
Buf.c:238:
BufAppendFmt(&b, "{<2r}", (u16)0xABCD); // only 2 bytes; reader wants 6
BufIter it = BufIterFromBuf(&b);
size entry = it.pos;
u16 v16 = 0;- In
Write.c:804:
ok = ok && BufWriteFmt(&b, "{<2r}{>8r}", (u16)0x1234, (u64)0x0102030405060708ULL);
{
BufIter it = BufIterFromBuf(&b);
u16 v16 = 0;
u64 v64 = 0;- In
Write.c:835:
// Read back: the literal matches and the version is extracted.
{
BufIter it = BufIterFromBuf(&b);
u8 ver = 0;
ok = ok && BufReadFmt(&it, "TZif{>1r}", ver) && (ver == '2');- In
Write.c:842:
// Wrong magic -> soft false, no abort, cursor rewound, dest untouched.
{
BufIter it = BufIterFromBuf(&b);
u8 ver = 0xAB;
bool rd = BufReadFmt(&it, "TZig{>1r}", ver);- In
Write.c:863:
ok = ok && (BufLength(&b) == 2) && (BufData(&b)[0] == '{') && (BufData(&b)[1] == 0x41);
BufIter it = BufIterFromBuf(&b);
u8 v = 0;
ok = ok && BufReadFmt(&it, "{{{>1r}", v) && (v == 0x41);- In
Write.c:885:
ok = ok && (BufLength(&b) == 2);
{
BufIter it = BufIterFromBuf(&b);
u8 q = 0;
ok = ok && BufReadFmt(&it, "{>1r}Z", q) && (q == 'Q');- In
Write.c:893:
ok = ok && BufWriteFmt(&b, "{>1r}{{", (u8)'Q');
{
BufIter it = BufIterFromBuf(&b);
u8 q = 0;
ok = ok && BufReadFmt(&it, "{>1r}{{", q) && (q == 'Q');- In
Write.c:1859:
ok = ok && (BufLength(&b) == 1);
BufIter it = BufIterFromBuf(&b);
u8 v8 = 0;
bool rd = BufReadFmt(&it, "{<1r}", v8);- In
Write.c:1885:
ok = ok && (BufLength(&b) == 4);
BufIter it = BufIterFromBuf(&b);
u32 v32 = 0;
bool rd = BufReadFmt(&it, "{<4r}", v32);- In
Write.c:1909:
ok = ok && (BufLength(&b) == 8);
BufIter it = BufIterFromBuf(&b);
u64 v64 = 0;
bool rd = BufReadFmt(&it, "{>8r}", v64);- In
Write.c:1933:
ok = ok && (BufLength(&b) == 8);
BufIter it = BufIterFromBuf(&b);
i64 v64 = 0;
bool rd = BufReadFmt(&it, "{<8r}", v64);- In
Write.c:1963:
BufWriteFmt(&b, "{<2r}", (u16)0x1234);
BufIter it = BufIterFromBuf(&b);
u16 v16 = 0;
BufReadFmt(&it, "{2}", v16); // real: LOG_FATAL (non-raw). mutant: returns.
- In
Write.c:4094:
ok = ok && BufWriteFmt(&b, "{>8r}", (u64)0x0102030405060708ULL);
BufIter it = BufIterFromBuf(&b);
u64 v64 = 0;
ok = ok && BufReadFmt(&it, "{>8r}", v64);- In
Write.c:4629:
ok = ok && (BufLength(&b) == 2);
BufIter it = BufIterFromBuf(&b);
u16 v16 = 0;
bool rd_ok = BufReadFmt(&it, "{^2r}", v16);- In
Write.c:4760:
Buf b = BufInit(&alloc);
BufWriteFmt(&b, "{<1r}{<1r}", (u8)0x11, (u8)0x22); // 2 bytes available
BufIter it = BufIterFromBuf(&b);
u8 v8 = 0;
BufReadFmt(&it, "{<1r}{<1r}", v8); // 2 fields, 1 arg -> abort
- In
Write.c:5052:
bool ok = BufWriteFmt(&b, "{<2r}{>4r}", (u16)0x1234, (u32)0xAABBCCDD);
ok = ok && (BufLength(&b) == 6);
BufIter it = BufIterFromBuf(&b);
u16 a = 0;
u32 c = 0;- In
Read.c:1221:
ok = ok && BufPushBytes(&b, bytes, 4);
BufIter it = BufIterFromBuf(&b);
u32 v32 = 0;
bool rd_ok = BufReadFmt(&it, "{>4r}", v32);- In
Read.c:1254:
ok = ok && BufPushBytes(&b, bytes, 4);
BufIter it = BufIterFromBuf(&b);
u32 v32 = 0;
bool rd_ok = BufReadFmt(&it, "{<4r}", v32);- In
Read.c:1279:
ok = ok && BufPushBytes(&b, bytes, 4);
BufIter it = BufIterFromBuf(&b);
u32 v32 = 0;
bool rd_ok = BufReadFmt(&it, "{<4r}", v32);- In
Read.c:1314:
ok = ok && (BufLength(&b) == 4);
BufIter it = BufIterFromBuf(&b);
u32 v32 = 0;
bool rd_ok = BufReadFmt(&it, "{^4r}", v32);- In
Read.c:1356:
ok = ok && (BufLength(&b) == 8);
BufIter it = BufIterFromBuf(&b);
u64 v64 = 0;
bool rd_ok = BufReadFmt(&it, "{<8r}", v64);- In
Read.c:1383:
ok = ok && (BufLength(&b) == 8);
BufIter it = BufIterFromBuf(&b);
u64 v64 = 0;
bool rd_ok = BufReadFmt(&it, "{<8r}", v64);- In
Read.c:1413:
ok = ok && (BufLength(&b) == 8);
BufIter it = BufIterFromBuf(&b);
u64 v64 = 0;
bool rd_ok = BufReadFmt(&it, "{^8r}", v64);- In
Read.c:1594:
bool ok = BufAppendFmt(&b, "{<1r}", (u8)0xAB);
BufIter it = BufIterFromBuf(&b);
u8 out = 0;
ok = ok && BufReadFmt(&it, "{<1r}", out) && (out == 0xAB);- In
Read.c:2219:
Buf b = BufInit(&alloc);
bool ok = BufWriteFmt(&b, "{<2r}", (u16)0xBEEF);
BufIter it = BufIterFromBuf(&b);
u16 v = 0;
ok = ok && BufReadFmt(&it, "{<2r}", v) && (v == 0xBEEF);- In
Read.c:2237:
} got = {0};
bool ok = BufWriteFmt(&b, "{<8r}", (u64)0x0102030405060708ULL);
BufIter it = BufIterFromBuf(&b);
ok = ok && BufReadFmt(&it, "{<8r}", got.f) && (got.u == 0x0102030405060708ULL);
BufDeinit(&b);
Last updated on