Hi Robert,

At 13.12 11/03/2003, Robert Collins wrote:

On Tue, 2003-03-11 at 22:42, Guido Serassio wrote:
> Hi,
>
> I have found a new build problem trying to build the nt branch:
>
> comm.cc:57:18: macro "connect" requires 3 arguments, but only 1 given
> comm.cc:57: variable or field `connect' declared void
...
> #define connect(s,n,l) squid_connect(s,n,l)

Yep, defines are generally evil and prone to breakage.

I take it that you need to replace calls to ::connect(a,b,c) in the
squid code with a call to :: squid_connect (a,b,c) ?

Correct.


Well, one answer is:
namespace Squid {
inline int connect (s,n,l) {return squid_connect(s,n,l);}
};
(pesudoish code).

So, for example, in squid-mswin.h connect will be:


namespace Squid {

inline
int connect(int s, const struct sockaddr * n, int l)
{
    if (::connect(_get_osfhandle(s),n,l) == SOCKET_ERROR) {
        if (WSAEMFILE == (errno = WSAGetLastError()))
            errno = EMFILE;
        return -1;
    }
    else
        return 0;
}

(I think that other similar functions comes here too)

};

Then, in squid.h, add :
'using namespace Squid;

What this does is makes unguarded calls to a global connect(a,b,c) use
that inline function. Calls that need the original connect can use
::connect(a,b,c).

OK, but there is some risk of future namespace conflicts, aka a "Squid" namespace will be safe ? or it will be better something like a Squid_MSWIN namespace ?


Regards

Guido



-
=======================================================
Serassio Guido
Via Albenga, 11/4                                       10134 - Torino - ITALY
E-mail: [EMAIL PROTECTED]
WWW: http://www.serassio.it

Reply via email to