+static bool
+write_data (const void *buf, size_t size, size_t nmemb, FILE *stream)
+{
+ while (nmemb > 0) {
+ size_t w;
+
+ w = fwrite (buf, size, nmemb, stream);
+ if (!w && ferror (stream))
+ return false;
+
+ nmemb -= w;
+ buf += size * w;
+ }
+
+ return true;
+}
+
+static bool
+write_page (FILE *f, ogg_page *p)
+{
+ return write_data (p->header, 1, p->header_len, f) &&
+ write_data (p->body, 1, p->body_len, f);
+}
+