diff options
Diffstat (limited to 'src/lib/libcrypto/bio/b_sock.c')
-rw-r--r-- | src/lib/libcrypto/bio/b_sock.c | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/src/lib/libcrypto/bio/b_sock.c b/src/lib/libcrypto/bio/b_sock.c index d29b29ff8b..6409f98f57 100644 --- a/src/lib/libcrypto/bio/b_sock.c +++ b/src/lib/libcrypto/bio/b_sock.c | |||
@@ -163,7 +163,14 @@ int BIO_get_port(const char *str, unsigned short *port_ptr) | |||
163 | else | 163 | else |
164 | { | 164 | { |
165 | CRYPTO_w_lock(CRYPTO_LOCK_GETSERVBYNAME); | 165 | CRYPTO_w_lock(CRYPTO_LOCK_GETSERVBYNAME); |
166 | s=getservbyname(str,"tcp"); | 166 | /* Note: under VMS with SOCKETSHR, it seems like the first |
167 | * parameter is 'char *', instead of 'const char *' | ||
168 | */ | ||
169 | s=getservbyname( | ||
170 | #ifndef CONST_STRICT | ||
171 | (char *) | ||
172 | #endif | ||
173 | str,"tcp"); | ||
167 | if(s != NULL) | 174 | if(s != NULL) |
168 | *port_ptr=ntohs((unsigned short)s->s_port); | 175 | *port_ptr=ntohs((unsigned short)s->s_port); |
169 | CRYPTO_w_unlock(CRYPTO_LOCK_GETSERVBYNAME); | 176 | CRYPTO_w_unlock(CRYPTO_LOCK_GETSERVBYNAME); |
@@ -282,12 +289,12 @@ static struct hostent *ghbn_dup(struct hostent *a) | |||
282 | 289 | ||
283 | j=strlen(a->h_name)+1; | 290 | j=strlen(a->h_name)+1; |
284 | if ((ret->h_name=Malloc(j)) == NULL) goto err; | 291 | if ((ret->h_name=Malloc(j)) == NULL) goto err; |
285 | memcpy((char *)ret->h_name,a->h_name,j+1); | 292 | memcpy((char *)ret->h_name,a->h_name,j); |
286 | for (i=0; a->h_aliases[i] != NULL; i++) | 293 | for (i=0; a->h_aliases[i] != NULL; i++) |
287 | { | 294 | { |
288 | j=strlen(a->h_aliases[i])+1; | 295 | j=strlen(a->h_aliases[i])+1; |
289 | if ((ret->h_aliases[i]=Malloc(j)) == NULL) goto err; | 296 | if ((ret->h_aliases[i]=Malloc(j)) == NULL) goto err; |
290 | memcpy(ret->h_aliases[i],a->h_aliases[i],j+1); | 297 | memcpy(ret->h_aliases[i],a->h_aliases[i],j); |
291 | } | 298 | } |
292 | ret->h_length=a->h_length; | 299 | ret->h_length=a->h_length; |
293 | ret->h_addrtype=a->h_addrtype; | 300 | ret->h_addrtype=a->h_addrtype; |
@@ -327,7 +334,7 @@ static void ghbn_free(struct hostent *a) | |||
327 | Free(a->h_addr_list[i]); | 334 | Free(a->h_addr_list[i]); |
328 | Free(a->h_addr_list); | 335 | Free(a->h_addr_list); |
329 | } | 336 | } |
330 | if (a->h_name != NULL) Free((char *)a->h_name); | 337 | if (a->h_name != NULL) Free(a->h_name); |
331 | Free(a); | 338 | Free(a); |
332 | } | 339 | } |
333 | 340 | ||
@@ -368,7 +375,14 @@ struct hostent *BIO_gethostbyname(const char *name) | |||
368 | if (i == GHBN_NUM) /* no hit*/ | 375 | if (i == GHBN_NUM) /* no hit*/ |
369 | { | 376 | { |
370 | BIO_ghbn_miss++; | 377 | BIO_ghbn_miss++; |
371 | ret=gethostbyname(name); | 378 | /* Note: under VMS with SOCKETSHR, it seems like the first |
379 | * parameter is 'char *', instead of 'const char *' | ||
380 | */ | ||
381 | ret=gethostbyname( | ||
382 | #ifndef CONST_STRICT | ||
383 | (char *) | ||
384 | #endif | ||
385 | name); | ||
372 | 386 | ||
373 | if (ret == NULL) | 387 | if (ret == NULL) |
374 | goto end; | 388 | goto end; |