[ 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]