diff --git a/src/srun/srun.c b/src/srun/srun.c
index a72c94d23e91bb5b63fb3f0c0de6a54b01c3385c..542e82980f3e17c5bee220f12138650e1ec1c521 100644
--- a/src/srun/srun.c
+++ b/src/srun/srun.c
@@ -551,8 +551,15 @@ _build_script (char *fname, int file_type)
 		int len = buffer ? strlen(buffer) : 0;
 		int size;
 
-		if ((size = cbuf_write_from_fd(cb, fd, -1, NULL)) < 0) 
-			error("Unable to read %s", fname);
+		while ((size = cbuf_write_from_fd(cb, fd, -1, NULL)) > 0) 
+			;
+
+		if (size < 0) {
+			error ("unable to read %s: %m", fname);
+			cbuf_destroy(cb);
+			return NULL;
+		}
+
 		cbuf_write(cb, "\0", 1, NULL);
 
 		xrealloc(buffer, cbuf_used(cb) + len +1);