Rename {read,writ}er_io_position
diff --git a/doc/changelog.md b/doc/changelog.md
index 0f01e53..33894ef 100644
--- a/doc/changelog.md
+++ b/doc/changelog.md
@@ -41,6 +41,7 @@
 - Renamed I/O `available` methods to `length`.
 - Renamed `decode_io_writer?` methods to `transform_io?`.
 - Renamed `example/library` to `example/toy-genlib`.
+- Renamed `{read,writ}er_io_position` to `{read,writ}er_position`.
 - Renamed `swizzle_interleaved!` to `swizzle_interleaved_from_slice!`.
 - Renamed warnings to notes.
 
diff --git a/internal/cgen/base/io-public.h b/internal/cgen/base/io-public.h
index 041f7a1..6e10b38 100644
--- a/internal/cgen/base/io-public.h
+++ b/internal/cgen/base/io-public.h
@@ -38,14 +38,19 @@
 #ifdef __cplusplus
   inline bool is_valid() const;
   inline void compact();
-  inline uint64_t reader_io_position() const;
   inline size_t reader_length() const;
   inline uint8_t* reader_pointer() const;
+  inline uint64_t reader_position() const;
   inline wuffs_base__slice_u8 reader_slice() const;
-  inline uint64_t writer_io_position() const;
   inline size_t writer_length() const;
   inline uint8_t* writer_pointer() const;
+  inline uint64_t writer_position() const;
   inline wuffs_base__slice_u8 writer_slice() const;
+
+  // Deprecated: use reader_position.
+  inline uint64_t reader_io_position() const;
+  // Deprecated: use writer_position.
+  inline uint64_t writer_io_position() const;
 #endif  // __cplusplus
 
 } wuffs_base__io_buffer;
@@ -170,6 +175,7 @@
   buf->meta.ri = 0;
 }
 
+// Deprecated. Use wuffs_base__io_buffer__reader_position.
 static inline uint64_t  //
 wuffs_base__io_buffer__reader_io_position(const wuffs_base__io_buffer* buf) {
   return buf ? wuffs_base__u64__sat_add(buf->meta.pos, buf->meta.ri) : 0;
@@ -185,6 +191,11 @@
   return buf ? (buf->data.ptr + buf->meta.ri) : NULL;
 }
 
+static inline uint64_t  //
+wuffs_base__io_buffer__reader_position(const wuffs_base__io_buffer* buf) {
+  return buf ? wuffs_base__u64__sat_add(buf->meta.pos, buf->meta.ri) : 0;
+}
+
 static inline wuffs_base__slice_u8  //
 wuffs_base__io_buffer__reader_slice(const wuffs_base__io_buffer* buf) {
   return buf ? wuffs_base__make_slice_u8(buf->data.ptr + buf->meta.ri,
@@ -192,6 +203,7 @@
              : wuffs_base__empty_slice_u8();
 }
 
+// Deprecated. Use wuffs_base__io_buffer__writer_position.
 static inline uint64_t  //
 wuffs_base__io_buffer__writer_io_position(const wuffs_base__io_buffer* buf) {
   return buf ? wuffs_base__u64__sat_add(buf->meta.pos, buf->meta.wi) : 0;
@@ -207,6 +219,11 @@
   return buf ? (buf->data.ptr + buf->meta.wi) : NULL;
 }
 
+static inline uint64_t  //
+wuffs_base__io_buffer__writer_position(const wuffs_base__io_buffer* buf) {
+  return buf ? wuffs_base__u64__sat_add(buf->meta.pos, buf->meta.wi) : 0;
+}
+
 static inline wuffs_base__slice_u8  //
 wuffs_base__io_buffer__writer_slice(const wuffs_base__io_buffer* buf) {
   return buf ? wuffs_base__make_slice_u8(buf->data.ptr + buf->meta.wi,
@@ -241,6 +258,11 @@
   return wuffs_base__io_buffer__reader_pointer(this);
 }
 
+inline uint64_t  //
+wuffs_base__io_buffer::reader_position() const {
+  return wuffs_base__io_buffer__reader_position(this);
+}
+
 inline wuffs_base__slice_u8  //
 wuffs_base__io_buffer::reader_slice() const {
   return wuffs_base__io_buffer__reader_slice(this);
@@ -261,6 +283,11 @@
   return wuffs_base__io_buffer__writer_pointer(this);
 }
 
+inline uint64_t  //
+wuffs_base__io_buffer::writer_position() const {
+  return wuffs_base__io_buffer__writer_position(this);
+}
+
 inline wuffs_base__slice_u8  //
 wuffs_base__io_buffer::writer_slice() const {
   return wuffs_base__io_buffer__writer_slice(this);
diff --git a/internal/cgen/data/data.go b/internal/cgen/data/data.go
index 5c9573d..1aebd22 100644
--- a/internal/cgen/data/data.go
+++ b/internal/cgen/data/data.go
@@ -197,13 +197,14 @@
 	""
 
 const BaseIOPublicH = "" +
-	"// ---------------- I/O\n//\n// See (/doc/note/io-input-output.md).\n\n// wuffs_base__io_buffer_meta is the metadata for a wuffs_base__io_buffer's\n// data.\ntypedef struct {\n  size_t wi;     // Write index. Invariant: wi <= len.\n  size_t ri;     // Read  index. Invariant: ri <= wi.\n  uint64_t pos;  // Buffer position (relative to the start of stream).\n  bool closed;   // No further writes are expected.\n} wuffs_base__io_buffer_meta;\n\n// wuffs_base__io_buffer is a 1-dimensional buffer (a pointer and length) plus\n// additional metadata.\n//\n// A value with all fields zero is a valid, empty buffer.\ntypedef struct {\n  wuffs_base__slice_u8 data;\n  wuffs_base__io_buffer_meta meta;\n\n#ifdef __cplusplus\n  inline bool is_valid() const;\n  inline void compact();\n  inline uint64_t reader_io_position() const;\n  inline size_t reader_length() const;\n  inline uint8_t* reader_pointer() const;\n  inline wuffs_base__slice_u8 reader_slice() const;\n  inline uint64_t writer_io_position() const;\n  inline size_t writer_length() const;\n  inli" +
-	"ne uint8_t* writer_pointer() const;\n  inline wuffs_base__slice_u8 writer_slice() const;\n#endif  // __cplusplus\n\n} wuffs_base__io_buffer;\n\nstatic inline wuffs_base__io_buffer  //\nwuffs_base__make_io_buffer(wuffs_base__slice_u8 data,\n                           wuffs_base__io_buffer_meta meta) {\n  wuffs_base__io_buffer ret;\n  ret.data = data;\n  ret.meta = meta;\n  return ret;\n}\n\nstatic inline wuffs_base__io_buffer_meta  //\nwuffs_base__make_io_buffer_meta(size_t wi,\n                                size_t ri,\n                                uint64_t pos,\n                                bool closed) {\n  wuffs_base__io_buffer_meta ret;\n  ret.wi = wi;\n  ret.ri = ri;\n  ret.pos = pos;\n  ret.closed = closed;\n  return ret;\n}\n\nstatic inline wuffs_base__io_buffer  //\nwuffs_base__ptr_u8__reader(uint8_t* ptr, size_t len, bool closed) {\n  wuffs_base__io_buffer ret;\n  ret.data.ptr = ptr;\n  ret.data.len = len;\n  ret.meta.wi = len;\n  ret.meta.ri = 0;\n  ret.meta.pos = 0;\n  ret.meta.closed = closed;\n  return ret;\n}\n\nstatic inline w" +
-	"uffs_base__io_buffer  //\nwuffs_base__ptr_u8__writer(uint8_t* ptr, size_t len) {\n  wuffs_base__io_buffer ret;\n  ret.data.ptr = ptr;\n  ret.data.len = len;\n  ret.meta.wi = 0;\n  ret.meta.ri = 0;\n  ret.meta.pos = 0;\n  ret.meta.closed = false;\n  return ret;\n}\n\nstatic inline wuffs_base__io_buffer  //\nwuffs_base__slice_u8__reader(wuffs_base__slice_u8 s, bool closed) {\n  wuffs_base__io_buffer ret;\n  ret.data.ptr = s.ptr;\n  ret.data.len = s.len;\n  ret.meta.wi = s.len;\n  ret.meta.ri = 0;\n  ret.meta.pos = 0;\n  ret.meta.closed = closed;\n  return ret;\n}\n\nstatic inline wuffs_base__io_buffer  //\nwuffs_base__slice_u8__writer(wuffs_base__slice_u8 s) {\n  wuffs_base__io_buffer ret;\n  ret.data.ptr = s.ptr;\n  ret.data.len = s.len;\n  ret.meta.wi = 0;\n  ret.meta.ri = 0;\n  ret.meta.pos = 0;\n  ret.meta.closed = false;\n  return ret;\n}\n\nstatic inline wuffs_base__io_buffer  //\nwuffs_base__empty_io_buffer() {\n  wuffs_base__io_buffer ret;\n  ret.data.ptr = NULL;\n  ret.data.len = 0;\n  ret.meta.wi = 0;\n  ret.meta.ri = 0;\n  ret.meta.pos = 0;\n " +
-	" ret.meta.closed = false;\n  return ret;\n}\n\nstatic inline wuffs_base__io_buffer_meta  //\nwuffs_base__empty_io_buffer_meta() {\n  wuffs_base__io_buffer_meta ret;\n  ret.wi = 0;\n  ret.ri = 0;\n  ret.pos = 0;\n  ret.closed = false;\n  return ret;\n}\n\nstatic inline bool  //\nwuffs_base__io_buffer__is_valid(const wuffs_base__io_buffer* buf) {\n  if (buf) {\n    if (buf->data.ptr) {\n      return (buf->meta.ri <= buf->meta.wi) && (buf->meta.wi <= buf->data.len);\n    } else {\n      return (buf->meta.ri == 0) && (buf->meta.wi == 0) && (buf->data.len == 0);\n    }\n  }\n  return false;\n}\n\n// wuffs_base__io_buffer__compact moves any written but unread bytes to the\n// start of the buffer.\nstatic inline void  //\nwuffs_base__io_buffer__compact(wuffs_base__io_buffer* buf) {\n  if (!buf || (buf->meta.ri == 0)) {\n    return;\n  }\n  buf->meta.pos = wuffs_base__u64__sat_add(buf->meta.pos, buf->meta.ri);\n  size_t n = buf->meta.wi - buf->meta.ri;\n  if (n != 0) {\n    memmove(buf->data.ptr, buf->data.ptr + buf->meta.ri, n);\n  }\n  buf->meta.wi = n" +
-	";\n  buf->meta.ri = 0;\n}\n\nstatic inline uint64_t  //\nwuffs_base__io_buffer__reader_io_position(const wuffs_base__io_buffer* buf) {\n  return buf ? wuffs_base__u64__sat_add(buf->meta.pos, buf->meta.ri) : 0;\n}\n\nstatic inline size_t  //\nwuffs_base__io_buffer__reader_length(const wuffs_base__io_buffer* buf) {\n  return buf ? buf->meta.wi - buf->meta.ri : 0;\n}\n\nstatic inline uint8_t*  //\nwuffs_base__io_buffer__reader_pointer(const wuffs_base__io_buffer* buf) {\n  return buf ? (buf->data.ptr + buf->meta.ri) : NULL;\n}\n\nstatic inline wuffs_base__slice_u8  //\nwuffs_base__io_buffer__reader_slice(const wuffs_base__io_buffer* buf) {\n  return buf ? wuffs_base__make_slice_u8(buf->data.ptr + buf->meta.ri,\n                                         buf->meta.wi - buf->meta.ri)\n             : wuffs_base__empty_slice_u8();\n}\n\nstatic inline uint64_t  //\nwuffs_base__io_buffer__writer_io_position(const wuffs_base__io_buffer* buf) {\n  return buf ? wuffs_base__u64__sat_add(buf->meta.pos, buf->meta.wi) : 0;\n}\n\nstatic inline size_t  //\nwuf" +
-	"fs_base__io_buffer__writer_length(const wuffs_base__io_buffer* buf) {\n  return buf ? buf->data.len - buf->meta.wi : 0;\n}\n\nstatic inline uint8_t*  //\nwuffs_base__io_buffer__writer_pointer(const wuffs_base__io_buffer* buf) {\n  return buf ? (buf->data.ptr + buf->meta.wi) : NULL;\n}\n\nstatic inline wuffs_base__slice_u8  //\nwuffs_base__io_buffer__writer_slice(const wuffs_base__io_buffer* buf) {\n  return buf ? wuffs_base__make_slice_u8(buf->data.ptr + buf->meta.wi,\n                                         buf->data.len - buf->meta.wi)\n             : wuffs_base__empty_slice_u8();\n}\n\n#ifdef __cplusplus\n\ninline bool  //\nwuffs_base__io_buffer::is_valid() const {\n  return wuffs_base__io_buffer__is_valid(this);\n}\n\ninline void  //\nwuffs_base__io_buffer::compact() {\n  wuffs_base__io_buffer__compact(this);\n}\n\ninline uint64_t  //\nwuffs_base__io_buffer::reader_io_position() const {\n  return wuffs_base__io_buffer__reader_io_position(this);\n}\n\ninline size_t  //\nwuffs_base__io_buffer::reader_length() const {\n  return wuffs_base__i" +
-	"o_buffer__reader_length(this);\n}\n\ninline uint8_t*  //\nwuffs_base__io_buffer::reader_pointer() const {\n  return wuffs_base__io_buffer__reader_pointer(this);\n}\n\ninline wuffs_base__slice_u8  //\nwuffs_base__io_buffer::reader_slice() const {\n  return wuffs_base__io_buffer__reader_slice(this);\n}\n\ninline uint64_t  //\nwuffs_base__io_buffer::writer_io_position() const {\n  return wuffs_base__io_buffer__writer_io_position(this);\n}\n\ninline size_t  //\nwuffs_base__io_buffer::writer_length() const {\n  return wuffs_base__io_buffer__writer_length(this);\n}\n\ninline uint8_t*  //\nwuffs_base__io_buffer::writer_pointer() const {\n  return wuffs_base__io_buffer__writer_pointer(this);\n}\n\ninline wuffs_base__slice_u8  //\nwuffs_base__io_buffer::writer_slice() const {\n  return wuffs_base__io_buffer__writer_slice(this);\n}\n\n#endif  // __cplusplus\n" +
+	"// ---------------- I/O\n//\n// See (/doc/note/io-input-output.md).\n\n// wuffs_base__io_buffer_meta is the metadata for a wuffs_base__io_buffer's\n// data.\ntypedef struct {\n  size_t wi;     // Write index. Invariant: wi <= len.\n  size_t ri;     // Read  index. Invariant: ri <= wi.\n  uint64_t pos;  // Buffer position (relative to the start of stream).\n  bool closed;   // No further writes are expected.\n} wuffs_base__io_buffer_meta;\n\n// wuffs_base__io_buffer is a 1-dimensional buffer (a pointer and length) plus\n// additional metadata.\n//\n// A value with all fields zero is a valid, empty buffer.\ntypedef struct {\n  wuffs_base__slice_u8 data;\n  wuffs_base__io_buffer_meta meta;\n\n#ifdef __cplusplus\n  inline bool is_valid() const;\n  inline void compact();\n  inline size_t reader_length() const;\n  inline uint8_t* reader_pointer() const;\n  inline uint64_t reader_position() const;\n  inline wuffs_base__slice_u8 reader_slice() const;\n  inline size_t writer_length() const;\n  inline uint8_t* writer_pointer() const;\n  inline uint" +
+	"64_t writer_position() const;\n  inline wuffs_base__slice_u8 writer_slice() const;\n\n  // Deprecated: use reader_position.\n  inline uint64_t reader_io_position() const;\n  // Deprecated: use writer_position.\n  inline uint64_t writer_io_position() const;\n#endif  // __cplusplus\n\n} wuffs_base__io_buffer;\n\nstatic inline wuffs_base__io_buffer  //\nwuffs_base__make_io_buffer(wuffs_base__slice_u8 data,\n                           wuffs_base__io_buffer_meta meta) {\n  wuffs_base__io_buffer ret;\n  ret.data = data;\n  ret.meta = meta;\n  return ret;\n}\n\nstatic inline wuffs_base__io_buffer_meta  //\nwuffs_base__make_io_buffer_meta(size_t wi,\n                                size_t ri,\n                                uint64_t pos,\n                                bool closed) {\n  wuffs_base__io_buffer_meta ret;\n  ret.wi = wi;\n  ret.ri = ri;\n  ret.pos = pos;\n  ret.closed = closed;\n  return ret;\n}\n\nstatic inline wuffs_base__io_buffer  //\nwuffs_base__ptr_u8__reader(uint8_t* ptr, size_t len, bool closed) {\n  wuffs_base__io_buffer ret;\n " +
+	" ret.data.ptr = ptr;\n  ret.data.len = len;\n  ret.meta.wi = len;\n  ret.meta.ri = 0;\n  ret.meta.pos = 0;\n  ret.meta.closed = closed;\n  return ret;\n}\n\nstatic inline wuffs_base__io_buffer  //\nwuffs_base__ptr_u8__writer(uint8_t* ptr, size_t len) {\n  wuffs_base__io_buffer ret;\n  ret.data.ptr = ptr;\n  ret.data.len = len;\n  ret.meta.wi = 0;\n  ret.meta.ri = 0;\n  ret.meta.pos = 0;\n  ret.meta.closed = false;\n  return ret;\n}\n\nstatic inline wuffs_base__io_buffer  //\nwuffs_base__slice_u8__reader(wuffs_base__slice_u8 s, bool closed) {\n  wuffs_base__io_buffer ret;\n  ret.data.ptr = s.ptr;\n  ret.data.len = s.len;\n  ret.meta.wi = s.len;\n  ret.meta.ri = 0;\n  ret.meta.pos = 0;\n  ret.meta.closed = closed;\n  return ret;\n}\n\nstatic inline wuffs_base__io_buffer  //\nwuffs_base__slice_u8__writer(wuffs_base__slice_u8 s) {\n  wuffs_base__io_buffer ret;\n  ret.data.ptr = s.ptr;\n  ret.data.len = s.len;\n  ret.meta.wi = 0;\n  ret.meta.ri = 0;\n  ret.meta.pos = 0;\n  ret.meta.closed = false;\n  return ret;\n}\n\nstatic inline wuffs_base__io_buffer  //\n" +
+	"wuffs_base__empty_io_buffer() {\n  wuffs_base__io_buffer ret;\n  ret.data.ptr = NULL;\n  ret.data.len = 0;\n  ret.meta.wi = 0;\n  ret.meta.ri = 0;\n  ret.meta.pos = 0;\n  ret.meta.closed = false;\n  return ret;\n}\n\nstatic inline wuffs_base__io_buffer_meta  //\nwuffs_base__empty_io_buffer_meta() {\n  wuffs_base__io_buffer_meta ret;\n  ret.wi = 0;\n  ret.ri = 0;\n  ret.pos = 0;\n  ret.closed = false;\n  return ret;\n}\n\nstatic inline bool  //\nwuffs_base__io_buffer__is_valid(const wuffs_base__io_buffer* buf) {\n  if (buf) {\n    if (buf->data.ptr) {\n      return (buf->meta.ri <= buf->meta.wi) && (buf->meta.wi <= buf->data.len);\n    } else {\n      return (buf->meta.ri == 0) && (buf->meta.wi == 0) && (buf->data.len == 0);\n    }\n  }\n  return false;\n}\n\n// wuffs_base__io_buffer__compact moves any written but unread bytes to the\n// start of the buffer.\nstatic inline void  //\nwuffs_base__io_buffer__compact(wuffs_base__io_buffer* buf) {\n  if (!buf || (buf->meta.ri == 0)) {\n    return;\n  }\n  buf->meta.pos = wuffs_base__u64__sat_add(buf->met" +
+	"a.pos, buf->meta.ri);\n  size_t n = buf->meta.wi - buf->meta.ri;\n  if (n != 0) {\n    memmove(buf->data.ptr, buf->data.ptr + buf->meta.ri, n);\n  }\n  buf->meta.wi = n;\n  buf->meta.ri = 0;\n}\n\n// Deprecated. Use wuffs_base__io_buffer__reader_position.\nstatic inline uint64_t  //\nwuffs_base__io_buffer__reader_io_position(const wuffs_base__io_buffer* buf) {\n  return buf ? wuffs_base__u64__sat_add(buf->meta.pos, buf->meta.ri) : 0;\n}\n\nstatic inline size_t  //\nwuffs_base__io_buffer__reader_length(const wuffs_base__io_buffer* buf) {\n  return buf ? buf->meta.wi - buf->meta.ri : 0;\n}\n\nstatic inline uint8_t*  //\nwuffs_base__io_buffer__reader_pointer(const wuffs_base__io_buffer* buf) {\n  return buf ? (buf->data.ptr + buf->meta.ri) : NULL;\n}\n\nstatic inline uint64_t  //\nwuffs_base__io_buffer__reader_position(const wuffs_base__io_buffer* buf) {\n  return buf ? wuffs_base__u64__sat_add(buf->meta.pos, buf->meta.ri) : 0;\n}\n\nstatic inline wuffs_base__slice_u8  //\nwuffs_base__io_buffer__reader_slice(const wuffs_base__io_buffer* buf) " +
+	"{\n  return buf ? wuffs_base__make_slice_u8(buf->data.ptr + buf->meta.ri,\n                                         buf->meta.wi - buf->meta.ri)\n             : wuffs_base__empty_slice_u8();\n}\n\n// Deprecated. Use wuffs_base__io_buffer__writer_position.\nstatic inline uint64_t  //\nwuffs_base__io_buffer__writer_io_position(const wuffs_base__io_buffer* buf) {\n  return buf ? wuffs_base__u64__sat_add(buf->meta.pos, buf->meta.wi) : 0;\n}\n\nstatic inline size_t  //\nwuffs_base__io_buffer__writer_length(const wuffs_base__io_buffer* buf) {\n  return buf ? buf->data.len - buf->meta.wi : 0;\n}\n\nstatic inline uint8_t*  //\nwuffs_base__io_buffer__writer_pointer(const wuffs_base__io_buffer* buf) {\n  return buf ? (buf->data.ptr + buf->meta.wi) : NULL;\n}\n\nstatic inline uint64_t  //\nwuffs_base__io_buffer__writer_position(const wuffs_base__io_buffer* buf) {\n  return buf ? wuffs_base__u64__sat_add(buf->meta.pos, buf->meta.wi) : 0;\n}\n\nstatic inline wuffs_base__slice_u8  //\nwuffs_base__io_buffer__writer_slice(const wuffs_base__io_buffer* b" +
+	"uf) {\n  return buf ? wuffs_base__make_slice_u8(buf->data.ptr + buf->meta.wi,\n                                         buf->data.len - buf->meta.wi)\n             : wuffs_base__empty_slice_u8();\n}\n\n#ifdef __cplusplus\n\ninline bool  //\nwuffs_base__io_buffer::is_valid() const {\n  return wuffs_base__io_buffer__is_valid(this);\n}\n\ninline void  //\nwuffs_base__io_buffer::compact() {\n  wuffs_base__io_buffer__compact(this);\n}\n\ninline uint64_t  //\nwuffs_base__io_buffer::reader_io_position() const {\n  return wuffs_base__io_buffer__reader_io_position(this);\n}\n\ninline size_t  //\nwuffs_base__io_buffer::reader_length() const {\n  return wuffs_base__io_buffer__reader_length(this);\n}\n\ninline uint8_t*  //\nwuffs_base__io_buffer::reader_pointer() const {\n  return wuffs_base__io_buffer__reader_pointer(this);\n}\n\ninline uint64_t  //\nwuffs_base__io_buffer::reader_position() const {\n  return wuffs_base__io_buffer__reader_position(this);\n}\n\ninline wuffs_base__slice_u8  //\nwuffs_base__io_buffer::reader_slice() const {\n  return wuffs_base__" +
+	"io_buffer__reader_slice(this);\n}\n\ninline uint64_t  //\nwuffs_base__io_buffer::writer_io_position() const {\n  return wuffs_base__io_buffer__writer_io_position(this);\n}\n\ninline size_t  //\nwuffs_base__io_buffer::writer_length() const {\n  return wuffs_base__io_buffer__writer_length(this);\n}\n\ninline uint8_t*  //\nwuffs_base__io_buffer::writer_pointer() const {\n  return wuffs_base__io_buffer__writer_pointer(this);\n}\n\ninline uint64_t  //\nwuffs_base__io_buffer::writer_position() const {\n  return wuffs_base__io_buffer__writer_position(this);\n}\n\ninline wuffs_base__slice_u8  //\nwuffs_base__io_buffer::writer_slice() const {\n  return wuffs_base__io_buffer__writer_slice(this);\n}\n\n#endif  // __cplusplus\n" +
 	""
 
 const BaseRangePrivateH = "" +
diff --git a/release/c/wuffs-unsupported-snapshot.c b/release/c/wuffs-unsupported-snapshot.c
index f6ab05b..3ab133b 100644
--- a/release/c/wuffs-unsupported-snapshot.c
+++ b/release/c/wuffs-unsupported-snapshot.c
@@ -1956,14 +1956,19 @@
 #ifdef __cplusplus
   inline bool is_valid() const;
   inline void compact();
-  inline uint64_t reader_io_position() const;
   inline size_t reader_length() const;
   inline uint8_t* reader_pointer() const;
+  inline uint64_t reader_position() const;
   inline wuffs_base__slice_u8 reader_slice() const;
-  inline uint64_t writer_io_position() const;
   inline size_t writer_length() const;
   inline uint8_t* writer_pointer() const;
+  inline uint64_t writer_position() const;
   inline wuffs_base__slice_u8 writer_slice() const;
+
+  // Deprecated: use reader_position.
+  inline uint64_t reader_io_position() const;
+  // Deprecated: use writer_position.
+  inline uint64_t writer_io_position() const;
 #endif  // __cplusplus
 
 } wuffs_base__io_buffer;
@@ -2088,6 +2093,7 @@
   buf->meta.ri = 0;
 }
 
+// Deprecated. Use wuffs_base__io_buffer__reader_position.
 static inline uint64_t  //
 wuffs_base__io_buffer__reader_io_position(const wuffs_base__io_buffer* buf) {
   return buf ? wuffs_base__u64__sat_add(buf->meta.pos, buf->meta.ri) : 0;
@@ -2103,6 +2109,11 @@
   return buf ? (buf->data.ptr + buf->meta.ri) : NULL;
 }
 
+static inline uint64_t  //
+wuffs_base__io_buffer__reader_position(const wuffs_base__io_buffer* buf) {
+  return buf ? wuffs_base__u64__sat_add(buf->meta.pos, buf->meta.ri) : 0;
+}
+
 static inline wuffs_base__slice_u8  //
 wuffs_base__io_buffer__reader_slice(const wuffs_base__io_buffer* buf) {
   return buf ? wuffs_base__make_slice_u8(buf->data.ptr + buf->meta.ri,
@@ -2110,6 +2121,7 @@
              : wuffs_base__empty_slice_u8();
 }
 
+// Deprecated. Use wuffs_base__io_buffer__writer_position.
 static inline uint64_t  //
 wuffs_base__io_buffer__writer_io_position(const wuffs_base__io_buffer* buf) {
   return buf ? wuffs_base__u64__sat_add(buf->meta.pos, buf->meta.wi) : 0;
@@ -2125,6 +2137,11 @@
   return buf ? (buf->data.ptr + buf->meta.wi) : NULL;
 }
 
+static inline uint64_t  //
+wuffs_base__io_buffer__writer_position(const wuffs_base__io_buffer* buf) {
+  return buf ? wuffs_base__u64__sat_add(buf->meta.pos, buf->meta.wi) : 0;
+}
+
 static inline wuffs_base__slice_u8  //
 wuffs_base__io_buffer__writer_slice(const wuffs_base__io_buffer* buf) {
   return buf ? wuffs_base__make_slice_u8(buf->data.ptr + buf->meta.wi,
@@ -2159,6 +2176,11 @@
   return wuffs_base__io_buffer__reader_pointer(this);
 }
 
+inline uint64_t  //
+wuffs_base__io_buffer::reader_position() const {
+  return wuffs_base__io_buffer__reader_position(this);
+}
+
 inline wuffs_base__slice_u8  //
 wuffs_base__io_buffer::reader_slice() const {
   return wuffs_base__io_buffer__reader_slice(this);
@@ -2179,6 +2201,11 @@
   return wuffs_base__io_buffer__writer_pointer(this);
 }
 
+inline uint64_t  //
+wuffs_base__io_buffer::writer_position() const {
+  return wuffs_base__io_buffer__writer_position(this);
+}
+
 inline wuffs_base__slice_u8  //
 wuffs_base__io_buffer::writer_slice() const {
   return wuffs_base__io_buffer__writer_slice(this);