]> git.puffer.fish Git - mirror/frr.git/commitdiff
2005-01-29 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
authorajs <ajs>
Sat, 29 Jan 2005 18:19:13 +0000 (18:19 +0000)
committerajs <ajs>
Sat, 29 Jan 2005 18:19:13 +0000 (18:19 +0000)
* buffer.h: Fix comment on buffer_getstr to reflect that it now
  uses XMALLOC.
* buffer.c: (buffer_getstr) Use XMALLOC(MTYPE_TMP) instead of malloc.
* filter.c: (access_list_remark,ipv6_access_list_remark) Use
  argv_concat instead of buffer_getstr.
* if.c: (interface_desc) Use argv_concat instead of buffer_getstr.
* plist.c: (ip_prefix_list_description,ipv6_prefix_list_description)
  Use argv_concat instead of buffer_getstr.
* bgp_filter.c: (ip_as_path,no_ip_as_path) Use argv_concat instead
  of buffer_getstr.
* bgp_route.c: (bgp_show_regexp) Fix memory leak: need to free string
  returned by buffer_getstr.
  (bgp_show_community) Must use XFREE instead of free on string
  returned by buffer_getstr.
* bgp_routemap.c: (set_community) Must use XFREE instead of free
  on string returned by buffer_getstr.
* bgp_vty.c: (neighbor_description) Use argv_concat instead of
  buffer_getstr.

bgpd/ChangeLog
bgpd/bgp_filter.c
bgpd/bgp_route.c
bgpd/bgp_routemap.c
bgpd/bgp_vty.c
lib/ChangeLog
lib/buffer.c
lib/buffer.h
lib/filter.c
lib/if.c
lib/plist.c

index 93dc8c3b8db1a5a547c5a05e39b129fb9245e43b..6bee4def95e61970da8d711f951cacaffcfd5ca6 100644 (file)
@@ -1,3 +1,16 @@
+2005-01-29 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
+
+       * bgp_filter.c: (ip_as_path,no_ip_as_path) Use argv_concat instead
+         of buffer_getstr.
+       * bgp_route.c: (bgp_show_regexp) Fix memory leak: need to free string
+         returned by buffer_getstr.
+         (bgp_show_community) Must use XFREE instead of free on string
+         returned by buffer_getstr.
+       * bgp_routemap.c: (set_community) Must use XFREE instead of free
+         on string returned by buffer_getstr.
+       * bgp_vty.c: (neighbor_description) Use argv_concat instead of
+         buffer_getstr.
+
 2005-01-24 Hasso Tepper <hasso at quagga.net>
 
        * bgp_route.c: Fix showstopper bug. New route must be selected also
index 09dcc0fa286b749082996d708b13b8135eb6bfbb..2f43cd05f74b36f427269f915ebd3b73b53876b8 100644 (file)
@@ -446,10 +446,7 @@ DEFUN (ip_as_path, ip_as_path_cmd,
   struct as_filter *asfilter;
   struct as_list *aslist;
   regex_t *regex;
-  struct buffer *b;
-  int i;
   char *regstr;
-  int first = 0;
 
   /* Check the filter type. */
   if (strncmp (argv[1], "p", 1) == 0)
@@ -463,25 +460,12 @@ DEFUN (ip_as_path, ip_as_path_cmd,
     }
 
   /* Check AS path regex. */
-  b = buffer_new (1024);
-  for (i = 2; i < argc; i++)
-    {
-      if (first)
-       buffer_putc (b, ' ');
-      else
-       first = 1;
-
-      buffer_putstr (b, argv[i]);
-    }
-  buffer_putc (b, '\0');
-
-  regstr = buffer_getstr (b);
-  buffer_free (b);
+  regstr = argv_concat(argv, argc, 2);
 
   regex = bgp_regcomp (regstr);
   if (!regex)
     {
-      free (regstr);
+      XFREE (MTYPE_TMP, regstr);
       vty_out (vty, "can't compile regexp %s%s", argv[0],
               VTY_NEWLINE);
       return CMD_WARNING;
@@ -489,7 +473,7 @@ DEFUN (ip_as_path, ip_as_path_cmd,
 
   asfilter = as_filter_make (regex, regstr, type);
   
-  free (regstr);
+  XFREE (MTYPE_TMP, regstr);
 
   /* Install new filter to the access_list. */
   aslist = as_list_get (argv[0]);
@@ -518,9 +502,6 @@ DEFUN (no_ip_as_path,
   enum as_filter_type type;
   struct as_filter *asfilter;
   struct as_list *aslist;
-  struct buffer *b;
-  int i;
-  int first = 0;
   char *regstr;
   regex_t *regex;
 
@@ -545,25 +526,12 @@ DEFUN (no_ip_as_path,
     }
   
   /* Compile AS path. */
-  b = buffer_new (1024);
-  for (i = 2; i < argc; i++)
-    {
-      if (first)
-       buffer_putc (b, ' ');
-      else
-       first = 1;
-
-      buffer_putstr (b, argv[i]);
-    }
-  buffer_putc (b, '\0');
-
-  regstr = buffer_getstr (b);
-  buffer_free (b);
+  regstr = argv_concat(argv, argc, 2);
 
   regex = bgp_regcomp (regstr);
   if (!regex)
     {
-      free (regstr);
+      XFREE (MTYPE_TMP, regstr);
       vty_out (vty, "can't compile regexp %s%s", argv[0],
               VTY_NEWLINE);
       return CMD_WARNING;
@@ -572,7 +540,7 @@ DEFUN (no_ip_as_path,
   /* Lookup asfilter. */
   asfilter = as_filter_lookup (aslist, regstr, type);
 
-  free (regstr);
+  XFREE (MTYPE_TMP, regstr);
   bgp_regex_free (regex);
 
   if (asfilter == NULL)
index 849cc44fc6b343d97fef98837be4027a788faa87..40a61b61d980cb1748fb28e5161c553b42f73f55 100644 (file)
@@ -6136,6 +6136,7 @@ bgp_show_regexp (struct vty *vty, int argc, const char **argv, afi_t afi,
   buffer_free (b);
 
   regex = bgp_regcomp (regstr);
+  XFREE(MTYPE_TMP, regstr);
   if (! regex)
     {
       vty_out (vty, "Can't compile regexp %s%s", argv[0],
@@ -6712,7 +6713,7 @@ bgp_show_community (struct vty *vty, int argc, const char **argv, int exact,
   buffer_free (b);
 
   com = community_str2com (str);
-  free (str);
+  XFREE (MTYPE_TMP, str);
   if (! com)
     {
       vty_out (vty, "%% Community malformed: %s", VTY_NEWLINE);
index e2ad5e0fc8a2c87411c02e47d8649f7b32ea2493..767400564840b97d9fcbb62872df745e22136580 100644 (file)
@@ -2846,7 +2846,7 @@ DEFUN (set_community,
   if (str)
     {
       com = community_str2com (str);
-      free (str);
+      XFREE (MTYPE_TMP, str);
     }
 
   /* Can't compile user input into communities attribute.  */
index 027b8ca98e5daa05309b79bcb95a06089d82cd36..5968f68c616f32b87ad3572b8e8e0d1cd5da6240 100644 (file)
@@ -28,6 +28,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 #include "stream.h"
 #include "thread.h"
 #include "log.h"
+#include "memory.h"
 
 #include "bgpd/bgpd.h"
 #include "bgpd/bgp_attr.h"
@@ -2576,9 +2577,7 @@ DEFUN (neighbor_description,
        "Up to 80 characters describing this neighbor\n")
 {
   struct peer *peer;
-  struct buffer *b;
   char *str;
-  int i;
 
   peer = peer_and_group_lookup_vty (vty, argv[0]);
   if (! peer)
@@ -2587,21 +2586,11 @@ DEFUN (neighbor_description,
   if (argc == 1)
     return CMD_SUCCESS;
 
-  /* Make string from buffer.  This function should be provided by
-     buffer.c. */
-  b = buffer_new (1024);
-  for (i = 1; i < argc; i++)
-    {
-      buffer_putstr (b, argv[i]);
-      buffer_putc (b, ' ');
-    }
-  buffer_putc (b, '\0');
-  str = buffer_getstr (b);
-  buffer_free (b);
+  str = argv_concat(argv, argc, 1);
 
   peer_description_set (peer, str);
 
-  free (str);
+  XFREE (MTYPE_TMP, str);
 
   return CMD_SUCCESS;
 }
index 7955f0985d2f42bc8cd7752bc740eacf8da79383..34dad166c4419a2caa9e89bc8395c122b58b9ff5 100644 (file)
@@ -1,3 +1,14 @@
+2005-01-29 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
+
+       * buffer.h: Fix comment on buffer_getstr to reflect that it now
+         uses XMALLOC.
+       * buffer.c: (buffer_getstr) Use XMALLOC(MTYPE_TMP) instead of malloc.
+       * filter.c: (access_list_remark,ipv6_access_list_remark) Use
+         argv_concat instead of buffer_getstr.
+       * if.c: (interface_desc) Use argv_concat instead of buffer_getstr.
+       * plist.c: (ip_prefix_list_description,ipv6_prefix_list_description)
+         Use argv_concat instead of buffer_getstr.
+
 2005-01-28 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
 
        * lib/buffer.h: Document behavior of buffer_getstr function.
index 60048bc08a6edb832c7b55565592ac4f773b1b16..8666ab78d1b23d6ca51bff383fa929bf52cb41b6 100644 (file)
@@ -95,7 +95,7 @@ buffer_getstr (struct buffer *b)
 
   for (data = b->head; data; data = data->next)
     totlen += data->cp - data->sp;
-  if (!(s = malloc(totlen+1)))
+  if (!(s = XMALLOC(MTYPE_TMP, totlen+1)))
     return NULL;
   p = s;
   for (data = b->head; data; data = data->next)
index c3787d78afd921a13c41ddc0a88e47c0496bf47e..c0245a7f60d2e722c5811ac6955898a9941b060d 100644 (file)
@@ -67,10 +67,9 @@ int buffer_write (struct buffer *, const void *, size_t);
 void buffer_free (struct buffer *);
 
 /* Combine all accumulated (and unflushed) data inside the buffer into a
-   single NUL-terminated string allocated using malloc (N.B. should be changed
-   to use XMALLOC(MTYPE_TMP)).  Note that this function does not alter
-   the state of the buffer, so the data is still inside waiting to be
-   flushed. */
+   single NUL-terminated string allocated using XMALLOC(MTYPE_TMP).  Note
+   that this function does not alter the state of the buffer, so the data
+   is still inside waiting to be flushed. */
 char *buffer_getstr (struct buffer *);
 
 int buffer_putc (struct buffer *, u_char);
index 9817c07dec38e00d596721ad0d6aa11715e2d3e2..0dd7a775d590892a947b490c7a387df70fd2951e 100644 (file)
@@ -1359,8 +1359,6 @@ DEFUN (access_list_remark,
        "Comment up to 100 characters\n")
 {
   struct access_list *access;
-  struct buffer *b;
-  int i;
 
   access = access_list_get (AFI_IP, argv[0]);
 
@@ -1369,19 +1367,7 @@ DEFUN (access_list_remark,
       XFREE (MTYPE_TMP, access->remark);
       access->remark = NULL;
     }
-
-  /* Below is remark get codes. */
-  b = buffer_new (1024);
-  for (i = 1; i < argc; i++)
-    {
-      buffer_putstr (b, argv[i]);
-      buffer_putc (b, ' ');
-    }
-  buffer_putc (b, '\0');
-
-  access->remark = buffer_getstr (b);
-
-  buffer_free (b);
+  access->remark = argv_concat(argv, argc, 1);
 
   return CMD_SUCCESS;
 }
@@ -1541,8 +1527,6 @@ DEFUN (ipv6_access_list_remark,
        "Comment up to 100 characters\n")
 {
   struct access_list *access;
-  struct buffer *b;
-  int i;
 
   access = access_list_get (AFI_IP6, argv[0]);
 
@@ -1551,19 +1535,7 @@ DEFUN (ipv6_access_list_remark,
       XFREE (MTYPE_TMP, access->remark);
       access->remark = NULL;
     }
-
-  /* Below is remark get codes. */
-  b = buffer_new (1024);
-  for (i = 1; i < argc; i++)
-    {
-      buffer_putstr (b, argv[i]);
-      buffer_putc (b, ' ');
-    }
-  buffer_putc (b, '\0');
-
-  access->remark = buffer_getstr (b);
-
-  buffer_free (b);
+  access->remark = argv_concat(argv, argc, 1);
 
   return CMD_SUCCESS;
 }
index c7ced18efeb56e6b2c46395e05b0d8d6640472f8..7385ff6e368af5a0d62d35c45e20b0adf617685a 100644 (file)
--- a/lib/if.c
+++ b/lib/if.c
@@ -453,27 +453,15 @@ DEFUN (interface_desc,
        "Interface specific description\n"
        "Characters describing this interface\n")
 {
-  int i;
   struct interface *ifp;
-  struct buffer *b;
 
   if (argc == 0)
     return CMD_SUCCESS;
 
   ifp = vty->index;
   if (ifp->desc)
-    XFREE (0, ifp->desc);
-
-  b = buffer_new (1024);
-  for (i = 0; i < argc; i++)
-    {
-      buffer_putstr (b, argv[i]);
-      buffer_putc (b, ' ');
-    }
-  buffer_putc (b, '\0');
-
-  ifp->desc = buffer_getstr (b);
-  buffer_free (b);
+    XFREE (MTYPE_TMP, ifp->desc);
+  ifp->desc = argv_concat(argv, argc, 0);
 
   return CMD_SUCCESS;
 }
index 3520f82f0f106656c91a061b1a02c4f4fb475add..5e2edd293c10b50a41d5555581c2e297f3cbdbe1 100644 (file)
@@ -1561,8 +1561,6 @@ DEFUN (ip_prefix_list_description,
        "Up to 80 characters describing this prefix-list\n")
 {
   struct prefix_list *plist;
-  struct buffer *b;
-  int i;
 
   plist = prefix_list_get (AFI_IP, argv[0]);
   
@@ -1571,19 +1569,7 @@ DEFUN (ip_prefix_list_description,
       XFREE (MTYPE_TMP, plist->desc);
       plist->desc = NULL;
     }
-
-  /* Below is description get codes. */
-  b = buffer_new (1024);
-  for (i = 1; i < argc; i++)
-    {
-      buffer_putstr (b, argv[i]);
-      buffer_putc (b, ' ');
-    }
-  buffer_putc (b, '\0');
-
-  plist->desc = buffer_getstr (b);
-
-  buffer_free (b);
+  plist->desc = argv_concat(argv, argc, 1);
 
   return CMD_SUCCESS;
 }       
@@ -2171,8 +2157,6 @@ DEFUN (ipv6_prefix_list_description,
        "Up to 80 characters describing this prefix-list\n")
 {
   struct prefix_list *plist;
-  struct buffer *b;
-  int i;
 
   plist = prefix_list_get (AFI_IP6, argv[0]);
   
@@ -2181,19 +2165,7 @@ DEFUN (ipv6_prefix_list_description,
       XFREE (MTYPE_TMP, plist->desc);
       plist->desc = NULL;
     }
-
-  /* Below is description get codes. */
-  b = buffer_new (1024);
-  for (i = 1; i < argc; i++)
-    {
-      buffer_putstr (b, argv[i]);
-      buffer_putc (b, ' ');
-    }
-  buffer_putc (b, '\0');
-
-  plist->desc = buffer_getstr (b);
-
-  buffer_free (b);
+  plist->desc = argv_concat(argv, argc, 1);
 
   return CMD_SUCCESS;
 }