]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Handle test case where fgets() sees EOF on the last read
authorSteven Murdoch <Steven.Murdoch@cl.cam.ac.uk>
Thu, 1 Sep 2011 17:17:54 +0000 (18:17 +0100)
committerSteven Murdoch <Steven.Murdoch@cl.cam.ac.uk>
Thu, 1 Sep 2011 17:17:54 +0000 (18:17 +0100)
On some platforms, with non-blocking IO, on EOF you first
get EAGAIN, and then on the second read you get zero bytes
and EOF is set. However on others, the EOF flag is set as
soon as the last byte is read. This patch fixes the test
case in the latter scenario.

src/test/test_util.c

index 7faa0ae20e8b369dca58113e5ebafcc12e0e27bd..f9672c100bf077f0fa6b390b4c936c4eb59e9cd3 100644 (file)
@@ -1541,14 +1541,18 @@ test_util_spawn_background_partial_read(void *ptr)
   pos = tor_read_all_handle(process_handle.stdout_pipe, stdout_buf,
                             sizeof(stdout_buf) - 1,
                             &process_handle);
+  tt_int_op(pos, ==, 0);
 #else
-  if (!eof)
+  if (!eof) {
+    /* We should have got all the data, but maybe not the EOF flag */
     pos = tor_read_all_handle(process_handle.stdout_handle, stdout_buf,
                               sizeof(stdout_buf) - 1,
                               &process_handle, &eof);
-  tt_assert(eof)
+    tt_int_op(pos, ==, 0);
+    tt_assert(eof);
+  }
+  /* Otherwise, we got the EOF on the last read */
 #endif
-  tt_int_op(pos, ==, 0);
 
   /* Check it terminated correctly */
   retval = tor_get_exit_code(process_handle, 1, &exit_code);