gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r27005 - gnunet/src/util


From: gnunet
Subject: [GNUnet-SVN] r27005 - gnunet/src/util
Date: Tue, 30 Apr 2013 06:38:47 +0200

Author: LRN
Date: 2013-04-30 06:38:47 +0200 (Tue, 30 Apr 2013)
New Revision: 27005

Modified:
   gnunet/src/util/test_os_start_process.c
Log:
Fix test_os_startprocess

Previous code wrongly assumed that the message will be read from the pipe
completely in one go. It does not happen like that _every_ time.

Modified: gnunet/src/util/test_os_start_process.c
===================================================================
--- gnunet/src/util/test_os_start_process.c     2013-04-30 00:04:25 UTC (rev 
27004)
+++ gnunet/src/util/test_os_start_process.c     2013-04-30 04:38:47 UTC (rev 
27005)
@@ -52,7 +52,15 @@
 
 static GNUNET_SCHEDULER_TaskIdentifier die_task;
 
+struct read_context
+{
+  char buf[16];
+  int buf_offset;
+  const struct GNUNET_DISK_FileHandle *stdout_read_handle;
+};
 
+struct read_context rc;
+
 static void
 end_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
@@ -71,13 +79,10 @@
 static void
 read_call (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
-  struct GNUNET_DISK_FileHandle *stdout_read_handle = cls;
-  char buf[16];
-
-  memset (&buf, 0, sizeof (buf));
   int bytes;
 
-  bytes = GNUNET_DISK_file_read (stdout_read_handle, &buf, sizeof (buf));
+  bytes = GNUNET_DISK_file_read (rc.stdout_read_handle, 
&rc.buf[rc.buf_offset], \
+      sizeof (rc.buf) - rc.buf_offset);
 
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "bytes is %d\n", bytes);
 
@@ -90,8 +95,10 @@
     return;
   }
 
-  ok = strncmp (&buf[0], test_phrase, strlen (test_phrase));
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "read %s\n", &buf[0]);
+  ok = strncmp (rc.buf, test_phrase, strlen (test_phrase));
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "read %s\n", &rc.buf[rc.buf_offset]);
+  rc.buf_offset += bytes;
+
   if (0 == ok)
   {
     GNUNET_SCHEDULER_cancel (die_task);
@@ -100,8 +107,8 @@
   }
 
   GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL,
-                                  stdout_read_handle, &read_call,
-                                  stdout_read_handle);
+                                  rc.stdout_read_handle, &read_call,
+                                  NULL);
 
 }
 
@@ -163,9 +170,11 @@
                                     (GNUNET_TIME_UNIT_MINUTES, 1), &end_task,
                                     NULL);
 
+  memset (&rc, 0, sizeof (rc));
+  rc.stdout_read_handle = stdout_read_handle;
   GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL,
                                   stdout_read_handle, &read_call,
-                                  (void *) stdout_read_handle);
+                                  NULL);
 }
 
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]