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:
Guillermo Rodriguez Garcia 2000-03-16 20:46:52 +00:00
parent 80629c8bf6
commit 032d558182
2 changed files with 62 additions and 29 deletions

View File

@ -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);

View File

@ -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;