Skip to content

Commit

Permalink
Get rid of the extra shm allocation. It's not really needed.
Browse files Browse the repository at this point in the history
  • Loading branch information
sobomax committed Nov 30, 2023
1 parent cf2dad2 commit a3a5a31
Showing 1 changed file with 11 additions and 13 deletions.
24 changes: 11 additions & 13 deletions proxy.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,29 +58,29 @@ int disable_dns_failover=0;
int hostent_shm_cpy(struct hostent *dst, struct hostent* src)
{
unsigned int len;
int i;
int hal_len;
char *p;
size_t alen;

len = strlen(src->h_name) + 1;
dst->h_name = (char *)shm_malloc(len);
if (dst->h_name == NULL)
return -1;

for( i=0 ; src->h_addr_list[i] ; i++ );
for( hal_len=0 ; src->h_addr_list[hal_len] ; hal_len++ ) {};

alen = hal_len * (src->h_length + sizeof(char*));
alen += sizeof(void*);

dst->h_addr_list = (char**)shm_malloc
(i * (src->h_length + sizeof(char*)) + sizeof(char*));
dst->h_addr_list = (char**)shm_malloc(alen + alen);
if (dst->h_addr_list==NULL) {
shm_free(dst->h_name);
return -1;
}

dst->h_name = ((char *)dst->h_addr_list) + len;
memcpy(dst->h_name, src->h_name, len);

p = ((char*)dst->h_addr_list) + (i+1)*sizeof(char*);
dst->h_addr_list[i] = 0;
p = ((char*)dst->h_addr_list) + (hal_len+1)*sizeof(char*);
dst->h_addr_list[hal_len] = NULL;

for( i-- ; i>=0 ; i-- ) {
for( int i = hal_len - 1 ; i>=0 ; i-- ) {
dst->h_addr_list[i] = p;
memcpy( dst->h_addr_list[i], src->h_addr_list[i], src->h_length );
p += src->h_length;
Expand All @@ -95,8 +95,6 @@ int hostent_shm_cpy(struct hostent *dst, struct hostent* src)

void free_shm_hostent(struct hostent *dst)
{
if (dst->h_name)
shm_free(dst->h_name);
if (dst->h_addr_list)
shm_free(dst->h_addr_list);
}
Expand Down

0 comments on commit a3a5a31

Please sign in to comment.