]> git.puffer.fish Git - mirror/frr.git/commitdiff
From: Sergiy Vyshnevetskiy <serg@vostok.net>
authorpaul <paul>
Thu, 1 May 2003 14:29:48 +0000 (14:29 +0000)
committerpaul <paul>
Thu, 1 May 2003 14:29:48 +0000 (14:29 +0000)
Subject: [zebra 18941] Re: [PATCH] misc patch

Program shouldn't terminate on pager execution failure. We can also use
"PAGER" environment variable - it's very common.

vtysh/vtysh.c

index a3b21c7bf32b043c7c384eaae9aec6085f359400..d1a5c5fd94c208e3fc5af8966dafd229c80b1133 100644 (file)
@@ -349,6 +349,8 @@ void
 vtysh_pager_init ()
 {
   vtysh_pager_name = getenv ("VTYSH_PAGER");
+  if (! vtysh_pager_name)
+    vtysh_pager_name = getenv ("PAGER");
   if (! vtysh_pager_name)
     vtysh_pager_name = "more";
 }
@@ -361,6 +363,7 @@ vtysh_execute_func (char *line, int pager)
   vector vline;
   struct cmd_element *cmd;
   FILE *fp = NULL;
+  int closepager=0;
 
   /* Split readline string up into the vector */
   vline = cmd_make_strvec (line);
@@ -394,9 +397,11 @@ vtysh_execute_func (char *line, int pager)
            fp = popen (vtysh_pager_name, "w");
            if (fp == NULL)
              {
-               perror ("popen");
-               exit (1);
+               perror ("popen failed for pager");
+               fp = stdout;
              }
+           else
+             closepager=1;
          }
        else
          fp = stdout;
@@ -425,12 +430,11 @@ vtysh_execute_func (char *line, int pager)
 
                 if (vline == NULL)
                  {
-                   if (pager && vtysh_pager_name && fp)
+                   if (pager && vtysh_pager_name && fp && closepager)
                      {
                        if (pclose (fp) == -1)
                          {
-                           perror ("pclose");
-                           exit (1);
+                           perror ("pclose failed for pager");
                          }
                        fp = NULL;
                      }
@@ -478,12 +482,11 @@ vtysh_execute_func (char *line, int pager)
          (*cmd->func) (cmd, vty, 0, NULL);
       }
     }
-  if (pager && vtysh_pager_name && fp)
+  if (pager && vtysh_pager_name && fp && closepager)
     {
       if (pclose (fp) == -1)
        {
-         perror ("pclose");
-         exit (1);
+         perror ("pclose failed for pager");
        }
       fp = NULL;
     }