From 0921d48e8eae1c417a06b8470108ae46584375b5 Mon Sep 17 00:00:00 2001 From: paul Date: Mon, 11 Oct 2004 18:21:55 +0000 Subject: 2004-09-17 Paul Jakma * 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. --- vtysh/ChangeLog | 7 +++++++ vtysh/vtysh.c | 11 +++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/vtysh/ChangeLog b/vtysh/ChangeLog index df5eccd3..f3a4da9a 100644 --- a/vtysh/ChangeLog +++ b/vtysh/ChangeLog @@ -1,3 +1,10 @@ +2004-09-17 Paul Jakma + + * 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 * vtysh.c, vtysh_user.c: Make more strings const. diff --git a/vtysh/vtysh.c b/vtysh/vtysh.c index 0df5ddbb..086b5dfe 100644 --- a/vtysh/vtysh.c +++ b/vtysh/vtysh.c @@ -195,7 +195,10 @@ vtysh_client_execute (struct vtysh_client *vclient, const char *line, FILE *fp) fprintf (fp, "%s", buf); fflush (fp); - /* check for trailling \0\0\0\0, even if split across reads */ + /* check for trailling \0\0\0, + * even if split across reads + * (see lib/vty.c::vtysh_read) + */ if (nbytes >= 4) { i = nbytes-4; @@ -204,7 +207,7 @@ vtysh_client_execute (struct vtysh_client *vclient, const char *line, FILE *fp) else i = 0; - while (i < nbytes) + while (i < nbytes && numnulls < 3) { if (buf[i++] == '\0') numnulls++; @@ -217,10 +220,10 @@ vtysh_client_execute (struct vtysh_client *vclient, const char *line, FILE *fp) /* got 3 or more trailling nulls? */ if (numnulls >= 3) - return CMD_SUCCESS; + return (buf[nbytes-1]); } } - return ret; + assert (1); } void -- cgit v1.2.1