Commit a1d59839 authored by Yang Tse's avatar Yang Tse
Browse files

use macros ERRNO, SET_ERRNO(), SOCKERRNO and SET_SOCKERRNO() for errno handling

parent 4894ce16
Loading
Loading
Loading
Loading
+8 −21
Original line number Diff line number Diff line
@@ -115,19 +115,6 @@ singleipconnect(struct connectdata *conn,
                long timeout_ms,
                bool *connected);

/*
 * Curl_sockerrno() returns the *socket-related* errno (or equivalent) on this
 * platform to hide platform specific for the function that calls this.
 */
int Curl_sockerrno(void)
{
#ifdef USE_WINSOCK
  return (int)WSAGetLastError();
#else
  return errno;
#endif
}

/*
 * Curl_nonblock() set the given socket to either blocking or non-blocking
 * mode based on the 'nonblock' boolean argument. This function is highly
@@ -332,7 +319,7 @@ static CURLcode bindlocal(struct connectdata *conn,
      if (setsockopt(sockfd, SOL_SOCKET, SO_BINDTODEVICE,
                     data->set.device, strlen(data->set.device)+1) != 0) {
        /* printf("Failed to BINDTODEVICE, socket: %d  device: %s error: %s\n",
           sockfd, data->set.device, Curl_strerror(Curl_sockerrno())); */
           sockfd, data->set.device, Curl_strerror(SOCKERRNO)); */
        infof(data, "SO_BINDTODEVICE %s failed\n",
              data->set.device);
        /* This is typically "errno 1, error: Operation not permitted" if
@@ -409,7 +396,7 @@ static CURLcode bindlocal(struct connectdata *conn,
      break;
  } while(1);

  data->state.os_errno = Curl_sockerrno();
  data->state.os_errno = SOCKERRNO;
  failf(data, "bind failure: %s",
        Curl_strerror(conn, data->state.os_errno));
  return CURLE_HTTP_PORT_FAILED;
@@ -453,7 +440,7 @@ static bool verifyconnect(curl_socket_t sockfd, int *error)

  if( -1 == getsockopt(sockfd, SOL_SOCKET, SO_ERROR,
                       (void *)&err, &errSize))
    err = Curl_sockerrno();
    err = SOCKERRNO;

#ifdef _WIN32_WCE
  /* Always returns this error, bug in CE? */
@@ -472,7 +459,7 @@ static bool verifyconnect(curl_socket_t sockfd, int *error)
#else
  (void)sockfd;
  if (error)
    *error = Curl_sockerrno();
    *error = SOCKERRNO;
#endif
  return rc;
}
@@ -613,7 +600,7 @@ CURLcode Curl_is_connected(struct connectdata *conn,
      infof(data, "Connection failed\n");

    if(trynextip(conn, sockindex, connected)) {
      error = Curl_sockerrno();
      error = SOCKERRNO;
      data->state.os_errno = error;
      failf(data, "Failed connect to %s:%d; %s",
            conn->host.name, conn->port, Curl_strerror(conn,error));
@@ -645,7 +632,7 @@ static void tcpnodelay(struct connectdata *conn,
  if(setsockopt(sockfd, proto, TCP_NODELAY, (void *)&onoff,
                sizeof(onoff)) < 0)
    infof(data, "Could not set TCP_NODELAY: %s\n",
          Curl_strerror(conn, Curl_sockerrno()));
          Curl_strerror(conn, SOCKERRNO));
  else
    infof(data,"TCP_NODELAY set\n");
#else
@@ -667,7 +654,7 @@ static void nosigpipe(struct connectdata *conn,
  if(setsockopt(sockfd, SOL_SOCKET, SO_NOSIGPIPE, (void *)&onoff,
                sizeof(onoff)) < 0)
    infof(data, "Could not set SO_NOSIGPIPE: %s\n",
          Curl_strerror(conn, Curl_sockerrno()));
          Curl_strerror(conn, SOCKERRNO));
}
#else
#define nosigpipe(x,y)
@@ -731,7 +718,7 @@ singleipconnect(struct connectdata *conn,
    rc = 0;

  if(-1 == rc) {
    error = Curl_sockerrno();
    error = SOCKERRNO;

    switch (error) {
    case EINPROGRESS:
+1 −3
Original line number Diff line number Diff line
@@ -7,7 +7,7 @@
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2006, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2007, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
@@ -37,8 +37,6 @@ CURLcode Curl_connecthost(struct connectdata *conn,
                          bool *connected /* truly connected? */
                          );

int Curl_sockerrno(void);

CURLcode Curl_store_ip_addr(struct connectdata *conn);

#define DEFAULT_CONNECT_TIMEOUT 300000 /* milliseconds == five minutes */
+15 −6
Original line number Diff line number Diff line
@@ -750,17 +750,19 @@ CURLcode Curl_convert_to_network(struct SessionHandle *data,
    /* do the translation ourselves */
    char *input_ptr, *output_ptr;
    size_t in_bytes, out_bytes, rc;
    int error;

    /* open an iconv conversion descriptor if necessary */
    if(data->outbound_cd == (iconv_t)-1) {
      data->outbound_cd = iconv_open(CURL_ICONV_CODESET_OF_NETWORK,
                                     CURL_ICONV_CODESET_OF_HOST);
      if(data->outbound_cd == (iconv_t)-1) {
        error = ERRNO;
        failf(data,
              "The iconv_open(\"%s\", \"%s\") call failed with errno %i: %s",
               CURL_ICONV_CODESET_OF_NETWORK,
               CURL_ICONV_CODESET_OF_HOST,
               errno, strerror(errno));
               error, strerror(error));
        return CURLE_CONV_FAILED;
      }
    }
@@ -770,9 +772,10 @@ CURLcode Curl_convert_to_network(struct SessionHandle *data,
    rc = iconv(data->outbound_cd, (const char**)&input_ptr, &in_bytes,
               &output_ptr, &out_bytes);
    if ((rc == ICONV_ERROR) || (in_bytes != 0)) {
      error = ERRNO;
      failf(data,
        "The Curl_convert_to_network iconv call failed with errno %i: %s",
             errno, strerror(errno));
             error, strerror(error));
      return CURLE_CONV_FAILED;
    }
#else
@@ -807,17 +810,19 @@ CURLcode Curl_convert_from_network(struct SessionHandle *data,
    /* do the translation ourselves */
    char *input_ptr, *output_ptr;
    size_t in_bytes, out_bytes, rc;
    int error;

    /* open an iconv conversion descriptor if necessary */
    if(data->inbound_cd == (iconv_t)-1) {
      data->inbound_cd = iconv_open(CURL_ICONV_CODESET_OF_HOST,
                                    CURL_ICONV_CODESET_OF_NETWORK);
      if(data->inbound_cd == (iconv_t)-1) {
        error = ERRNO;
        failf(data,
              "The iconv_open(\"%s\", \"%s\") call failed with errno %i: %s",
               CURL_ICONV_CODESET_OF_HOST,
               CURL_ICONV_CODESET_OF_NETWORK,
               errno, strerror(errno));
               error, strerror(error));
        return CURLE_CONV_FAILED;
      }
    }
@@ -827,9 +832,10 @@ CURLcode Curl_convert_from_network(struct SessionHandle *data,
    rc = iconv(data->inbound_cd, (const char **)&input_ptr, &in_bytes,
               &output_ptr, &out_bytes);
    if ((rc == ICONV_ERROR) || (in_bytes != 0)) {
      error = ERRNO;
      failf(data,
        "The Curl_convert_from_network iconv call failed with errno %i: %s",
             errno, strerror(errno));
             error, strerror(error));
      return CURLE_CONV_FAILED;
    }
#else
@@ -864,17 +870,19 @@ CURLcode Curl_convert_from_utf8(struct SessionHandle *data,
    /* do the translation ourselves */
    char *input_ptr, *output_ptr;
    size_t in_bytes, out_bytes, rc;
    int error;

    /* open an iconv conversion descriptor if necessary */
    if(data->utf8_cd == (iconv_t)-1) {
      data->utf8_cd = iconv_open(CURL_ICONV_CODESET_OF_HOST,
                                 CURL_ICONV_CODESET_FOR_UTF8);
      if(data->utf8_cd == (iconv_t)-1) {
        error = ERRNO;
        failf(data,
              "The iconv_open(\"%s\", \"%s\") call failed with errno %i: %s",
               CURL_ICONV_CODESET_OF_HOST,
               CURL_ICONV_CODESET_FOR_UTF8,
               errno, strerror(errno));
               error, strerror(error));
        return CURLE_CONV_FAILED;
      }
    }
@@ -884,9 +892,10 @@ CURLcode Curl_convert_from_utf8(struct SessionHandle *data,
    rc = iconv(data->utf8_cd, (const char**)&input_ptr, &in_bytes,
               &output_ptr, &out_bytes);
    if ((rc == ICONV_ERROR) || (in_bytes != 0)) {
      error = ERRNO;
      failf(data,
        "The Curl_convert_from_utf8 iconv call failed with errno %i: %s",
             errno, strerror(errno));
             error, strerror(error));
      return CURLE_CONV_FAILED;
    }
    if (output_ptr < input_ptr) {
+9 −9
Original line number Diff line number Diff line
@@ -498,7 +498,7 @@ CURLcode Curl_GetFTPResponse(ssize_t *nreadp, /* return number of bytes read */
      case -1: /* select() error, stop reading */
        result = CURLE_RECV_ERROR;
        failf(data, "FTP response aborted due to select() error: %d",
              Curl_sockerrno());
              SOCKERRNO);
        break;
      case 0: /* timeout */
        if(Curl_pgrsUpdate(conn))
@@ -841,7 +841,7 @@ static CURLcode ftp_state_use_port(struct connectdata *conn,
    sslen = sizeof(ss);
    if (getsockname(conn->sock[FIRSTSOCKET], (struct sockaddr *)&ss, &sslen)) {
      failf(data, "getsockname() failed: %s",
          Curl_strerror(conn, Curl_sockerrno()) );
          Curl_strerror(conn, SOCKERRNO) );
      return CURLE_FTP_PORT_FAILED;
    }

@@ -882,7 +882,7 @@ static CURLcode ftp_state_use_port(struct connectdata *conn,

    portsock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
    if (portsock == CURL_SOCKET_BAD) {
      error = Curl_sockerrno();
      error = SOCKERRNO;
      continue;
    }
    break;
@@ -902,7 +902,7 @@ static CURLcode ftp_state_use_port(struct connectdata *conn,
    if (getsockname(conn->sock[FIRSTSOCKET],
                    (struct sockaddr *)sa, &sslen)) {
      failf(data, "getsockname() failed: %s",
          Curl_strerror(conn, Curl_sockerrno()) );
          Curl_strerror(conn, SOCKERRNO) );
      sclose(portsock);
      return CURLE_FTP_PORT_FAILED;
    }
@@ -917,7 +917,7 @@ static CURLcode ftp_state_use_port(struct connectdata *conn,
      sslen = sizeof(ss);

    if(bind(portsock, (struct sockaddr *)sa, sslen)) {
      failf(data, "bind failed: %s", Curl_strerror(conn, Curl_sockerrno()));
      failf(data, "bind failed: %s", Curl_strerror(conn, SOCKERRNO));
      sclose(portsock);
      return CURLE_FTP_PORT_FAILED;
    }
@@ -928,7 +928,7 @@ static CURLcode ftp_state_use_port(struct connectdata *conn,
  sslen = sizeof(ss);
  if(getsockname(portsock, (struct sockaddr *)sa, &sslen)) {
    failf(data, "getsockname() failed: %s",
          Curl_strerror(conn, Curl_sockerrno()) );
          Curl_strerror(conn, SOCKERRNO) );
    sclose(portsock);
    return CURLE_FTP_PORT_FAILED;
  }
@@ -936,7 +936,7 @@ static CURLcode ftp_state_use_port(struct connectdata *conn,
  /* step 4, listen on the socket */

  if (listen(portsock, 1)) {
    failf(data, "socket failure: %s", Curl_strerror(conn, Curl_sockerrno()));
    failf(data, "socket failure: %s", Curl_strerror(conn, SOCKERRNO));
    sclose(portsock);
    return CURLE_FTP_PORT_FAILED;
  }
@@ -1080,7 +1080,7 @@ static CURLcode ftp_state_use_port(struct connectdata *conn,
    if (getsockname(conn->sock[FIRSTSOCKET],
                    (struct sockaddr *)&sa, &sslen)) {
      failf(data, "getsockname() failed: %s",
          Curl_strerror(conn, Curl_sockerrno()) );
          Curl_strerror(conn, SOCKERRNO) );
      return CURLE_FTP_PORT_FAILED;
    }
    if (sslen > (socklen_t)sizeof(sa))
@@ -1116,7 +1116,7 @@ static CURLcode ftp_state_use_port(struct connectdata *conn,
        if(getsockname(portsock, (struct sockaddr *) &add,
                       &socksize)) {
          failf(data, "getsockname() failed: %s",
            Curl_strerror(conn, Curl_sockerrno()) );
            Curl_strerror(conn, SOCKERRNO) );
          return CURLE_FTP_PORT_FAILED;
        }
        porttouse = ntohs(add.sin_port);
+2 −2
Original line number Diff line number Diff line
@@ -176,7 +176,7 @@ static CURLcode handshake(struct connectdata *conn,
      }
      else {
        /* anything that gets here is fatally bad */
        failf(data, "select on SSL socket, errno: %d", Curl_sockerrno());
        failf(data, "select on SSL socket, errno: %d", SOCKERRNO);
        return CURLE_SSL_CONNECT_ERROR;
      }
    }
@@ -567,7 +567,7 @@ int Curl_gtls_shutdown(struct connectdata *conn, int sockindex)
      }
      else {
        /* anything that gets here is fatally bad */
        failf(data, "select on SSL socket, errno: %d", Curl_sockerrno());
        failf(data, "select on SSL socket, errno: %d", SOCKERRNO);
        retval = -1;
        done = 1;
      }
Loading