Comment by apaprocki
9 hours ago
You can play tricks if you’re willing to compromise on the ABI:
typedef struct foo_ foo;
enum { FOO_SIZE = 64 };
foo *foo_init(void *p, size_t sz);
void foo_destroy(foo *p);
#define FOO_ALLOCA() \
foo_init(alloca(FOO_SIZE), FOO_SIZE)
Implementation (size checks, etc. elided):
struct foo_ {
uint32_t magic;
uint32_t val;
};
foo *foo_init(void *p, size_t sz) {
foo *f = (foo *)p;
f->magic = 1234;
f->val = 0;
return f;
}
Caller:
foo *f = FOO_ALLOCA();
// Can’t see inside
// APIs validate magic
No comments yet
Contribute on Hacker News ↗