42 lines
1.1 KiB
C
42 lines
1.1 KiB
C
/* A stand-in for a library that hands out resources the way raylib does — a
|
|
* Load that allocates, an Unload that frees, a Get that answers something the
|
|
* library keeps — for programs/res-leaks.flan. Nothing here needs a window or
|
|
* a library installed.
|
|
*
|
|
* Thing has padding after `flag` and after `w`, so a key made from its bytes
|
|
* would read whatever those bytes happened to hold. */
|
|
|
|
#include <stdint.h>
|
|
#include <stdlib.h>
|
|
|
|
typedef struct {
|
|
int32_t id;
|
|
uint8_t flag;
|
|
float w;
|
|
void *data;
|
|
} Thing;
|
|
|
|
Thing LoadThing(int32_t id) {
|
|
Thing t = { id, 1, 0.5f, malloc(16) };
|
|
return t;
|
|
}
|
|
|
|
void UnloadThing(Thing t) { free(t.data); }
|
|
|
|
/* Changes the Thing in place, as ImageFormat changes an Image. */
|
|
void ThingGrow(Thing *t) {
|
|
void *d = realloc(t->data, 64);
|
|
if (d != NULL) t->data = d;
|
|
t->w *= 2.0f;
|
|
}
|
|
|
|
/* The library's own Thing, which a caller must not unload. */
|
|
Thing GetDefaultThing(void) {
|
|
Thing t = { 0, 0, 0.0f, NULL };
|
|
return t;
|
|
}
|
|
|
|
unsigned char *LoadBytes(int32_t n) { return (unsigned char *)malloc((size_t)n); }
|
|
|
|
void UnloadBytes(unsigned char *p) { free(p); }
|