diff options
Diffstat (limited to 'lib/ftp.c')
| -rw-r--r-- | lib/ftp.c | 10 | 
1 files changed, 6 insertions, 4 deletions
| @@ -879,6 +879,8 @@ static CURLcode ftp_state_use_port(struct connectdata *conn,    socklen_t sslen;    char hbuf[NI_MAXHOST];    struct sockaddr *sa=(struct sockaddr *)&ss; +  struct sockaddr_in * const sa4 = (void *)sa; +  struct sockaddr_in6 * const sa6 = (void *)sa;    char tmp[1024];    static const char mode[][5] = { "EPRT", "PORT" };    int rc; @@ -974,9 +976,9 @@ static CURLcode ftp_state_use_port(struct connectdata *conn,      /* set port number to zero to make bind() pick "any" */      if(sa->sa_family == AF_INET) -      ((struct sockaddr_in *)sa)->sin_port=0; +      sa4->sin_port = 0;      else -      ((struct sockaddr_in6 *)sa)->sin6_port =0; +      sa6->sin6_port = 0;      if(sslen > (socklen_t)sizeof(ss))        sslen = sizeof(ss); @@ -1027,10 +1029,10 @@ static CURLcode ftp_state_use_port(struct connectdata *conn,      switch (sa->sa_family) {      case AF_INET: -      port = ntohs(((struct sockaddr_in *)sa)->sin_port); +      port = ntohs(sa4->sin_port);        break;      case AF_INET6: -      port = ntohs(((struct sockaddr_in6 *)sa)->sin6_port); +      port = ntohs(sa6->sin6_port);        break;      default:        break; | 
