copies a hostent structure*, returns 0 on success, <0 on error*/
| 92 | |
| 93 | /* copies a hostent structure*, returns 0 on success, <0 on error*/ |
| 94 | int hostent_cpy(struct hostent *dst, struct hostent* src) |
| 95 | { |
| 96 | unsigned int len,len2, i, r; |
| 97 | int ret; |
| 98 | |
| 99 | /* start copying the host entry.. */ |
| 100 | /* copy h_name */ |
| 101 | len=strlen(src->h_name)+1; |
| 102 | dst->h_name=(char*)pkg_malloc(sizeof(char) * len); |
| 103 | if (dst->h_name) strncpy(dst->h_name,src->h_name, len); |
| 104 | else{ |
| 105 | ser_error=ret=E_OUT_OF_MEM; |
| 106 | goto error; |
| 107 | } |
| 108 | |
| 109 | /* copy h_aliases */ |
| 110 | len=0; |
| 111 | if (src->h_aliases) |
| 112 | for (;src->h_aliases[len];len++); |
| 113 | dst->h_aliases=(char**)pkg_malloc(sizeof(char*)*(len+1)); |
| 114 | if (dst->h_aliases==0){ |
| 115 | ser_error=ret=E_OUT_OF_MEM; |
| 116 | pkg_free(dst->h_name); |
| 117 | goto error; |
| 118 | } |
| 119 | memset((void*)dst->h_aliases, 0, sizeof(char*) * (len+1) ); |
| 120 | for (i=0;i<len;i++){ |
| 121 | len2=strlen(src->h_aliases[i])+1; |
| 122 | dst->h_aliases[i]=(char*)pkg_malloc(sizeof(char)*len2); |
| 123 | if (dst->h_aliases[i]==0){ |
| 124 | ser_error=ret=E_OUT_OF_MEM; |
| 125 | pkg_free(dst->h_name); |
| 126 | for(r=0; r<i; r++) pkg_free(dst->h_aliases[r]); |
| 127 | pkg_free(dst->h_aliases); |
| 128 | goto error; |
| 129 | } |
| 130 | strncpy(dst->h_aliases[i], src->h_aliases[i], len2); |
| 131 | } |
| 132 | /* copy h_addr_list */ |
| 133 | len=0; |
| 134 | if (src->h_addr_list) |
| 135 | for (;src->h_addr_list[len];len++); |
| 136 | dst->h_addr_list=(char**)pkg_malloc(sizeof(char*)*(len+1)); |
| 137 | if (dst->h_addr_list==0){ |
| 138 | ser_error=ret=E_OUT_OF_MEM; |
| 139 | pkg_free(dst->h_name); |
| 140 | for(r=0; dst->h_aliases[r]; r++) pkg_free(dst->h_aliases[r]); |
| 141 | pkg_free(dst->h_aliases); |
| 142 | goto error; |
| 143 | } |
| 144 | memset((void*)dst->h_addr_list, 0, sizeof(char*) * (len+1) ); |
| 145 | for (i=0;i<len;i++){ |
| 146 | dst->h_addr_list[i]=(char*)pkg_malloc(sizeof(char)*src->h_length); |
| 147 | if (dst->h_addr_list[i]==0){ |
| 148 | ser_error=ret=E_OUT_OF_MEM; |
| 149 | pkg_free(dst->h_name); |
| 150 | for(r=0; dst->h_aliases[r]; r++) pkg_free(dst->h_aliases[r]); |
| 151 | pkg_free(dst->h_aliases); |
no outgoing calls
no test coverage detected