MCPcopy Create free account
hub / github.com/OpenSIPS/opensips / hostent_cpy

Function hostent_cpy

proxy.c:94–169  ·  view source on GitHub ↗

copies a hostent structure*, returns 0 on success, <0 on error*/

Source from the content-addressed store, hash-verified

92
93/* copies a hostent structure*, returns 0 on success, <0 on error*/
94int 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);

Callers 4

mk_proxyFunction · 0.85
clone_proxyFunction · 0.85
get_next_suFunction · 0.85
_removeFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected