rpms/live555/devel live-getaddrinfo.patch, NONE, 1.1 live-inet_ntop.patch, NONE, 1.1 live-uselocale.patch, NONE, 1.1 live555.spec, 1.9, 1.10

Nicolas Chauvet kwizart at rpmfusion.org
Sat May 1 17:16:56 CEST 2010


Author: kwizart

Update of /cvs/free/rpms/live555/devel
In directory se02.es.rpmfusion.net:/tmp/cvs-serv6991

Modified Files:
	live555.spec 
Added Files:
	live-getaddrinfo.patch live-inet_ntop.patch 
	live-uselocale.patch 
Log Message:
- Update to 2010.04.09
- Add patches from Rémi Denis-Courmont - provided as GPLv2+
- Distribute live555 as GPLv2+


live-getaddrinfo.patch:
 GroupsockHelper.cpp |   20 ++++++++++-------
 NetAddress.cpp      |   60 ++++++++++++++++++++++++----------------------------
 inet.c              |   10 --------
 3 files changed, 40 insertions(+), 50 deletions(-)

--- NEW FILE live-getaddrinfo.patch ---
Copyright (C) 2010 Rémi Denis-Courmont.
Licensed under GNU General Public License version 2 or higher.
diff -ru live.orig//groupsock/GroupsockHelper.cpp live//groupsock/GroupsockHelper.cpp
--- live.orig//groupsock/GroupsockHelper.cpp	2010-04-09 22:27:39.000000000 +0300
+++ live//groupsock/GroupsockHelper.cpp	2010-04-17 20:18:11.000000000 +0300
@@ -625,25 +625,29 @@
 #include <hostLib.h>
       if (ERROR == (ourAddress = hostGetByName( hostname ))) break;
 #else
-      struct hostent* hstent
-	= (struct hostent*)gethostbyname(hostname);
-      if (hstent == NULL || hstent->h_length != 4) {
-	env.setResultErrMsg("initial gethostbyname() failed");
+      struct addrinfo hints, *res;
+      memset(&hints, 0, sizeof(hints));
+      hints.ai_family = AF_INET;
+      hints.ai_socktype = SOCK_DGRAM;
+      hints.ai_protocol = IPPROTO_UDP;
+      if (getaddrinfo(hostname, NULL, &hints, &res)) {
+	env.setResultErrMsg("initial getaddrinfo() failed");
 	break;
       }
       // Take the first address that's not bad
       // (This code, like many others, won't handle IPv6)
       netAddressBits addr = 0;
-      for (unsigned i = 0; ; ++i) {
-	char* addrPtr = hstent->h_addr_list[i];
-	if (addrPtr == NULL) break;
+      for (const struct addrinfo *p = res; p; p = p->ai_next) {
+        const struct in_addr in =
+          ((const struct sockaddr_in *)p->ai_addr)->sin_addr;
 
-	netAddressBits a = *(netAddressBits*)addrPtr;
+	netAddressBits a = in.s_addr;
 	if (!badAddress(a)) {
 	  addr = a;
 	  break;
 	}
       }
+      freeaddrinfo(res);
       if (addr != 0) {
 	fromAddr.sin_addr.s_addr = addr;
       } else {
diff -ru live.orig//groupsock/inet.c live//groupsock/inet.c
--- live.orig//groupsock/inet.c	2010-04-09 22:27:39.000000000 +0300
+++ live//groupsock/inet.c	2010-04-17 20:14:07.000000000 +0300
@@ -83,16 +83,6 @@
 #define NULL 0
 #endif
 
-#if !defined(VXWORKS)
-struct hostent* our_gethostbyname(name)
-     char* name;
-{
-	if (!initializeWinsockIfNecessary()) return NULL;
-
-	return (struct hostent*) gethostbyname(name);
-}
-#endif
-
 #ifndef USE_OUR_RANDOM
 /* Use the system-supplied "random()" and "srandom()" functions */
 #include <stdlib.h>
diff -ru live.orig//groupsock/NetAddress.cpp live//groupsock/NetAddress.cpp
--- live.orig//groupsock/NetAddress.cpp	2010-04-09 22:27:39.000000000 +0300
+++ live//groupsock/NetAddress.cpp	2010-04-17 20:13:29.000000000 +0300
@@ -83,15 +83,12 @@
 
 NetAddressList::NetAddressList(char const* hostname)
   : fNumAddresses(0), fAddressArray(NULL) {
-    struct hostent* host;
+
+    struct addrinfo *res;
 
     // Check first whether "hostname" is an IP address string:
     netAddressBits addr = our_inet_addr((char*)hostname);
     if (addr != INADDR_NONE) { // yes it was an IP address string
-      //##### host = gethostbyaddr((char*)&addr, sizeof (netAddressBits), AF_INET);
-      host = NULL; // don't bother calling gethostbyaddr(); we only want 1 addr
-
-      if (host == NULL) {
 	// For some unknown reason, gethostbyaddr() failed, so just
 	// return a 1-element list with the address we were given:
 	fNumAddresses = 1;
@@ -101,41 +98,40 @@
 	fAddressArray[0] = new NetAddress((u_int8_t*)&addr,
 					  sizeof (netAddressBits));
 	return;
-      }
     } else { // Try resolving "hostname" as a real host name
 
-#if defined(VXWORKS)
-      char hostentBuf[512];
-      host = (struct hostent*)resolvGetHostByName((char*)hostname,(char*)&hostentBuf,sizeof hostentBuf);
-#else
-      host = our_gethostbyname((char*)hostname);
-#endif
+      struct addrinfo hints;
+      memset(&hints, 0, sizeof(hints));
+      hints.ai_family = AF_INET;
+      hints.ai_socktype = SOCK_DGRAM; /* be sure to not get dups! */
+      hints.ai_protocol = IPPROTO_UDP;
 
-      if (host == NULL) {
+      if (getaddrinfo(hostname, NULL, &hints, &res))
 	// It was a host name, and we couldn't resolve it.  We're SOL.
 	return;
-      }
     }
 
-    u_int8_t const** const hAddrPtr
-      = (u_int8_t const**)host->h_addr_list;
-    if (hAddrPtr != NULL) {
-      // First, count the number of addresses:
-      u_int8_t const** hAddrPtr1 = hAddrPtr;
-      while (*hAddrPtr1 != NULL) {
-	++fNumAddresses;
-	++hAddrPtr1;
-      }
-
-      // Next, set up the list:
-      fAddressArray = new NetAddress*[fNumAddresses];
-      if (fAddressArray == NULL) return;
-
-      for (unsigned i = 0; i < fNumAddresses; ++i) {
-	fAddressArray[i]
-	  = new NetAddress(hAddrPtr[i], host->h_length);
-      }
+    // First, count the number of addresses:
+    for (const struct addrinfo *p = res; p; p = p->ai_next)
+      fNumAddresses++;
+
+    // Next, set up the list:
+    fAddressArray = new NetAddress*[fNumAddresses];
+
+    unsigned i = 0;
+    for (const struct addrinfo *p = res; p; p = p->ai_next) {
+      union
+      {
+	struct in_addr ip4;
+	uint8_t b[4];
+      } buf;
+      const struct sockaddr_in *sin =
+        (const struct sockaddr_in *)p->ai_addr;
+
+      buf.ip4 = sin->sin_addr;
+      fAddressArray[i++] = new NetAddress(buf.b, 4);
     }
+    freeaddrinfo(res);
 }
 
 NetAddressList::NetAddressList(NetAddressList const& orig) {

live-inet_ntop.patch:
 groupsock/Groupsock.cpp                     |    9 ++++++---
 groupsock/include/GroupsockHelper.hh        |    2 +-
 groupsock/inet.c                            |   28 ++++++++++------------------
 liveMedia/DarwinInjector.cpp                |    3 ++-
 liveMedia/OnDemandServerMediaSubsession.cpp |    5 +++--
 liveMedia/PassiveServerMediaSubsession.cpp  |    5 +++--
 liveMedia/RTCP.cpp                          |    3 ++-
 liveMedia/RTSPOverHTTPServer.cpp            |    3 ++-
 liveMedia/RTSPServer.cpp                    |   19 ++++++++++++-------
 liveMedia/SIPClient.cpp                     |    7 ++++---
 liveMedia/ServerMediaSession.cpp            |    5 +++--
 testProgs/sapWatch.cpp                      |    5 +++--
 12 files changed, 51 insertions(+), 43 deletions(-)

--- NEW FILE live-inet_ntop.patch ---
Copyright (C) 2010 Rémi Denis-Courmont.
Licensed under GNU General Public License version 2 or higher.
diff -ru live.orig//groupsock/Groupsock.cpp live//groupsock/Groupsock.cpp
--- live.orig//groupsock/Groupsock.cpp	2010-04-09 22:27:39.000000000 +0300
+++ live//groupsock/Groupsock.cpp	2010-04-17 19:51:07.000000000 +0300
@@ -331,8 +331,10 @@
     }
   }
   if (DebugLevel >= 3) {
+    char buf[16];
+
     env() << *this << ": read " << bytesRead << " bytes from ";
-    env() << our_inet_ntoa(fromAddress.sin_addr);
+    env() << our_inet_ntoa(fromAddress.sin_addr, buf);
     if (numMembers > 0) {
       env() << "; relayed to " << numMembers << " members";
     }
@@ -441,13 +443,14 @@
 }
 
 UsageEnvironment& operator<<(UsageEnvironment& s, const Groupsock& g) {
+  char buf[16];
   UsageEnvironment& s1 = s << timestampString() << " Groupsock("
 			   << g.socketNum() << ": "
-			   << our_inet_ntoa(g.groupAddress())
+			   << our_inet_ntoa(g.groupAddress(), buf)
 			   << ", " << g.port() << ", ";
   if (g.isSSM()) {
     return s1 << "SSM source: "
-	      <<  our_inet_ntoa(g.sourceFilterAddress()) << ")";
+	      <<  our_inet_ntoa(g.sourceFilterAddress(), buf) << ")";
   } else {
     return s1 << (unsigned)(g.ttl()) << ")";
   }
diff -ru live.orig//groupsock/include/GroupsockHelper.hh live//groupsock/include/GroupsockHelper.hh
--- live.orig//groupsock/include/GroupsockHelper.hh	2010-04-09 22:27:39.000000000 +0300
+++ live//groupsock/include/GroupsockHelper.hh	2010-04-17 19:43:44.000000000 +0300
@@ -124,7 +124,7 @@
 
 // The following are implemented in inet.c:
 extern "C" netAddressBits our_inet_addr(char const*);
-extern "C" char* our_inet_ntoa(struct in_addr);
+extern "C" char* our_inet_ntoa(struct in_addr, char *);
 extern "C" struct hostent* our_gethostbyname(char* name);
 extern "C" void our_srandom(int x);
 extern "C" long our_random();
diff -ru live.orig//groupsock/inet.c live//groupsock/inet.c
--- live.orig//groupsock/inet.c	2010-04-09 22:27:39.000000000 +0300
+++ live//groupsock/inet.c	2010-04-17 19:42:52.000000000 +0300
@@ -21,26 +21,18 @@
 }
 
 char *
-our_inet_ntoa(in)
-        struct in_addr in;
+our_inet_ntoa(in, result)
+	struct in_addr in;
+	char *result;
 {
-#ifndef VXWORKS
-  return inet_ntoa(in);
+#ifdef WIN32
+  char *ret = inet_ntoa(in);
+  if(ret != NULL)
+     strncpy(result, ret, 16);
+  return ret;
+#elif !defined (VXWORKS)
+  return inet_ntop(AF_INET, &in, result, 16);
 #else
-  /* according the man pages of inet_ntoa :
-
-     NOTES
-     The return value from inet_ntoa() points to a  buffer  which
-     is  overwritten on each call.  This buffer is implemented as
-     thread-specific data in multithreaded applications.
-
-     the vxworks version of inet_ntoa allocates a buffer for each
-     ip address string, and does not reuse the same buffer.
-
-     this is merely to simulate the same behaviour (not multithread
-     safe though):
-  */
-  static char result[INET_ADDR_LEN];
   inet_ntoa_b(in, result);
   return(result);
 #endif
diff -ru live.orig//liveMedia/DarwinInjector.cpp live//liveMedia/DarwinInjector.cpp
--- live.orig//liveMedia/DarwinInjector.cpp	2010-04-09 22:27:39.000000000 +0300
+++ live//liveMedia/DarwinInjector.cpp	2010-04-17 19:45:19.000000000 +0300
@@ -128,7 +128,8 @@
       NetAddress const* address = addresses.firstAddress();
       addr.s_addr = *(unsigned*)(address->data());
     }
-    char const* remoteRTSPServerAddressStr = our_inet_ntoa(addr);
+    char buf[16];
+    char const* remoteRTSPServerAddressStr = our_inet_ntoa(addr, buf);
 
     // Construct a SDP description for the session that we'll be streaming:
     char const* const sdpFmt =
diff -ru live.orig//liveMedia/OnDemandServerMediaSubsession.cpp live//liveMedia/OnDemandServerMediaSubsession.cpp
--- live.orig//liveMedia/OnDemandServerMediaSubsession.cpp	2010-04-09 22:27:39.000000000 +0300
+++ live//liveMedia/OnDemandServerMediaSubsession.cpp	2010-04-17 19:50:05.000000000 +0300
@@ -365,7 +365,8 @@
   char const* mediaType = rtpSink->sdpMediaType();
   unsigned char rtpPayloadType = rtpSink->rtpPayloadType();
   struct in_addr serverAddrForSDP; serverAddrForSDP.s_addr = fServerAddressForSDP;
-  char* const ipAddressStr = strDup(our_inet_ntoa(serverAddrForSDP));
+  char ipAddressStr[16];
+  our_inet_ntoa(serverAddrForSDP, ipAddressStr);
   char* rtpmapLine = rtpSink->rtpmapLine();
   char const* rangeLine = rangeSDPLine();
   char const* auxSDPLine = getAuxSDPLine(rtpSink, inputSource);
@@ -398,7 +399,7 @@
 	  rangeLine, // a=range:... (if present)
 	  auxSDPLine, // optional extra SDP line
 	  trackId()); // a=control:<track-id>
-  delete[] (char*)rangeLine; delete[] rtpmapLine; delete[] ipAddressStr;
+  delete[] (char*)rangeLine; delete[] rtpmapLine;
 
   fSDPLines = strDup(sdpLines);
   delete[] sdpLines;
diff -ru live.orig//liveMedia/PassiveServerMediaSubsession.cpp live//liveMedia/PassiveServerMediaSubsession.cpp
--- live.orig//liveMedia/PassiveServerMediaSubsession.cpp	2010-04-09 22:27:39.000000000 +0300
+++ live//liveMedia/PassiveServerMediaSubsession.cpp	2010-04-17 19:46:28.000000000 +0300
@@ -54,7 +54,8 @@
     char const* auxSDPLine = fRTPSink.auxSDPLine();
     if (auxSDPLine == NULL) auxSDPLine = "";
 
-    char* const ipAddressStr = strDup(our_inet_ntoa(ipAddress));
+    char ipAddressStr[16];
+    our_inet_ntoa(ipAddress, ipAddressStr);
 
     char const* const sdpFmt =
       "m=%s %d RTP/AVP %d\r\n"
@@ -84,7 +85,7 @@
 	    rangeLine, // a=range:... (if present)
 	    auxSDPLine, // optional extra SDP line
 	    trackId()); // a=control:<track-id>
-    delete[] ipAddressStr; delete[] (char*)rangeLine; delete[] rtpmapLine;
+    delete[] (char*)rangeLine; delete[] rtpmapLine;
 
     fSDPLines = strDup(sdpLines);
     delete[] sdpLines;
diff -ru live.orig//liveMedia/RTCP.cpp live//liveMedia/RTCP.cpp
--- live.orig//liveMedia/RTCP.cpp	2010-04-09 22:27:39.000000000 +0300
+++ live//liveMedia/RTCP.cpp	2010-04-17 19:46:44.000000000 +0300
@@ -359,7 +359,8 @@
     }
 
 #ifdef DEBUG
-    fprintf(stderr, "[%p]saw incoming RTCP packet (from address %s, port %d)\n", this, our_inet_ntoa(fromAddress.sin_addr), ntohs(fromAddress.sin_port));
+    char buf[16];
+    fprintf(stderr, "[%p]saw incoming RTCP packet (from address %s, port %d)\n", this, our_inet_ntoa(fromAddress.sin_addr, buf), ntohs(fromAddress.sin_port));
     unsigned char* p = pkt;
     for (unsigned i = 0; i < packetSize; ++i) {
       if (i%4 == 0) fprintf(stderr, " ");
diff -ru live.orig//liveMedia/RTSPOverHTTPServer.cpp live//liveMedia/RTSPOverHTTPServer.cpp
--- live.orig//liveMedia/RTSPOverHTTPServer.cpp	2010-04-09 22:27:39.000000000 +0300
+++ live//liveMedia/RTSPOverHTTPServer.cpp	2010-04-17 19:50:41.000000000 +0300
@@ -128,7 +128,8 @@
   makeSocketNonBlocking(clientSocket);
   increaseSendBufferTo(envir(), clientSocket, 50*1024);
 #if defined(DEBUG) || defined(DEBUG_CONNECTIONS)
-  fprintf(stderr, "accept()ed connection from %s\n", our_inet_ntoa(clientAddr.sin_addr));
+  char buf[16];
+  fprintf(stderr, "accept()ed connection from %s\n", our_inet_ntoa(clientAddr.sin_addr, buf));
 #endif
 
   // Create a new object for handling this HTTP connection:
diff -ru live.orig//liveMedia/RTSPServer.cpp live//liveMedia/RTSPServer.cpp
--- live.orig//liveMedia/RTSPServer.cpp	2010-04-09 22:27:39.000000000 +0300
+++ live//liveMedia/RTSPServer.cpp	2010-04-17 19:49:32.000000000 +0300
@@ -112,11 +112,12 @@
   char urlBuffer[100]; // more than big enough for "rtsp://<ip-address>:<port>/"
 
   portNumBits portNumHostOrder = ntohs(fServerPort.num());
+  char buf[16];
   if (portNumHostOrder == 554 /* the default port number */) {
-    sprintf(urlBuffer, "rtsp://%s/", our_inet_ntoa(ourAddress.sin_addr));
+    sprintf(urlBuffer, "rtsp://%s/", our_inet_ntoa(ourAddress.sin_addr, buf));
   } else {
     sprintf(urlBuffer, "rtsp://%s:%hu/",
-	    our_inet_ntoa(ourAddress.sin_addr), portNumHostOrder);
+	    our_inet_ntoa(ourAddress.sin_addr, buf), portNumHostOrder);
   }
 
   return strDup(urlBuffer);
@@ -233,7 +234,8 @@
   increaseSendBufferTo(envir(), clientSocket, 50*1024);
 
 #if defined(DEBUG) || defined(DEBUG_CONNECTIONS)
-  envir() << "accept()ed connection from " << our_inet_ntoa(clientAddr.sin_addr) << '\n';
+  char buf[16];
+  envir() << "accept()ed connection from " << our_inet_ntoa(clientAddr.sin_addr, buf) << '\n';
 #endif
 
   // Create a new object for this RTSP session.
@@ -747,10 +749,12 @@
 				  serverRTPPort, serverRTCPPort,
 				  fStreamStates[streamNum].streamToken);
   struct in_addr destinationAddr; destinationAddr.s_addr = destinationAddress;
-  char* destAddrStr = strDup(our_inet_ntoa(destinationAddr));
+  char destAddrStr[16];
+  our_inet_ntoa(destinationAddr, destAddrStr);
   struct sockaddr_in sourceAddr; SOCKLEN_T namelen = sizeof sourceAddr;
   getsockname(fClientSocket, (struct sockaddr*)&sourceAddr, &namelen);
-  char* sourceAddrStr = strDup(our_inet_ntoa(sourceAddr.sin_addr));
+  char sourceAddrStr[16];
+  our_inet_ntoa(sourceAddr.sin_addr, sourceAddrStr);
   if (fIsMulticast) {
     switch (streamingMode) {
     case RTP_UDP:
@@ -825,7 +829,7 @@
     }
     }
   }
-  delete[] destAddrStr; delete[] sourceAddrStr; delete[] streamingModeString;
+  delete[] streamingModeString;
 }
 
 void RTSPServer::RTSPClientSession
@@ -1226,7 +1230,8 @@
   // If this gets called, the client session is assumed to have timed out,
   // so delete it:
 #ifdef DEBUG
-  fprintf(stderr, "RTSP client session from %s has timed out (due to inactivity)\n", our_inet_ntoa(clientSession->fClientAddr.sin_addr));
+  char buf[16];
+  fprintf(stderr, "RTSP client session from %s has timed out (due to inactivity)\n", our_inet_ntoa(clientSession->fClientAddr.sin_addr, buf));
 #endif
   delete clientSession;
 }
diff -ru live.orig//liveMedia/ServerMediaSession.cpp live//liveMedia/ServerMediaSession.cpp
--- live.orig//liveMedia/ServerMediaSession.cpp	2010-04-09 22:27:39.000000000 +0300
+++ live//liveMedia/ServerMediaSession.cpp	2010-04-17 19:50:31.000000000 +0300
@@ -185,7 +185,8 @@
 char* ServerMediaSession::generateSDPDescription() {
   struct in_addr ipAddress;
   ipAddress.s_addr = ourIPAddress(envir());
-  char* const ipAddressStr = strDup(our_inet_ntoa(ipAddress));
+  char ipAddressStr[16];
+  our_inet_ntoa(ipAddress, ipAddressStr);
   unsigned ipAddressStrSize = strlen(ipAddressStr);
 
   // For a SSM sessions, we need a "a=source-filter: incl ..." line also:
@@ -281,7 +282,7 @@
     }
   } while (0);
 
-  delete[] rangeLine; delete[] sourceFilterLine; delete[] ipAddressStr;
+  delete[] rangeLine; delete[] sourceFilterLine;
   return sdp;
 }
 
diff -ru live.orig//liveMedia/SIPClient.cpp live//liveMedia/SIPClient.cpp
--- live.orig//liveMedia/SIPClient.cpp	2010-04-09 22:27:39.000000000 +0300
+++ live//liveMedia/SIPClient.cpp	2010-04-17 19:47:42.000000000 +0300
@@ -60,13 +60,14 @@
 
   struct in_addr ourAddress;
   ourAddress.s_addr = ourIPAddress(env); // hack
-  fOurAddressStr = strDup(our_inet_ntoa(ourAddress));
+  char buf[16];
+  fOurAddressStr = strDup(our_inet_ntoa(ourAddress, buf));
   fOurAddressStrSize = strlen(fOurAddressStr);
 
   fOurSocket = new Groupsock(env, ourAddress, 0, 255);
   if (fOurSocket == NULL) {
     env << "ERROR: Failed to create socket for addr "
-	<< our_inet_ntoa(ourAddress) << ": "
+	<< our_inet_ntoa(ourAddress, buf) << ": "
 	<< env.getResultMsg() << "\n";
   }
 
@@ -84,7 +85,7 @@
     fOurSocket = new Groupsock(env, ourAddress, fOurPortNum, 255);
     if (fOurSocket == NULL) {
       env << "ERROR: Failed to create socket for addr "
-	  << our_inet_ntoa(ourAddress) << ", port "
+	  << our_inet_ntoa(ourAddress, buf) << ", port "
 	  << fOurPortNum << ": "
 	  << env.getResultMsg() << "\n";
     }
diff -ru live.orig//testProgs/sapWatch.cpp live//testProgs/sapWatch.cpp
--- live.orig//testProgs/sapWatch.cpp	2010-04-09 22:27:39.000000000 +0300
+++ live//testProgs/sapWatch.cpp	2010-04-17 19:51:29.000000000 +0300
@@ -49,13 +49,14 @@
   struct sockaddr_in fromAddress;
   while (inputGroupsock.handleRead(packet, maxPacketSize,
 				   packetSize, fromAddress)) {
+    char buf[16];
     printf("\n[packet from %s (%d bytes)]\n",
-	   our_inet_ntoa(fromAddress.sin_addr), packetSize);
+	   our_inet_ntoa(fromAddress.sin_addr, buf), packetSize);
 
     // Ignore the first 8 bytes (SAP header).
     if (packetSize < 8) {
       *env << "Ignoring short packet from "
-	   << our_inet_ntoa(fromAddress.sin_addr) << "%s!\n";
+	   << our_inet_ntoa(fromAddress.sin_addr, buf) << "%s!\n";
       continue;
     }
 

live-uselocale.patch:
 Locale.cpp        |   13 ++++++-------
 RTSPClient.cpp    |    8 ++++----
 RTSPCommon.cpp    |    2 +-
 include/Locale.hh |   17 ++++++++++-------
 4 files changed, 21 insertions(+), 19 deletions(-)

--- NEW FILE live-uselocale.patch ---
Copyright (C) 2008 Rémi Denis-Courmont, adaptation by Felix Kühne (C) 2009.
Licensed under GNU General Public License version 2 or higher.
diff -urN live.orig/liveMedia/include/Locale.hh live/liveMedia/include/Locale.hh
--- live.orig/liveMedia/include/Locale.hh	2009-03-23 01:26:16 +0300
+++ live/liveMedia/include/Locale.hh	2009-03-26 19:17:43 +0300
@@ -27,23 +27,26 @@
 
 #ifndef LOCALE_NOT_USED
 #include <locale.h>
+#ifdef __APPLE__
+#include <xlocale.h>
+#endif
 #else
-#ifndef LC_ALL
-#define LC_ALL 0
+#ifndef LC_ALL_MASK
+#define LC_ALL_MASK 0
 #endif
-#ifndef LC_NUMERIC
-#define LC_NUMERIC 4
+#ifndef LC_NUMERIC_MASK
+#define LC_NUMERIC_MASK 0
 #endif
+typedef int locale_t;
 #endif
 
 class Locale {
 public:
-  Locale(char const* newLocale, int category = LC_ALL);
+  Locale(char const* newLocale, int category = LC_ALL_MASK);
   virtual ~Locale();
 
 private:
-  int fCategory;
-  char* fPrevLocale;
+  locale_t fLocale, fPrevLocale;
 };
 
 #endif
diff -urN live.orig/liveMedia/Locale.cpp live/liveMedia/Locale.cpp
--- live.orig/liveMedia/Locale.cpp	2009-03-23 01:26:16 +0300
+++ live/liveMedia/Locale.cpp	2009-03-26 19:17:43 +0300
@@ -22,19 +22,18 @@
 #include "Locale.hh"
 #include <strDup.hh>
 
-Locale::Locale(char const* newLocale, int category)
-  : fCategory(category) {
+Locale::Locale(char const* newLocale, int category) {
 #ifndef LOCALE_NOT_USED
-  fPrevLocale = strDup(setlocale(category, NULL));
-  setlocale(category, newLocale);
+  fLocale = newlocale(category, newLocale, NULL);
+  fPrevLocale = uselocale(fLocale);
 #endif
 }
 
 Locale::~Locale() {
 #ifndef LOCALE_NOT_USED
-  if (fPrevLocale != NULL) {
-    setlocale(fCategory, fPrevLocale);
-    delete[] fPrevLocale;
+  if (fLocale != (locale_t)0) {
+    uselocale(fPrevLocale);
+    freelocale(fLocale);
   }
 #endif
 }
diff -urN live.orig/liveMedia/RTSPClient.cpp live/liveMedia/RTSPClient.cpp
--- live.orig/liveMedia/RTSPClient.cpp	2009-03-23 01:26:16 +0300
+++ live/liveMedia/RTSPClient.cpp	2009-03-26 19:29:38 +0300
@@ -1019,7 +1019,7 @@
     // This is the default value; we don't need a "Scale:" header:
     buf[0] = '\0';
   } else {
-    Locale l("C", LC_NUMERIC);
+    Locale l("C", LC_NUMERIC_MASK);
     sprintf(buf, "Scale: %f\r\n", scale);
   }
 
@@ -1033,11 +1033,11 @@
     buf[0] = '\0';
   } else if (end < 0) {
     // There's no end time:
-    Locale l("C", LC_NUMERIC);
+    Locale l("C", LC_NUMERIC_MASK);
     sprintf(buf, "Range: npt=%.3f-\r\n", start);
   } else {
     // There's both a start and an end time; include them both in the "Range:" hdr
-    Locale l("C", LC_NUMERIC);
+    Locale l("C", LC_NUMERIC_MASK);
     sprintf(buf, "Range: npt=%.3f-%.3f\r\n", start, end);
   }
 
@@ -2342,7 +2342,7 @@
   if (_strncasecmp(line, "Scale: ", 7) != 0) return False;
   line += 7;
 
-  Locale l("C", LC_NUMERIC);
+  Locale l("C", LC_NUMERIC_MASK);
   return sscanf(line, "%f", &scale) == 1;
 }
 
diff -urN live.orig/liveMedia/RTSPCommon.cpp live/liveMedia/RTSPCommon.cpp
--- live.orig/liveMedia/RTSPCommon.cpp	2009-03-23 01:26:16 +0300
+++ live/liveMedia/RTSPCommon.cpp	2009-03-26 19:23:25 +0300
@@ -146,7 +146,7 @@
   char const* fields = buf + 7;
   while (*fields == ' ') ++fields;
   double start, end;
-  Locale l("C", LC_NUMERIC);
+  Locale l("C", LC_NUMERIC_MASK);
   if (sscanf(fields, "npt = %lf - %lf", &start, &end) == 2) {
     rangeStart = start;
     rangeEnd = end;


Index: live555.spec
===================================================================
RCS file: /cvs/free/rpms/live555/devel/live555.spec,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- live555.spec	28 Jan 2010 19:44:57 -0000	1.9
+++ live555.spec	1 May 2010 15:16:55 -0000	1.10
@@ -1,16 +1,20 @@
-%global		date	2010.01.22
+%global		date	2010.04.09
 %global		live_soversion 0
 
 Name:		live555
 Version:	0
-Release:	0.26.%{date}%{?dist}
+Release:	0.27.%{date}%{?dist}
 Summary:	Live555.com streaming libraries
 
 Group:		System Environment/Libraries
-License:	LGPLv2+
+License:	LGPLv2+ and GPLv2+
 URL:		http://live555.com/liveMedia/
 Source0:	http://live555.com/liveMedia/public/live.%{date}.tar.gz
 Patch0:		live.2010.01.16-shared.patch
+#Thoses patches are Copyright Rémi Denis-Courmont - provided as GPLv2+
+Patch1:         live-getaddrinfo.patch
+Patch2:         live-inet_ntop.patch
+Patch3:         live-uselocale.patch
 BuildRoot:	%{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 
 %description
@@ -80,6 +84,9 @@
 %setup -q -n live
 install -pm 0644 config.linux config.linux.static
 %patch0 -p1 -b .shared
+%patch1 -p1 -b .vlc1
+%patch2 -p1 -b .vlc2
+%patch3 -p1 -b .vlc3
 
 
 %build
@@ -171,6 +178,11 @@
 %{_libdir}/libUsageEnvironment*.a
 
 %changelog
+* Sat May  1 2010 Nicolas Chauvet <kwizart at fedoraproject.org> - 0-0.27.2010.04.09
+- Update to 2010.04.09
+- Add patches from Rémi Denis-Courmont - provided as GPLv2+
+- Distribute live555 as GPLv2+
+
 * Thu Jan 28 2010 Nicolas Chauvet <kwizart at fedoraproject.org> - 0-0.26.2010.01.22
 - Update to 2010.01.22
   Fix multicast with openRTSP



More information about the rpmfusion-commits mailing list