diff --git a/src/svalue.c b/src/svalue.c
index 08138506ab2a6b4cf44639966bba5c7aa4f2f019..140bceb9be6a64b98f9bd7d9040f64941f2ab4e2 100644
--- a/src/svalue.c
+++ b/src/svalue.c
@@ -1770,10 +1770,15 @@ PMOD_EXPORT void print_svalue (FILE *out, const struct svalue *s)
 {
   dynamic_buffer save_buf;
   dynbuf_string str;
+  SIZE_T off = 0;
   init_buf(&save_buf);
   describe_svalue (s, 0, NULL);
   str = complex_free_buf(&save_buf);
-  fwrite (str.str, str.len, 1, out);
+  while (off < str.len) {
+    SIZE_T num = fwrite (str.str + off, 1, str.len - off, out);
+    if (num) off += num;
+    else break;
+  }
   free (str.str);
 }