+struct rsapriv_load_ctx {
+ void (*verror)(struct rsapriv_load_ctx *l,
+ FILE *maybe_f, bool_t unsup,
+ const char *message, va_list args);
+ bool_t (*postreadcheck)(struct rsapriv_load_ctx *l, FILE *f);
+ union {
+ struct {
+ struct cloc loc;
+ } apply;
+ } u;
+};
+
+#define LDFATAL(...) ({ load_error(l,0,0,__VA_ARGS__); goto error_out; })
+#define LDUNSUP(...) ({ load_error(l,0,1,__VA_ARGS__); goto error_out; })
+#define LDFATAL_FILE(...) ({ load_error(l,f,0,__VA_ARGS__); goto error_out; })
+#define LDUNSUP_FILE(...) ({ load_error(l,f,1,__VA_ARGS__); goto error_out; })
+#define FREE(b) ({ free((b)); (b)=0; })
+#define KEYFILE_GET(is) ({ \
+ uint##is##_t keyfile_get_tmp=keyfile_get_##is(l,f); \
+ if (!l->postreadcheck(l,f)) goto error_out; \
+ keyfile_get_tmp; \
+ })
+
+static uint32_t keyfile_get_32(struct rsapriv_load_ctx *l, FILE *f)