Fixed a problem in GAddress related to CHECK_ADDRESS macro
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6775 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
80629c8bf6
commit
032d558182
@ -1015,22 +1015,38 @@ int _GSocket_Send_Dgram(GSocket *socket, const char *buffer, int size)
|
||||
* -------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/* CHECK_ADDRESS verifies that the current family is either GSOCK_NOFAMILY
|
||||
* or GSOCK_*family*, and if it is GSOCK_NOFAMILY, it initalizes address
|
||||
* to be a GSOCK_*family*. In other cases, it returns GSOCK_INVADDR.
|
||||
/* CHECK_ADDRESS verifies that the current address family is either
|
||||
* GSOCK_NOFAMILY or GSOCK_*family*, and if it is GSOCK_NOFAMILY, it
|
||||
* initalizes it to be a GSOCK_*family*. In other cases, it returns
|
||||
* an appropiate error code.
|
||||
*
|
||||
* CHECK_ADDRESS_RETVAL does the same but returning 'retval' on error.
|
||||
*/
|
||||
#define CHECK_ADDRESS(address, family, retval) \
|
||||
#define CHECK_ADDRESS(address, family) \
|
||||
{ \
|
||||
if (address->m_family == GSOCK_NOFAMILY) \
|
||||
if (_GAddress_Init_##family(address) != GSOCK_NOERROR) \
|
||||
return address->m_error; \
|
||||
if (address->m_family != GSOCK_##family) \
|
||||
{ \
|
||||
address->m_error = GSOCK_INVADDR; \
|
||||
return GSOCK_INVADDR; \
|
||||
} \
|
||||
}
|
||||
|
||||
#define CHECK_ADDRESS_RETVAL(address, family, retval) \
|
||||
{ \
|
||||
if (address->m_family == GSOCK_NOFAMILY) \
|
||||
if (_GAddress_Init_##family(address) != GSOCK_NOERROR) \
|
||||
return retval; \
|
||||
if (address->m_family != GSOCK_##family) \
|
||||
{ \
|
||||
address->m_error = GSOCK_INVADDR; \
|
||||
return retval; \
|
||||
} \
|
||||
}
|
||||
|
||||
|
||||
GAddress *GAddress_new(void)
|
||||
{
|
||||
GAddress *address;
|
||||
@ -1186,7 +1202,7 @@ GSocketError GAddress_INET_SetHostName(GAddress *address, const char *hostname)
|
||||
|
||||
assert(address != NULL);
|
||||
|
||||
CHECK_ADDRESS(address, INET, GSOCK_INVADDR);
|
||||
CHECK_ADDRESS(address, INET);
|
||||
|
||||
addr = &(((struct sockaddr_in *)address->m_addr)->sin_addr);
|
||||
|
||||
@ -1222,7 +1238,7 @@ GSocketError GAddress_INET_SetHostAddress(GAddress *address,
|
||||
|
||||
assert(address != NULL);
|
||||
|
||||
CHECK_ADDRESS(address, INET, GSOCK_INVADDR);
|
||||
CHECK_ADDRESS(address, INET);
|
||||
|
||||
addr = &(((struct sockaddr_in *)address->m_addr)->sin_addr);
|
||||
addr->s_addr = hostaddr;
|
||||
@ -1237,7 +1253,7 @@ GSocketError GAddress_INET_SetPortName(GAddress *address, const char *port,
|
||||
struct sockaddr_in *addr;
|
||||
|
||||
assert(address != NULL);
|
||||
CHECK_ADDRESS(address, INET, GSOCK_INVADDR);
|
||||
CHECK_ADDRESS(address, INET);
|
||||
|
||||
if (!port)
|
||||
{
|
||||
@ -1273,7 +1289,7 @@ GSocketError GAddress_INET_SetPort(GAddress *address, unsigned short port)
|
||||
struct sockaddr_in *addr;
|
||||
|
||||
assert(address != NULL);
|
||||
CHECK_ADDRESS(address, INET, GSOCK_INVADDR);
|
||||
CHECK_ADDRESS(address, INET);
|
||||
|
||||
addr = (struct sockaddr_in *)address->m_addr;
|
||||
addr->sin_port = htons(port);
|
||||
@ -1288,7 +1304,7 @@ GSocketError GAddress_INET_GetHostName(GAddress *address, char *hostname, size_t
|
||||
struct sockaddr_in *addr;
|
||||
|
||||
assert(address != NULL);
|
||||
CHECK_ADDRESS(address, INET, GSOCK_INVADDR);
|
||||
CHECK_ADDRESS(address, INET);
|
||||
|
||||
addr = (struct sockaddr_in *)address->m_addr;
|
||||
addr_buf = (char *)&(addr->sin_addr);
|
||||
@ -1310,7 +1326,7 @@ unsigned long GAddress_INET_GetHostAddress(GAddress *address)
|
||||
struct sockaddr_in *addr;
|
||||
|
||||
assert(address != NULL);
|
||||
CHECK_ADDRESS(address, INET, 0);
|
||||
CHECK_ADDRESS_RETVAL(address, INET, 0);
|
||||
|
||||
addr = (struct sockaddr_in *)address->m_addr;
|
||||
|
||||
@ -1322,7 +1338,7 @@ unsigned short GAddress_INET_GetPort(GAddress *address)
|
||||
struct sockaddr_in *addr;
|
||||
|
||||
assert(address != NULL);
|
||||
CHECK_ADDRESS(address, INET, 0);
|
||||
CHECK_ADDRESS_RETVAL(address, INET, 0);
|
||||
|
||||
addr = (struct sockaddr_in *)address->m_addr;
|
||||
return ntohs(addr->sin_port);
|
||||
|
@ -115,10 +115,10 @@ struct sockaddr_un {
|
||||
|
||||
/* debugging helpers */
|
||||
#ifdef __GSOCKET_DEBUG__
|
||||
#define GSocket_Debug(args) printf args
|
||||
# define GSocket_Debug(args) printf args
|
||||
#else
|
||||
#define GSocket_Debug(args)
|
||||
#endif // __GSOCKET_DEBUG__
|
||||
# define GSocket_Debug(args)
|
||||
#endif /* __GSOCKET_DEBUG__ */
|
||||
|
||||
/* Global initialisers */
|
||||
|
||||
@ -1242,22 +1242,38 @@ void _GSocket_Detected_Write(GSocket *socket)
|
||||
* -------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/* CHECK_ADDRESS verifies that the current family is either GSOCK_NOFAMILY
|
||||
* or GSOCK_*family*, and if it is GSOCK_NOFAMILY, it initalizes address
|
||||
* to be a GSOCK_*family*. In other cases, it returns GSOCK_INVADDR.
|
||||
/* CHECK_ADDRESS verifies that the current address family is either
|
||||
* GSOCK_NOFAMILY or GSOCK_*family*, and if it is GSOCK_NOFAMILY, it
|
||||
* initalizes it to be a GSOCK_*family*. In other cases, it returns
|
||||
* an appropiate error code.
|
||||
*
|
||||
* CHECK_ADDRESS_RETVAL does the same but returning 'retval' on error.
|
||||
*/
|
||||
#define CHECK_ADDRESS(address, family, retval) \
|
||||
#define CHECK_ADDRESS(address, family) \
|
||||
{ \
|
||||
if (address->m_family == GSOCK_NOFAMILY) \
|
||||
if (_GAddress_Init_##family(address) != GSOCK_NOERROR) \
|
||||
return address->m_error; \
|
||||
if (address->m_family != GSOCK_##family) \
|
||||
{ \
|
||||
address->m_error = GSOCK_INVADDR; \
|
||||
return GSOCK_INVADDR; \
|
||||
} \
|
||||
}
|
||||
|
||||
#define CHECK_ADDRESS_RETVAL(address, family, retval) \
|
||||
{ \
|
||||
if (address->m_family == GSOCK_NOFAMILY) \
|
||||
if (_GAddress_Init_##family(address) != GSOCK_NOERROR) \
|
||||
return retval; \
|
||||
if (address->m_family != GSOCK_##family) \
|
||||
{ \
|
||||
address->m_error = GSOCK_INVADDR; \
|
||||
return retval; \
|
||||
} \
|
||||
}
|
||||
|
||||
|
||||
GAddress *GAddress_new(void)
|
||||
{
|
||||
GAddress *address;
|
||||
@ -1372,7 +1388,8 @@ GSocketError _GAddress_translate_to(GAddress *address,
|
||||
|
||||
*len = address->m_len;
|
||||
*addr = (struct sockaddr *)malloc(address->m_len);
|
||||
if (*addr == NULL) {
|
||||
if (*addr == NULL)
|
||||
{
|
||||
address->m_error = GSOCK_MEMERR;
|
||||
return GSOCK_MEMERR;
|
||||
}
|
||||
@ -1412,7 +1429,7 @@ GSocketError GAddress_INET_SetHostName(GAddress *address, const char *hostname)
|
||||
|
||||
assert(address != NULL);
|
||||
|
||||
CHECK_ADDRESS(address, INET, GSOCK_INVADDR);
|
||||
CHECK_ADDRESS(address, INET);
|
||||
|
||||
addr = &(((struct sockaddr_in *)address->m_addr)->sin_addr);
|
||||
|
||||
@ -1456,7 +1473,7 @@ GSocketError GAddress_INET_SetHostAddress(GAddress *address,
|
||||
|
||||
assert(address != NULL);
|
||||
|
||||
CHECK_ADDRESS(address, INET, GSOCK_INVADDR);
|
||||
CHECK_ADDRESS(address, INET);
|
||||
|
||||
addr = &(((struct sockaddr_in *)address->m_addr)->sin_addr);
|
||||
addr->s_addr = hostaddr;
|
||||
@ -1471,7 +1488,7 @@ GSocketError GAddress_INET_SetPortName(GAddress *address, const char *port,
|
||||
struct sockaddr_in *addr;
|
||||
|
||||
assert(address != NULL);
|
||||
CHECK_ADDRESS(address, INET, GSOCK_INVADDR);
|
||||
CHECK_ADDRESS(address, INET);
|
||||
|
||||
if (!port)
|
||||
{
|
||||
@ -1507,7 +1524,7 @@ GSocketError GAddress_INET_SetPort(GAddress *address, unsigned short port)
|
||||
struct sockaddr_in *addr;
|
||||
|
||||
assert(address != NULL);
|
||||
CHECK_ADDRESS(address, INET, GSOCK_INVADDR);
|
||||
CHECK_ADDRESS(address, INET);
|
||||
|
||||
addr = (struct sockaddr_in *)address->m_addr;
|
||||
addr->sin_port = htons(port);
|
||||
@ -1522,7 +1539,7 @@ GSocketError GAddress_INET_GetHostName(GAddress *address, char *hostname, size_t
|
||||
struct sockaddr_in *addr;
|
||||
|
||||
assert(address != NULL);
|
||||
CHECK_ADDRESS(address, INET, GSOCK_INVADDR);
|
||||
CHECK_ADDRESS(address, INET);
|
||||
|
||||
addr = (struct sockaddr_in *)address->m_addr;
|
||||
addr_buf = (char *)&(addr->sin_addr);
|
||||
@ -1544,7 +1561,7 @@ unsigned long GAddress_INET_GetHostAddress(GAddress *address)
|
||||
struct sockaddr_in *addr;
|
||||
|
||||
assert(address != NULL);
|
||||
CHECK_ADDRESS(address, INET, 0);
|
||||
CHECK_ADDRESS_RETVAL(address, INET, 0);
|
||||
|
||||
addr = (struct sockaddr_in *)address->m_addr;
|
||||
|
||||
@ -1556,7 +1573,7 @@ unsigned short GAddress_INET_GetPort(GAddress *address)
|
||||
struct sockaddr_in *addr;
|
||||
|
||||
assert(address != NULL);
|
||||
CHECK_ADDRESS(address, INET, 0);
|
||||
CHECK_ADDRESS_RETVAL(address, INET, 0);
|
||||
|
||||
addr = (struct sockaddr_in *)address->m_addr;
|
||||
return ntohs(addr->sin_port);
|
||||
@ -1583,7 +1600,7 @@ GSocketError _GAddress_Init_UNIX(GAddress *address)
|
||||
((struct sockaddr_un *)address->m_addr)->sun_family = AF_UNIX;
|
||||
((struct sockaddr_un *)address->m_addr)->sun_path[0] = 0;
|
||||
|
||||
return TRUE;
|
||||
return GSOCK_NOERROR;
|
||||
}
|
||||
|
||||
GSocketError GAddress_UNIX_SetPath(GAddress *address, const char *path)
|
||||
@ -1592,7 +1609,7 @@ GSocketError GAddress_UNIX_SetPath(GAddress *address, const char *path)
|
||||
|
||||
assert(address != NULL);
|
||||
|
||||
CHECK_ADDRESS(address, UNIX, GSOCK_INVADDR);
|
||||
CHECK_ADDRESS(address, UNIX);
|
||||
|
||||
addr = ((struct sockaddr_un *)address->m_addr);
|
||||
memcpy(addr->sun_path, path, strlen(path));
|
||||
@ -1605,7 +1622,7 @@ GSocketError GAddress_UNIX_GetPath(GAddress *address, char *path, size_t sbuf)
|
||||
struct sockaddr_un *addr;
|
||||
|
||||
assert(address != NULL);
|
||||
CHECK_ADDRESS(address, UNIX, GSOCK_INVADDR);
|
||||
CHECK_ADDRESS(address, UNIX);
|
||||
|
||||
addr = (struct sockaddr_un *)address->m_addr;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user