Number of warnings is down to 3 again in lib directory. A lot of const's
added to strings and a lot of int -> unsigned int changes.
diff --git a/lib/ChangeLog b/lib/ChangeLog
index 5aedc1e..84cf7fc 100644
--- a/lib/ChangeLog
+++ b/lib/ChangeLog
@@ -1,3 +1,8 @@
+2004-10-05 Hasso Tepper <hasso at quagga.net>
+
+	* *.[c|h]: Make many strings cons and a lot of int -> unsigned int
+	  changes to fix warnings.
+
 2004-10-05 Paul Jakma <paul@dishone.st>
 
 	* sockopt.{c,h}: add sockopt_iphdrincl_swab_{htosys,systoh},
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 3b3d546..9cb25f7 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -29,4 +29,4 @@
 
 version.c: Makefile
 	echo '' >version.c
-	echo 'char *host_name = "$(host_alias)";' >>version.c
+	echo 'const char *host_name = "$(host_alias)";' >>version.c
diff --git a/lib/buffer.c b/lib/buffer.c
index 0fffdfd..6fd9a2b 100644
--- a/lib/buffer.c
+++ b/lib/buffer.c
@@ -382,7 +382,7 @@
 /* Flush buffer to the file descriptor.  Mainly used from vty
    interface. */
 int
-buffer_flush_vty (struct buffer *b, int fd, int size, 
+buffer_flush_vty (struct buffer *b, int fd, unsigned int size, 
 		  int erase_flag, int no_more_flag)
 {
   int nbytes;
diff --git a/lib/command.c b/lib/command.c
index a4cf9eb..c65e6fa 100644
--- a/lib/command.c
+++ b/lib/command.c
@@ -37,7 +37,7 @@
 struct host host;
 
 /* Default motd string. */
-char *default_motd = 
+const char *default_motd = 
 "\r\n\
 Hello, this is " QUAGGA_PROGNAME " (version " QUAGGA_VERSION ").\r\n\
 Copyright 1996-2004 Kunihiro Ishiguro, et al.\r\n\
@@ -142,7 +142,7 @@
 void
 sort_node ()
 {
-  int i, j;
+  unsigned int i, j;
   struct cmd_node *cnode;
   vector descvec;
   struct cmd_element *cmd_element;
@@ -218,7 +218,7 @@
 void
 cmd_free_strvec (vector v)
 {
-  int i;
+  unsigned int i;
   char *cp;
 
   if (!v)
@@ -268,14 +268,14 @@
 
 /* New string vector. */
 vector
-cmd_make_descvec (char *string, char *descstr)
+cmd_make_descvec (const char *string, const char *descstr)
 {
   int multiple = 0;
-  char *sp;
+  const char *sp;
   char *token;
   int len;
-  char *cp;
-  char *dp;
+  const char *cp;
+  const char *dp;
   vector allvec;
   vector strvec = NULL;
   struct desc *desc;
@@ -363,8 +363,7 @@
 int
 cmd_cmdsize (vector strvec)
 {
-  int i;
-  char *str;
+  unsigned int i;
   int size = 0;
   vector descvec;
 
@@ -376,9 +375,7 @@
 	{
 	  struct desc *desc = vector_slot (descvec, 0);
 
-	  str = desc->cmd;
-	  
-	  if (str == NULL || CMD_OPTION (str))
+	  if (desc->cmd == NULL || CMD_OPTION (desc->cmd))
 	    return size;
 	  else
 	    size++;
@@ -390,7 +387,7 @@
 }
 
 /* Return prompt character of specified node. */
-char *
+const char *
 cmd_prompt (enum node_type node)
 {
   struct cmd_node *cnode;
@@ -448,7 +445,7 @@
   return crypt (passwd, salt);
 }
 
-char *
+const char *
 syslog_facility_print (int facility)
 {
   switch (facility)
@@ -639,9 +636,9 @@
 };
 
 enum match_type
-cmd_ipv4_match (char *str)
+cmd_ipv4_match (const char *str)
 {
-  char *sp;
+  const char *sp;
   int dots = 0, nums = 0;
   char buf[4];
 
@@ -696,9 +693,9 @@
 }
 
 enum match_type
-cmd_ipv4_prefix_match (char *str)
+cmd_ipv4_prefix_match (const char *str)
 {
-  char *sp;
+  const char *sp;
   int dots = 0;
   char buf[4];
 
@@ -787,11 +784,11 @@
 #ifdef HAVE_IPV6
 
 enum match_type
-cmd_ipv6_match (char *str)
+cmd_ipv6_match (const char *str)
 {
   int state = STATE_START;
   int colons = 0, nums = 0, double_colon = 0;
-  char *sp = NULL;
+  const char *sp = NULL;
   struct sockaddr_in6 sin6_dummy;
   int ret;
 
@@ -893,12 +890,12 @@
 }
 
 enum match_type
-cmd_ipv6_prefix_match (char *str)
+cmd_ipv6_prefix_match (const char *str)
 {
   int state = STATE_START;
   int colons = 0, nums = 0, double_colon = 0;
   int mask;
-  char *sp = NULL;
+  const char *sp = NULL;
   char *endptr = NULL;
 
   if (str == NULL)
@@ -1028,7 +1025,7 @@
 #define DECIMAL_STRLEN_MAX 10
 
 int
-cmd_range_match (char *range, char *str)
+cmd_range_match (const char *range, const char *str)
 {
   char *p;
   char buf[DECIMAL_STRLEN_MAX + 1];
@@ -1074,10 +1071,10 @@
 
 /* Make completion match and return match type flag. */
 enum match_type
-cmd_filter_by_completion (char *command, vector v, int index)
+cmd_filter_by_completion (char *command, vector v, unsigned int index)
 {
-  int i;
-  char *str;
+  unsigned int i;
+  const char *str;
   struct cmd_element *cmd_element;
   enum match_type match_type;
   vector descvec;
@@ -1093,7 +1090,7 @@
 	  vector_slot (v, i) = NULL;
 	else
 	  {
-	    int j;
+	    unsigned int j;
 	    int matched = 0;
 
 	    descvec = vector_slot (cmd_element->strvec, index);
@@ -1189,10 +1186,10 @@
 
 /* Filter vector by command character with index. */
 enum match_type
-cmd_filter_by_string (char *command, vector v, int index)
+cmd_filter_by_string (char *command, vector v, unsigned int index)
 {
-  int i;
-  char *str;
+  unsigned int i;
+  const char *str;
   struct cmd_element *cmd_element;
   enum match_type match_type;
   vector descvec;
@@ -1210,7 +1207,7 @@
 	  vector_slot (v, i) = NULL;
 	else 
 	  {
-	    int j;
+	    unsigned int j;
 	    int matched = 0;
 
 	    descvec = vector_slot (cmd_element->strvec, index);
@@ -1299,11 +1296,11 @@
 int
 is_cmd_ambiguous (char *command, vector v, int index, enum match_type type)
 {
-  int i;
-  int j;
-  char *str = NULL;
+  unsigned int i;
+  unsigned int j;
+  const char *str = NULL;
   struct cmd_element *cmd_element;
-  char *matched = NULL;
+  const char *matched = NULL;
   vector descvec;
   struct desc *desc;
   
@@ -1393,8 +1390,8 @@
 }
 
 /* If src matches dst return dst string, otherwise return NULL */
-char *
-cmd_entry_function (char *src, char *dst)
+const char *
+cmd_entry_function (const char *src, const char *dst)
 {
   /* Skip variable arguments. */
   if (CMD_OPTION (dst) || CMD_VARIABLE (dst) || CMD_VARARG (dst) ||
@@ -1415,8 +1412,8 @@
 /* If src matches dst return dst string, otherwise return NULL */
 /* This version will return the dst string always if it is
    CMD_VARIABLE for '?' key processing */
-char *
-cmd_entry_function_desc (char *src, char *dst)
+const char *
+cmd_entry_function_desc (const char *src, const char *dst)
 {
   if (CMD_VARARG (dst))
     return dst;
@@ -1480,9 +1477,9 @@
 /* Check same string element existence.  If it isn't there return
     1. */
 int
-cmd_unique_string (vector v, char *str)
+cmd_unique_string (vector v, const char *str)
 {
-  int i;
+  unsigned int i;
   char *match;
 
   for (i = 0; i < vector_max (v); i++)
@@ -1495,9 +1492,9 @@
 /* Compare string to description vector.  If there is same string
    return 1 else return 0. */
 int
-desc_unique_string (vector v, char *str)
+desc_unique_string (vector v, const char *str)
 {
-  int i;
+  unsigned int i;
   struct desc *desc;
 
   for (i = 0; i < vector_max (v); i++)
@@ -1523,12 +1520,12 @@
 vector
 cmd_describe_command_real (vector vline, struct vty *vty, int *status)
 {
-  int i;
+  unsigned int i;
   vector cmd_vector;
 #define INIT_MATCHVEC_SIZE 10
   vector matchvec;
   struct cmd_element *cmd_element;
-  int index;
+  unsigned int index;
   int ret;
   enum match_type match;
   char *command;
@@ -1554,7 +1551,7 @@
 	{
 	  struct cmd_element *cmd_element;
 	  vector descvec;
-	  int j, k;
+	  unsigned int j, k;
 
 	  for (j = 0; j < vector_max (cmd_vector); j++)
 	    if ((cmd_element = vector_slot (cmd_vector, j)) != NULL)
@@ -1600,7 +1597,7 @@
   for (i = 0; i < vector_max (cmd_vector); i++)
     if ((cmd_element = vector_slot (cmd_vector, i)) != NULL)
       {
-	char *string = NULL;
+	const char *string = NULL;
 	vector strvec = cmd_element->strvec;
 
         /* if command is NULL, index may be equal to vector_max */
@@ -1617,7 +1614,7 @@
 	      }
 	    else
 	      {
-		int j;
+		unsigned int j;
 		vector descvec = vector_slot (strvec, index);
 		struct desc *desc;
 
@@ -1657,7 +1654,7 @@
     {
       enum node_type onode;
       vector shifted_vline;
-      int index;
+      unsigned int index;
 
       onode = vty->node;
       vty->node = ENABLE_NODE;
@@ -1719,12 +1716,12 @@
 char **
 cmd_complete_command_real (vector vline, struct vty *vty, int *status)
 {
-  int i;
+  unsigned int i;
   vector cmd_vector = vector_copy (cmd_node_vector (cmdvec, vty->node));
 #define INIT_MATCHVEC_SIZE 10
   vector matchvec;
   struct cmd_element *cmd_element;
-  int index = vector_max (vline) - 1;
+  unsigned int index = vector_max (vline) - 1;
   char **match_str;
   struct desc *desc;
   vector descvec;
@@ -1767,7 +1764,7 @@
   for (i = 0; i < vector_max (cmd_vector); i++)
     if ((cmd_element = vector_slot (cmd_vector, i)) != NULL)
       {
-	char *string;
+	const char *string;
 	vector strvec = cmd_element->strvec;
 	
 	/* Check field length */
@@ -1775,7 +1772,7 @@
 	  vector_slot (cmd_vector, i) = NULL;
 	else 
 	  {
-	    int j;
+	    unsigned int j;
 
 	    descvec = vector_slot (strvec, index);
 	    for (j = 0; j < vector_max (descvec); j++)
@@ -1872,7 +1869,7 @@
     {
       enum node_type onode;
       vector shifted_vline;
-      int index;
+      unsigned int index;
 
       onode = vty->node;
       vty->node = ENABLE_NODE;
@@ -1926,8 +1923,8 @@
 int
 cmd_execute_command_real (vector vline, struct vty *vty, struct cmd_element **cmd)
 {
-  int i;
-  int index;
+  unsigned int i;
+  unsigned int index;
   vector cmd_vector;
   struct cmd_element *cmd_element;
   struct cmd_element *matched_element;
@@ -2020,12 +2017,11 @@
 	  if (vector_max (descvec) == 1)
 	    {
 	      struct desc *desc = vector_slot (descvec, 0);
-	      char *str = desc->cmd;
 
-	      if (CMD_VARARG (str))
+	      if (CMD_VARARG (desc->cmd))
 		varflag = 1;
 
-	      if (varflag || CMD_VARIABLE (str) || CMD_OPTION (str))
+	      if (varflag || CMD_VARIABLE (desc->cmd) || CMD_OPTION (desc->cmd))
 		argv[argc++] = vector_slot (vline, i);
 	    }
 	  else
@@ -2058,7 +2054,7 @@
   if ( cmd_try_do_shortcut(vty->node, vector_slot(vline, 0) ) )
     {
       vector shifted_vline;
-      int index;
+      unsigned int index;
 
       vty->node = ENABLE_NODE;
       /* We can try it on enable node, cos' the vty is authenticated */
@@ -2106,8 +2102,8 @@
 cmd_execute_command_strict (vector vline, struct vty *vty, 
 			    struct cmd_element **cmd)
 {
-  int i;
-  int index;
+  unsigned int i;
+  unsigned int index;
   vector cmd_vector;
   struct cmd_element *cmd_element;
   struct cmd_element *matched_element;
@@ -2195,12 +2191,11 @@
 	  if (vector_max (descvec) == 1)
 	    {
 	      struct desc *desc = vector_slot (descvec, 0);
-	      char *str = desc->cmd;
 
-	      if (CMD_VARARG (str))
+	      if (CMD_VARARG (desc->cmd))
 		varflag = 1;
 	  
-	      if (varflag || CMD_VARIABLE (str) || CMD_OPTION (str))
+	      if (varflag || CMD_VARIABLE (desc->cmd) || CMD_OPTION (desc->cmd))
 		argv[argc++] = vector_slot (vline, i);
 	    }
 	  else
@@ -2437,7 +2432,7 @@
        "list",
        "Print command list\n")
 {
-  int i;
+  unsigned int i;
   struct cmd_node *cnode = vector_slot (cmdvec, vty->node);
   struct cmd_element *cmd;
 
@@ -2455,7 +2450,7 @@
        "Write running configuration to memory, network, or terminal\n"
        "Write to configuration file\n")
 {
-  int i;
+  unsigned int i;
   int fd;
   struct cmd_node *node;
   char *config_file;
@@ -2592,7 +2587,7 @@
        "Write running configuration to memory, network, or terminal\n"
        "Write to terminal\n")
 {
-  int i;
+  unsigned int i;
   struct cmd_node *node;
 
   if (vty->type == VTY_SHELL_SERV)
diff --git a/lib/command.h b/lib/command.h
index d1648d6..66883fb 100644
--- a/lib/command.h
+++ b/lib/command.h
@@ -60,7 +60,7 @@
   int encrypt;
 
   /* Banner configuration. */
-  char *motd;
+  const char *motd;
 };
 
 /* There are some command levels which called from command node. */
@@ -113,7 +113,7 @@
   enum node_type node;		
 
   /* Prompt character at vty interface. */
-  char *prompt;			
+  const char *prompt;			
 
   /* Is this node's configuration goes to vtysh ? */
   int vtysh;
@@ -128,12 +128,12 @@
 /* Structure of command element. */
 struct cmd_element 
 {
-  char *string;			/* Command specification by string. */
+  const char *string;			/* Command specification by string. */
   int (*func) (struct cmd_element *, struct vty *, int, char **);
-  char *doc;			/* Documentation of this command. */
+  const char *doc;			/* Documentation of this command. */
   int daemon;                   /* Daemon to which this command belong. */
   vector strvec;		/* Pointing out each description vector. */
-  int cmdsize;			/* Command index count. */
+  unsigned int cmdsize;		/* Command index count. */
   char *config;			/* Configuration string */
   vector subconfig;		/* Sub configuration string */
 };
@@ -141,8 +141,8 @@
 /* Command description structure. */
 struct desc
 {
-  char *cmd;			/* Command string. */
-  char *str;			/* Command's description. */
+  const char *cmd;			/* Command string. */
+  const char *str;			/* Command's description. */
 };
 
 /* Return value of the commands. */
@@ -291,7 +291,7 @@
 void cmd_free_strvec (vector);
 vector cmd_describe_command ();
 char **cmd_complete_command ();
-char *cmd_prompt (enum node_type);
+const char *cmd_prompt (enum node_type);
 int config_from_file (struct vty *, FILE *);
 int cmd_execute_command (vector, struct vty *, struct cmd_element **);
 int cmd_execute_command_strict (vector, struct vty *, struct cmd_element **);
diff --git a/lib/distribute.c b/lib/distribute.c
index 59dbc5a..78de4bf 100644
--- a/lib/distribute.c
+++ b/lib/distribute.c
@@ -119,8 +119,7 @@
 unsigned int
 distribute_hash_make (struct distribute *dist)
 {
-  unsigned int key;
-  int i;
+  unsigned int i, key;
 
   key = 0;
   if (dist->ifname)
@@ -625,7 +624,7 @@
 int
 config_show_distribute (struct vty *vty)
 {
-  int i;
+  unsigned int i;
   struct hash_backet *mp;
   struct distribute *dist;
 
@@ -704,7 +703,7 @@
 int
 config_write_distribute (struct vty *vty)
 {
-  int i;
+  unsigned int i;
   struct hash_backet *mp;
   int write = 0;
 
diff --git a/lib/filter.c b/lib/filter.c
index cd4bc0a..ee3dbc0 100644
--- a/lib/filter.c
+++ b/lib/filter.c
@@ -137,7 +137,7 @@
 }
 
 /* Return string of filter_type. */
-static char *
+const static char *
 filter_type_str (struct filter *filter)
 {
   switch (filter->type)
@@ -267,9 +267,9 @@
 /* Insert new access list to list of access_list.  Each acceess_list
    is sorted by the name. */
 struct access_list *
-access_list_insert (afi_t afi, char *name)
+access_list_insert (afi_t afi, const char *name)
 {
-  int i;
+  unsigned int i;
   long number;
   struct access_list *access;
   struct access_list *point;
@@ -358,7 +358,7 @@
 
 /* Lookup access_list from list of access_list by name. */
 struct access_list *
-access_list_lookup (afi_t afi, char *name)
+access_list_lookup (afi_t afi, const char *name)
 {
   struct access_list *access;
   struct access_master *master;
@@ -384,7 +384,7 @@
 /* Get access list from list of access_list.  If there isn't matched
    access_list create new one and return it. */
 struct access_list *
-access_list_get (afi_t afi, char *name)
+access_list_get (afi_t afi, const char *name)
 {
   struct access_list *access;
 
@@ -595,8 +595,8 @@
 
 int
 filter_set_cisco (struct vty *vty, char *name_str, char *type_str,
-		  char *addr_str, char *addr_mask_str,
-		  char *mask_str, char *mask_mask_str,
+		  const char *addr_str, const char *addr_mask_str,
+		  const char *mask_str, const char *mask_mask_str,
 		  int extended, int set)
 {
   int ret;
@@ -1153,8 +1153,8 @@
 }
 
 int
-filter_set_zebra (struct vty *vty, char *name_str, char *type_str,
-		  afi_t afi, char *prefix_str, int exact, int set)
+filter_set_zebra (struct vty *vty, const char *name_str, const char *type_str,
+		  afi_t afi, const char *prefix_str, int exact, int set)
 {
   int ret;
   enum filter_type type;
diff --git a/lib/filter.h b/lib/filter.h
index 077ac2f..a33e7bf 100644
--- a/lib/filter.h
+++ b/lib/filter.h
@@ -61,7 +61,7 @@
 void access_list_reset (void);
 void access_list_add_hook (void (*func)(struct access_list *));
 void access_list_delete_hook (void (*func)(struct access_list *));
-struct access_list *access_list_lookup (afi_t, char *);
+struct access_list *access_list_lookup (afi_t, const char *);
 enum filter_type access_list_apply (struct access_list *, void *);
 
 #endif /* _ZEBRA_FILTER_H */
diff --git a/lib/hash.c b/lib/hash.c
index e89171b..04549ad 100644
--- a/lib/hash.c
+++ b/lib/hash.c
@@ -140,7 +140,7 @@
 hash_iterate (struct hash *hash, 
 	      void (*func) (struct hash_backet *, void *), void *arg)
 {
-  int i;
+  unsigned int i;
   struct hash_backet *hb;
   struct hash_backet *hbnext;
 
@@ -159,7 +159,7 @@
 void
 hash_clean (struct hash *hash, void (*free_func) (void *))
 {
-  int i;
+  unsigned int i;
   struct hash_backet *hb;
   struct hash_backet *next;
 
diff --git a/lib/if.c b/lib/if.c
index 43e84a4..8fbaa76 100644
--- a/lib/if.c
+++ b/lib/if.c
@@ -203,7 +203,7 @@
       if (ifp->ifindex == index)
 	return ifp->name;
     }
-  return "unknown";
+  return (char *) "unknown";
 }
 
 /* Interface existance check by interface name. */
diff --git a/lib/if_rmap.c b/lib/if_rmap.c
index 4cf8ad9..0f3fa9c 100644
--- a/lib/if_rmap.c
+++ b/lib/if_rmap.c
@@ -106,8 +106,7 @@
 unsigned int
 if_rmap_hash_make (struct if_rmap *if_rmap)
 {
-  unsigned int key;
-  int i;
+  unsigned int i, key;
 
   key = 0;
   for (i = 0; i < strlen (if_rmap->ifname); i++)
@@ -276,7 +275,7 @@
 int
 config_write_if_rmap (struct vty *vty)
 {
-  int i;
+  unsigned int i;
   struct hash_backet *mp;
   int write = 0;
 
diff --git a/lib/keychain.c b/lib/keychain.c
index 527da05..1d38167 100644
--- a/lib/keychain.c
+++ b/lib/keychain.c
@@ -59,7 +59,7 @@
 }
 
 struct keychain *
-keychain_lookup (char *name)
+keychain_lookup (const char *name)
 {
   struct listnode *nn;
   struct keychain *keychain;
@@ -76,7 +76,7 @@
 }
 
 int
-key_cmp_func (struct key *k1, struct key *k2)
+key_cmp_func (const struct key *k1, const struct key *k2)
 {
   if (k1->index > k2->index)
     return 1;
@@ -94,7 +94,7 @@
 }
 
 struct keychain *
-keychain_get (char *name)
+keychain_get (const char *name)
 {
   struct keychain *keychain;
 
@@ -125,7 +125,7 @@
 }
 
 struct key *
-key_lookup (struct keychain *keychain, u_int32_t index)
+key_lookup (const struct keychain *keychain, u_int32_t index)
 {
   struct listnode *nn;
   struct key *key;
@@ -139,7 +139,7 @@
 }
 
 struct key *
-key_lookup_for_accept (struct keychain *keychain, u_int32_t index)
+key_lookup_for_accept (const struct keychain *keychain, u_int32_t index)
 {
   struct listnode *nn;
   struct key *key;
@@ -163,7 +163,7 @@
 }
 
 struct key *
-key_match_for_accept (struct keychain *keychain, char *auth_str)
+key_match_for_accept (const struct keychain *keychain, const char *auth_str)
 {
   struct listnode *nn;
   struct key *key;
@@ -183,7 +183,7 @@
 }
 
 struct key *
-key_lookup_for_send (struct keychain *keychain)
+key_lookup_for_send (const struct keychain *keychain)
 {
   struct listnode *nn;
   struct key *key;
@@ -204,7 +204,7 @@
 }
 
 struct key *
-key_get (struct keychain *keychain, u_int32_t index)
+key_get (const struct keychain *keychain, u_int32_t index)
 {
   struct key *key;
 
@@ -370,17 +370,18 @@
 /* Convert HH:MM:SS MON DAY YEAR to time_t value.  -1 is returned when
    given string is malformed. */
 time_t 
-key_str2time(char *time_str, char *day_str, char *month_str, char *year_str)
+key_str2time (const char *time_str, const char *day_str, const char *month_str,
+	      const char *year_str)
 {
   int i = 0;
   char *colon;
   struct tm tm;
   time_t time;
-  int sec, min, hour;
-  int day, month, year;
+  unsigned int sec, min, hour;
+  unsigned int day, month, year;
   char *endptr = NULL;
 
-  char *month_name[] = 
+  const char *month_name[] = 
   {
     "January",
     "February",
@@ -466,10 +467,11 @@
 }
 
 int
-key_lifetime_set (struct vty *vty, struct key_range *krange, char *stime_str,
-		  char *sday_str, char *smonth_str, char *syear_str,
-		  char *etime_str, char *eday_str, char *emonth_str,
-		  char *eyear_str)
+key_lifetime_set (struct vty *vty, struct key_range *krange,
+		  const char *stime_str, const char *sday_str,
+		  const char *smonth_str, const char *syear_str,
+		  const char *etime_str, const char *eday_str,
+		  const char *emonth_str, const char *eyear_str)
 {
   time_t time_start;
   time_t time_end;
@@ -502,8 +504,9 @@
 
 int
 key_lifetime_duration_set (struct vty *vty, struct key_range *krange,
-			   char *stime_str, char *sday_str, char *smonth_str,
-			   char *syear_str, char *duration_str)
+			   const char *stime_str, const char *sday_str,
+			   const char *smonth_str, const char *syear_str,
+			   const char *duration_str)
 {
   time_t time_start;
   u_int32_t duration;
@@ -531,8 +534,8 @@
 
 int
 key_lifetime_infinite_set (struct vty *vty, struct key_range *krange,
-			   char *stime_str, char *sday_str, char *smonth_str,
-			   char *syear_str)
+			   const char *stime_str, const char *sday_str,
+			   const char *smonth_str, const char *syear_str)
 {
   time_t time_start;
     
diff --git a/lib/keychain.h b/lib/keychain.h
index 0cfa3d5..e98c403 100644
--- a/lib/keychain.h
+++ b/lib/keychain.h
@@ -48,9 +48,9 @@
 };
 
 void keychain_init ();
-struct keychain *keychain_lookup (char *);
-struct key *key_lookup_for_accept (struct keychain *, u_int32_t);
-struct key *key_match_for_accept (struct keychain *, char *);
-struct key *key_lookup_for_send (struct keychain *);
+struct keychain *keychain_lookup (const char *);
+struct key *key_lookup_for_accept (const struct keychain *, u_int32_t);
+struct key *key_match_for_accept (const struct keychain *, const char *);
+struct key *key_lookup_for_send (const struct keychain *);
 
 #endif /* _ZEBRA_KEYCHAIN_H */
diff --git a/lib/log.c b/lib/log.c
index 2090b91..bbe6e99 100644
--- a/lib/log.c
+++ b/lib/log.c
@@ -474,7 +474,7 @@
 }
 
 /* Message lookup function. */
-char *
+const char *
 lookup (struct message *mes, int key)
 {
   struct message *pnt;
@@ -488,7 +488,7 @@
 
 /* Very old hacky version of message lookup function.  Still partly
    used in bgpd and ospfd. FIXME Seems that it's not used any more. */
-char *
+const char *
 mes_lookup (struct message *meslist, int max, int index)
 {
   if (index < 0 || index >= max) 
diff --git a/lib/log.h b/lib/log.h
index defe064..e2eeb82 100644
--- a/lib/log.h
+++ b/lib/log.h
@@ -121,8 +121,8 @@
 /* For hackey massage lookup and check */
 #define LOOKUP(x, y) mes_lookup(x, x ## _max, y)
 
-char *lookup (struct message *, int);
-char *mes_lookup (struct message *meslist, int max, int index);
+const char *lookup (struct message *, int);
+const char *mes_lookup (struct message *meslist, int max, int index);
 
 extern const char *zlog_priority[];
 
diff --git a/lib/plist.c b/lib/plist.c
index 4069f86..ef2fffc 100644
--- a/lib/plist.c
+++ b/lib/plist.c
@@ -184,7 +184,7 @@
 static struct prefix_list *
 prefix_list_insert (afi_t afi, char *name)
 {
-  int i;
+  unsigned int i;
   long number;
   struct prefix_list *plist;
   struct prefix_list *point;
@@ -517,7 +517,7 @@
 }
 
 /* Return string of prefix_list_type. */
-static char *
+const static char *
 prefix_list_type_str (struct prefix_list_entry *pentry)
 {
   switch (pentry->type)
diff --git a/lib/privs.h b/lib/privs.h
index 65c9f35..76e8af2 100644
--- a/lib/privs.h
+++ b/lib/privs.h
@@ -61,9 +61,9 @@
   zebra_capabilities_t *caps_i;       /* caps to allow inheritance of */
   int cap_num_p;                      /* number of caps in arrays */
   int cap_num_i;                    
-  char *user;                         /* user and group to run as */
-  char *group;
-  char *vty_group;                    /* group to chown vty socket to */
+  const char *user;                   /* user and group to run as */
+  const char *group;
+  const char *vty_group;              /* group to chown vty socket to */
   /* methods */
   int 
     (*change) (zebra_privs_ops_t);    /* change privileges, 0 on success */
diff --git a/lib/routemap.c b/lib/routemap.c
index 9d6bbcf..67bbc03 100644
--- a/lib/routemap.c
+++ b/lib/routemap.c
@@ -171,7 +171,7 @@
 }
 
 /* Return route map's type string. */
-static char *
+const static char *
 route_map_type_str (enum route_map_type type)
 {
   switch (type)
@@ -426,7 +426,7 @@
 struct route_map_rule_cmd *
 route_map_lookup_match (char *name)
 {
-  int i;
+  unsigned int i;
   struct route_map_rule_cmd *rule;
 
   for (i = 0; i < vector_max (route_match_vec); i++)
@@ -440,7 +440,7 @@
 struct route_map_rule_cmd *
 route_map_lookup_set (char *name)
 {
-  int i;
+  unsigned int i;
   struct route_map_rule_cmd *rule;
 
   for (i = 0; i < vector_max (route_set_vec); i++)
diff --git a/lib/sockunion.c b/lib/sockunion.c
index 039da1a..587b324 100644
--- a/lib/sockunion.c
+++ b/lib/sockunion.c
@@ -704,7 +704,7 @@
 int
 in6addr_cmp (struct in6_addr *addr1, struct in6_addr *addr2)
 {
-  int i;
+  unsigned int i;
   u_char *p1, *p2;
 
   p1 = (u_char *)addr1;
diff --git a/lib/thread.c b/lib/thread.c
index 474571e..2847b8b 100644
--- a/lib/thread.c
+++ b/lib/thread.c
@@ -382,7 +382,7 @@
 
 /* Trim blankspace and "()"s */
 static char *
-strip_funcname (char *funcname) 
+strip_funcname (const char *funcname) 
 {
   char buff[100];
   char tmp, *ret, *e, *b = buff;
@@ -410,7 +410,7 @@
 /* Get new thread.  */
 static struct thread *
 thread_get (struct thread_master *m, u_char type,
-	    int (*func) (struct thread *), void *arg, char* funcname)
+	    int (*func) (struct thread *), void *arg, const char* funcname)
 {
   struct thread *thread;
 
@@ -439,7 +439,7 @@
 /* Add new read thread. */
 struct thread *
 funcname_thread_add_read (struct thread_master *m, 
-		 int (*func) (struct thread *), void *arg, int fd, char* funcname)
+		 int (*func) (struct thread *), void *arg, int fd, const char* funcname)
 {
   struct thread *thread;
 
@@ -462,7 +462,7 @@
 /* Add new write thread. */
 struct thread *
 funcname_thread_add_write (struct thread_master *m,
-		 int (*func) (struct thread *), void *arg, int fd, char* funcname)
+		 int (*func) (struct thread *), void *arg, int fd, const char* funcname)
 {
   struct thread *thread;
 
@@ -487,7 +487,7 @@
                                    int (*func) (struct thread *), 
                                   void *arg, 
                                   struct timeval *time_relative, 
-                                  char* funcname)
+                                  const char* funcname)
 {
   struct thread *thread;
   struct timeval timer_now;
@@ -528,7 +528,7 @@
 struct thread *
 funcname_thread_add_timer (struct thread_master *m,
 		           int (*func) (struct thread *), 
-		           void *arg, long timer, char* funcname)
+		           void *arg, long timer, const char* funcname)
 {
   struct timeval trel;
 
@@ -544,7 +544,7 @@
 struct thread *
 funcname_thread_add_timer_msec (struct thread_master *m,
                                 int (*func) (struct thread *), 
-                                void *arg, long timer, char* funcname)
+                                void *arg, long timer, const char* funcname)
 {
   struct timeval trel;
 
@@ -561,7 +561,7 @@
 /* Add simple event thread. */
 struct thread *
 funcname_thread_add_event (struct thread_master *m,
-		  int (*func) (struct thread *), void *arg, int val, char* funcname)
+		  int (*func) (struct thread *), void *arg, int val, const char* funcname)
 {
   struct thread *thread;
 
@@ -888,7 +888,7 @@
                 int (*func)(struct thread *), 
                 void *arg,
                 int val,
-		char* funcname)
+		const char* funcname)
 {
   struct thread dummy; 
 
diff --git a/lib/thread.h b/lib/thread.h
index 9a8c2be..716a6a6 100644
--- a/lib/thread.h
+++ b/lib/thread.h
@@ -74,7 +74,7 @@
 
 struct cpu_thread_history {
   int (*func)(struct thread *);
-  char *funcname;
+  const char *funcname;
   unsigned int total_calls;
   unsigned long total, max;
   unsigned char types;
@@ -138,21 +138,21 @@
 /* Prototypes. */
 struct thread_master *thread_master_create ();
 struct thread *funcname_thread_add_read (struct thread_master *, 
-				int (*)(struct thread *), void *, int, char*);
+				int (*)(struct thread *), void *, int, const char*);
 struct thread *funcname_thread_add_write (struct thread_master *,
-				 int (*)(struct thread *), void *, int, char*);
+				 int (*)(struct thread *), void *, int, const char*);
 struct thread *funcname_thread_add_timer (struct thread_master *,
-				 int (*)(struct thread *), void *, long, char*);
+				 int (*)(struct thread *), void *, long, const char*);
 struct thread *funcname_thread_add_timer_msec (struct thread_master *,
-				 int (*)(struct thread *), void *, long, char*);
+				 int (*)(struct thread *), void *, long, const char*);
 struct thread *funcname_thread_add_event (struct thread_master *,
-				 int (*)(struct thread *), void *, int, char*);
+				 int (*)(struct thread *), void *, int, const char*);
 void thread_cancel (struct thread *);
 void thread_cancel_event (struct thread_master *, void *);
 
 struct thread *thread_fetch (struct thread_master *, struct thread *);
 struct thread *funcname_thread_execute (struct thread_master *,
-			       int (*)(struct thread *), void *, int, char *);
+			       int (*)(struct thread *), void *, int, const char *);
 void thread_call (struct thread *);
 unsigned long thread_timer_remain_second (struct thread *);
 
diff --git a/lib/vty.c b/lib/vty.c
index 3e799b8..c10c984 100644
--- a/lib/vty.c
+++ b/lib/vty.c
@@ -848,9 +848,10 @@
 
 void
 vty_describe_fold (struct vty *vty, int cmd_width,
-                 int desc_width, struct desc *desc)
+		   unsigned int desc_width, struct desc *desc)
 {
-  char *buf, *cmd, *p;
+  char *buf;
+  const char *cmd, *p;
   int pos;
 
   cmd = desc->cmd[0] == '.' ? desc->cmd + 1 : desc->cmd;
@@ -891,7 +892,7 @@
   int ret;
   vector vline;
   vector describe;
-  int i, width, desc_width;
+  unsigned int i, width, desc_width;
   struct desc *desc, *desc_cr = NULL;
 
   vline = cmd_make_strvec (vty->buf);
@@ -934,7 +935,7 @@
   for (i = 0; i < vector_max (describe); i++)
     if ((desc = vector_slot (describe, i)) != NULL)
       {
-	int len;
+	unsigned int len;
 
 	if (desc->cmd[0] == '\0')
 	  continue;
@@ -2308,7 +2309,7 @@
 void
 vty_log (const char *proto_str, const char *format, va_list va)
 {
-  int i;
+  unsigned int i;
   struct vty *vty;
 
   for (i = 0; i < vector_max (vtyvec); i++)
@@ -2397,7 +2398,7 @@
        "who",
        "Display who is on vty\n")
 {
-  int i;
+  unsigned int i;
   struct vty *v;
 
   for (i = 0; i < vector_max (vtyvec); i++)
@@ -2677,7 +2678,7 @@
 void
 vty_reset ()
 {
-  int i;
+  unsigned int i;
   struct vty *vty;
   struct thread *vty_serv_thread;
 
@@ -2717,7 +2718,7 @@
 void
 vty_finish ()
 {
-  int i;
+  unsigned int i;
   struct vty *vty;
   struct thread *vty_serv_thread;
 
diff --git a/lib/zclient.c b/lib/zclient.c
index 5df420f..98829f6 100644
--- a/lib/zclient.c
+++ b/lib/zclient.c
@@ -167,7 +167,7 @@
 #include <sys/un.h>
 
 int
-zclient_socket_un (char *path)
+zclient_socket_un (const char *path)
 {
   int ret;
   int sock, len;
diff --git a/lib/zclient.h b/lib/zclient.h
index 03a6e0a..d18cf62 100644
--- a/lib/zclient.h
+++ b/lib/zclient.h
@@ -109,7 +109,7 @@
 void zclient_stop (struct zclient *);
 void zclient_reset (struct zclient *);
 int zclient_socket ();
-int zclient_socket_un (char *);
+int zclient_socket_un (const char *);
 
 void zclient_redistribute (int, struct zclient *, int);
 void zclient_redistribute_default (int, struct zclient *);