Pārlūkot izejas kodu

libobs/util: Retry pipe writes to avoid short-write failures

Previously, any short write would be treated elsewhere as a failure. The
easiest solution is to have pipe_write() automatically retry until either
it's written everything, or it couldn't write anything at all.
Chris Angelico 5 gadi atpakaļ
vecāks
revīzija
664acef494
1 mainītis faili ar 8 papildinājumiem un 1 dzēšanām
  1. 8 1
      libobs/util/pipe-posix.c

+ 8 - 1
libobs/util/pipe-posix.c

@@ -93,5 +93,12 @@ size_t os_process_pipe_write(os_process_pipe_t *pp, const uint8_t *data,
 		return 0;
 		return 0;
 	}
 	}
 
 
-	return fwrite(data, 1, len, pp->file);
+	size_t written = 0;
+	while (written < len) {
+		size_t ret = fwrite(data + written, 1, len - written, pp->file);
+		if (!ret)
+			return written;
+		written += ret;
+	}
+	return written;
 }
 }