FaxClient::recvData(bool (*f)(void*, const char*, int, fxStr&),
void* arg, fxStr& emsg, u_long restart, const char* fmt, ...)
{
- if (!setMode(MODE_S))
- goto bad;
- if (!initDataConn(emsg))
- goto bad;
- if (restart && command("REST %lu", restart) != CONTINUE)
- goto bad;
+ if ((!setMode(MODE_S)) ||
+ (!initDataConn(emsg)) ||
+ (restart && command("REST %lu", restart) != CONTINUE)) {
+ // cannot "goto bad" because it is outside the scope of a va_arg
+ closeDataConn();
+ return (false);
+ }
va_list ap;
va_start(ap, fmt);
int r; r = vcommand(fmt, ap);
zstream.opaque = NULL;
zstream.data_type = Z_BINARY;
if (inflateInit(&zstream) == Z_OK) {
- if (!setMode(MODE_Z))
- goto bad;
- if (!initDataConn(emsg))
- goto bad;
- if (restart && command("REST %lu", restart) != CONTINUE)
- goto bad;
+ if ((!setMode(MODE_Z)) ||
+ (!initDataConn(emsg)) ||
+ (restart && command("REST %lu", restart) != CONTINUE)) {
+ // cannot "goto bad" because it is outside the scope of a va_arg
+ closeDataConn();
+ inflateEnd(&zstream);
+ return (false);
+ }
va_list ap;
va_start(ap, fmt);
int r; r = vcommand(fmt, ap); // XXX for __GNUC__
class Socket {
public:
static int accept(int s, void* addr, socklen_t* addrlen);
- static int bind(int s, const void* addr, int addrlen);
- static int connect(int s, const void* addr, int addrlen);
+ static int bind(int s, const void* addr, socklen_t addrlen);
+ static int connect(int s, const void* addr, socklen_t addrlen);
static int getpeername(int s, void* name, socklen_t* namelen);
static int getsockname(int s, void* name, socklen_t* namelen);
- static int setsockopt(int s, int level, int oname, const void* oval, int olen);
+ static int setsockopt(int s, int level, int oname, const void* oval, socklen_t olen);
static struct hostent* gethostbyname(const char* name);
};
#endif
}
-inline int Socket::bind(int s, const void* addr, int addrlen)
+inline int Socket::bind(int s, const void* addr, socklen_t addrlen)
{
return ::bind(s, (const struct sockaddr*) addr, addrlen);
}
-inline int Socket::connect(int s, const void* addr, int addrlen)
+inline int Socket::connect(int s, const void* addr, socklen_t addrlen)
{
return ::connect(s, (const struct sockaddr*) addr, addrlen);
}
#endif
}
-inline int Socket::setsockopt(int s, int level, int oname, const void* oval, int olen)
+inline int Socket::setsockopt(int s, int level, int oname, const void* oval, socklen_t olen)
{
return ::setsockopt(s, level, oname, (const char*) oval, olen);
}