[ 
http://issues.apache.org/jira/browse/XERCESC-1331?page=comments#action_58425 ]
     
Jesse Pelton commented on XERCESC-1331:
---------------------------------------

Why is an unnamed namespace better?  My understanding is that this is precisely 
what external static declarations have always been for.  From K&R (1978):

"External static variables and functions provide a way to conceal data objects 
and any internal routines that manipulate them so that other routines and data 
cannot conflict even inadvertantly."

Now, there's been a lot of water under the bridge since then, and perhaps 
there's a better way now.  Still, this seems like a simple, clear, and correct 
application of a universally supported language feature to address a problem.  
(Last I knew, Xerces still worked with compilers that don't support namespaces, 
though I don't know if any such are still in use.)

> Globals intended for use in a single file should be static
> ----------------------------------------------------------
>
>          Key: XERCESC-1331
>          URL: http://issues.apache.org/jira/browse/XERCESC-1331
>      Project: Xerces-C++
>         Type: Bug
>     Versions: 2.5.0, 2.6.0
>  Environment: Win32, Visual Studio .NET 2003, static library
>     Reporter: Jesse Pelton
>     Priority: Minor

>
> util/NetAccessors/WinSock/BinHTTPURLInputStream.cpp declares and uses several 
> global variables.  These variables do not appear to be intended to be visible 
> outside the module.  If this is the case, they should be declared static.
> I bumped into this when trying to build the Apache XML Security code with a) 
> Xerces namespace support disabled and b) a statically linked Xerces library.  
> XML Security has a modified version of the BinHTTPURLInputStream class, 
> including copies of the offending globals.  This results in warnings from the 
> linker when it detects that the globals are multiply defined.  They should 
> fix their end, too (I'll file a report there, too), but the Xerces code 
> should correctly declare its intent as well.
> Changing util/NetAccessors/WinSock/BinHTTPURLInputStream.cpp is simple.  The 
> following lines need "static " inserted at the beginning:
> HMODULE gWinsockLib = NULL;
> LPFN_GETHOSTBYNAME gWSgethostbyname = NULL;
> LPFN_INET_ADDR gWSinet_addr = NULL;
> LPFN_GETHOSTBYADDR gWSgethostbyaddr = NULL;
> LPFN_HTONS gWShtons = NULL;
> LPFN_SOCKET gWSsocket = NULL;
> LPFN_CONNECT gWSconnect = NULL;
> LPFN_SEND gWSsend = NULL;
> LPFN_RECV gWSrecv = NULL;
> LPFN_SHUTDOWN gWSshutdown = NULL;
> LPFN_CLOSESOCKET gWSclosesocket = NULL;
> LPFN_WSACLEANUP gWSACleanup = NULL;
> The result:
> static HMODULE gWinsockLib = NULL;
> static LPFN_GETHOSTBYNAME gWSgethostbyname = NULL;
> static LPFN_INET_ADDR gWSinet_addr = NULL;
> static LPFN_GETHOSTBYADDR gWSgethostbyaddr = NULL;
> static LPFN_HTONS gWShtons = NULL;
> static LPFN_SOCKET gWSsocket = NULL;
> static LPFN_CONNECT gWSconnect = NULL;
> static LPFN_SEND gWSsend = NULL;
> static LPFN_RECV gWSrecv = NULL;
> static LPFN_SHUTDOWN gWSshutdown = NULL;
> static LPFN_CLOSESOCKET gWSclosesocket = NULL;
> static LPFN_WSACLEANUP gWSACleanup = NULL;

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to