* net.cc (free_addr_list): Add define for symmetry.
(free_hostent_ptr): Use free_addr_list to free h_addr_list element.
        (dup_addr_list): New static function.
        (dup_hostent_ptr): Use dup_addr_list instead of dup_char_list in order
        to handle embedded null characters.
			
			
This commit is contained in:
		| @@ -1,3 +1,14 @@ | ||||
| Fri Aug 24  8:54:00 2001  Corinna Vinschen <corinna@vinschen.de> | ||||
|  | ||||
| 	* net.cc (free_addr_list): Add define for symmetry. | ||||
| 	(free_hostent_ptr): Use free_addr_list to free h_addr_list element. | ||||
|  | ||||
| Thu Aug 23 16:00:09 2001  Jason Tishler <jason@tishler.net> | ||||
|  | ||||
| 	* net.cc (dup_addr_list): New static function. | ||||
| 	(dup_hostent_ptr): Use dup_addr_list instead of dup_char_list in order | ||||
| 	to handle embedded null characters. | ||||
|  | ||||
| Wed Aug 22 22:23:14 2001  Christopher Faylor <cgf@cygnus.com> | ||||
|  | ||||
| 	* dtable.cc (dtable::dup2): Allow extension of fd table by dup2. | ||||
|   | ||||
| @@ -409,6 +409,27 @@ dup_char_list (char **src) | ||||
|   return dst; | ||||
| } | ||||
|  | ||||
| #define free_addr_list(addr_list)	free_char_list (addr_list) | ||||
|  | ||||
| static char ** | ||||
| dup_addr_list (char **src, unsigned int size) | ||||
| { | ||||
|   char **dst; | ||||
|   int cnt = 0; | ||||
|    | ||||
|   for (char **cl = src; *cl; ++cl) | ||||
|     ++cnt; | ||||
|   if (!(dst = (char **) calloc (cnt + 1, sizeof *dst))) | ||||
|     return NULL; | ||||
|   while (cnt-- > 0) | ||||
|     { | ||||
|       if (!(dst[cnt] = (char *) malloc(size))) | ||||
|         return NULL; | ||||
|       memcpy(dst[cnt], src[cnt], size); | ||||
|     } | ||||
|   return dst; | ||||
| } | ||||
|  | ||||
| static void | ||||
| free_protoent_ptr (struct protoent *&p) | ||||
| { | ||||
| @@ -998,7 +1019,7 @@ free_hostent_ptr (struct hostent *&p) | ||||
|       if (p->h_name) | ||||
|         free ((void *)p->h_name); | ||||
|       free_char_list (p->h_aliases); | ||||
|       free_char_list (p->h_addr_list); | ||||
|       free_addr_list (p->h_addr_list); | ||||
|       p = NULL; | ||||
|     } | ||||
| } | ||||
| @@ -1021,7 +1042,8 @@ dup_hostent_ptr (struct hostent *src) | ||||
|     goto out; | ||||
|   if (src->h_aliases && !(dst->h_aliases = dup_char_list (src->h_aliases))) | ||||
|     goto out; | ||||
|   if (src->h_addr_list && !(dst->h_addr_list = dup_char_list(src->h_addr_list))) | ||||
|   if (src->h_addr_list | ||||
|       && !(dst->h_addr_list = dup_addr_list(src->h_addr_list, src->h_length))) | ||||
|     goto out; | ||||
|  | ||||
|   debug_printf ("hostent: copied %s", dst->h_name); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user