2004-09-17 Paul Jakma <paul@dishone.st>

	* vtysh.c: (vtysh_client_execute) fix the sync fix. The 4th and
	  final sync byte is not ASCII NULL, it's actually a status integer,
	  and only ASCII NULL if CMD_SUCCESS is returned by daemon.
	  Fix pointed out by Hasso.
diff --git a/vtysh/ChangeLog b/vtysh/ChangeLog
index df5eccd..f3a4da9 100644
--- a/vtysh/ChangeLog
+++ b/vtysh/ChangeLog
@@ -1,3 +1,10 @@
+2004-09-17 Paul Jakma <paul@dishone.st>
+
+	* vtysh.c: (vtysh_client_execute) fix the sync fix. The 4th and
+	  final sync byte is not ASCII NULL, it's actually a status integer,
+	  and only ASCII NULL if CMD_SUCCESS is returned by daemon.
+	  Fix pointed out by Hasso.
+ 
 2004-10-11 Hasso Tepper <hasso at quagga.net>
 
 	* vtysh.c, vtysh_user.c: Make more strings const.
diff --git a/vtysh/vtysh.c b/vtysh/vtysh.c
index 0df5ddb..086b5df 100644
--- a/vtysh/vtysh.c
+++ b/vtysh/vtysh.c
@@ -195,7 +195,10 @@
 	  fprintf (fp, "%s", buf);
 	  fflush (fp);
 	  
-	  /* check for trailling \0\0\0\0, even if split across reads */
+	  /* check for trailling \0\0\0<ret code>, 
+	   * even if split across reads 
+	   * (see lib/vty.c::vtysh_read)
+	   */
           if (nbytes >= 4) 
             {
               i = nbytes-4;
@@ -204,7 +207,7 @@
           else
             i = 0;
           
-          while (i < nbytes)
+          while (i < nbytes && numnulls < 3)
             {
               if (buf[i++] == '\0')
                 numnulls++;
@@ -217,10 +220,10 @@
 
           /* got 3 or more trailling nulls? */
           if (numnulls >= 3)
-            return CMD_SUCCESS;
+            return (buf[nbytes-1]);
 	}
     }
-  return ret;
+  assert (1);
 }
 
 void