std: change set_quirk_enabled to set_quirk
diff --git a/doc/changelog.md b/doc/changelog.md
index 0efed9b..2ec1c6c 100644
--- a/doc/changelog.md
+++ b/doc/changelog.md
@@ -3,6 +3,10 @@
 
 ## Work In Progress
 
+- Changed `set_quirk_enabled!(quirk: u32, enabled: bool)` to `set_quirk!(key:
+  u32, value: u64) status`.
+
+
 The dot points below probably aren't of interest unless you're _writing_ Wuffs
 code (instead of writing C/C++ code that _uses_ Wuffs' standard library).
 
diff --git a/doc/note/quirks.md b/doc/note/quirks.md
index 3f550c2..a24d1e3 100644
--- a/doc/note/quirks.md
+++ b/doc/note/quirks.md
@@ -32,7 +32,7 @@
 
 Each quirk is assigned a `uint32_t` value, packed using the [base38 namespace
 convention](/doc/note/base38-and-fourcc.md). Decoders and encoders can have a
-`set_quirk_enabled!(quirk base.u32, enabled base.bool)` method whose first
+`set_quirk!(key: base.u32, value: base.u64) base.status` method whose first
 argument is this `uint32_t` value.
 
 For example, the base38 encoding of `"gif "` and `"json"` is `0x0F8586` and
diff --git a/doc/std/compression-decoders.md b/doc/std/compression-decoders.md
index 6105f68..9835252 100644
--- a/doc/std/compression-decoders.md
+++ b/doc/std/compression-decoders.md
@@ -25,7 +25,7 @@
 
 In Wuffs syntax, the `base.io_transformer` methods are:
 
-- `set_quirk_enabled!(quirk: u32, enabled: bool)`
+- `set_quirk!(key: u32, value: u64) status`
 - `transform_io?(dst: io_writer, src: io_reader, workbuf: slice u8)`
 - `workbuf_len() range_ii_u64`
 
diff --git a/doc/std/hashers.md b/doc/std/hashers.md
index f71b2a3..a1eada8 100644
--- a/doc/std/hashers.md
+++ b/doc/std/hashers.md
@@ -23,7 +23,7 @@
 
 In Wuffs syntax, the `base.hasher_u32` methods are:
 
-- `set_quirk_enabled!(quirk: u32, enabled: bool)`
+- `set_quirk!(key: u32, value: u64) status`
 - `update_u32!(x: slice u8) u32`
 
 
diff --git a/doc/std/image-decoders.md b/doc/std/image-decoders.md
index 63698d5..e4ae665 100644
--- a/doc/std/image-decoders.md
+++ b/doc/std/image-decoders.md
@@ -107,7 +107,7 @@
 - `num_decoded_frame_configs() u64`
 - `num_decoded_frames() u64`
 - `restart_frame!(index: u64, io_position: u64) status`
-- `set_quirk_enabled!(quirk: u32, enabled: bool)`
+- `set_quirk!(key: u32, value: u64) status`
 - `set_report_metadata!(fourcc: u32, report: bool)`
 - `tell_me_more?(dst: io_writer, minfo: nptr more_information, src: io_reader)`
 - `workbuf_len() range_ii_u64`
diff --git a/example/gifplayer/gifplayer.c b/example/gifplayer/gifplayer.c
index efbe77b..997c9a5 100644
--- a/example/gifplayer/gifplayer.c
+++ b/example/gifplayer/gifplayer.c
@@ -353,8 +353,8 @@
   }
 
   if (g_flags.quirk_honor_background_color) {
-    wuffs_gif__decoder__set_quirk_enabled(
-        &dec, WUFFS_GIF__QUIRK_HONOR_BACKGROUND_COLOR, true);
+    wuffs_gif__decoder__set_quirk(&dec, WUFFS_GIF__QUIRK_HONOR_BACKGROUND_COLOR,
+                                  1);
   }
 
   wuffs_base__io_buffer src;
diff --git a/example/jsonptr/jsonptr.cc b/example/jsonptr/jsonptr.cc
index 1824f49..bffcf8a 100644
--- a/example/jsonptr/jsonptr.cc
+++ b/example/jsonptr/jsonptr.cc
@@ -976,21 +976,21 @@
           .message());
 
   if (g_flags.input_allow_comments) {
-    g_dec.set_quirk_enabled(WUFFS_JSON__QUIRK_ALLOW_COMMENT_BLOCK, true);
-    g_dec.set_quirk_enabled(WUFFS_JSON__QUIRK_ALLOW_COMMENT_LINE, true);
+    g_dec.set_quirk(WUFFS_JSON__QUIRK_ALLOW_COMMENT_BLOCK, 1);
+    g_dec.set_quirk(WUFFS_JSON__QUIRK_ALLOW_COMMENT_LINE, 1);
   }
   if (g_flags.input_allow_extra_comma) {
-    g_dec.set_quirk_enabled(WUFFS_JSON__QUIRK_ALLOW_EXTRA_COMMA, true);
+    g_dec.set_quirk(WUFFS_JSON__QUIRK_ALLOW_EXTRA_COMMA, 1);
   }
   if (g_flags.input_allow_inf_nan_numbers) {
-    g_dec.set_quirk_enabled(WUFFS_JSON__QUIRK_ALLOW_INF_NAN_NUMBERS, true);
+    g_dec.set_quirk(WUFFS_JSON__QUIRK_ALLOW_INF_NAN_NUMBERS, 1);
   }
 
   // Consume any optional trailing whitespace and comments. This isn't part of
   // the JSON spec, but it works better with line oriented Unix tools (such as
   // "echo 123 | jsonptr" where it's "echo", not "echo -n") or hand-edited JSON
   // files which can accidentally contain trailing whitespace.
-  g_dec.set_quirk_enabled(WUFFS_JSON__QUIRK_ALLOW_TRAILING_FILLER, true);
+  g_dec.set_quirk(WUFFS_JSON__QUIRK_ALLOW_TRAILING_FILLER, 1);
 
   return nullptr;
 }
diff --git a/fuzz/c/std/bzip2_fuzzer.c b/fuzz/c/std/bzip2_fuzzer.c
index 424ce82..54e8838 100644
--- a/fuzz/c/std/bzip2_fuzzer.c
+++ b/fuzz/c/std/bzip2_fuzzer.c
@@ -97,8 +97,8 @@
   // Ignore the checksum for 99.99%-ish of all input. When fuzzers generate
   // random input, the checkum is very unlikely to match. Still, it's useful to
   // verify that checksumming does not lead to e.g. buffer overflows.
-  wuffs_bzip2__decoder__set_quirk_enabled(
-      &dec, WUFFS_BASE__QUIRK_IGNORE_CHECKSUM, hash & 0xFFFE);
+  wuffs_bzip2__decoder__set_quirk(&dec, WUFFS_BASE__QUIRK_IGNORE_CHECKSUM,
+                                  hash & 0xFFFE);
 
   uint8_t dst_buffer[DST_BUFFER_ARRAY_SIZE];
   wuffs_base__io_buffer dst =
diff --git a/fuzz/c/std/gif_fuzzer.c b/fuzz/c/std/gif_fuzzer.c
index ba31182..8026a96 100644
--- a/fuzz/c/std/gif_fuzzer.c
+++ b/fuzz/c/std/gif_fuzzer.c
@@ -88,7 +88,7 @@
   for (uint32_t i = 0; quirks[i]; i++) {
     uint64_t bit = 1 << (i & 63);
     if (hash & bit) {
-      wuffs_gif__decoder__set_quirk_enabled(dec, quirks[i], true);
+      wuffs_gif__decoder__set_quirk(dec, quirks[i], 1);
     }
   }
 }
diff --git a/fuzz/c/std/json_fuzzer.cc b/fuzz/c/std/json_fuzzer.cc
index 231e8f8..db2b399 100644
--- a/fuzz/c/std/json_fuzzer.cc
+++ b/fuzz/c/std/json_fuzzer.cc
@@ -264,7 +264,7 @@
   for (uint32_t i = 0; g_quirks[i]; i++) {
     uint64_t bit = 1 << (i & 63);
     if (hash & bit) {
-      wuffs_json__decoder__set_quirk_enabled(dec, g_quirks[i], true);
+      wuffs_json__decoder__set_quirk(dec, g_quirks[i], 1);
     }
   }
 }
diff --git a/fuzz/c/std/zlib_fuzzer.c b/fuzz/c/std/zlib_fuzzer.c
index 9759de0..4a276b6 100644
--- a/fuzz/c/std/zlib_fuzzer.c
+++ b/fuzz/c/std/zlib_fuzzer.c
@@ -99,8 +99,8 @@
   // Ignore the checksum for 99.99%-ish of all input. When fuzzers generate
   // random input, the checkum is very unlikely to match. Still, it's useful to
   // verify that checksumming does not lead to e.g. buffer overflows.
-  wuffs_zlib__decoder__set_quirk_enabled(
-      &dec, WUFFS_BASE__QUIRK_IGNORE_CHECKSUM, hash & 0xFFFE);
+  wuffs_zlib__decoder__set_quirk(&dec, WUFFS_BASE__QUIRK_IGNORE_CHECKSUM,
+                                 hash & 0xFFFE);
 
   uint8_t dst_buffer[DST_BUFFER_ARRAY_SIZE];
   wuffs_base__io_buffer dst =
diff --git a/internal/cgen/auxiliary/cbor.cc b/internal/cgen/auxiliary/cbor.cc
index e38f62c..9cd9f25 100644
--- a/internal/cgen/auxiliary/cbor.cc
+++ b/internal/cgen/auxiliary/cbor.cc
@@ -70,7 +70,7 @@
       goto done;
     }
     for (size_t i = 0; i < quirks.repr.len; i++) {
-      dec->set_quirk_enabled(quirks.repr.ptr[i], true);
+      dec->set_quirk(quirks.repr.ptr[i], 1);
     }
 
     // Prepare the wuffs_base__tok_buffer. 256 tokens is 2KiB.
diff --git a/internal/cgen/auxiliary/image.cc b/internal/cgen/auxiliary/image.cc
index f46ea9b..08e1006 100644
--- a/internal/cgen/auxiliary/image.cc
+++ b/internal/cgen/auxiliary/image.cc
@@ -80,7 +80,7 @@
     case WUFFS_BASE__FOURCC__PNG: {
       auto dec = wuffs_png__decoder::alloc_as__wuffs_base__image_decoder();
       // Favor faster decodes over rejecting invalid checksums.
-      dec->set_quirk_enabled(WUFFS_BASE__QUIRK_IGNORE_CHECKSUM, true);
+      dec->set_quirk(WUFFS_BASE__QUIRK_IGNORE_CHECKSUM, 1);
       return dec;
     }
 #endif
@@ -376,7 +376,7 @@
 
     // Apply quirks.
     for (size_t i = 0; i < quirks.len; i++) {
-      image_decoder->set_quirk_enabled(quirks.ptr[i], true);
+      image_decoder->set_quirk(quirks.ptr[i], 1);
     }
 
     // Apply flags.
diff --git a/internal/cgen/auxiliary/json.cc b/internal/cgen/auxiliary/json.cc
index 5c3ee71..1dd7c9b 100644
--- a/internal/cgen/auxiliary/json.cc
+++ b/internal/cgen/auxiliary/json.cc
@@ -391,7 +391,7 @@
     }
     bool allow_tilde_n_tilde_r_tilde_t = false;
     for (size_t i = 0; i < quirks.repr.len; i++) {
-      dec->set_quirk_enabled(quirks.repr.ptr[i], true);
+      dec->set_quirk(quirks.repr.ptr[i], 1);
       if (quirks.repr.ptr[i] ==
           WUFFS_JSON__QUIRK_JSON_POINTER_ALLOW_TILDE_N_TILDE_R_TILDE_T) {
         allow_tilde_n_tilde_r_tilde_t = true;
diff --git a/lang/builtin/builtin.go b/lang/builtin/builtin.go
index 25e08e2..b907f84 100644
--- a/lang/builtin/builtin.go
+++ b/lang/builtin/builtin.go
@@ -875,7 +875,7 @@
 var InterfaceFuncs = []string{
 	// ---- hasher_u32
 
-	"hasher_u32.set_quirk_enabled!(quirk: u32, enabled: bool)",
+	"hasher_u32.set_quirk!(key: u32, value: u64) status",
 	"hasher_u32.update_u32!(x: roslice u8) u32",
 
 	// ---- image_decoder
@@ -890,21 +890,21 @@
 	"image_decoder.num_decoded_frame_configs() u64",
 	"image_decoder.num_decoded_frames() u64",
 	"image_decoder.restart_frame!(index: u64, io_position: u64) status",
-	"image_decoder.set_quirk_enabled!(quirk: u32, enabled: bool)",
+	"image_decoder.set_quirk!(key: u32, value: u64) status",
 	"image_decoder.set_report_metadata!(fourcc: u32, report: bool)",
 	"image_decoder.tell_me_more?(dst: io_writer, minfo: nptr more_information, src: io_reader)",
 	"image_decoder.workbuf_len() range_ii_u64",
 
 	// ---- io_transformer
 
-	"io_transformer.set_quirk_enabled!(quirk: u32, enabled: bool)",
+	"io_transformer.set_quirk!(key: u32, value: u64) status",
 	"io_transformer.transform_io?(dst: io_writer, src: io_reader, workbuf: slice u8)",
 	"io_transformer.workbuf_len() range_ii_u64",
 
 	// ---- token_decoder
 
 	"token_decoder.decode_tokens?(dst: token_writer, src: io_reader, workbuf: slice u8)",
-	"token_decoder.set_quirk_enabled!(quirk: u32, enabled: bool)",
+	"token_decoder.set_quirk!(key: u32, value: u64) status",
 	"token_decoder.workbuf_len() range_ii_u64",
 }
 
diff --git a/release/c/wuffs-unsupported-snapshot.c b/release/c/wuffs-unsupported-snapshot.c
index 2d1d427..e29195f 100644
--- a/release/c/wuffs-unsupported-snapshot.c
+++ b/release/c/wuffs-unsupported-snapshot.c
@@ -5741,10 +5741,10 @@
 extern const char wuffs_base__hasher_u32__vtable_name[];
 
 typedef struct wuffs_base__hasher_u32__func_ptrs__struct {
-  wuffs_base__empty_struct (*set_quirk_enabled)(
+  wuffs_base__status (*set_quirk)(
     void* self,
-    uint32_t a_quirk,
-    bool a_enabled);
+    uint32_t a_key,
+    uint64_t a_value);
   uint32_t (*update_u32)(
     void* self,
     wuffs_base__slice_u8 a_x);
@@ -5752,11 +5752,11 @@
 
 typedef struct wuffs_base__hasher_u32__struct wuffs_base__hasher_u32;
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_base__hasher_u32__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_base__hasher_u32__set_quirk(
     wuffs_base__hasher_u32* self,
-    uint32_t a_quirk,
-    bool a_enabled);
+    uint32_t a_key,
+    uint64_t a_value);
 
 WUFFS_BASE__MAYBE_STATIC uint32_t
 wuffs_base__hasher_u32__update_u32(
@@ -5777,12 +5777,12 @@
   using unique_ptr = std::unique_ptr<wuffs_base__hasher_u32, decltype(&free)>;
 #endif
 
-  inline wuffs_base__empty_struct
-  set_quirk_enabled(
-      uint32_t a_quirk,
-      bool a_enabled) {
-    return wuffs_base__hasher_u32__set_quirk_enabled(
-        this, a_quirk, a_enabled);
+  inline wuffs_base__status
+  set_quirk(
+      uint32_t a_key,
+      uint64_t a_value) {
+    return wuffs_base__hasher_u32__set_quirk(
+        this, a_key, a_value);
   }
 
   inline uint32_t
@@ -5829,10 +5829,10 @@
     void* self,
     uint64_t a_index,
     uint64_t a_io_position);
-  wuffs_base__empty_struct (*set_quirk_enabled)(
+  wuffs_base__status (*set_quirk)(
     void* self,
-    uint32_t a_quirk,
-    bool a_enabled);
+    uint32_t a_key,
+    uint64_t a_value);
   wuffs_base__empty_struct (*set_report_metadata)(
     void* self,
     uint32_t a_fourcc,
@@ -5891,11 +5891,11 @@
     uint64_t a_index,
     uint64_t a_io_position);
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_base__image_decoder__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_base__image_decoder__set_quirk(
     wuffs_base__image_decoder* self,
-    uint32_t a_quirk,
-    bool a_enabled);
+    uint32_t a_key,
+    uint64_t a_value);
 
 WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
 wuffs_base__image_decoder__set_report_metadata(
@@ -5983,12 +5983,12 @@
         this, a_index, a_io_position);
   }
 
-  inline wuffs_base__empty_struct
-  set_quirk_enabled(
-      uint32_t a_quirk,
-      bool a_enabled) {
-    return wuffs_base__image_decoder__set_quirk_enabled(
-        this, a_quirk, a_enabled);
+  inline wuffs_base__status
+  set_quirk(
+      uint32_t a_key,
+      uint64_t a_value) {
+    return wuffs_base__image_decoder__set_quirk(
+        this, a_key, a_value);
   }
 
   inline wuffs_base__empty_struct
@@ -6023,10 +6023,10 @@
 extern const char wuffs_base__io_transformer__vtable_name[];
 
 typedef struct wuffs_base__io_transformer__func_ptrs__struct {
-  wuffs_base__empty_struct (*set_quirk_enabled)(
+  wuffs_base__status (*set_quirk)(
     void* self,
-    uint32_t a_quirk,
-    bool a_enabled);
+    uint32_t a_key,
+    uint64_t a_value);
   wuffs_base__status (*transform_io)(
     void* self,
     wuffs_base__io_buffer* a_dst,
@@ -6038,11 +6038,11 @@
 
 typedef struct wuffs_base__io_transformer__struct wuffs_base__io_transformer;
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_base__io_transformer__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_base__io_transformer__set_quirk(
     wuffs_base__io_transformer* self,
-    uint32_t a_quirk,
-    bool a_enabled);
+    uint32_t a_key,
+    uint64_t a_value);
 
 WUFFS_BASE__MAYBE_STATIC wuffs_base__status
 wuffs_base__io_transformer__transform_io(
@@ -6069,12 +6069,12 @@
   using unique_ptr = std::unique_ptr<wuffs_base__io_transformer, decltype(&free)>;
 #endif
 
-  inline wuffs_base__empty_struct
-  set_quirk_enabled(
-      uint32_t a_quirk,
-      bool a_enabled) {
-    return wuffs_base__io_transformer__set_quirk_enabled(
-        this, a_quirk, a_enabled);
+  inline wuffs_base__status
+  set_quirk(
+      uint32_t a_key,
+      uint64_t a_value) {
+    return wuffs_base__io_transformer__set_quirk(
+        this, a_key, a_value);
   }
 
   inline wuffs_base__status
@@ -6106,10 +6106,10 @@
     wuffs_base__token_buffer* a_dst,
     wuffs_base__io_buffer* a_src,
     wuffs_base__slice_u8 a_workbuf);
-  wuffs_base__empty_struct (*set_quirk_enabled)(
+  wuffs_base__status (*set_quirk)(
     void* self,
-    uint32_t a_quirk,
-    bool a_enabled);
+    uint32_t a_key,
+    uint64_t a_value);
   wuffs_base__range_ii_u64 (*workbuf_len)(
     const void* self);
 } wuffs_base__token_decoder__func_ptrs;
@@ -6123,11 +6123,11 @@
     wuffs_base__io_buffer* a_src,
     wuffs_base__slice_u8 a_workbuf);
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_base__token_decoder__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_base__token_decoder__set_quirk(
     wuffs_base__token_decoder* self,
-    uint32_t a_quirk,
-    bool a_enabled);
+    uint32_t a_key,
+    uint64_t a_value);
 
 WUFFS_BASE__MAYBE_STATIC wuffs_base__range_ii_u64
 wuffs_base__token_decoder__workbuf_len(
@@ -6156,12 +6156,12 @@
         this, a_dst, a_src, a_workbuf);
   }
 
-  inline wuffs_base__empty_struct
-  set_quirk_enabled(
-      uint32_t a_quirk,
-      bool a_enabled) {
-    return wuffs_base__token_decoder__set_quirk_enabled(
-        this, a_quirk, a_enabled);
+  inline wuffs_base__status
+  set_quirk(
+      uint32_t a_key,
+      uint64_t a_value) {
+    return wuffs_base__token_decoder__set_quirk(
+        this, a_key, a_value);
   }
 
   inline wuffs_base__range_ii_u64
@@ -6238,11 +6238,11 @@
 
 // ---------------- Public Function Prototypes
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_adler32__hasher__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_adler32__hasher__set_quirk(
     wuffs_adler32__hasher* self,
-    uint32_t a_quirk,
-    bool a_enabled);
+    uint32_t a_key,
+    uint64_t a_value);
 
 WUFFS_BASE__MAYBE_STATIC uint32_t
 wuffs_adler32__hasher__update_u32(
@@ -6346,11 +6346,11 @@
     return (wuffs_base__hasher_u32*)this;
   }
 
-  inline wuffs_base__empty_struct
-  set_quirk_enabled(
-      uint32_t a_quirk,
-      bool a_enabled) {
-    return wuffs_adler32__hasher__set_quirk_enabled(this, a_quirk, a_enabled);
+  inline wuffs_base__status
+  set_quirk(
+      uint32_t a_key,
+      uint64_t a_value) {
+    return wuffs_adler32__hasher__set_quirk(this, a_key, a_value);
   }
 
   inline uint32_t
@@ -6431,11 +6431,11 @@
 
 // ---------------- Public Function Prototypes
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_bmp__decoder__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_bmp__decoder__set_quirk(
     wuffs_bmp__decoder* self,
-    uint32_t a_quirk,
-    bool a_enabled);
+    uint32_t a_key,
+    uint64_t a_value);
 
 WUFFS_BASE__MAYBE_STATIC wuffs_base__status
 wuffs_bmp__decoder__decode_image_config(
@@ -6638,11 +6638,11 @@
     return (wuffs_base__image_decoder*)this;
   }
 
-  inline wuffs_base__empty_struct
-  set_quirk_enabled(
-      uint32_t a_quirk,
-      bool a_enabled) {
-    return wuffs_bmp__decoder__set_quirk_enabled(this, a_quirk, a_enabled);
+  inline wuffs_base__status
+  set_quirk(
+      uint32_t a_key,
+      uint64_t a_value) {
+    return wuffs_bmp__decoder__set_quirk(this, a_key, a_value);
   }
 
   inline wuffs_base__status
@@ -6793,11 +6793,11 @@
 
 // ---------------- Public Function Prototypes
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_bzip2__decoder__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_bzip2__decoder__set_quirk(
     wuffs_bzip2__decoder* self,
-    uint32_t a_quirk,
-    bool a_enabled);
+    uint32_t a_key,
+    uint64_t a_value);
 
 WUFFS_BASE__MAYBE_STATIC wuffs_base__range_ii_u64
 wuffs_bzip2__decoder__workbuf_len(
@@ -6966,11 +6966,11 @@
     return (wuffs_base__io_transformer*)this;
   }
 
-  inline wuffs_base__empty_struct
-  set_quirk_enabled(
-      uint32_t a_quirk,
-      bool a_enabled) {
-    return wuffs_bzip2__decoder__set_quirk_enabled(this, a_quirk, a_enabled);
+  inline wuffs_base__status
+  set_quirk(
+      uint32_t a_key,
+      uint64_t a_value) {
+    return wuffs_bzip2__decoder__set_quirk(this, a_key, a_value);
   }
 
   inline wuffs_base__range_ii_u64
@@ -7072,11 +7072,11 @@
 
 // ---------------- Public Function Prototypes
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_cbor__decoder__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_cbor__decoder__set_quirk(
     wuffs_cbor__decoder* self,
-    uint32_t a_quirk,
-    bool a_enabled);
+    uint32_t a_key,
+    uint64_t a_value);
 
 WUFFS_BASE__MAYBE_STATIC wuffs_base__range_ii_u64
 wuffs_cbor__decoder__workbuf_len(
@@ -7195,11 +7195,11 @@
     return (wuffs_base__token_decoder*)this;
   }
 
-  inline wuffs_base__empty_struct
-  set_quirk_enabled(
-      uint32_t a_quirk,
-      bool a_enabled) {
-    return wuffs_cbor__decoder__set_quirk_enabled(this, a_quirk, a_enabled);
+  inline wuffs_base__status
+  set_quirk(
+      uint32_t a_key,
+      uint64_t a_value) {
+    return wuffs_cbor__decoder__set_quirk(this, a_key, a_value);
   }
 
   inline wuffs_base__range_ii_u64
@@ -7280,11 +7280,11 @@
 
 // ---------------- Public Function Prototypes
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_crc32__ieee_hasher__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_crc32__ieee_hasher__set_quirk(
     wuffs_crc32__ieee_hasher* self,
-    uint32_t a_quirk,
-    bool a_enabled);
+    uint32_t a_key,
+    uint64_t a_value);
 
 WUFFS_BASE__MAYBE_STATIC uint32_t
 wuffs_crc32__ieee_hasher__update_u32(
@@ -7387,11 +7387,11 @@
     return (wuffs_base__hasher_u32*)this;
   }
 
-  inline wuffs_base__empty_struct
-  set_quirk_enabled(
-      uint32_t a_quirk,
-      bool a_enabled) {
-    return wuffs_crc32__ieee_hasher__set_quirk_enabled(this, a_quirk, a_enabled);
+  inline wuffs_base__status
+  set_quirk(
+      uint32_t a_key,
+      uint64_t a_value) {
+    return wuffs_crc32__ieee_hasher__set_quirk(this, a_key, a_value);
   }
 
   inline uint32_t
@@ -7487,11 +7487,11 @@
     wuffs_deflate__decoder* self,
     wuffs_base__slice_u8 a_hist);
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_deflate__decoder__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_deflate__decoder__set_quirk(
     wuffs_deflate__decoder* self,
-    uint32_t a_quirk,
-    bool a_enabled);
+    uint32_t a_key,
+    uint64_t a_value);
 
 WUFFS_BASE__MAYBE_STATIC wuffs_base__range_ii_u64
 wuffs_deflate__decoder__workbuf_len(
@@ -7656,11 +7656,11 @@
     return wuffs_deflate__decoder__add_history(this, a_hist);
   }
 
-  inline wuffs_base__empty_struct
-  set_quirk_enabled(
-      uint32_t a_quirk,
-      bool a_enabled) {
-    return wuffs_deflate__decoder__set_quirk_enabled(this, a_quirk, a_enabled);
+  inline wuffs_base__status
+  set_quirk(
+      uint32_t a_key,
+      uint64_t a_value) {
+    return wuffs_deflate__decoder__set_quirk(this, a_key, a_value);
   }
 
   inline wuffs_base__range_ii_u64
@@ -7746,11 +7746,11 @@
 
 // ---------------- Public Function Prototypes
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_lzw__decoder__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_lzw__decoder__set_quirk(
     wuffs_lzw__decoder* self,
-    uint32_t a_quirk,
-    bool a_enabled);
+    uint32_t a_key,
+    uint64_t a_value);
 
 WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
 wuffs_lzw__decoder__set_literal_width(
@@ -7885,11 +7885,11 @@
     return (wuffs_base__io_transformer*)this;
   }
 
-  inline wuffs_base__empty_struct
-  set_quirk_enabled(
-      uint32_t a_quirk,
-      bool a_enabled) {
-    return wuffs_lzw__decoder__set_quirk_enabled(this, a_quirk, a_enabled);
+  inline wuffs_base__status
+  set_quirk(
+      uint32_t a_key,
+      uint64_t a_value) {
+    return wuffs_lzw__decoder__set_quirk(this, a_key, a_value);
   }
 
   inline wuffs_base__empty_struct
@@ -8005,11 +8005,11 @@
 
 // ---------------- Public Function Prototypes
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_gif__decoder__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_gif__decoder__set_quirk(
     wuffs_gif__decoder* self,
-    uint32_t a_quirk,
-    bool a_enabled);
+    uint32_t a_key,
+    uint64_t a_value);
 
 WUFFS_BASE__MAYBE_STATIC wuffs_base__status
 wuffs_gif__decoder__decode_image_config(
@@ -8269,11 +8269,11 @@
     return (wuffs_base__image_decoder*)this;
   }
 
-  inline wuffs_base__empty_struct
-  set_quirk_enabled(
-      uint32_t a_quirk,
-      bool a_enabled) {
-    return wuffs_gif__decoder__set_quirk_enabled(this, a_quirk, a_enabled);
+  inline wuffs_base__status
+  set_quirk(
+      uint32_t a_key,
+      uint64_t a_value) {
+    return wuffs_gif__decoder__set_quirk(this, a_key, a_value);
   }
 
   inline wuffs_base__status
@@ -8420,11 +8420,11 @@
 
 // ---------------- Public Function Prototypes
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_gzip__decoder__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_gzip__decoder__set_quirk(
     wuffs_gzip__decoder* self,
-    uint32_t a_quirk,
-    bool a_enabled);
+    uint32_t a_key,
+    uint64_t a_value);
 
 WUFFS_BASE__MAYBE_STATIC wuffs_base__range_ii_u64
 wuffs_gzip__decoder__workbuf_len(
@@ -8545,11 +8545,11 @@
     return (wuffs_base__io_transformer*)this;
   }
 
-  inline wuffs_base__empty_struct
-  set_quirk_enabled(
-      uint32_t a_quirk,
-      bool a_enabled) {
-    return wuffs_gzip__decoder__set_quirk_enabled(this, a_quirk, a_enabled);
+  inline wuffs_base__status
+  set_quirk(
+      uint32_t a_key,
+      uint64_t a_value) {
+    return wuffs_gzip__decoder__set_quirk(this, a_key, a_value);
   }
 
   inline wuffs_base__range_ii_u64
@@ -8687,11 +8687,11 @@
 
 // ---------------- Public Function Prototypes
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_json__decoder__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_json__decoder__set_quirk(
     wuffs_json__decoder* self,
-    uint32_t a_quirk,
-    bool a_enabled);
+    uint32_t a_key,
+    uint64_t a_value);
 
 WUFFS_BASE__MAYBE_STATIC wuffs_base__range_ii_u64
 wuffs_json__decoder__workbuf_len(
@@ -8817,11 +8817,11 @@
     return (wuffs_base__token_decoder*)this;
   }
 
-  inline wuffs_base__empty_struct
-  set_quirk_enabled(
-      uint32_t a_quirk,
-      bool a_enabled) {
-    return wuffs_json__decoder__set_quirk_enabled(this, a_quirk, a_enabled);
+  inline wuffs_base__status
+  set_quirk(
+      uint32_t a_key,
+      uint64_t a_value) {
+    return wuffs_json__decoder__set_quirk(this, a_key, a_value);
   }
 
   inline wuffs_base__range_ii_u64
@@ -8908,11 +8908,11 @@
 
 // ---------------- Public Function Prototypes
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_nie__decoder__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_nie__decoder__set_quirk(
     wuffs_nie__decoder* self,
-    uint32_t a_quirk,
-    bool a_enabled);
+    uint32_t a_key,
+    uint64_t a_value);
 
 WUFFS_BASE__MAYBE_STATIC wuffs_base__status
 wuffs_nie__decoder__decode_image_config(
@@ -9085,11 +9085,11 @@
     return (wuffs_base__image_decoder*)this;
   }
 
-  inline wuffs_base__empty_struct
-  set_quirk_enabled(
-      uint32_t a_quirk,
-      bool a_enabled) {
-    return wuffs_nie__decoder__set_quirk_enabled(this, a_quirk, a_enabled);
+  inline wuffs_base__status
+  set_quirk(
+      uint32_t a_key,
+      uint64_t a_value) {
+    return wuffs_nie__decoder__set_quirk(this, a_key, a_value);
   }
 
   inline wuffs_base__status
@@ -9249,11 +9249,11 @@
     wuffs_zlib__decoder* self,
     wuffs_base__slice_u8 a_dict);
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_zlib__decoder__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_zlib__decoder__set_quirk(
     wuffs_zlib__decoder* self,
-    uint32_t a_quirk,
-    bool a_enabled);
+    uint32_t a_key,
+    uint64_t a_value);
 
 WUFFS_BASE__MAYBE_STATIC wuffs_base__range_ii_u64
 wuffs_zlib__decoder__workbuf_len(
@@ -9390,11 +9390,11 @@
     return wuffs_zlib__decoder__add_dictionary(this, a_dict);
   }
 
-  inline wuffs_base__empty_struct
-  set_quirk_enabled(
-      uint32_t a_quirk,
-      bool a_enabled) {
-    return wuffs_zlib__decoder__set_quirk_enabled(this, a_quirk, a_enabled);
+  inline wuffs_base__status
+  set_quirk(
+      uint32_t a_key,
+      uint64_t a_value) {
+    return wuffs_zlib__decoder__set_quirk(this, a_key, a_value);
   }
 
   inline wuffs_base__range_ii_u64
@@ -9491,11 +9491,11 @@
 
 // ---------------- Public Function Prototypes
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_png__decoder__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_png__decoder__set_quirk(
     wuffs_png__decoder* self,
-    uint32_t a_quirk,
-    bool a_enabled);
+    uint32_t a_key,
+    uint64_t a_value);
 
 WUFFS_BASE__MAYBE_STATIC wuffs_base__status
 wuffs_png__decoder__decode_image_config(
@@ -9811,11 +9811,11 @@
     return (wuffs_base__image_decoder*)this;
   }
 
-  inline wuffs_base__empty_struct
-  set_quirk_enabled(
-      uint32_t a_quirk,
-      bool a_enabled) {
-    return wuffs_png__decoder__set_quirk_enabled(this, a_quirk, a_enabled);
+  inline wuffs_base__status
+  set_quirk(
+      uint32_t a_key,
+      uint64_t a_value) {
+    return wuffs_png__decoder__set_quirk(this, a_key, a_value);
   }
 
   inline wuffs_base__status
@@ -9961,11 +9961,11 @@
 
 // ---------------- Public Function Prototypes
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_tga__decoder__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_tga__decoder__set_quirk(
     wuffs_tga__decoder* self,
-    uint32_t a_quirk,
-    bool a_enabled);
+    uint32_t a_key,
+    uint64_t a_value);
 
 WUFFS_BASE__MAYBE_STATIC wuffs_base__status
 wuffs_tga__decoder__decode_image_config(
@@ -10164,11 +10164,11 @@
     return (wuffs_base__image_decoder*)this;
   }
 
-  inline wuffs_base__empty_struct
-  set_quirk_enabled(
-      uint32_t a_quirk,
-      bool a_enabled) {
-    return wuffs_tga__decoder__set_quirk_enabled(this, a_quirk, a_enabled);
+  inline wuffs_base__status
+  set_quirk(
+      uint32_t a_key,
+      uint64_t a_value) {
+    return wuffs_tga__decoder__set_quirk(this, a_key, a_value);
   }
 
   inline wuffs_base__status
@@ -10312,11 +10312,11 @@
 
 // ---------------- Public Function Prototypes
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_wbmp__decoder__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_wbmp__decoder__set_quirk(
     wuffs_wbmp__decoder* self,
-    uint32_t a_quirk,
-    bool a_enabled);
+    uint32_t a_key,
+    uint64_t a_value);
 
 WUFFS_BASE__MAYBE_STATIC wuffs_base__status
 wuffs_wbmp__decoder__decode_image_config(
@@ -10495,11 +10495,11 @@
     return (wuffs_base__image_decoder*)this;
   }
 
-  inline wuffs_base__empty_struct
-  set_quirk_enabled(
-      uint32_t a_quirk,
-      bool a_enabled) {
-    return wuffs_wbmp__decoder__set_quirk_enabled(this, a_quirk, a_enabled);
+  inline wuffs_base__status
+  set_quirk(
+      uint32_t a_key,
+      uint64_t a_value) {
+    return wuffs_wbmp__decoder__set_quirk(this, a_key, a_value);
   }
 
   inline wuffs_base__status
@@ -12030,16 +12030,19 @@
 
 // ---------------- Interface Definitions.
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_base__hasher_u32__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_base__hasher_u32__set_quirk(
     wuffs_base__hasher_u32* self,
-    uint32_t a_quirk,
-    bool a_enabled) {
+    uint32_t a_key,
+    uint64_t a_value) {
   if (!self) {
-    return wuffs_base__make_empty_struct();
+    return wuffs_base__make_status(wuffs_base__error__bad_receiver);
   }
   if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
-    return wuffs_base__make_empty_struct();
+    return wuffs_base__make_status(
+        (self->private_impl.magic == WUFFS_BASE__DISABLED)
+            ? wuffs_base__error__disabled_by_previous_error
+            : wuffs_base__error__initialize_not_called);
   }
 
   const wuffs_base__vtable* v = &self->private_impl.first_vtable;
@@ -12048,14 +12051,14 @@
     if (v->vtable_name == wuffs_base__hasher_u32__vtable_name) {
       const wuffs_base__hasher_u32__func_ptrs* func_ptrs =
           (const wuffs_base__hasher_u32__func_ptrs*)(v->function_pointers);
-      return (*func_ptrs->set_quirk_enabled)(self, a_quirk, a_enabled);
+      return (*func_ptrs->set_quirk)(self, a_key, a_value);
     } else if (v->vtable_name == NULL) {
       break;
     }
     v++;
   }
 
-  return wuffs_base__make_empty_struct();
+  return wuffs_base__make_status(wuffs_base__error__bad_vtable);
 }
 
 WUFFS_BASE__MAYBE_STATIC uint32_t
@@ -12322,16 +12325,19 @@
   return wuffs_base__make_status(wuffs_base__error__bad_vtable);
 }
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_base__image_decoder__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_base__image_decoder__set_quirk(
     wuffs_base__image_decoder* self,
-    uint32_t a_quirk,
-    bool a_enabled) {
+    uint32_t a_key,
+    uint64_t a_value) {
   if (!self) {
-    return wuffs_base__make_empty_struct();
+    return wuffs_base__make_status(wuffs_base__error__bad_receiver);
   }
   if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
-    return wuffs_base__make_empty_struct();
+    return wuffs_base__make_status(
+        (self->private_impl.magic == WUFFS_BASE__DISABLED)
+            ? wuffs_base__error__disabled_by_previous_error
+            : wuffs_base__error__initialize_not_called);
   }
 
   const wuffs_base__vtable* v = &self->private_impl.first_vtable;
@@ -12340,14 +12346,14 @@
     if (v->vtable_name == wuffs_base__image_decoder__vtable_name) {
       const wuffs_base__image_decoder__func_ptrs* func_ptrs =
           (const wuffs_base__image_decoder__func_ptrs*)(v->function_pointers);
-      return (*func_ptrs->set_quirk_enabled)(self, a_quirk, a_enabled);
+      return (*func_ptrs->set_quirk)(self, a_key, a_value);
     } else if (v->vtable_name == NULL) {
       break;
     }
     v++;
   }
 
-  return wuffs_base__make_empty_struct();
+  return wuffs_base__make_status(wuffs_base__error__bad_vtable);
 }
 
 WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
@@ -12439,16 +12445,19 @@
 
 // --------
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_base__io_transformer__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_base__io_transformer__set_quirk(
     wuffs_base__io_transformer* self,
-    uint32_t a_quirk,
-    bool a_enabled) {
+    uint32_t a_key,
+    uint64_t a_value) {
   if (!self) {
-    return wuffs_base__make_empty_struct();
+    return wuffs_base__make_status(wuffs_base__error__bad_receiver);
   }
   if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
-    return wuffs_base__make_empty_struct();
+    return wuffs_base__make_status(
+        (self->private_impl.magic == WUFFS_BASE__DISABLED)
+            ? wuffs_base__error__disabled_by_previous_error
+            : wuffs_base__error__initialize_not_called);
   }
 
   const wuffs_base__vtable* v = &self->private_impl.first_vtable;
@@ -12457,14 +12466,14 @@
     if (v->vtable_name == wuffs_base__io_transformer__vtable_name) {
       const wuffs_base__io_transformer__func_ptrs* func_ptrs =
           (const wuffs_base__io_transformer__func_ptrs*)(v->function_pointers);
-      return (*func_ptrs->set_quirk_enabled)(self, a_quirk, a_enabled);
+      return (*func_ptrs->set_quirk)(self, a_key, a_value);
     } else if (v->vtable_name == NULL) {
       break;
     }
     v++;
   }
 
-  return wuffs_base__make_empty_struct();
+  return wuffs_base__make_status(wuffs_base__error__bad_vtable);
 }
 
 WUFFS_BASE__MAYBE_STATIC wuffs_base__status
@@ -12560,16 +12569,19 @@
   return wuffs_base__make_status(wuffs_base__error__bad_vtable);
 }
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_base__token_decoder__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_base__token_decoder__set_quirk(
     wuffs_base__token_decoder* self,
-    uint32_t a_quirk,
-    bool a_enabled) {
+    uint32_t a_key,
+    uint64_t a_value) {
   if (!self) {
-    return wuffs_base__make_empty_struct();
+    return wuffs_base__make_status(wuffs_base__error__bad_receiver);
   }
   if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
-    return wuffs_base__make_empty_struct();
+    return wuffs_base__make_status(
+        (self->private_impl.magic == WUFFS_BASE__DISABLED)
+            ? wuffs_base__error__disabled_by_previous_error
+            : wuffs_base__error__initialize_not_called);
   }
 
   const wuffs_base__vtable* v = &self->private_impl.first_vtable;
@@ -12578,14 +12590,14 @@
     if (v->vtable_name == wuffs_base__token_decoder__vtable_name) {
       const wuffs_base__token_decoder__func_ptrs* func_ptrs =
           (const wuffs_base__token_decoder__func_ptrs*)(v->function_pointers);
-      return (*func_ptrs->set_quirk_enabled)(self, a_quirk, a_enabled);
+      return (*func_ptrs->set_quirk)(self, a_key, a_value);
     } else if (v->vtable_name == NULL) {
       break;
     }
     v++;
   }
 
-  return wuffs_base__make_empty_struct();
+  return wuffs_base__make_status(wuffs_base__error__bad_vtable);
 }
 
 WUFFS_BASE__MAYBE_STATIC wuffs_base__range_ii_u64
@@ -22069,9 +22081,9 @@
 
 const wuffs_base__hasher_u32__func_ptrs
 wuffs_adler32__hasher__func_ptrs_for__wuffs_base__hasher_u32 = {
-  (wuffs_base__empty_struct(*)(void*,
+  (wuffs_base__status(*)(void*,
       uint32_t,
-      bool))(&wuffs_adler32__hasher__set_quirk_enabled),
+      uint64_t))(&wuffs_adler32__hasher__set_quirk),
   (uint32_t(*)(void*,
       wuffs_base__slice_u8))(&wuffs_adler32__hasher__update_u32),
 };
@@ -22149,14 +22161,24 @@
 
 // ---------------- Function Implementations
 
-// -------- func adler32.hasher.set_quirk_enabled
+// -------- func adler32.hasher.set_quirk
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_adler32__hasher__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_adler32__hasher__set_quirk(
     wuffs_adler32__hasher* self,
-    uint32_t a_quirk,
-    bool a_enabled) {
-  return wuffs_base__make_empty_struct();
+    uint32_t a_key,
+    uint64_t a_value) {
+  if (!self) {
+    return wuffs_base__make_status(wuffs_base__error__bad_receiver);
+  }
+  if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
+    return wuffs_base__make_status(
+        (self->private_impl.magic == WUFFS_BASE__DISABLED)
+        ? wuffs_base__error__disabled_by_previous_error
+        : wuffs_base__error__initialize_not_called);
+  }
+
+  return wuffs_base__make_status(wuffs_base__error__unsupported_option);
 }
 
 // -------- func adler32.hasher.update_u32
@@ -22590,9 +22612,9 @@
   (wuffs_base__status(*)(void*,
       uint64_t,
       uint64_t))(&wuffs_bmp__decoder__restart_frame),
-  (wuffs_base__empty_struct(*)(void*,
+  (wuffs_base__status(*)(void*,
       uint32_t,
-      bool))(&wuffs_bmp__decoder__set_quirk_enabled),
+      uint64_t))(&wuffs_bmp__decoder__set_quirk),
   (wuffs_base__empty_struct(*)(void*,
       uint32_t,
       bool))(&wuffs_bmp__decoder__set_report_metadata),
@@ -22674,14 +22696,24 @@
 
 // ---------------- Function Implementations
 
-// -------- func bmp.decoder.set_quirk_enabled
+// -------- func bmp.decoder.set_quirk
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_bmp__decoder__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_bmp__decoder__set_quirk(
     wuffs_bmp__decoder* self,
-    uint32_t a_quirk,
-    bool a_enabled) {
-  return wuffs_base__make_empty_struct();
+    uint32_t a_key,
+    uint64_t a_value) {
+  if (!self) {
+    return wuffs_base__make_status(wuffs_base__error__bad_receiver);
+  }
+  if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
+    return wuffs_base__make_status(
+        (self->private_impl.magic == WUFFS_BASE__DISABLED)
+        ? wuffs_base__error__disabled_by_previous_error
+        : wuffs_base__error__initialize_not_called);
+  }
+
+  return wuffs_base__make_status(wuffs_base__error__unsupported_option);
 }
 
 // -------- func bmp.decoder.decode_image_config
@@ -25284,9 +25316,9 @@
 
 const wuffs_base__io_transformer__func_ptrs
 wuffs_bzip2__decoder__func_ptrs_for__wuffs_base__io_transformer = {
-  (wuffs_base__empty_struct(*)(void*,
+  (wuffs_base__status(*)(void*,
       uint32_t,
-      bool))(&wuffs_bzip2__decoder__set_quirk_enabled),
+      uint64_t))(&wuffs_bzip2__decoder__set_quirk),
   (wuffs_base__status(*)(void*,
       wuffs_base__io_buffer*,
       wuffs_base__io_buffer*,
@@ -25365,24 +25397,28 @@
 
 // ---------------- Function Implementations
 
-// -------- func bzip2.decoder.set_quirk_enabled
+// -------- func bzip2.decoder.set_quirk
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_bzip2__decoder__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_bzip2__decoder__set_quirk(
     wuffs_bzip2__decoder* self,
-    uint32_t a_quirk,
-    bool a_enabled) {
+    uint32_t a_key,
+    uint64_t a_value) {
   if (!self) {
-    return wuffs_base__make_empty_struct();
+    return wuffs_base__make_status(wuffs_base__error__bad_receiver);
   }
   if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
-    return wuffs_base__make_empty_struct();
+    return wuffs_base__make_status(
+        (self->private_impl.magic == WUFFS_BASE__DISABLED)
+        ? wuffs_base__error__disabled_by_previous_error
+        : wuffs_base__error__initialize_not_called);
   }
 
-  if (a_quirk == 1) {
-    self->private_impl.f_ignore_checksum = a_enabled;
+  if (a_key == 1) {
+    self->private_impl.f_ignore_checksum = (a_value > 0);
+    return wuffs_base__make_status(NULL);
   }
-  return wuffs_base__make_empty_struct();
+  return wuffs_base__make_status(wuffs_base__error__unsupported_option);
 }
 
 // -------- func bzip2.decoder.workbuf_len
@@ -26804,9 +26840,9 @@
       wuffs_base__token_buffer*,
       wuffs_base__io_buffer*,
       wuffs_base__slice_u8))(&wuffs_cbor__decoder__decode_tokens),
-  (wuffs_base__empty_struct(*)(void*,
+  (wuffs_base__status(*)(void*,
       uint32_t,
-      bool))(&wuffs_cbor__decoder__set_quirk_enabled),
+      uint64_t))(&wuffs_cbor__decoder__set_quirk),
   (wuffs_base__range_ii_u64(*)(const void*))(&wuffs_cbor__decoder__workbuf_len),
 };
 
@@ -26881,14 +26917,24 @@
 
 // ---------------- Function Implementations
 
-// -------- func cbor.decoder.set_quirk_enabled
+// -------- func cbor.decoder.set_quirk
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_cbor__decoder__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_cbor__decoder__set_quirk(
     wuffs_cbor__decoder* self,
-    uint32_t a_quirk,
-    bool a_enabled) {
-  return wuffs_base__make_empty_struct();
+    uint32_t a_key,
+    uint64_t a_value) {
+  if (!self) {
+    return wuffs_base__make_status(wuffs_base__error__bad_receiver);
+  }
+  if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
+    return wuffs_base__make_status(
+        (self->private_impl.magic == WUFFS_BASE__DISABLED)
+        ? wuffs_base__error__disabled_by_previous_error
+        : wuffs_base__error__initialize_not_called);
+  }
+
+  return wuffs_base__make_status(wuffs_base__error__unsupported_option);
 }
 
 // -------- func cbor.decoder.workbuf_len
@@ -28111,9 +28157,9 @@
 
 const wuffs_base__hasher_u32__func_ptrs
 wuffs_crc32__ieee_hasher__func_ptrs_for__wuffs_base__hasher_u32 = {
-  (wuffs_base__empty_struct(*)(void*,
+  (wuffs_base__status(*)(void*,
       uint32_t,
-      bool))(&wuffs_crc32__ieee_hasher__set_quirk_enabled),
+      uint64_t))(&wuffs_crc32__ieee_hasher__set_quirk),
   (uint32_t(*)(void*,
       wuffs_base__slice_u8))(&wuffs_crc32__ieee_hasher__update_u32),
 };
@@ -28191,14 +28237,24 @@
 
 // ---------------- Function Implementations
 
-// -------- func crc32.ieee_hasher.set_quirk_enabled
+// -------- func crc32.ieee_hasher.set_quirk
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_crc32__ieee_hasher__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_crc32__ieee_hasher__set_quirk(
     wuffs_crc32__ieee_hasher* self,
-    uint32_t a_quirk,
-    bool a_enabled) {
-  return wuffs_base__make_empty_struct();
+    uint32_t a_key,
+    uint64_t a_value) {
+  if (!self) {
+    return wuffs_base__make_status(wuffs_base__error__bad_receiver);
+  }
+  if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
+    return wuffs_base__make_status(
+        (self->private_impl.magic == WUFFS_BASE__DISABLED)
+        ? wuffs_base__error__disabled_by_previous_error
+        : wuffs_base__error__initialize_not_called);
+  }
+
+  return wuffs_base__make_status(wuffs_base__error__unsupported_option);
 }
 
 // -------- func crc32.ieee_hasher.update_u32
@@ -28813,9 +28869,9 @@
 
 const wuffs_base__io_transformer__func_ptrs
 wuffs_deflate__decoder__func_ptrs_for__wuffs_base__io_transformer = {
-  (wuffs_base__empty_struct(*)(void*,
+  (wuffs_base__status(*)(void*,
       uint32_t,
-      bool))(&wuffs_deflate__decoder__set_quirk_enabled),
+      uint64_t))(&wuffs_deflate__decoder__set_quirk),
   (wuffs_base__status(*)(void*,
       wuffs_base__io_buffer*,
       wuffs_base__io_buffer*,
@@ -28936,14 +28992,24 @@
   return wuffs_base__make_empty_struct();
 }
 
-// -------- func deflate.decoder.set_quirk_enabled
+// -------- func deflate.decoder.set_quirk
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_deflate__decoder__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_deflate__decoder__set_quirk(
     wuffs_deflate__decoder* self,
-    uint32_t a_quirk,
-    bool a_enabled) {
-  return wuffs_base__make_empty_struct();
+    uint32_t a_key,
+    uint64_t a_value) {
+  if (!self) {
+    return wuffs_base__make_status(wuffs_base__error__bad_receiver);
+  }
+  if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
+    return wuffs_base__make_status(
+        (self->private_impl.magic == WUFFS_BASE__DISABLED)
+        ? wuffs_base__error__disabled_by_previous_error
+        : wuffs_base__error__initialize_not_called);
+  }
+
+  return wuffs_base__make_status(wuffs_base__error__unsupported_option);
 }
 
 // -------- func deflate.decoder.workbuf_len
@@ -31003,9 +31069,9 @@
 
 const wuffs_base__io_transformer__func_ptrs
 wuffs_lzw__decoder__func_ptrs_for__wuffs_base__io_transformer = {
-  (wuffs_base__empty_struct(*)(void*,
+  (wuffs_base__status(*)(void*,
       uint32_t,
-      bool))(&wuffs_lzw__decoder__set_quirk_enabled),
+      uint64_t))(&wuffs_lzw__decoder__set_quirk),
   (wuffs_base__status(*)(void*,
       wuffs_base__io_buffer*,
       wuffs_base__io_buffer*,
@@ -31084,14 +31150,24 @@
 
 // ---------------- Function Implementations
 
-// -------- func lzw.decoder.set_quirk_enabled
+// -------- func lzw.decoder.set_quirk
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_lzw__decoder__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_lzw__decoder__set_quirk(
     wuffs_lzw__decoder* self,
-    uint32_t a_quirk,
-    bool a_enabled) {
-  return wuffs_base__make_empty_struct();
+    uint32_t a_key,
+    uint64_t a_value) {
+  if (!self) {
+    return wuffs_base__make_status(wuffs_base__error__bad_receiver);
+  }
+  if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
+    return wuffs_base__make_status(
+        (self->private_impl.magic == WUFFS_BASE__DISABLED)
+        ? wuffs_base__error__disabled_by_previous_error
+        : wuffs_base__error__initialize_not_called);
+  }
+
+  return wuffs_base__make_status(wuffs_base__error__unsupported_option);
 }
 
 // -------- func lzw.decoder.set_literal_width
@@ -31691,9 +31767,9 @@
   (wuffs_base__status(*)(void*,
       uint64_t,
       uint64_t))(&wuffs_gif__decoder__restart_frame),
-  (wuffs_base__empty_struct(*)(void*,
+  (wuffs_base__status(*)(void*,
       uint32_t,
-      bool))(&wuffs_gif__decoder__set_quirk_enabled),
+      uint64_t))(&wuffs_gif__decoder__set_quirk),
   (wuffs_base__empty_struct(*)(void*,
       uint32_t,
       bool))(&wuffs_gif__decoder__set_report_metadata),
@@ -31782,27 +31858,31 @@
 
 // ---------------- Function Implementations
 
-// -------- func gif.decoder.set_quirk_enabled
+// -------- func gif.decoder.set_quirk
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_gif__decoder__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_gif__decoder__set_quirk(
     wuffs_gif__decoder* self,
-    uint32_t a_quirk,
-    bool a_enabled) {
+    uint32_t a_key,
+    uint64_t a_value) {
   if (!self) {
-    return wuffs_base__make_empty_struct();
+    return wuffs_base__make_status(wuffs_base__error__bad_receiver);
   }
   if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
-    return wuffs_base__make_empty_struct();
+    return wuffs_base__make_status(
+        (self->private_impl.magic == WUFFS_BASE__DISABLED)
+        ? wuffs_base__error__disabled_by_previous_error
+        : wuffs_base__error__initialize_not_called);
   }
 
-  if ((self->private_impl.f_call_sequence == 0) && (a_quirk >= 1041635328)) {
-    a_quirk -= 1041635328;
-    if (a_quirk < 7) {
-      self->private_impl.f_quirks[a_quirk] = a_enabled;
+  if ((self->private_impl.f_call_sequence == 0) && (a_key >= 1041635328)) {
+    a_key -= 1041635328;
+    if (a_key < 7) {
+      self->private_impl.f_quirks[a_key] = (a_value > 0);
+      return wuffs_base__make_status(NULL);
     }
   }
-  return wuffs_base__make_empty_struct();
+  return wuffs_base__make_status(wuffs_base__error__unsupported_option);
 }
 
 // -------- func gif.decoder.decode_image_config
@@ -34332,9 +34412,9 @@
 
 const wuffs_base__io_transformer__func_ptrs
 wuffs_gzip__decoder__func_ptrs_for__wuffs_base__io_transformer = {
-  (wuffs_base__empty_struct(*)(void*,
+  (wuffs_base__status(*)(void*,
       uint32_t,
-      bool))(&wuffs_gzip__decoder__set_quirk_enabled),
+      uint64_t))(&wuffs_gzip__decoder__set_quirk),
   (wuffs_base__status(*)(void*,
       wuffs_base__io_buffer*,
       wuffs_base__io_buffer*,
@@ -34427,24 +34507,28 @@
 
 // ---------------- Function Implementations
 
-// -------- func gzip.decoder.set_quirk_enabled
+// -------- func gzip.decoder.set_quirk
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_gzip__decoder__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_gzip__decoder__set_quirk(
     wuffs_gzip__decoder* self,
-    uint32_t a_quirk,
-    bool a_enabled) {
+    uint32_t a_key,
+    uint64_t a_value) {
   if (!self) {
-    return wuffs_base__make_empty_struct();
+    return wuffs_base__make_status(wuffs_base__error__bad_receiver);
   }
   if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
-    return wuffs_base__make_empty_struct();
+    return wuffs_base__make_status(
+        (self->private_impl.magic == WUFFS_BASE__DISABLED)
+        ? wuffs_base__error__disabled_by_previous_error
+        : wuffs_base__error__initialize_not_called);
   }
 
-  if (a_quirk == 1) {
-    self->private_impl.f_ignore_checksum = a_enabled;
+  if (a_key == 1) {
+    self->private_impl.f_ignore_checksum = (a_value > 0);
+    return wuffs_base__make_status(NULL);
   }
-  return wuffs_base__make_empty_struct();
+  return wuffs_base__make_status(wuffs_base__error__unsupported_option);
 }
 
 // -------- func gzip.decoder.workbuf_len
@@ -35149,9 +35233,9 @@
       wuffs_base__token_buffer*,
       wuffs_base__io_buffer*,
       wuffs_base__slice_u8))(&wuffs_json__decoder__decode_tokens),
-  (wuffs_base__empty_struct(*)(void*,
+  (wuffs_base__status(*)(void*,
       uint32_t,
-      bool))(&wuffs_json__decoder__set_quirk_enabled),
+      uint64_t))(&wuffs_json__decoder__set_quirk),
   (wuffs_base__range_ii_u64(*)(const void*))(&wuffs_json__decoder__workbuf_len),
 };
 
@@ -35226,27 +35310,31 @@
 
 // ---------------- Function Implementations
 
-// -------- func json.decoder.set_quirk_enabled
+// -------- func json.decoder.set_quirk
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_json__decoder__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_json__decoder__set_quirk(
     wuffs_json__decoder* self,
-    uint32_t a_quirk,
-    bool a_enabled) {
+    uint32_t a_key,
+    uint64_t a_value) {
   if (!self) {
-    return wuffs_base__make_empty_struct();
+    return wuffs_base__make_status(wuffs_base__error__bad_receiver);
   }
   if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
-    return wuffs_base__make_empty_struct();
+    return wuffs_base__make_status(
+        (self->private_impl.magic == WUFFS_BASE__DISABLED)
+        ? wuffs_base__error__disabled_by_previous_error
+        : wuffs_base__error__initialize_not_called);
   }
 
-  if (a_quirk >= 1225364480) {
-    a_quirk -= 1225364480;
-    if (a_quirk < 21) {
-      self->private_impl.f_quirks[a_quirk] = a_enabled;
+  if (a_key >= 1225364480) {
+    a_key -= 1225364480;
+    if (a_key < 21) {
+      self->private_impl.f_quirks[a_key] = (a_value > 0);
+      return wuffs_base__make_status(NULL);
     }
   }
-  return wuffs_base__make_empty_struct();
+  return wuffs_base__make_status(wuffs_base__error__unsupported_option);
 }
 
 // -------- func json.decoder.workbuf_len
@@ -37120,9 +37208,9 @@
   (wuffs_base__status(*)(void*,
       uint64_t,
       uint64_t))(&wuffs_nie__decoder__restart_frame),
-  (wuffs_base__empty_struct(*)(void*,
+  (wuffs_base__status(*)(void*,
       uint32_t,
-      bool))(&wuffs_nie__decoder__set_quirk_enabled),
+      uint64_t))(&wuffs_nie__decoder__set_quirk),
   (wuffs_base__empty_struct(*)(void*,
       uint32_t,
       bool))(&wuffs_nie__decoder__set_report_metadata),
@@ -37204,14 +37292,24 @@
 
 // ---------------- Function Implementations
 
-// -------- func nie.decoder.set_quirk_enabled
+// -------- func nie.decoder.set_quirk
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_nie__decoder__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_nie__decoder__set_quirk(
     wuffs_nie__decoder* self,
-    uint32_t a_quirk,
-    bool a_enabled) {
-  return wuffs_base__make_empty_struct();
+    uint32_t a_key,
+    uint64_t a_value) {
+  if (!self) {
+    return wuffs_base__make_status(wuffs_base__error__bad_receiver);
+  }
+  if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
+    return wuffs_base__make_status(
+        (self->private_impl.magic == WUFFS_BASE__DISABLED)
+        ? wuffs_base__error__disabled_by_previous_error
+        : wuffs_base__error__initialize_not_called);
+  }
+
+  return wuffs_base__make_status(wuffs_base__error__unsupported_option);
 }
 
 // -------- func nie.decoder.decode_image_config
@@ -38094,9 +38192,9 @@
 
 const wuffs_base__io_transformer__func_ptrs
 wuffs_zlib__decoder__func_ptrs_for__wuffs_base__io_transformer = {
-  (wuffs_base__empty_struct(*)(void*,
+  (wuffs_base__status(*)(void*,
       uint32_t,
-      bool))(&wuffs_zlib__decoder__set_quirk_enabled),
+      uint64_t))(&wuffs_zlib__decoder__set_quirk),
   (wuffs_base__status(*)(void*,
       wuffs_base__io_buffer*,
       wuffs_base__io_buffer*,
@@ -38235,31 +38333,37 @@
   return wuffs_base__make_empty_struct();
 }
 
-// -------- func zlib.decoder.set_quirk_enabled
+// -------- func zlib.decoder.set_quirk
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_zlib__decoder__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_zlib__decoder__set_quirk(
     wuffs_zlib__decoder* self,
-    uint32_t a_quirk,
-    bool a_enabled) {
+    uint32_t a_key,
+    uint64_t a_value) {
   if (!self) {
-    return wuffs_base__make_empty_struct();
+    return wuffs_base__make_status(wuffs_base__error__bad_receiver);
   }
   if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
-    return wuffs_base__make_empty_struct();
+    return wuffs_base__make_status(
+        (self->private_impl.magic == WUFFS_BASE__DISABLED)
+        ? wuffs_base__error__disabled_by_previous_error
+        : wuffs_base__error__initialize_not_called);
   }
 
   if (self->private_impl.f_header_complete) {
     self->private_impl.f_bad_call_sequence = true;
-  } else if (a_quirk == 1) {
-    self->private_impl.f_ignore_checksum = a_enabled;
-  } else if (a_quirk >= 2113790976) {
-    a_quirk -= 2113790976;
-    if (a_quirk < 1) {
-      self->private_impl.f_quirks[a_quirk] = a_enabled;
+    return wuffs_base__make_status(wuffs_base__error__bad_call_sequence);
+  } else if (a_key == 1) {
+    self->private_impl.f_ignore_checksum = (a_value > 0);
+    return wuffs_base__make_status(NULL);
+  } else if (a_key >= 2113790976) {
+    a_key -= 2113790976;
+    if (a_key < 1) {
+      self->private_impl.f_quirks[a_key] = (a_value > 0);
+      return wuffs_base__make_status(NULL);
     }
   }
-  return wuffs_base__make_empty_struct();
+  return wuffs_base__make_status(wuffs_base__error__unsupported_option);
 }
 
 // -------- func zlib.decoder.workbuf_len
@@ -38958,9 +39062,9 @@
   (wuffs_base__status(*)(void*,
       uint64_t,
       uint64_t))(&wuffs_png__decoder__restart_frame),
-  (wuffs_base__empty_struct(*)(void*,
+  (wuffs_base__status(*)(void*,
       uint32_t,
-      bool))(&wuffs_png__decoder__set_quirk_enabled),
+      uint64_t))(&wuffs_png__decoder__set_quirk),
   (wuffs_base__empty_struct(*)(void*,
       uint32_t,
       bool))(&wuffs_png__decoder__set_report_metadata),
@@ -40462,25 +40566,29 @@
 #endif  // defined(WUFFS_BASE__CPU_ARCH__X86_FAMILY)
 // ‼ WUFFS MULTI-FILE SECTION -x86_sse42
 
-// -------- func png.decoder.set_quirk_enabled
+// -------- func png.decoder.set_quirk
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_png__decoder__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_png__decoder__set_quirk(
     wuffs_png__decoder* self,
-    uint32_t a_quirk,
-    bool a_enabled) {
+    uint32_t a_key,
+    uint64_t a_value) {
   if (!self) {
-    return wuffs_base__make_empty_struct();
+    return wuffs_base__make_status(wuffs_base__error__bad_receiver);
   }
   if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
-    return wuffs_base__make_empty_struct();
+    return wuffs_base__make_status(
+        (self->private_impl.magic == WUFFS_BASE__DISABLED)
+        ? wuffs_base__error__disabled_by_previous_error
+        : wuffs_base__error__initialize_not_called);
   }
 
-  if (a_quirk == 1) {
-    self->private_impl.f_ignore_checksum = a_enabled;
-    wuffs_zlib__decoder__set_quirk_enabled(&self->private_data.f_zlib, a_quirk, a_enabled);
+  if (a_key == 1) {
+    self->private_impl.f_ignore_checksum = (a_value > 0);
+    wuffs_zlib__decoder__set_quirk(&self->private_data.f_zlib, a_key, a_value);
+    return wuffs_base__make_status(NULL);
   }
-  return wuffs_base__make_empty_struct();
+  return wuffs_base__make_status(wuffs_base__error__unsupported_option);
 }
 
 // -------- func png.decoder.decode_image_config
@@ -43459,7 +43567,7 @@
       wuffs_base__ignore_status(wuffs_zlib__decoder__initialize(&self->private_data.f_zlib,
           sizeof (wuffs_zlib__decoder), WUFFS_VERSION, WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED));
       if (self->private_impl.f_ignore_checksum) {
-        wuffs_zlib__decoder__set_quirk_enabled(&self->private_data.f_zlib, 1, true);
+        wuffs_zlib__decoder__set_quirk(&self->private_data.f_zlib, 1, 1);
       }
     }
     self->private_impl.f_zlib_is_dirty = true;
@@ -44192,7 +44300,7 @@
           wuffs_base__ignore_status(wuffs_zlib__decoder__initialize(&self->private_data.f_zlib,
               sizeof (wuffs_zlib__decoder), WUFFS_VERSION, WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED));
           if (self->private_impl.f_ignore_checksum) {
-            wuffs_zlib__decoder__set_quirk_enabled(&self->private_data.f_zlib, 1, true);
+            wuffs_zlib__decoder__set_quirk(&self->private_data.f_zlib, 1, 1);
           }
         }
         self->private_impl.f_zlib_is_dirty = true;
@@ -45055,9 +45163,9 @@
   (wuffs_base__status(*)(void*,
       uint64_t,
       uint64_t))(&wuffs_tga__decoder__restart_frame),
-  (wuffs_base__empty_struct(*)(void*,
+  (wuffs_base__status(*)(void*,
       uint32_t,
-      bool))(&wuffs_tga__decoder__set_quirk_enabled),
+      uint64_t))(&wuffs_tga__decoder__set_quirk),
   (wuffs_base__empty_struct(*)(void*,
       uint32_t,
       bool))(&wuffs_tga__decoder__set_report_metadata),
@@ -45139,14 +45247,24 @@
 
 // ---------------- Function Implementations
 
-// -------- func tga.decoder.set_quirk_enabled
+// -------- func tga.decoder.set_quirk
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_tga__decoder__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_tga__decoder__set_quirk(
     wuffs_tga__decoder* self,
-    uint32_t a_quirk,
-    bool a_enabled) {
-  return wuffs_base__make_empty_struct();
+    uint32_t a_key,
+    uint64_t a_value) {
+  if (!self) {
+    return wuffs_base__make_status(wuffs_base__error__bad_receiver);
+  }
+  if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
+    return wuffs_base__make_status(
+        (self->private_impl.magic == WUFFS_BASE__DISABLED)
+        ? wuffs_base__error__disabled_by_previous_error
+        : wuffs_base__error__initialize_not_called);
+  }
+
+  return wuffs_base__make_status(wuffs_base__error__unsupported_option);
 }
 
 // -------- func tga.decoder.decode_image_config
@@ -46444,9 +46562,9 @@
   (wuffs_base__status(*)(void*,
       uint64_t,
       uint64_t))(&wuffs_wbmp__decoder__restart_frame),
-  (wuffs_base__empty_struct(*)(void*,
+  (wuffs_base__status(*)(void*,
       uint32_t,
-      bool))(&wuffs_wbmp__decoder__set_quirk_enabled),
+      uint64_t))(&wuffs_wbmp__decoder__set_quirk),
   (wuffs_base__empty_struct(*)(void*,
       uint32_t,
       bool))(&wuffs_wbmp__decoder__set_report_metadata),
@@ -46528,14 +46646,24 @@
 
 // ---------------- Function Implementations
 
-// -------- func wbmp.decoder.set_quirk_enabled
+// -------- func wbmp.decoder.set_quirk
 
-WUFFS_BASE__MAYBE_STATIC wuffs_base__empty_struct
-wuffs_wbmp__decoder__set_quirk_enabled(
+WUFFS_BASE__MAYBE_STATIC wuffs_base__status
+wuffs_wbmp__decoder__set_quirk(
     wuffs_wbmp__decoder* self,
-    uint32_t a_quirk,
-    bool a_enabled) {
-  return wuffs_base__make_empty_struct();
+    uint32_t a_key,
+    uint64_t a_value) {
+  if (!self) {
+    return wuffs_base__make_status(wuffs_base__error__bad_receiver);
+  }
+  if (self->private_impl.magic != WUFFS_BASE__MAGIC) {
+    return wuffs_base__make_status(
+        (self->private_impl.magic == WUFFS_BASE__DISABLED)
+        ? wuffs_base__error__disabled_by_previous_error
+        : wuffs_base__error__initialize_not_called);
+  }
+
+  return wuffs_base__make_status(wuffs_base__error__unsupported_option);
 }
 
 // -------- func wbmp.decoder.decode_image_config
@@ -47640,7 +47768,7 @@
       goto done;
     }
     for (size_t i = 0; i < quirks.repr.len; i++) {
-      dec->set_quirk_enabled(quirks.repr.ptr[i], true);
+      dec->set_quirk(quirks.repr.ptr[i], 1);
     }
 
     // Prepare the wuffs_base__tok_buffer. 256 tokens is 2KiB.
@@ -48012,7 +48140,7 @@
     case WUFFS_BASE__FOURCC__PNG: {
       auto dec = wuffs_png__decoder::alloc_as__wuffs_base__image_decoder();
       // Favor faster decodes over rejecting invalid checksums.
-      dec->set_quirk_enabled(WUFFS_BASE__QUIRK_IGNORE_CHECKSUM, true);
+      dec->set_quirk(WUFFS_BASE__QUIRK_IGNORE_CHECKSUM, 1);
       return dec;
     }
 #endif
@@ -48308,7 +48436,7 @@
 
     // Apply quirks.
     for (size_t i = 0; i < quirks.len; i++) {
-      image_decoder->set_quirk_enabled(quirks.ptr[i], true);
+      image_decoder->set_quirk(quirks.ptr[i], 1);
     }
 
     // Apply flags.
@@ -48926,7 +49054,7 @@
     }
     bool allow_tilde_n_tilde_r_tilde_t = false;
     for (size_t i = 0; i < quirks.repr.len; i++) {
-      dec->set_quirk_enabled(quirks.repr.ptr[i], true);
+      dec->set_quirk(quirks.repr.ptr[i], 1);
       if (quirks.repr.ptr[i] ==
           WUFFS_JSON__QUIRK_JSON_POINTER_ALLOW_TILDE_N_TILDE_R_TILDE_T) {
         allow_tilde_n_tilde_r_tilde_t = true;
diff --git a/script/print-json-token-debug-format.c b/script/print-json-token-debug-format.c
index e8dabd4..d2bf86d 100644
--- a/script/print-json-token-debug-format.c
+++ b/script/print-json-token-debug-format.c
@@ -313,7 +313,7 @@
         0,
     };
     for (uint32_t i = 0; quirks[i]; i++) {
-      wuffs_base__token_decoder__set_quirk_enabled(g_dec, quirks[i], true);
+      wuffs_base__token_decoder__set_quirk(g_dec, quirks[i], 1);
     }
   }
 
diff --git a/std/adler32/common_adler32.wuffs b/std/adler32/common_adler32.wuffs
index 7e9b05f..9d50f00 100644
--- a/std/adler32/common_adler32.wuffs
+++ b/std/adler32/common_adler32.wuffs
@@ -18,7 +18,8 @@
         started : base.bool,
 )
 
-pub func hasher.set_quirk_enabled!(quirk: base.u32, enabled: base.bool) {
+pub func hasher.set_quirk!(key: base.u32, value: base.u64) base.status {
+    return base."#unsupported option"
 }
 
 pub func hasher.update_u32!(x: roslice base.u8) base.u32 {
diff --git a/std/bmp/decode_bmp.wuffs b/std/bmp/decode_bmp.wuffs
index 1740bc7..db6f86b 100644
--- a/std/bmp/decode_bmp.wuffs
+++ b/std/bmp/decode_bmp.wuffs
@@ -82,7 +82,8 @@
         src_palette : array[4 * 256] base.u8,
 )
 
-pub func decoder.set_quirk_enabled!(quirk: base.u32, enabled: base.bool) {
+pub func decoder.set_quirk!(key: base.u32, value: base.u64) base.status {
+    return base."#unsupported option"
 }
 
 pub func decoder.decode_image_config?(dst: nptr base.image_config, src: base.io_reader) {
diff --git a/std/bzip2/decode_bzip2.wuffs b/std/bzip2/decode_bzip2.wuffs
index 9df73fd..c2d86df 100644
--- a/std/bzip2/decode_bzip2.wuffs
+++ b/std/bzip2/decode_bzip2.wuffs
@@ -109,10 +109,12 @@
         bwt : array[1_048576] base.u32,
 )
 
-pub func decoder.set_quirk_enabled!(quirk: base.u32, enabled: base.bool) {
-    if args.quirk == base.QUIRK_IGNORE_CHECKSUM {
-        this.ignore_checksum = args.enabled
+pub func decoder.set_quirk!(key: base.u32, value: base.u64) base.status {
+    if args.key == base.QUIRK_IGNORE_CHECKSUM {
+        this.ignore_checksum = args.value > 0
+        return ok
     }
+    return base."#unsupported option"
 }
 
 pub func decoder.workbuf_len() base.range_ii_u64 {
diff --git a/std/cbor/decode_cbor.wuffs b/std/cbor/decode_cbor.wuffs
index ef6adb4..a74812d 100644
--- a/std/cbor/decode_cbor.wuffs
+++ b/std/cbor/decode_cbor.wuffs
@@ -113,7 +113,8 @@
         container_num_remaining : array[1024] base.u64,
 )
 
-pub func decoder.set_quirk_enabled!(quirk: base.u32, enabled: base.bool) {
+pub func decoder.set_quirk!(key: base.u32, value: base.u64) base.status {
+    return base."#unsupported option"
 }
 
 pub func decoder.workbuf_len() base.range_ii_u64 {
diff --git a/std/crc32/common_crc32.wuffs b/std/crc32/common_crc32.wuffs
index 39c8141..a0ca89d 100644
--- a/std/crc32/common_crc32.wuffs
+++ b/std/crc32/common_crc32.wuffs
@@ -17,7 +17,8 @@
         state : base.u32,
 )
 
-pub func ieee_hasher.set_quirk_enabled!(quirk: base.u32, enabled: base.bool) {
+pub func ieee_hasher.set_quirk!(key: base.u32, value: base.u64) base.status {
+    return base."#unsupported option"
 }
 
 // TODO: should it be ? instead of ! because it's public, and might need a way
diff --git a/std/deflate/decode_deflate.wuffs b/std/deflate/decode_deflate.wuffs
index 0db616a..296680d 100644
--- a/std/deflate/decode_deflate.wuffs
+++ b/std/deflate/decode_deflate.wuffs
@@ -199,7 +199,8 @@
     this.history[0x8000 ..].copy_from_slice!(s: this.history[..])
 }
 
-pub func decoder.set_quirk_enabled!(quirk: base.u32, enabled: base.bool) {
+pub func decoder.set_quirk!(key: base.u32, value: base.u64) base.status {
+    return base."#unsupported option"
 }
 
 pub func decoder.workbuf_len() base.range_ii_u64 {
diff --git a/std/gif/decode_gif.wuffs b/std/gif/decode_gif.wuffs
index 3f69ef1..c4619e1 100644
--- a/std/gif/decode_gif.wuffs
+++ b/std/gif/decode_gif.wuffs
@@ -88,13 +88,15 @@
         lzw : lzw.decoder,
 )
 
-pub func decoder.set_quirk_enabled!(quirk: base.u32, enabled: base.bool) {
-    if (this.call_sequence == 0x00) and (args.quirk >= QUIRKS_BASE) {
-        args.quirk -= QUIRKS_BASE
-        if args.quirk < QUIRKS_COUNT {
-            this.quirks[args.quirk] = args.enabled
+pub func decoder.set_quirk!(key: base.u32, value: base.u64) base.status {
+    if (this.call_sequence == 0x00) and (args.key >= QUIRKS_BASE) {
+        args.key -= QUIRKS_BASE
+        if args.key < QUIRKS_COUNT {
+            this.quirks[args.key] = args.value > 0
+            return ok
         }
     }
+    return base."#unsupported option"
 }
 
 pub func decoder.decode_image_config?(dst: nptr base.image_config, src: base.io_reader) {
diff --git a/std/gzip/decode_gzip.wuffs b/std/gzip/decode_gzip.wuffs
index d979869..95a2eb5 100644
--- a/std/gzip/decode_gzip.wuffs
+++ b/std/gzip/decode_gzip.wuffs
@@ -33,10 +33,12 @@
         util : base.utility,
 )
 
-pub func decoder.set_quirk_enabled!(quirk: base.u32, enabled: base.bool) {
-    if args.quirk == base.QUIRK_IGNORE_CHECKSUM {
-        this.ignore_checksum = args.enabled
+pub func decoder.set_quirk!(key: base.u32, value: base.u64) base.status {
+    if args.key == base.QUIRK_IGNORE_CHECKSUM {
+        this.ignore_checksum = args.value > 0
+        return ok
     }
+    return base."#unsupported option"
 }
 
 pub func decoder.workbuf_len() base.range_ii_u64 {
diff --git a/std/json/decode_json.wuffs b/std/json/decode_json.wuffs
index a42e8aa..817a602 100644
--- a/std/json/decode_json.wuffs
+++ b/std/json/decode_json.wuffs
@@ -61,13 +61,15 @@
         stack : array[1024 / 32] base.u32,
 )
 
-pub func decoder.set_quirk_enabled!(quirk: base.u32, enabled: base.bool) {
-    if args.quirk >= QUIRKS_BASE {
-        args.quirk -= QUIRKS_BASE
-        if args.quirk < QUIRKS_COUNT {
-            this.quirks[args.quirk] = args.enabled
+pub func decoder.set_quirk!(key: base.u32, value: base.u64) base.status {
+    if args.key >= QUIRKS_BASE {
+        args.key -= QUIRKS_BASE
+        if args.key < QUIRKS_COUNT {
+            this.quirks[args.key] = args.value > 0
+            return ok
         }
     }
+    return base."#unsupported option"
 }
 
 pub func decoder.workbuf_len() base.range_ii_u64 {
diff --git a/std/lzw/decode_lzw.wuffs b/std/lzw/decode_lzw.wuffs
index b72da0f..01ee8f5 100644
--- a/std/lzw/decode_lzw.wuffs
+++ b/std/lzw/decode_lzw.wuffs
@@ -70,7 +70,8 @@
         output : array[8192 + 7] base.u8,
 )
 
-pub func decoder.set_quirk_enabled!(quirk: base.u32, enabled: base.bool) {
+pub func decoder.set_quirk!(key: base.u32, value: base.u64) base.status {
+    return base."#unsupported option"
 }
 
 pub func decoder.set_literal_width!(lw: base.u32[..= 8]) {
diff --git a/std/nie/decode_nie.wuffs b/std/nie/decode_nie.wuffs
index c1d86ce..f231e80 100644
--- a/std/nie/decode_nie.wuffs
+++ b/std/nie/decode_nie.wuffs
@@ -36,7 +36,8 @@
         util     : base.utility,
 )
 
-pub func decoder.set_quirk_enabled!(quirk: base.u32, enabled: base.bool) {
+pub func decoder.set_quirk!(key: base.u32, value: base.u64) base.status {
+    return base."#unsupported option"
 }
 
 pub func decoder.decode_image_config?(dst: nptr base.image_config, src: base.io_reader) {
diff --git a/std/png/decode_png.wuffs b/std/png/decode_png.wuffs
index d77f0d9..216ca83 100644
--- a/std/png/decode_png.wuffs
+++ b/std/png/decode_png.wuffs
@@ -155,11 +155,13 @@
         src_palette : array[4 * 256] base.u8,
 )
 
-pub func decoder.set_quirk_enabled!(quirk: base.u32, enabled: base.bool) {
-    if args.quirk == base.QUIRK_IGNORE_CHECKSUM {
-        this.ignore_checksum = args.enabled
-        this.zlib.set_quirk_enabled!(quirk: args.quirk, enabled: args.enabled)
+pub func decoder.set_quirk!(key: base.u32, value: base.u64) base.status {
+    if args.key == base.QUIRK_IGNORE_CHECKSUM {
+        this.ignore_checksum = args.value > 0
+        this.zlib.set_quirk!(key: args.key, value: args.value)
+        return ok
     }
+    return base."#unsupported option"
 }
 
 pub func decoder.decode_image_config?(dst: nptr base.image_config, src: base.io_reader) {
@@ -1184,7 +1186,7 @@
     if this.zlib_is_dirty {
         this.zlib.reset!()
         if this.ignore_checksum {
-            this.zlib.set_quirk_enabled!(quirk: base.QUIRK_IGNORE_CHECKSUM, enabled: true)
+            this.zlib.set_quirk!(key: base.QUIRK_IGNORE_CHECKSUM, value: 1)
         }
     }
     this.zlib_is_dirty = true
@@ -1463,7 +1465,7 @@
         if this.zlib_is_dirty {
             this.zlib.reset!()
             if this.ignore_checksum {
-                this.zlib.set_quirk_enabled!(quirk: base.QUIRK_IGNORE_CHECKSUM, enabled: true)
+                this.zlib.set_quirk!(key: base.QUIRK_IGNORE_CHECKSUM, value: 1)
             }
         }
         this.zlib_is_dirty = true
diff --git a/std/tga/decode_tga.wuffs b/std/tga/decode_tga.wuffs
index 146da4c..c3bddd6 100644
--- a/std/tga/decode_tga.wuffs
+++ b/std/tga/decode_tga.wuffs
@@ -52,7 +52,8 @@
         scratch     : array[4] base.u8,
 )
 
-pub func decoder.set_quirk_enabled!(quirk: base.u32, enabled: base.bool) {
+pub func decoder.set_quirk!(key: base.u32, value: base.u64) base.status {
+    return base."#unsupported option"
 }
 
 pub func decoder.decode_image_config?(dst: nptr base.image_config, src: base.io_reader) {
diff --git a/std/wbmp/decode_wbmp.wuffs b/std/wbmp/decode_wbmp.wuffs
index 0b1ec73..1fa78c7 100644
--- a/std/wbmp/decode_wbmp.wuffs
+++ b/std/wbmp/decode_wbmp.wuffs
@@ -31,7 +31,8 @@
         util     : base.utility,
 )
 
-pub func decoder.set_quirk_enabled!(quirk: base.u32, enabled: base.bool) {
+pub func decoder.set_quirk!(key: base.u32, value: base.u64) base.status {
+    return base."#unsupported option"
 }
 
 pub func decoder.decode_image_config?(dst: nptr base.image_config, src: base.io_reader) {
diff --git a/std/zlib/decode_zlib.wuffs b/std/zlib/decode_zlib.wuffs
index 7988c3e..fa0b601 100644
--- a/std/zlib/decode_zlib.wuffs
+++ b/std/zlib/decode_zlib.wuffs
@@ -62,17 +62,21 @@
     this.got_dictionary = true
 }
 
-pub func decoder.set_quirk_enabled!(quirk: base.u32, enabled: base.bool) {
+pub func decoder.set_quirk!(key: base.u32, value: base.u64) base.status {
     if this.header_complete {
         this.bad_call_sequence = true
-    } else if args.quirk == base.QUIRK_IGNORE_CHECKSUM {
-        this.ignore_checksum = args.enabled
-    } else if args.quirk >= QUIRKS_BASE {
-        args.quirk -= QUIRKS_BASE
-        if args.quirk < QUIRKS_COUNT {
-            this.quirks[args.quirk] = args.enabled
+        return base."#bad call sequence"
+    } else if args.key == base.QUIRK_IGNORE_CHECKSUM {
+        this.ignore_checksum = args.value > 0
+        return ok
+    } else if args.key >= QUIRKS_BASE {
+        args.key -= QUIRKS_BASE
+        if args.key < QUIRKS_COUNT {
+            this.quirks[args.key] = args.value > 0
+            return ok
         }
     }
+    return base."#unsupported option"
 }
 
 pub func decoder.workbuf_len() base.range_ii_u64 {
diff --git a/test/c/std/gif.c b/test/c/std/gif.c
index b59c055..fe18482 100644
--- a/test/c/std/gif.c
+++ b/test/c/std/gif.c
@@ -469,7 +469,7 @@
                    &dec, sizeof dec, WUFFS_VERSION,
                    WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED));
   if (quirk) {
-    wuffs_gif__decoder__set_quirk_enabled(&dec, quirk, true);
+    wuffs_gif__decoder__set_quirk(&dec, quirk, 1);
   }
 
   wuffs_base__image_config ic = ((wuffs_base__image_config){});
@@ -720,8 +720,8 @@
                  wuffs_gif__decoder__initialize(
                      &dec, sizeof dec, WUFFS_VERSION,
                      WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED));
-    wuffs_gif__decoder__set_quirk_enabled(
-        &dec, WUFFS_GIF__QUIRK_DELAY_NUM_DECODED_FRAMES, q);
+    wuffs_gif__decoder__set_quirk(&dec,
+                                  WUFFS_GIF__QUIRK_DELAY_NUM_DECODED_FRAMES, q);
 
     while (true) {
       wuffs_base__status status =
@@ -756,8 +756,8 @@
                  wuffs_gif__decoder__initialize(
                      &dec, sizeof dec, WUFFS_VERSION,
                      WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED));
-    wuffs_gif__decoder__set_quirk_enabled(
-        &dec, WUFFS_GIF__QUIRK_REJECT_EMPTY_PALETTE, q);
+    wuffs_gif__decoder__set_quirk(&dec, WUFFS_GIF__QUIRK_REJECT_EMPTY_PALETTE,
+                                  q);
 
     wuffs_base__image_config ic = ((wuffs_base__image_config){});
     wuffs_base__status status =
@@ -822,8 +822,8 @@
                  wuffs_gif__decoder__initialize(
                      &dec, sizeof dec, WUFFS_VERSION,
                      WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED));
-    wuffs_gif__decoder__set_quirk_enabled(
-        &dec, WUFFS_GIF__QUIRK_HONOR_BACKGROUND_COLOR, q);
+    wuffs_gif__decoder__set_quirk(&dec, WUFFS_GIF__QUIRK_HONOR_BACKGROUND_COLOR,
+                                  q);
 
     wuffs_base__frame_config fc = ((wuffs_base__frame_config){});
     wuffs_base__status status =
@@ -860,8 +860,8 @@
                  wuffs_gif__decoder__initialize(
                      &dec, sizeof dec, WUFFS_VERSION,
                      WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED));
-    wuffs_gif__decoder__set_quirk_enabled(
-        &dec, WUFFS_GIF__QUIRK_HONOR_BACKGROUND_COLOR, q);
+    wuffs_gif__decoder__set_quirk(&dec, WUFFS_GIF__QUIRK_HONOR_BACKGROUND_COLOR,
+                                  q);
 
     wuffs_base__image_config ic = ((wuffs_base__image_config){});
     wuffs_base__status status =
@@ -897,8 +897,8 @@
                  wuffs_gif__decoder__initialize(
                      &dec, sizeof dec, WUFFS_VERSION,
                      WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED));
-    wuffs_gif__decoder__set_quirk_enabled(
-        &dec, WUFFS_GIF__QUIRK_IMAGE_BOUNDS_ARE_STRICT, q);
+    wuffs_gif__decoder__set_quirk(&dec,
+                                  WUFFS_GIF__QUIRK_IMAGE_BOUNDS_ARE_STRICT, q);
 
     wuffs_base__image_config ic = ((wuffs_base__image_config){});
     wuffs_base__status status =
@@ -1072,13 +1072,13 @@
         break;
       case 1:
         want = NULL;
-        wuffs_gif__decoder__set_quirk_enabled(
-            &dec, WUFFS_GIF__QUIRK_IGNORE_TOO_MUCH_PIXEL_DATA, true);
+        wuffs_gif__decoder__set_quirk(
+            &dec, WUFFS_GIF__QUIRK_IGNORE_TOO_MUCH_PIXEL_DATA, 1);
         break;
       case 2:
         want = wuffs_gif__error__bad_frame_size;
-        wuffs_gif__decoder__set_quirk_enabled(
-            &dec, WUFFS_GIF__QUIRK_REJECT_EMPTY_FRAME, true);
+        wuffs_gif__decoder__set_quirk(&dec, WUFFS_GIF__QUIRK_REJECT_EMPTY_FRAME,
+                                      1);
         break;
     }
 
diff --git a/test/c/std/gzip.c b/test/c/std/gzip.c
index f3620d2..9ddc17d 100644
--- a/test/c/std/gzip.c
+++ b/test/c/std/gzip.c
@@ -183,8 +183,8 @@
                  wuffs_gzip__decoder__initialize(
                      &dec, sizeof dec, WUFFS_VERSION,
                      WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED));
-    wuffs_gzip__decoder__set_quirk_enabled(
-        &dec, WUFFS_BASE__QUIRK_IGNORE_CHECKSUM, ignore_checksum);
+    wuffs_gzip__decoder__set_quirk(&dec, WUFFS_BASE__QUIRK_IGNORE_CHECKSUM,
+                                   (uint64_t)ignore_checksum);
     have.meta.wi = 0;
     src.meta.ri = 0;
 
diff --git a/test/c/std/json.c b/test/c/std/json.c
index f82bc61..f48880e 100644
--- a/test/c/std/json.c
+++ b/test/c/std/json.c
@@ -2583,7 +2583,7 @@
                      &dec, sizeof dec, WUFFS_VERSION,
                      WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED));
     for (size_t i = 0; quirks[i]; i++) {
-      wuffs_json__decoder__set_quirk_enabled(&dec, quirks[i], true);
+      wuffs_json__decoder__set_quirk(&dec, quirks[i], 1);
     }
     CHECK_STRING(do_test__wuffs_base__token_decoder(
         wuffs_json__decoder__upcast_as__wuffs_base__token_decoder(&dec),
@@ -3024,7 +3024,7 @@
       CHECK_STATUS("initialize", wuffs_json__decoder__initialize(
                                      &dec, sizeof dec, WUFFS_VERSION,
                                      WUFFS_INITIALIZE__DEFAULT_OPTIONS));
-      wuffs_json__decoder__set_quirk_enabled(&dec, test_cases[tc].quirk, q);
+      wuffs_json__decoder__set_quirk(&dec, test_cases[tc].quirk, q);
 
       wuffs_base__token_buffer tok =
           wuffs_base__slice_token__writer(g_have_slice_token);
@@ -3106,8 +3106,8 @@
     CHECK_STATUS("initialize", wuffs_json__decoder__initialize(
                                    &dec, sizeof dec, WUFFS_VERSION,
                                    WUFFS_INITIALIZE__DEFAULT_OPTIONS));
-    wuffs_json__decoder__set_quirk_enabled(
-        &dec, WUFFS_JSON__QUIRK_ALLOW_BACKSLASH_X_AS_CODE_POINTS, true);
+    wuffs_json__decoder__set_quirk(
+        &dec, WUFFS_JSON__QUIRK_ALLOW_BACKSLASH_X_AS_CODE_POINTS, 1);
 
     wuffs_base__token_buffer tok =
         wuffs_base__slice_token__writer(g_have_slice_token);
@@ -3184,8 +3184,8 @@
       CHECK_STATUS("initialize", wuffs_json__decoder__initialize(
                                      &dec, sizeof dec, WUFFS_VERSION,
                                      WUFFS_INITIALIZE__DEFAULT_OPTIONS));
-      wuffs_json__decoder__set_quirk_enabled(
-          &dec, WUFFS_JSON__QUIRK_ALLOW_EXTRA_COMMA, q & 1);
+      wuffs_json__decoder__set_quirk(&dec, WUFFS_JSON__QUIRK_ALLOW_EXTRA_COMMA,
+                                     q & 1);
 
       wuffs_base__token_buffer tok =
           wuffs_base__slice_token__writer(g_have_slice_token);
@@ -3257,7 +3257,7 @@
       CHECK_STATUS("initialize", wuffs_json__decoder__initialize(
                                      &dec, sizeof dec, WUFFS_VERSION,
                                      WUFFS_INITIALIZE__DEFAULT_OPTIONS));
-      wuffs_json__decoder__set_quirk_enabled(
+      wuffs_json__decoder__set_quirk(
           &dec, WUFFS_JSON__QUIRK_ALLOW_INF_NAN_NUMBERS, q & 1);
 
       wuffs_base__token_buffer tok =
@@ -3324,10 +3324,10 @@
       CHECK_STATUS("initialize", wuffs_json__decoder__initialize(
                                      &dec, sizeof dec, WUFFS_VERSION,
                                      WUFFS_INITIALIZE__DEFAULT_OPTIONS));
-      wuffs_json__decoder__set_quirk_enabled(
+      wuffs_json__decoder__set_quirk(
           &dec, WUFFS_JSON__QUIRK_ALLOW_COMMENT_BLOCK, q & 1);
-      wuffs_json__decoder__set_quirk_enabled(
-          &dec, WUFFS_JSON__QUIRK_ALLOW_COMMENT_LINE, q & 2);
+      wuffs_json__decoder__set_quirk(&dec, WUFFS_JSON__QUIRK_ALLOW_COMMENT_LINE,
+                                     q & 2);
 
       wuffs_base__token_buffer tok =
           wuffs_base__slice_token__writer(g_have_slice_token);
@@ -3399,9 +3399,9 @@
       CHECK_STATUS("initialize", wuffs_json__decoder__initialize(
                                      &dec, sizeof dec, WUFFS_VERSION,
                                      WUFFS_INITIALIZE__DEFAULT_OPTIONS));
-      wuffs_json__decoder__set_quirk_enabled(
+      wuffs_json__decoder__set_quirk(
           &dec, WUFFS_JSON__QUIRK_ALLOW_LEADING_ASCII_RECORD_SEPARATOR, q & 1);
-      wuffs_json__decoder__set_quirk_enabled(
+      wuffs_json__decoder__set_quirk(
           &dec, WUFFS_JSON__QUIRK_ALLOW_LEADING_UNICODE_BYTE_ORDER_MARK, q & 2);
 
       wuffs_base__token_buffer tok =
@@ -3500,12 +3500,12 @@
     CHECK_STATUS("initialize", wuffs_json__decoder__initialize(
                                    &dec, sizeof dec, WUFFS_VERSION,
                                    WUFFS_INITIALIZE__DEFAULT_OPTIONS));
-    wuffs_json__decoder__set_quirk_enabled(
-        &dec, WUFFS_JSON__QUIRK_ALLOW_COMMENT_BLOCK, true);
-    wuffs_json__decoder__set_quirk_enabled(
-        &dec, WUFFS_JSON__QUIRK_ALLOW_COMMENT_LINE, true);
-    wuffs_json__decoder__set_quirk_enabled(
-        &dec, WUFFS_JSON__QUIRK_ALLOW_TRAILING_FILLER, true);
+    wuffs_json__decoder__set_quirk(&dec, WUFFS_JSON__QUIRK_ALLOW_COMMENT_BLOCK,
+                                   1);
+    wuffs_json__decoder__set_quirk(&dec, WUFFS_JSON__QUIRK_ALLOW_COMMENT_LINE,
+                                   1);
+    wuffs_json__decoder__set_quirk(&dec,
+                                   WUFFS_JSON__QUIRK_ALLOW_TRAILING_FILLER, 1);
 
     const char* have_repr =
         wuffs_json__decoder__decode_tokens(&dec, &tok, &src, g_work_slice_u8)
@@ -3544,8 +3544,8 @@
     CHECK_STATUS("initialize", wuffs_json__decoder__initialize(
                                    &dec, sizeof dec, WUFFS_VERSION,
                                    WUFFS_INITIALIZE__DEFAULT_OPTIONS));
-    wuffs_json__decoder__set_quirk_enabled(
-        &dec, WUFFS_JSON__QUIRK_EXPECT_TRAILING_NEW_LINE_OR_EOF, true);
+    wuffs_json__decoder__set_quirk(
+        &dec, WUFFS_JSON__QUIRK_EXPECT_TRAILING_NEW_LINE_OR_EOF, 1);
 
     const char* have_repr =
         wuffs_json__decoder__decode_tokens(&dec, &tok, &src, g_work_slice_u8)
@@ -3612,9 +3612,9 @@
       CHECK_STATUS("initialize", wuffs_json__decoder__initialize(
                                      &dec, sizeof dec, WUFFS_VERSION,
                                      WUFFS_INITIALIZE__DEFAULT_OPTIONS));
-      wuffs_json__decoder__set_quirk_enabled(
+      wuffs_json__decoder__set_quirk(
           &dec, WUFFS_JSON__QUIRK_ALLOW_TRAILING_FILLER, q & 1);
-      wuffs_json__decoder__set_quirk_enabled(
+      wuffs_json__decoder__set_quirk(
           &dec, WUFFS_JSON__QUIRK_EXPECT_TRAILING_NEW_LINE_OR_EOF, q & 2);
 
       wuffs_base__token_buffer tok =
@@ -3709,8 +3709,8 @@
     CHECK_STATUS("initialize", wuffs_json__decoder__initialize(
                                    &dec, sizeof dec, WUFFS_VERSION,
                                    WUFFS_INITIALIZE__DEFAULT_OPTIONS));
-    wuffs_json__decoder__set_quirk_enabled(
-        &dec, WUFFS_JSON__QUIRK_REPLACE_INVALID_UNICODE, true);
+    wuffs_json__decoder__set_quirk(
+        &dec, WUFFS_JSON__QUIRK_REPLACE_INVALID_UNICODE, 1);
 
     wuffs_base__io_buffer have = wuffs_base__slice_u8__writer(g_have_slice_u8);
     wuffs_base__token_buffer tok =
diff --git a/test/c/std/zlib.c b/test/c/std/zlib.c
index 4c6b775..98c6810 100644
--- a/test/c/std/zlib.c
+++ b/test/c/std/zlib.c
@@ -153,10 +153,9 @@
                wuffs_zlib__decoder__initialize(&dec, sizeof dec, WUFFS_VERSION,
                                                wuffs_initialize_flags));
 
-  // This wuffs_zlib__decoder__set_quirk_enabled call is the only difference
-  // between wuffs_raw_deflate_decode and wuffs_zlib_decode immediately below.
-  wuffs_zlib__decoder__set_quirk_enabled(
-      &dec, WUFFS_ZLIB__QUIRK_JUST_RAW_DEFLATE, true);
+  // This wuffs_zlib__decoder__set_quirk call is the only difference between
+  // wuffs_raw_deflate_decode and wuffs_zlib_decode immediately below.
+  wuffs_zlib__decoder__set_quirk(&dec, WUFFS_ZLIB__QUIRK_JUST_RAW_DEFLATE, 1);
 
   while (true) {
     wuffs_base__io_buffer limited_dst = make_limited_writer(*dst, wlimit);
@@ -234,8 +233,8 @@
                  wuffs_zlib__decoder__initialize(
                      &dec, sizeof dec, WUFFS_VERSION,
                      WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED));
-    wuffs_zlib__decoder__set_quirk_enabled(
-        &dec, WUFFS_BASE__QUIRK_IGNORE_CHECKSUM, ignore_checksum);
+    wuffs_zlib__decoder__set_quirk(&dec, WUFFS_BASE__QUIRK_IGNORE_CHECKSUM,
+                                   (uint64_t)ignore_checksum);
     have.meta.wi = 0;
     src.meta.ri = 0;
 
diff --git a/test/c/testlib/testlib.c b/test/c/testlib/testlib.c
index b6aebbf..e6a81b9 100644
--- a/test/c/testlib/testlib.c
+++ b/test/c/testlib/testlib.c
@@ -1058,7 +1058,7 @@
   wuffs_base__pixel_buffer pb = ((wuffs_base__pixel_buffer){});
 
   for (size_t i = 0; i < quirks_len; i++) {
-    wuffs_base__image_decoder__set_quirk_enabled(b, quirks_ptr[i], true);
+    wuffs_base__image_decoder__set_quirk(b, quirks_ptr[i], 1);
   }
 
   uint32_t bits_per_pixel = wuffs_base__pixel_format__bits_per_pixel(&pixfmt);