diff --git a/lib/command.c b/lib/command.c
index a237364..7249c65 100644
--- a/lib/command.c
+++ b/lib/command.c
@@ -183,7 +183,7 @@
   printf ("%s\n", QUAGGA_COPYRIGHT);
 }
 
-
+
 /* Utility function to concatenate argv argument into a single string
    with inserting ' ' character between each argument.  */
 char *
diff --git a/lib/distribute.c b/lib/distribute.c
index 8d6f637..ba8043c 100644
--- a/lib/distribute.c
+++ b/lib/distribute.c
@@ -34,7 +34,7 @@
 /* Hook functions. */
 void (*distribute_add_hook) (struct distribute *);
 void (*distribute_delete_hook) (struct distribute *);
-
+
 static struct distribute *
 distribute_new (void)
 {
@@ -133,7 +133,7 @@
     return 1;
   return 0;
 }
-
+
 /* Set access-list name to the distribute list. */
 static struct distribute *
 distribute_list_set (const char *ifname, enum distribute_type type, 
diff --git a/lib/filter.c b/lib/filter.c
index 6934182..96605c7 100644
--- a/lib/filter.c
+++ b/lib/filter.c
@@ -110,7 +110,7 @@
   NULL,
 };
 #endif /* HAVE_IPV6 */
-
+
 static struct access_master *
 access_master_get (afi_t afi)
 {
@@ -208,7 +208,7 @@
   else
     return 0;
 }
-
+
 /* Allocate new access list structure. */
 static struct access_list *
 access_list_new (void)
@@ -501,7 +501,7 @@
   if (master->delete_hook)
     (*master->delete_hook) (access);
 }
-
+
 /*
   deny    Specify packets to reject
   permit  Specify packets to forward
diff --git a/lib/getopt.c b/lib/getopt.c
index c784fb6..064909d 100644
--- a/lib/getopt.c
+++ b/lib/getopt.c
@@ -23,7 +23,7 @@
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
    USA.  */
-
+
 /* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>.
    Ditto for AIX 3.2 and <stdlib.h>.  */
 #ifndef _NO_PROTO
@@ -193,7 +193,7 @@
 
 /* Value of POSIXLY_CORRECT environment variable.  */
 static char *posixly_correct;
-
+
 #ifdef	__GNU_LIBRARY__
 /* We want to avoid inclusion of string.h with non-GNU libraries
    because there are many ways it can cause trouble.
@@ -243,7 +243,7 @@
 #endif /* __GNUC__ */
 
 #endif /* not __GNU_LIBRARY__ */
-
+
 /* Handle permutation of arguments.  */
 
 /* Describe the part of ARGV that contains non-options that have
@@ -456,7 +456,7 @@
 
   return optstring;
 }
-
+
 /* Scan elements of ARGV (whose length is ARGC) for option characters
    given in OPTSTRING.
 
@@ -986,7 +986,7 @@
 #endif /* REALLY_NEED_PLAIN_GETOPT */
 
 #endif	/* Not ELIDE_CODE.  */
-
+
 #ifdef TEST
 
 /* Compile with -DTEST to make an executable for use in testing
diff --git a/lib/getopt1.c b/lib/getopt1.c
index 985f12c..fa76674 100644
--- a/lib/getopt1.c
+++ b/lib/getopt1.c
@@ -19,7 +19,7 @@
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
    USA.  */
-
+
 #ifdef HAVE_CONFIG_H
 #include <config.h>
 #endif
@@ -95,7 +95,7 @@
 
 
 #endif	/* Not ELIDE_CODE.  */
-
+
 #ifdef TEST
 
 #include <stdio.h>
diff --git a/lib/if.c b/lib/if.c
index 6348403..18e2fb3 100644
--- a/lib/if.c
+++ b/lib/if.c
@@ -35,7 +35,7 @@
 #include "buffer.h"
 #include "str.h"
 #include "log.h"
-
+
 /* Master list of interfaces. */
 struct list *iflist;
 
@@ -45,7 +45,7 @@
   int (*if_new_hook) (struct interface *);
   int (*if_delete_hook) (struct interface *);
 } if_master;
-
+
 /* Compare interface names, returning an integer greater than, equal to, or
  * less than 0, (following the strcmp convention), according to the
  * relationship between ifp1 and ifp2.  Interface names consist of an
@@ -513,7 +513,7 @@
 
   return CMD_SUCCESS;
 }
-
+
 #ifdef SUNOS_5
 /* Need to handle upgrade from SUNWzebra to Quagga. SUNWzebra created
  * a seperate struct interface for each logical interface, so config
@@ -555,7 +555,7 @@
     return if_get_by_name_len (name, nlen);
 }
 #endif /* SUNOS_5 */
-
+
 DEFUN (interface,
        interface_cmd,
        "interface IFNAME",
@@ -806,7 +806,7 @@
   return ifp->name;
 }
 #endif
-
+
 #if 0 /* this route_table of struct connected's is unused
        * however, it would be good to use a route_table rather than
        * a list..
diff --git a/lib/if_rmap.c b/lib/if_rmap.c
index 7d049b8..e4a83de 100644
--- a/lib/if_rmap.c
+++ b/lib/if_rmap.c
@@ -32,7 +32,7 @@
 /* Hook functions. */
 static void (*if_rmap_add_hook) (struct if_rmap *) = NULL;
 static void (*if_rmap_delete_hook) (struct if_rmap *) = NULL;
-
+
 static struct if_rmap *
 if_rmap_new (void)
 {
@@ -122,7 +122,7 @@
 
   return strcmp (if_rmap1->ifname, if_rmap2->ifname) == 0;
 }
-
+
 static struct if_rmap *
 if_rmap_set (const char *ifname, enum if_rmap_type type, 
              const char *routemap_name)
@@ -273,7 +273,7 @@
        "Route map for input filtering\n"
        "Route map for output filtering\n"
        "Route map interface name\n")
-
+
 /* Configuration write function. */
 int
 config_write_if_rmap (struct vty *vty)
diff --git a/lib/keychain.c b/lib/keychain.c
index 6719ceb..762c462 100644
--- a/lib/keychain.c
+++ b/lib/keychain.c
@@ -226,7 +226,7 @@
     free (key->string);
   key_free (key);
 }
-
+
 DEFUN (key_chain,
        key_chain_cmd,
        "key chain WORD",
@@ -531,7 +531,7 @@
 
   return CMD_SUCCESS;
 }
-
+
 DEFUN (accept_lifetime_day_month_day_month,
        accept_lifetime_day_month_day_month_cmd,
        "accept-lifetime HH:MM:SS <1-31> MONTH <1993-2035> HH:MM:SS <1-31> MONTH <1993-2035>",
@@ -689,7 +689,7 @@
   return key_lifetime_duration_set (vty, &key->accept, argv[0], argv[2],
 				    argv[1], argv[3], argv[4]);
 }
-
+
 DEFUN (send_lifetime_day_month_day_month,
        send_lifetime_day_month_day_month_cmd,
        "send-lifetime HH:MM:SS <1-31> MONTH <1993-2035> HH:MM:SS <1-31> MONTH <1993-2035>",
@@ -847,7 +847,7 @@
   return key_lifetime_duration_set (vty, &key->send, argv[0], argv[2], argv[1],
 				    argv[3], argv[4]);
 }
-
+
 static struct cmd_node keychain_node =
 {
   KEYCHAIN_NODE,
diff --git a/lib/linklist.c b/lib/linklist.c
index 485a80b..370b2fa 100644
--- a/lib/linklist.c
+++ b/lib/linklist.c
@@ -23,7 +23,7 @@
 
 #include "linklist.h"
 #include "memory.h"
-
+
 /* Allocate new list. */
 struct list *
 list_new (void)
@@ -51,7 +51,7 @@
 {
   XFREE (MTYPE_LINK_NODE, node);
 }
-
+
 /* Add new data to the list. */
 void
 listnode_add (struct list *list, void *val)
@@ -242,7 +242,7 @@
       return node;
   return NULL;
 }
-
+
 /* Delete the node from list.  For ospfd and ospf6d. */
 void
 list_delete_node (struct list *list, struct listnode *node)
@@ -258,7 +258,7 @@
   list->count--;
   listnode_free (node);
 }
-
+
 /* ospf_spf.c */
 void
 list_add_node_prev (struct list *list, struct listnode *current, void *val)
diff --git a/lib/log.c b/lib/log.c
index 55a3b05..1058844 100644
--- a/lib/log.c
+++ b/lib/log.c
@@ -69,7 +69,7 @@
 };
   
 
-
+
 /* For time string format. */
 
 size_t
@@ -145,7 +145,7 @@
   fprintf(fp, "%s ", ctl->buf);
 }
   
-
+
 /* va_list version of zlog. */
 static void
 vzlog (struct zlog *zl, int priority, const char *format, va_list args)
@@ -619,7 +619,7 @@
   abort();
 }
 
-
+
 /* Open log stream */
 struct zlog *
 openzlog (const char *progname, zlog_proto_t protocol,
@@ -756,7 +756,7 @@
 
   return 1;
 }
-
+
 /* Message lookup function. */
 const char *
 lookup (const struct message *mes, int key)
diff --git a/lib/memory.c b/lib/memory.c
index 684ebcf..620bdee 100644
--- a/lib/memory.c
+++ b/lib/memory.c
@@ -32,7 +32,7 @@
 static void alloc_inc (int);
 static void alloc_dec (int);
 static void log_memstats(int log_priority);
-
+
 static const struct message mstr [] =
 {
   { MTYPE_THREAD, "thread" },
@@ -42,7 +42,7 @@
   { MTYPE_IF, "interface" },
   { 0, NULL },
 };
-
+
 /* Fatal memory allocation error occured. */
 static void __attribute__ ((noreturn))
 zerror (const char *fname, int type, size_t size)
@@ -150,7 +150,7 @@
   alloc_inc (type);
   return dup;
 }
-
+
 #ifdef MEMORY_LOG
 static struct 
 {
@@ -259,7 +259,7 @@
 {
   mstat[type].alloc--;
 }
-
+
 /* Looking up memory status from vty interface. */
 #include "vector.h"
 #include "vty.h"
@@ -558,7 +558,7 @@
   install_element (ENABLE_NODE, &show_memory_ospf6_cmd);
   install_element (ENABLE_NODE, &show_memory_isis_cmd);
 }
-
+
 /* Stats querying from users */
 /* Return a pointer to a human friendly string describing
  * the byte count passed in. E.g:
diff --git a/lib/plist.c b/lib/plist.c
index 0f802a8..7416ebd 100644
--- a/lib/plist.c
+++ b/lib/plist.c
@@ -110,7 +110,7 @@
   NULL,
   NULL,
 };
-
+
 static struct prefix_master *
 prefix_master_get (afi_t afi)
 {
@@ -621,7 +621,7 @@
 	}
     }
 }
-
+
 /* Retrun 1 when plist already include pentry policy. */
 static struct prefix_list_entry *
 prefix_entry_dup_check (struct prefix_list *plist,
@@ -1165,7 +1165,7 @@
     }
   return CMD_SUCCESS;
 }
-
+
 DEFUN (ip_prefix_list,
        ip_prefix_list_cmd,
        "ip prefix-list WORD (deny|permit) (A.B.C.D/M|any)",
@@ -1759,7 +1759,7 @@
 {
   return vty_clear_prefix_list (vty, AFI_IP, argv[0], argv[1]);
 }
-
+
 #ifdef HAVE_IPV6
 DEFUN (ipv6_prefix_list,
        ipv6_prefix_list_cmd,
@@ -2355,7 +2355,7 @@
   return vty_clear_prefix_list (vty, AFI_IP6, argv[0], argv[1]);
 }
 #endif /* HAVE_IPV6 */
-
+
 /* Configuration write function. */
 static int
 config_write_prefix_afi (afi_t afi, struct vty *vty)
diff --git a/lib/prefix.c b/lib/prefix.c
index a3b1adf..dbfdc83 100644
--- a/lib/prefix.c
+++ b/lib/prefix.c
@@ -27,7 +27,7 @@
 #include "sockunion.h"
 #include "memory.h"
 #include "log.h"
-
+
 /* Maskbit. */
 static const u_char maskbit[] = {0x00, 0x80, 0xc0, 0xe0, 0xf0,
 			         0xf8, 0xfc, 0xfe, 0xff};
@@ -186,7 +186,7 @@
 {
   return prefix_bit((const u_char *) &prefix->s6_addr, prefixlen);
 }
-
+
 /* Address Famiy Identifier to Address Family converter. */
 int
 afi2family (afi_t afi)
@@ -494,7 +494,7 @@
 {
   return (p->prefix.s_addr == 0 && p->prefixlen == 0);
 }
-
+
 #ifdef HAVE_IPV6
 
 /* Allocate a new ip version 6 route */
diff --git a/lib/privs.c b/lib/privs.c
index 69606f5..e182543 100644
--- a/lib/privs.c
+++ b/lib/privs.c
@@ -47,7 +47,7 @@
 typedef cap_value_t pvalue_t;
 typedef struct _pset pset_t;
 typedef cap_t pstorage_t;
-
+
 #elif defined (HAVE_SOLARIS_CAPABILITIES)
 typedef priv_t pvalue_t;
 typedef priv_set_t pset_t;
@@ -56,7 +56,7 @@
 #error "HAVE_CAPABILITIES defined, but neither LCAPS nor Solaris Capabilties!"
 #endif /* HAVE_LCAPS */
 #endif /* HAVE_CAPABILITIES */
-
+
 /* the default NULL state we report is RAISED, but could be LOWERED if
  * zprivs_terminate is called and the NULL handler is installed.
  */
@@ -139,7 +139,7 @@
   [ZCAP_FOWNER] =	{ 1, (pvalue_t []) { PRIV_FILE_OWNER		}, },
 #endif /* HAVE_SOLARIS_CAPABILITIES */
 };
-
+
 #ifdef HAVE_LCAPS
 /* Linux forms of capabilities methods */
 /* convert zebras privileges to system capabilities */
@@ -339,7 +339,7 @@
   cap_free (zprivs_state.caps);
 }
 #elif defined (HAVE_SOLARIS_CAPABILITIES) /* !HAVE_LCAPS */
-
+
 /* Solaris specific capability/privilege methods 
  *
  * Resources:
@@ -556,7 +556,7 @@
 #error "Neither Solaris nor Linux capabilities, dazed and confused..."
 #endif /* HAVE_LCAPS */
 #endif /* HAVE_CAPABILITIES */
-
+
 int
 zprivs_change_uid (zebra_privs_ops_t op)
 {
diff --git a/lib/regex-gnu.h b/lib/regex-gnu.h
index d88ab92..4cee464 100644
--- a/lib/regex-gnu.h
+++ b/lib/regex-gnu.h
@@ -165,7 +165,7 @@
    stored in the pattern buffer, so changing this does not affect
    already-compiled regexps.  */
 extern reg_syntax_t re_syntax_options;
-
+
 /* Define combinations of the above bits for the standard possibilities.
    (The [[[ comments delimit what gets put into the Texinfo file, so
    don't delete them!)  */
@@ -234,7 +234,7 @@
    | RE_NO_BK_PARENS        | RE_NO_BK_REFS				\
    | RE_NO_BK_VBAR	    | RE_UNMATCHED_RIGHT_PAREN_ORD)
 /* [[[end syntaxes]]] */
-
+
 /* Maximum number of duplicates an interval can allow.  Some systems
    (erroneously) define this in other header files, but we want our
    value, so remove any previous define.  */
@@ -309,7 +309,7 @@
   REG_ESIZE,		/* Compiled pattern bigger than 2^16 bytes.  */
   REG_ERPAREN		/* Unmatched ) or \); not returned from regcomp.  */
 } reg_errcode_t;
-
+
 /* This data structure represents a compiled pattern.  Before calling
    the pattern compiler, the fields `buffer', `allocated', `fastmap',
    `translate', and `no_sub' can be set.  After the pattern has been
@@ -389,7 +389,7 @@
 };
 
 typedef struct re_pattern_buffer regex_t;
-
+
 /* Type for byte offsets within the string.  POSIX mandates this.  */
 typedef int regoff_t;
 
@@ -420,7 +420,7 @@
   regoff_t rm_so;  /* Byte offset from string's start to substring's start.  */
   regoff_t rm_eo;  /* Byte offset from string's start to substring's end.  */
 } regmatch_t;
-
+
 /* Declarations for routines.  */
 
 /* To avoid duplicating every routine declaration -- once with a
@@ -532,7 +532,7 @@
 #endif	/* C++ */
 
 #endif /* regex.h */
-
+
 /*
 Local variables:
 make-backup-files: t
diff --git a/lib/regex.c b/lib/regex.c
index a22e03f..122f447 100644
--- a/lib/regex.c
+++ b/lib/regex.c
@@ -209,7 +209,7 @@
 # define SYNTAX(c) re_syntax_table[c]
 
 #endif /* not emacs */
-
+
 /* Get the interface, including the syntax bits.  */
 #include <regex-gnu.h>
 
@@ -279,7 +279,7 @@
 /* As in Harbison and Steele.  */
 # define SIGN_EXTEND_CHAR(c) ((((unsigned char) (c)) ^ 128) - 128)
 #endif
-
+
 /* Should we use malloc or alloca?  If REGEX_MALLOC is not defined, we
    use `alloca' instead of `malloc'.  This is because using malloc in
    re_search* or re_match* could cause memory leaks when C-g is used in
@@ -388,7 +388,7 @@
 					int pos,
 					struct re_registers *regs,
 					int stop));
-
+
 /* These are the command codes that appear in compiled regular
    expressions.  Some opcodes are followed by argument bytes.  A
    command code can specify any interpretation whatsoever for its
@@ -527,7 +527,7 @@
   notsyntaxspec
 #endif /* emacs */
 } re_opcode_t;
-
+
 /* Common operations on the compiled pattern.  */
 
 /* Store NUMBER in two contiguous bytes starting at DESTINATION.  */
@@ -604,7 +604,7 @@
 # endif /* not EXTRACT_MACROS */
 
 #endif /* DEBUG */
-
+
 /* If DEBUG is defined, Regex prints many voluminous messages about what
    it is doing (if the variable `debug' is nonzero).  If linked with the
    main program in `iregex.c', you can enter patterns and strings
@@ -977,7 +977,7 @@
 # define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2)
 
 #endif /* not DEBUG */
-
+
 /* Set by `re_set_syntax' to the current regexp syntax to recognize.  Can
    also be assigned to arbitrarily: each pattern buffer stores its own
    syntax, so it can be changed between regex compilations.  */
@@ -1011,7 +1011,7 @@
 #ifdef _LIBC
 weak_alias (__re_set_syntax, re_set_syntax)
 #endif
-
+
 /* This table gives an error message for each of the error codes listed
    in regex.h.  Obviously the order here has to be same as there.
    POSIX doesn't require that we do anything for REG_NOERROR,
@@ -1091,7 +1091,7 @@
     REG_ESIZE_IDX,
     REG_ERPAREN_IDX
   };
-
+
 /* Avoiding alloca during matching, to placate r_alloc.  */
 
 /* Define MATCH_MAY_ALLOCATE unless we need to make sure that the
@@ -1129,7 +1129,7 @@
 # undef MATCH_MAY_ALLOCATE
 #endif
 
-
+
 /* Failure stack declarations and macros; both re_compile_fastmap and
    re_match_2 use a failure stack.  These have to be macros because of
    REGEX_ALLOCATE_STACK.  */
@@ -1495,7 +1495,7 @@
 } /* POP_FAILURE_POINT */
 
 
-
+
 /* Structure for per-register (a.k.a. per-group) information.
    Other register information, such as the
    starting and ending positions (which are addresses), and the list of
@@ -1555,7 +1555,7 @@
 static char reg_unset_dummy;
 #define REG_UNSET_VALUE (&reg_unset_dummy)
 #define REG_UNSET(e) ((e) == REG_UNSET_VALUE)
-
+
 /* Subroutine declarations and macros for regex_compile.  */
 
 static reg_errcode_t regex_compile _RE_ARGS ((const char *pattern, size_t size,
@@ -1809,7 +1809,7 @@
     || STREQ (string, "punct") || STREQ (string, "graph")		\
     || STREQ (string, "cntrl") || STREQ (string, "blank"))
 #endif
-
+
 #ifndef MATCH_MAY_ALLOCATE
 
 /* If we cannot allocate large objects within re_match_2_internal,
@@ -1857,7 +1857,7 @@
 }
 
 #endif /* not MATCH_MAY_ALLOCATE */
-
+
 static boolean group_in_compile_stack _RE_ARGS ((compile_stack_type
 						 compile_stack,
 						 regnum_t regnum));
@@ -2991,7 +2991,7 @@
 
   return REG_NOERROR;
 } /* regex_compile */
-
+
 /* Subroutines for `regex_compile'.  */
 
 /* Store OP at LOC followed by two-byte integer parameter ARG.  */
@@ -3178,7 +3178,7 @@
 
   return REG_NOERROR;
 }
-
+
 /* re_compile_fastmap computes a ``fastmap'' for the compiled pattern in
    BUFP.  A fastmap records which of the (1 << BYTEWIDTH) possible
    characters can start a string that matches the pattern.  This fastmap
@@ -3484,7 +3484,7 @@
 #ifdef _LIBC
 weak_alias (__re_compile_fastmap, re_compile_fastmap)
 #endif
-
+
 /* Set REGS to hold NUM_REGS registers, storing them in STARTS and
    ENDS.  Subsequent matches using PATTERN_BUFFER and REGS will use
    this memory for recording register information.  STARTS and ENDS
@@ -3522,7 +3522,7 @@
 #ifdef _LIBC
 weak_alias (__re_set_registers, re_set_registers)
 #endif
-
+
 /* Searching routines.  */
 
 /* Like re_search_2, below, but only one string is specified, and
@@ -3704,7 +3704,7 @@
 #ifdef _LIBC
 weak_alias (__re_search_2, re_search_2)
 #endif
-
+
 /* This converts PTR, a pointer into one of the search strings `string1'
    and `string2' into an offset from the beginning of that string.  */
 #define POINTER_TO_OFFSET(ptr)			\
@@ -3783,7 +3783,7 @@
    to actually save any registers when none are active.  */
 #define NO_HIGHEST_ACTIVE_REG (1 << BYTEWIDTH)
 #define NO_LOWEST_ACTIVE_REG (NO_HIGHEST_ACTIVE_REG + 1)
-
+
 /* Matching routines.  */
 
 #ifndef emacs   /* Emacs never uses this.  */
@@ -5248,7 +5248,7 @@
 
   return -1;         			/* Failure to match.  */
 } /* re_match_2 */
-
+
 /* Subroutine definitions for re_match_2.  */
 
 
@@ -5511,7 +5511,7 @@
     }
   return 0;
 }
-
+
 /* Entry points for GNU code.  */
 
 /* re_compile_pattern is the GNU regular expression compiler: it
@@ -5552,7 +5552,7 @@
 #ifdef _LIBC
 weak_alias (__re_compile_pattern, re_compile_pattern)
 #endif
-
+
 /* Entry points compatible with 4.2 BSD regex library.  We don't define
    them unless specifically requested.  */
 
@@ -5623,7 +5623,7 @@
 }
 
 #endif /* _REGEX_RE_COMP */
-
+
 /* POSIX.2 functions.  Don't define these for Emacs.  */
 
 #ifndef emacs
diff --git a/lib/routemap.c b/lib/routemap.c
index 4f4e6d6..1e1510e 100644
--- a/lib/routemap.c
+++ b/lib/routemap.c
@@ -28,7 +28,7 @@
 #include "command.h"
 #include "vty.h"
 #include "log.h"
-
+
 /* Vector for route match rules. */
 static vector route_match_vec;
 
@@ -72,7 +72,7 @@
 
 static void
 route_map_index_delete (struct route_map_index *, int);
-
+
 /* New route map allocation. Please note route map's name must be
    specified. */
 static struct route_map *
@@ -420,7 +420,7 @@
   new = XCALLOC (MTYPE_ROUTE_MAP_RULE, sizeof (struct route_map_rule));
   return new;
 }
-
+
 /* Install rule command to the match list. */
 void
 route_map_install_match (struct route_map_rule_cmd *cmd)
@@ -898,7 +898,7 @@
   vector_free (route_set_vec);
   route_set_vec = NULL;
 }
-
+
 /* VTY related functions. */
 DEFUN (route_map,
        route_map_cmd,
diff --git a/lib/smux.c b/lib/smux.c
index 0746640..70be492 100644
--- a/lib/smux.c
+++ b/lib/smux.c
@@ -78,7 +78,7 @@
 enum smux_event {SMUX_SCHEDULE, SMUX_CONNECT, SMUX_READ};
 
 void smux_event (enum smux_event, int);
-
+
 
 /* SMUX socket. */
 int smux_sock = -1;
@@ -114,7 +114,7 @@
 
 /* thread master */
 static struct thread_master *master;
-
+
 static int
 oid_compare_part (oid *o1, int o1_len, oid *o2, int o2_len)
 {
@@ -132,7 +132,7 @@
 
   return 0;
 }
-
+
 static void
 smux_oid_dump (const char *prefix, const oid *oid, size_t oid_len)
 {
@@ -1230,7 +1230,7 @@
       smux_sock = -1;
     }
 }
-
+
 
 
 void
@@ -1251,7 +1251,7 @@
       break;
     }
 }
-
+
 static int
 smux_str2oid (const char *str, oid *oid, size_t *oid_len)
 {
diff --git a/lib/stream.c b/lib/stream.c
index 9a6fcbc..0fc3c3b 100644
--- a/lib/stream.c
+++ b/lib/stream.c
@@ -196,7 +196,7 @@
   
   return s->size;
 }
-
+
 size_t
 stream_get_getp (struct stream *s)
 {
@@ -285,7 +285,7 @@
   
   s->endp += size;
 }
-
+
 /* Copy from stream to destination. */
 void
 stream_get (void *dst, struct stream *s, size_t size)
@@ -492,7 +492,7 @@
 
   return l;
 }
-
+
 /* Copy to source to stream.
  *
  * XXX: This uses CHECK_SIZE and hence has funny semantics -> Size will wrap
@@ -731,7 +731,7 @@
   
   return psize;
 }
-
+
 /* Read size from fd. */
 int
 stream_read (struct stream *s, int fd, size_t size)
@@ -937,7 +937,7 @@
   
   return nbytes;
 }
-
+
 /* Stream first in first out queue. */
 
 struct stream_fifo *
diff --git a/lib/table.c b/lib/table.c
index 19b5d1b..220e9b8 100644
--- a/lib/table.c
+++ b/lib/table.c
@@ -29,7 +29,7 @@
 
 static void route_node_delete (struct route_node *);
 static void route_table_free (struct route_table *);
-
+
 
 /*
  * route_table_init_with_delegate
diff --git a/lib/thread.c b/lib/thread.c
index e2a37b1..468edd9 100644
--- a/lib/thread.c
+++ b/lib/thread.c
@@ -45,7 +45,7 @@
 #include <mach/mach_time.h>
 #endif
 
-
+
 /* Recent absolute time of day */
 struct timeval recent_time;
 static struct timeval last_recent_time;
@@ -54,9 +54,9 @@
 static struct timeval relative_time_base;
 /* init flag */
 static unsigned short timers_inited;
-
+
 static struct hash *cpu_record = NULL;
-
+
 /* Struct timeval's tv_usec one second value.  */
 #define TIMER_SECOND_MICRO 1000000L
 
@@ -108,7 +108,7 @@
   return (((a.tv_sec - b.tv_sec) * TIMER_SECOND_MICRO)
 	  + (a.tv_usec - b.tv_usec));
 }
-
+
 #if !defined(HAVE_CLOCK_MONOTONIC) && !defined(__APPLE__)
 static void
 quagga_gettimeofday_relative_adjust (void)
@@ -247,7 +247,7 @@
 {
   return relative_time;
 }
-
+
 static unsigned int
 cpu_record_hash_key (struct cpu_thread_history *a)
 {
@@ -496,7 +496,7 @@
   cpu_record_clear (filter);
   return CMD_SUCCESS;
 }
-
+
 static int
 thread_timer_cmp(void *a, void *b)
 {
diff --git a/lib/vty.c b/lib/vty.c
index 9908b02..1141357 100644
--- a/lib/vty.c
+++ b/lib/vty.c
@@ -57,7 +57,7 @@
 
 /* Extern host structure from command.c */
 extern struct host host;
-
+
 /* Vector which store each vty structure. */
 static vector vtyvec;
 
@@ -89,7 +89,7 @@
 /* Integrated configuration file path */
 char integrate_default[] = SYSCONFDIR INTEGRATE_DEFAULT_CONFIG;
 
-
+
 /* VTY standard output function. */
 int
 vty_out (struct vty *vty, const char *format, ...)
@@ -455,7 +455,7 @@
 
   return ret;
 }
-
+
 static const char telnet_backward_char = 0x08;
 static const char telnet_space_char = ' ';
 
@@ -2494,7 +2494,7 @@
     }
   return vty->config;
 }
-
+
 /* Master of the threads. */
 static struct thread_master *master;
 
@@ -2551,7 +2551,7 @@
       break;
     }
 }
-
+
 DEFUN (config_who,
        config_who_cmd,
        "who",
diff --git a/lib/zclient.c b/lib/zclient.c
index d316596..20188f6 100644
--- a/lib/zclient.c
+++ b/lib/zclient.c
@@ -32,7 +32,7 @@
 #include "zclient.h"
 #include "memory.h"
 #include "table.h"
-
+
 /* Zebra client events. */
 enum event {ZCLIENT_SCHEDULE, ZCLIENT_READ, ZCLIENT_CONNECT};
 
@@ -45,7 +45,7 @@
 
 /* This file local debug flag. */
 int zclient_debug = 0;
-
+
 /* Allocate zclient structure. */
 struct zclient *
 zclient_new ()
@@ -413,7 +413,7 @@
 
   return zclient_start (zclient);
 }
-
+
  /* 
   * "xdr_encode"-like interface that allows daemon (client) to send
   * a message to zebra server for a route that needs to be
@@ -816,7 +816,7 @@
   return ifc;
 }
 
-
+
 /* Zebra client message read function. */
 static int
 zclient_read (struct thread *thread)
