From f812b124d700892d965e480d46a536bf35bcd43a Mon Sep 17 00:00:00 2001 From: Marcelo Roberto Jimenez Date: Sun, 10 Feb 2008 02:27:45 +0000 Subject: [PATCH] Merge of trunk into branch-1.6.x. git-svn-id: https://pupnp.svn.sourceforge.net/svnroot/pupnp/branches/branch-1.6.x@324 119443c7-1b9e-41f8-b6fc-b9c35fce742c --- ChangeLog | 4 ++ upnp/src/genlib/miniserver/miniserver.c | 41 +++++++++++-------- upnp/src/ssdp/ssdp_ctrlpt.c | 7 +++- upnp/src/ssdp/ssdp_device.c | 8 +++- upnp/src/ssdp/ssdp_server.c | 54 ++++++++++++------------- 5 files changed, 68 insertions(+), 46 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7ca5af1..b04afe8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,10 @@ Version 1.6.6 ******************************************************************************* +2008-02-10 Marcelo Jimenez + * Changed "sys_errlist[errno]", which is deprecated, by + "strerror_r()", which is thread safe. + 2008-02-06 Marcelo Jimenez * Slightly improved error report by showing the sys_errlist string corresponding to errno. diff --git a/upnp/src/genlib/miniserver/miniserver.c b/upnp/src/genlib/miniserver/miniserver.c index 3d61405..9892f93 100644 --- a/upnp/src/genlib/miniserver/miniserver.c +++ b/upnp/src/genlib/miniserver/miniserver.c @@ -376,8 +376,12 @@ schedule_request_job( IN int connfd, * Return: void ************************************************************************/ static void -RunMiniServer( MiniServerSockArray * miniSock ) +RunMiniServer( MiniServerSockArray *miniSock ) { + // strerror_r() buffer + const int ERROR_BUFFER_LEN = 256; + char errorBuffer[ERROR_BUFFER_LEN]; + struct sockaddr_in clientAddr; socklen_t clientLen; SOCKET connectHnd; @@ -417,9 +421,9 @@ RunMiniServer( MiniServerSockArray * miniSock ) ret = select( maxMiniSock, &rdSet, NULL, &expSet, NULL ); if ( ret == -1 ) { + strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN); UpnpPrintf( UPNP_CRITICAL, SSDP, __FILE__, __LINE__, - "Error in select(): %s\n", - sys_errlist[errno] ); + "Error in select(): %s\n", errorBuffer ); /* Avoid 100% CPU in case of repeated error in select() */ isleep( 1 ); continue; @@ -429,9 +433,9 @@ RunMiniServer( MiniServerSockArray * miniSock ) connectHnd = accept( miniServSock, ( struct sockaddr * )&clientAddr, &clientLen ); if( connectHnd == -1 ) { + strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN); UpnpPrintf( UPNP_INFO, MSERV, __FILE__, __LINE__, - "miniserver: Error in accept(): %s\n", - sys_errlist[errno] ); + "miniserver: Error in accept(): %s\n", errorBuffer ); continue; } schedule_request_job( connectHnd, &clientAddr ); @@ -546,6 +550,10 @@ int get_miniserver_sockets( MiniServerSockArray * out, unsigned short listen_port ) { + // strerror_r() buffer + const int ERROR_BUFFER_LEN = 256; + char errorBuffer[ERROR_BUFFER_LEN]; + struct sockaddr_in serverAddr; int listenfd; int success; @@ -613,9 +621,9 @@ get_miniserver_sockets( MiniServerSockArray * out, } if ( sockError == -1 ) { + strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN); UpnpPrintf( UPNP_INFO, MSERV, __FILE__, __LINE__, - "mserv start: Error in bind(): %s\n", - sys_errlist[errno] ); + "mserv start: Error in bind(): %s\n", errorBuffer ); shutdown( listenfd, SD_BOTH ); UpnpCloseSocket( listenfd ); @@ -627,9 +635,9 @@ get_miniserver_sockets( MiniServerSockArray * out, success = listen( listenfd, SOMAXCONN ); if ( success == -1 ) { + strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN); UpnpPrintf( UPNP_INFO, MSERV, __FILE__, __LINE__, - "mserv start: Error in listen(): %s\n", - sys_errlist[errno] ); + "mserv start: Error in listen(): %s\n", errorBuffer ); shutdown( listenfd, SD_BOTH ); UpnpCloseSocket( listenfd ); @@ -648,10 +656,9 @@ get_miniserver_sockets( MiniServerSockArray * out, miniServerStopSock = socket( AF_INET, SOCK_DGRAM, 0 ); if ( miniServerStopSock == -1 ) { - UpnpPrintf( UPNP_CRITICAL, - MSERV, __FILE__, __LINE__, - "Error in socket(): %s\n", - sys_errlist[errno] ); + strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN); + UpnpPrintf( UPNP_CRITICAL, MSERV, __FILE__, __LINE__, + "Error in socket(): %s\n", errorBuffer ); shutdown( listenfd, SD_BOTH ); UpnpCloseSocket( listenfd ); @@ -691,7 +698,6 @@ get_miniserver_sockets( MiniServerSockArray * out, out->miniServerStopSock = miniServerStopSock; return UPNP_E_SUCCESS; - } /************************************************************************ @@ -811,6 +817,9 @@ StartMiniServer( unsigned short listen_port ) int StopMiniServer() { + // strerror_r() buffer + const int ERROR_BUFFER_LEN = 256; + char errorBuffer[ERROR_BUFFER_LEN]; int socklen = sizeof( struct sockaddr_in ); int sock; @@ -826,9 +835,9 @@ StopMiniServer() sock = socket( AF_INET, SOCK_DGRAM, 0 ); if ( sock == -1 ) { + strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN); UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__, - "SSDP_SERVER: StopSSDPServer: Error in socket() %s\n", - sys_errlist[errno] ); + "SSDP_SERVER: StopSSDPServer: Error in socket() %s\n", errorBuffer ); return 0; } diff --git a/upnp/src/ssdp/ssdp_ctrlpt.c b/upnp/src/ssdp/ssdp_ctrlpt.c index 9bdf54b..9be7fad 100644 --- a/upnp/src/ssdp/ssdp_ctrlpt.c +++ b/upnp/src/ssdp/ssdp_ctrlpt.c @@ -514,6 +514,10 @@ SearchByTarget( IN int Mx, IN char *St, IN void *Cookie ) { + // strerror_r() buffer + const int ERROR_BUFFER_LEN = 256; + char errorBuffer[ERROR_BUFFER_LEN]; + int socklen = sizeof( struct sockaddr_in ); int *id = NULL; int ret = 0; @@ -591,9 +595,10 @@ SearchByTarget( IN int Mx, ret = select( gSsdpReqSocket + 1, NULL, &wrSet, NULL, NULL ); if( ret == -1 ) { + strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN); UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__, "SSDP_LIB: Error in select(): %s\n", - sys_errlist[errno] ); + errorBuffer ); shutdown( gSsdpReqSocket, SD_BOTH ); UpnpCloseSocket( gSsdpReqSocket ); free( ReqBuf ); diff --git a/upnp/src/ssdp/ssdp_device.c b/upnp/src/ssdp/ssdp_device.c index 7e9d314..6c9275d 100644 --- a/upnp/src/ssdp/ssdp_device.c +++ b/upnp/src/ssdp/ssdp_device.c @@ -213,6 +213,10 @@ NewRequestHandler( IN struct sockaddr_in *DestAddr, IN int NumPacket, IN char **RqPacket ) { + // strerror_r() buffer + const int ERROR_BUFFER_LEN = 256; + char errorBuffer[ERROR_BUFFER_LEN]; + int ReplySock; int socklen = sizeof( struct sockaddr_in ); int NumCopy; @@ -222,10 +226,10 @@ NewRequestHandler( IN struct sockaddr_in *DestAddr, ReplySock = socket( AF_INET, SOCK_DGRAM, 0 ); if ( ReplySock == -1 ) { + strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN); UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__, "SSDP_LIB: New Request Handler:" - "Error in socket(): %s\n", - sys_errlist[errno] ); + "Error in socket(): %s\n", errorBuffer ); return UPNP_E_OUTOF_SOCKET; } diff --git a/upnp/src/ssdp/ssdp_server.c b/upnp/src/ssdp/ssdp_server.c index 44d6011..d3667ea 100644 --- a/upnp/src/ssdp/ssdp_server.c +++ b/upnp/src/ssdp/ssdp_server.c @@ -856,6 +856,10 @@ readFromSSDPSocket( SOCKET socket ) int get_ssdp_sockets( MiniServerSockArray * out ) { + // strerror_r() buffer + const int ERROR_BUFFER_LEN = 256; + char errorBuffer[ERROR_BUFFER_LEN]; + int onOff = 1; u_char ttl = 4; struct ip_mreq ssdpMcastAddr; @@ -869,10 +873,9 @@ get_ssdp_sockets( MiniServerSockArray * out ) ssdpReqSock = socket( AF_INET, SOCK_DGRAM, 0 ); if ( ssdpReqSock == -1 ) { - UpnpPrintf( UPNP_CRITICAL, - SSDP, __FILE__, __LINE__, - "Error in socket(): %s\n", - sys_errlist[errno] ); + strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN); + UpnpPrintf( UPNP_CRITICAL, SSDP, __FILE__, __LINE__, + "Error in socket(): %s\n", errorBuffer ); return UPNP_E_OUTOF_SOCKET; } @@ -885,10 +888,9 @@ get_ssdp_sockets( MiniServerSockArray * out ) ssdpSock = socket( AF_INET, SOCK_DGRAM, 0 ); if ( ssdpSock == -1 ) { - UpnpPrintf( UPNP_CRITICAL, - SSDP, __FILE__, __LINE__, - "Error in socket(): %s\n", - sys_errlist[errno] ); + strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN); + UpnpPrintf( UPNP_CRITICAL, SSDP, __FILE__, __LINE__, + "Error in socket(): %s\n", errorBuffer ); CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ); ) CLIENTONLY( UpnpCloseSocket( ssdpReqSock ); ) @@ -899,10 +901,9 @@ get_ssdp_sockets( MiniServerSockArray * out ) ret = setsockopt( ssdpSock, SOL_SOCKET, SO_REUSEADDR, (char *)&onOff, sizeof(onOff) ); if ( ret == -1) { - UpnpPrintf( UPNP_CRITICAL, - SSDP, __FILE__, __LINE__, - "Error in setsockopt() SO_REUSEADDR: %s\n", - sys_errlist[errno] ); + strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN); + UpnpPrintf( UPNP_CRITICAL, SSDP, __FILE__, __LINE__, + "Error in setsockopt() SO_REUSEADDR: %s\n", errorBuffer ); CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ); ) CLIENTONLY( UpnpCloseSocket( ssdpReqSock ); ) shutdown( ssdpSock, SD_BOTH ); @@ -915,10 +916,9 @@ get_ssdp_sockets( MiniServerSockArray * out ) ret = setsockopt( ssdpSock, SOL_SOCKET, SO_REUSEPORT, (char *)&onOff, sizeof (onOff) ); if ( ret == -1 ) { - UpnpPrintf( UPNP_CRITICAL, - SSDP, __FILE__, __LINE__, - "Error in setsockopt() SO_REUSEPORT: %s\n", - sys_errlist[errno] ); + strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN); + UpnpPrintf( UPNP_CRITICAL, SSDP, __FILE__, __LINE__, + "Error in setsockopt() SO_REUSEPORT: %s\n", errorBuffer ); CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ); ) CLIENTONLY( UpnpCloseSocket( ssdpReqSock ); ) shutdown( ssdpSock, SD_BOTH ); @@ -935,11 +935,10 @@ get_ssdp_sockets( MiniServerSockArray * out ) ssdpAddr.sin_port = htons( SSDP_PORT ); ret = bind( ssdpSock, (struct sockaddr *)&ssdpAddr, sizeof (ssdpAddr) ); if ( ret == -1 ) { - UpnpPrintf( UPNP_CRITICAL, - SSDP, __FILE__, __LINE__, + strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN); + UpnpPrintf( UPNP_CRITICAL, SSDP, __FILE__, __LINE__, "Error in bind(), addr=0x%08X, port=%d: %s\n", - INADDR_ANY, SSDP_PORT, - sys_errlist[errno] ); + INADDR_ANY, SSDP_PORT, errorBuffer ); shutdown( ssdpSock, SD_BOTH ); UpnpCloseSocket( ssdpSock ); CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ); ) @@ -954,10 +953,10 @@ get_ssdp_sockets( MiniServerSockArray * out ) ret = setsockopt( ssdpSock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&ssdpMcastAddr, sizeof (struct ip_mreq) ); if ( ret == -1 ) { - UpnpPrintf( UPNP_CRITICAL, - SSDP, __FILE__, __LINE__, + strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN); + UpnpPrintf( UPNP_CRITICAL, SSDP, __FILE__, __LINE__, "Error in setsockopt() IP_ADD_MEMBERSHIP (join multicast group): %s\n", - sys_errlist[errno] ); + errorBuffer ); shutdown( ssdpSock, SD_BOTH ); CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ); ) UpnpCloseSocket( ssdpSock ); @@ -972,9 +971,10 @@ get_ssdp_sockets( MiniServerSockArray * out ) ret = setsockopt(ssdpSock, IPPROTO_IP, IP_MULTICAST_IF, (char *)&addr, sizeof addr); if ( ret == -1 ) { + strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN); UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__, "Error in setsockopt() IP_MULTICAST_IF (set multicast interface): %s\n", - sys_errlist[errno] ); + errorBuffer ); /* This is probably not a critical error, so let's continue. */ } @@ -985,10 +985,10 @@ get_ssdp_sockets( MiniServerSockArray * out ) ret = setsockopt( ssdpSock, SOL_SOCKET, SO_BROADCAST, (char *)&option, sizeof (option) ); if( ret == -1) { - UpnpPrintf( UPNP_CRITICAL, - SSDP, __FILE__, __LINE__, + strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN); + UpnpPrintf( UPNP_CRITICAL, SSDP, __FILE__, __LINE__, "Error in setsockopt() SO_BROADCAST (set broadcast): %s\n", - sys_errlist[errno] ); + errorBuffer ); shutdown( ssdpSock, SD_BOTH ); CLIENTONLY( shutdown( ssdpReqSock, SD_BOTH ); ) UpnpCloseSocket( ssdpSock );