diff --git a/examples/io.c b/examples/io.c
index 48d7b801ea86f3780a742a23ec86d3613d29296e..fdd75e7c29c6c8f5f1bf36f3c079cc57b946b295 100644
--- a/examples/io.c
+++ b/examples/io.c
@@ -118,10 +118,16 @@ write_file(const char *name, unsigned size, const char *buffer)
 
   res = fwrite(buffer, 1, size, f);
   
-  if (res < size || ferror(f))
+  if (res < size)
     res = 0;
 
-  fclose(f);
+  return fclose(f) == 0 && res > 0;
+}
+
+int
+write_string(FILE *f, unsigned size, const char *buffer)
+{
+  size_t res = fwrite(buffer, 1, size, f);
 
   return res > 0;
 }
diff --git a/examples/io.h b/examples/io.h
index b7530f38756810a161cd8837cbbe0c046db4d235..acd864f2754d31b5beecad49a6673febac6c5482 100644
--- a/examples/io.h
+++ b/examples/io.h
@@ -49,6 +49,9 @@ read_file(const char *name, unsigned size, char **buffer);
 int
 write_file(const char *name, unsigned size, const char *buffer);
 
+int
+write_string(FILE *f, unsigned size, const char *buffer);
+
 int
 simple_random(struct yarrow256_ctx *ctx, const char *name);