Merge of Mac OS X patch from Stéphane Corthésy (davelopper),

SF Bug Tracker [ 1686420 ] Modifications for MacOSX.
Some of the proposed changes were already done by Rene Hexel's patch.


git-svn-id: https://pupnp.svn.sourceforge.net/svnroot/pupnp/trunk@213 119443c7-1b9e-41f8-b6fc-b9c35fce742c
This commit is contained in:
Marcelo Roberto Jimenez 2007-08-06 02:07:41 +00:00
parent 491f5ffef6
commit 67b51187b9
9 changed files with 130 additions and 115 deletions

View File

@ -2,6 +2,11 @@
Version 1.6.0 Version 1.6.0
******************************************************************************* *******************************************************************************
2007-08-05 Marcelo Jimenez <mroberto(at)users.sourceforge.net>
* Merge of Mac OS X patch from Stéphane Corthésy (davelopper),
SF Bug Tracker [ 1686420 ] Modifications for MacOSX.
Some of the proposed changes were already done by Rene Hexel's patch.
2007-06-10 Marcelo Jimenez <mroberto(at)users.sourceforge.net> 2007-06-10 Marcelo Jimenez <mroberto(at)users.sourceforge.net>
* More fixes to Mac OS X and NetBSD from Rene Hexel: * More fixes to Mac OS X and NetBSD from Rene Hexel:
[pupnp-devel] NetBSD & Mac OS X packages and patches [pupnp-devel] NetBSD & Mac OS X packages and patches

1
THANKS
View File

@ -31,6 +31,7 @@ exempt of errors.
- Paul Vixie - Paul Vixie
- Rene Hexel - Rene Hexel
- Siva Chandran - Siva Chandran
- Stéphane Corthésy
- Timothy Redaelli - Timothy Redaelli
- Titus Winters - Titus Winters

View File

@ -31,7 +31,7 @@
#include "LinkedList.h" #include "LinkedList.h"
#include <sys/param.h> #include <sys/param.h>
#if (defined(BSD) && BSD >= 199306) #if (defined(BSD) && BSD >= 199306) || defined(__OSX__)
#include <stdlib.h> #include <stdlib.h>
#else #else
#include <malloc.h> #include <malloc.h>

View File

@ -90,22 +90,23 @@ FreeThreadPoolJob( ThreadPool * tp,
static int static int
SetPolicyType( PolicyType in ) SetPolicyType( PolicyType in )
{ {
#ifdef __CYGWIN__ #ifdef __CYGWIN__
/* TODO not currently working... */ /* TODO not currently working... */
return 0; return 0;
#else #elif defined(__OSX__)
#ifdef WIN32 setpriority(PRIO_PROCESS, 0, 0);
return 0;
#elif defined(WIN32)
return sched_setscheduler( 0, in); return sched_setscheduler( 0, in);
#elif defined(_POSIX_PRIORITY_SCHEDULING) && _POSIX_PRIORITY_SCHEDULING > 0 #elif defined(_POSIX_PRIORITY_SCHEDULING) && _POSIX_PRIORITY_SCHEDULING > 0
struct sched_param current; struct sched_param current;
sched_getparam( 0, &current ); sched_getparam( 0, &current );
current.sched_priority = DEFAULT_SCHED_PARAM; current.sched_priority = DEFAULT_SCHED_PARAM;
return sched_setscheduler( 0, in, &current ); return sched_setscheduler( 0, in, &current );
#else #else
return 0; return 0;
#endif #endif
#endif
} }
/**************************************************************************** /****************************************************************************
@ -364,7 +365,7 @@ static void SetSeed() {
ftime( &t ); ftime( &t );
#if defined(WIN32) #if defined(WIN32)
srand( ( unsigned int )t.millitm + (unsigned int)ithread_get_current_thread_id().p ); srand( ( unsigned int )t.millitm + (unsigned int)ithread_get_current_thread_id().p );
#elif defined(__FreeBSD__) #elif defined(__FreeBSD__) || defined(__OSX__)
srand( ( unsigned int )t.millitm + (unsigned int)ithread_get_current_thread_id() ); srand( ( unsigned int )t.millitm + (unsigned int)ithread_get_current_thread_id() );
#elif defined(__linux__) #elif defined(__linux__)
srand( ( unsigned int )t.millitm + ithread_get_current_thread_id() ); srand( ( unsigned int )t.millitm + ithread_get_current_thread_id() );

View File

@ -32,7 +32,7 @@
#include <stdarg.h> #include <stdarg.h>
#include <assert.h> #include <assert.h>
#include <sys/param.h> #include <sys/param.h>
#if (defined(BSD) && BSD >= 199306) #if (defined(BSD) && BSD >= 199306) || defined(__OSX__)
#include <stdlib.h> #include <stdlib.h>
#else #else
#include <malloc.h> #include <malloc.h>

View File

@ -1362,7 +1362,7 @@ TvCtrlPointStart( print_string printFunctionPtr,
ithread_mutex_init( &DeviceListMutex, 0 ); ithread_mutex_init( &DeviceListMutex, 0 );
SampleUtil_Print( "Intializing UPnP with ipaddress=%s port=%d", SampleUtil_Print( "Initializing UPnP with ipaddress=%s port=%d",
ip_address, port ); ip_address, port );
rc = UpnpInit( ip_address, port ); rc = UpnpInit( ip_address, port );
if( UPNP_E_SUCCESS != rc ) { if( UPNP_E_SUCCESS != rc ) {

View File

@ -36,7 +36,7 @@
#include "uri.h" #include "uri.h"
#define HEADER_LENGTH 2000 #define HEADER_LENGTH 2000
//Structure to maintain a error code and string associated with the // Structure to maintain a error code and string associated with the
// error code // error code
struct ErrorString { struct ErrorString {
int rc; /* error code */ int rc; /* error code */
@ -44,7 +44,7 @@ struct ErrorString {
}; };
//Intializing the array of error structures. // Initializing the array of error structures.
struct ErrorString ErrorMessages[] = { {UPNP_E_SUCCESS, "UPNP_E_SUCCESS"}, struct ErrorString ErrorMessages[] = { {UPNP_E_SUCCESS, "UPNP_E_SUCCESS"},
{UPNP_E_INVALID_HANDLE, "UPNP_E_INVALID_HANDLE"}, {UPNP_E_INVALID_HANDLE, "UPNP_E_INVALID_HANDLE"},
{UPNP_E_INVALID_PARAM, "UPNP_E_INVALID_PARAM"}, {UPNP_E_INVALID_PARAM, "UPNP_E_INVALID_PARAM"},
@ -81,13 +81,13 @@ struct ErrorString ErrorMessages[] = { {UPNP_E_SUCCESS, "UPNP_E_SUCCESS"},
}; };
/************************************************************************ /************************************************************************
* Function : UpnpGetErrorMessage * Function : UpnpGetErrorMessage
* *
* Parameters: * Parameters:
* IN int rc: error code * IN int rc: error code
* *
* Description: * Description:
* This functions returns the error string mapped to the error code * This functions returns the error string mapped to the error code
* Returns: const char * * Returns: const char *
* return either the right string or "Unknown Error" * return either the right string or "Unknown Error"
***************************************************************************/ ***************************************************************************/
@ -108,14 +108,14 @@ UpnpGetErrorMessage( IN int rc )
} }
/************************************************************************ /************************************************************************
* Function : UpnpResolveURL * Function : UpnpResolveURL
* *
* Parameters: * Parameters:
* IN char * BaseURL: Base URL string * IN char * BaseURL: Base URL string
* IN char * RelURL: relative URL string * IN char * RelURL: relative URL string
* OUT char * AbsURL: Absolute URL string * OUT char * AbsURL: Absolute URL string
* Description: * Description:
* This functions concatinates the base URL and relative URL to generate * This functions concatinates the base URL and relative URL to generate
* the absolute URL * the absolute URL
* Returns: int * Returns: int
* return either UPNP_E_SUCCESS or appropriate error * return either UPNP_E_SUCCESS or appropriate error
@ -151,19 +151,19 @@ UpnpResolveURL( IN const char *BaseURL,
} }
/************************************************************************ /************************************************************************
* Function : addToAction * Function : addToAction
* *
* Parameters: * Parameters:
* IN int response: flag to tell if the ActionDoc is for response * IN int response: flag to tell if the ActionDoc is for response
* or request * or request
* INOUT IXML_Document **ActionDoc: request or response document * INOUT IXML_Document **ActionDoc: request or response document
* IN char *ActionName: Name of the action request or response * IN char *ActionName: Name of the action request or response
* IN char *ServType: Service type * IN char *ServType: Service type
* IN char * ArgName: Name of the argument * IN char * ArgName: Name of the argument
* IN char * ArgValue: Value of the argument * IN char * ArgValue: Value of the argument
* *
* Description: * Description:
* This function adds the argument in the action request or response. * This function adds the argument in the action request or response.
* This function creates the action request or response if it is a first * This function creates the action request or response if it is a first
* argument else it will add the argument in the document * argument else it will add the argument in the document
* *
@ -230,22 +230,22 @@ addToAction( IN int response,
} }
/************************************************************************ /************************************************************************
* Function : makeAction * Function : makeAction
* *
* Parameters: * Parameters:
* IN int response: flag to tell if the ActionDoc is for response * IN int response: flag to tell if the ActionDoc is for response
* or request * or request
* IN char * ActionName: Name of the action request or response * IN char * ActionName: Name of the action request or response
* IN char * ServType: Service type * IN char * ServType: Service type
* IN int NumArg :Number of arguments in the action request or response * IN int NumArg :Number of arguments in the action request or response
* IN char * Arg : pointer to the first argument * IN char * Arg : pointer to the first argument
* IN va_list ArgList: Argument list * IN va_list ArgList: Argument list
* *
* Description: * Description:
* This function creates the action request or response from the argument * This function creates the action request or response from the argument
* list. * list.
* Returns: IXML_Document * * Returns: IXML_Document *
* returns action request or response document if successful * returns action request or response document if successful
* else returns NULL * else returns NULL
***************************************************************************/ ***************************************************************************/
static IXML_Document * static IXML_Document *
@ -326,9 +326,9 @@ makeAction( IN int response,
} }
/************************************************************************ /************************************************************************
* Function : UpnpMakeAction * Function : UpnpMakeAction
* *
* Parameters: * Parameters:
* IN char * ActionName: Name of the action request or response * IN char * ActionName: Name of the action request or response
* IN char * ServType: Service type * IN char * ServType: Service type
* IN int NumArg :Number of arguments in the action request or response * IN int NumArg :Number of arguments in the action request or response
@ -336,7 +336,7 @@ makeAction( IN int response,
* IN ... : variable argument list * IN ... : variable argument list
* IN va_list ArgList: Argument list * IN va_list ArgList: Argument list
* *
* Description: * Description:
* This function creates the action request from the argument * This function creates the action request from the argument
* list. Its a wrapper function that calls makeAction function to create * list. Its a wrapper function that calls makeAction function to create
* the action request. * the action request.
@ -363,9 +363,9 @@ UpnpMakeAction( const char *ActionName,
} }
/************************************************************************ /************************************************************************
* Function : UpnpMakeActionResponse * Function : UpnpMakeActionResponse
* *
* Parameters: * Parameters:
* IN char * ActionName: Name of the action request or response * IN char * ActionName: Name of the action request or response
* IN char * ServType: Service type * IN char * ServType: Service type
* IN int NumArg :Number of arguments in the action request or response * IN int NumArg :Number of arguments in the action request or response
@ -373,13 +373,13 @@ UpnpMakeAction( const char *ActionName,
* IN ... : variable argument list * IN ... : variable argument list
* IN va_list ArgList: Argument list * IN va_list ArgList: Argument list
* *
* Description: * Description:
* This function creates the action response from the argument * This function creates the action response from the argument
* list. Its a wrapper function that calls makeAction function to create * list. Its a wrapper function that calls makeAction function to create
* the action response. * the action response.
* *
* Returns: IXML_Document * * Returns: IXML_Document *
* returns action response document if successful * returns action response document if successful
* else returns NULL * else returns NULL
***************************************************************************/ ***************************************************************************/
IXML_Document * IXML_Document *
@ -400,22 +400,22 @@ UpnpMakeActionResponse( const char *ActionName,
} }
/************************************************************************ /************************************************************************
* Function : UpnpAddToActionResponse * Function : UpnpAddToActionResponse
* *
* Parameters: * Parameters:
* INOUT IXML_Document **ActionResponse: action response document * INOUT IXML_Document **ActionResponse: action response document
* IN char * ActionName: Name of the action request or response * IN char * ActionName: Name of the action request or response
* IN char * ServType: Service type * IN char * ServType: Service type
* IN int ArgName :Name of argument to be added in the action response * IN int ArgName :Name of argument to be added in the action response
* IN char * ArgValue : value of the argument * IN char * ArgValue : value of the argument
* *
* Description: * Description:
* This function adds the argument in the action response. Its a wrapper * This function adds the argument in the action response. Its a wrapper
* function that calls addToAction function to add the argument in the * function that calls addToAction function to add the argument in the
* action response. * action response.
* *
* Returns: int * Returns: int
* returns UPNP_E_SUCCESS if successful * returns UPNP_E_SUCCESS if successful
* else returns appropriate error * else returns appropriate error
***************************************************************************/ ***************************************************************************/
int int
@ -430,22 +430,22 @@ UpnpAddToActionResponse( INOUT IXML_Document ** ActionResponse,
} }
/************************************************************************ /************************************************************************
* Function : UpnpAddToAction * Function : UpnpAddToAction
* *
* Parameters: * Parameters:
* INOUT IXML_Document **ActionDoc: action request document * INOUT IXML_Document **ActionDoc: action request document
* IN char * ActionName: Name of the action request or response * IN char * ActionName: Name of the action request or response
* IN char * ServType: Service type * IN char * ServType: Service type
* IN int ArgName :Name of argument to be added in the action response * IN int ArgName :Name of argument to be added in the action response
* IN char * ArgValue : value of the argument * IN char * ArgValue : value of the argument
* *
* Description: * Description:
* This function adds the argument in the action request. Its a wrapper * This function adds the argument in the action request. Its a wrapper
* function that calls addToAction function to add the argument in the * function that calls addToAction function to add the argument in the
* action request. * action request.
* *
* Returns: int * Returns: int
* returns UPNP_E_SUCCESS if successful * returns UPNP_E_SUCCESS if successful
* else returns appropriate error * else returns appropriate error
***************************************************************************/ ***************************************************************************/
int int
@ -461,15 +461,15 @@ UpnpAddToAction( IXML_Document ** ActionDoc,
} }
/************************************************************************ /************************************************************************
* Function : UpnpAddToPropertySet * Function : UpnpAddToPropertySet
* *
* Parameters: * Parameters:
* INOUT IXML_Document **PropSet: propertyset document * INOUT IXML_Document **PropSet: propertyset document
* IN char *ArgName: Name of the argument * IN char *ArgName: Name of the argument
* IN char *ArgValue: value of the argument * IN char *ArgValue: value of the argument
* *
* Description: * Description:
* This function adds the argument in the propertyset node * This function adds the argument in the propertyset node
* *
* Returns: int * Returns: int
* returns UPNP_E_SUCCESS if successful else returns appropriate error * returns UPNP_E_SUCCESS if successful else returns appropriate error
@ -516,14 +516,14 @@ UpnpAddToPropertySet( INOUT IXML_Document ** PropSet,
} }
/************************************************************************ /************************************************************************
* Function : UpnpCreatePropertySet * Function : UpnpCreatePropertySet
* *
* Parameters: * Parameters:
* IN int NumArg: Number of argument that will go in the propertyset node * IN int NumArg: Number of argument that will go in the propertyset node
* IN char * Args: argument strings * IN char * Args: argument strings
* *
* Description: * Description:
* This function creates a propertyset node and put all the input * This function creates a propertyset node and put all the input
* parameters in the node as elements * parameters in the node as elements
* *
* Returns: IXML_Document * * Returns: IXML_Document *
@ -581,4 +581,5 @@ UpnpCreatePropertySet( IN int NumArg,
return PropSet; return PropSet;
} }
#endif #endif // EXCLUDE_DOM == 0

View File

@ -555,7 +555,7 @@ parse_hostport( const char *in,
int begin_port; int begin_port;
int hostport_size = 0; int hostport_size = 0;
int host_size = 0; int host_size = 0;
#ifndef WIN32 #if !defined(WIN32) && !defined(__OSX__)
char temp_hostbyname_buff[BUFFER_SIZE]; char temp_hostbyname_buff[BUFFER_SIZE];
struct hostent h_buf; struct hostent h_buf;
#endif #endif
@ -626,54 +626,61 @@ parse_hostport( const char *in,
// TODO: Use autoconf to discover this rather than the // TODO: Use autoconf to discover this rather than the
// platform-specific stuff below // platform-specific stuff below
#if defined(WIN32) || defined(__CYGWIN__) #if defined(WIN32) || defined(__CYGWIN__)
h=gethostbyname(temp_host_name); h = gethostbyname(temp_host_name);
#elif defined(SPARC_SOLARIS) #elif defined(SPARC_SOLARIS)
errCode = gethostbyname_r( temp_host_name, errCode = gethostbyname_r(
&h, temp_host_name,
temp_hostbyname_buff, &h,
BUFFER_SIZE, &errcode ); temp_hostbyname_buff,
BUFFER_SIZE, &errcode );
#elif defined(__FreeBSD__) && __FreeBSD_version < 601103 #elif defined(__FreeBSD__) && __FreeBSD_version < 601103
h = lwres_gethostbyname_r( temp_host_name, h = lwres_gethostbyname_r(
&h_buf, temp_host_name,
temp_hostbyname_buff, &h_buf,
BUFFER_SIZE, &errcode ); temp_hostbyname_buff,
BUFFER_SIZE, &errcode );
if ( h == NULL ) { if ( h == NULL ) {
errCode = 1; errCode = 1;
}
#elif defined(__OSX__)
h = gethostbyname(temp_host_name);
if ( h == NULL ) {
errCode = 1;
} }
#elif defined(__linux__) #elif defined(__linux__)
errCode = gethostbyname_r( temp_host_name, errCode = gethostbyname_r(
&h_buf, temp_host_name,
temp_hostbyname_buff, &h_buf,
BUFFER_SIZE, &h, &errcode ); temp_hostbyname_buff,
BUFFER_SIZE, &h, &errcode );
#else #else
{ {
struct addrinfo hints, *res, *res0; struct addrinfo hints, *res, *res0;
h = NULL; h = NULL;
memset(&hints, 0, sizeof(hints)); memset(&hints, 0, sizeof(hints));
hints.ai_family = PF_INET; hints.ai_family = PF_INET;
hints.ai_socktype = SOCK_STREAM; hints.ai_socktype = SOCK_STREAM;
errCode = getaddrinfo(temp_host_name, "http", &hints, &res0); errCode = getaddrinfo(temp_host_name, "http", &hints, &res0);
if (!errCode) { if (!errCode) {
for (res = res0; res; res = res->ai_next) { for (res = res0; res; res = res->ai_next) {
if (res->ai_family == PF_INET && if (res->ai_family == PF_INET &&
res->ai_addr->sa_family == AF_INET) res->ai_addr->sa_family == AF_INET)
{ {
h = &h_buf; h = &h_buf;
h->h_addrtype = res->ai_addr->sa_family; h->h_addrtype = res->ai_addr->sa_family;
h->h_length = 4; h->h_length = 4;
h->h_addr = (void *) temp_hostbyname_buff; h->h_addr = (void *) temp_hostbyname_buff;
*(struct in_addr *)h->h_addr = *(struct in_addr *)h->h_addr =
((struct sockaddr_in *)res->ai_addr)->sin_addr; ((struct sockaddr_in *)res->ai_addr)->sin_addr;
break; break;
} }
} }
freeaddrinfo(res0); freeaddrinfo(res0);
} }
} }
#endif #endif
if( errCode == 0 ) { if( errCode == 0 ) {
if( h ) { if( h ) {
if( ( h->h_addrtype == AF_INET ) && ( h->h_length == 4 ) ) { if( ( h->h_addrtype == AF_INET ) && ( h->h_length == 4 ) ) {

View File

@ -105,7 +105,7 @@ main (int argc, char* argv[])
* Test library initialisation * Test library initialisation
*/ */
printf ("\n"); printf ("\n");
printf ("Intializing UPnP ... \n"); printf ("Initializing UPnP ... \n");
rc = UpnpInit (NULL, 0); rc = UpnpInit (NULL, 0);
if ( UPNP_E_SUCCESS == rc ) { if ( UPNP_E_SUCCESS == rc ) {
const char* ip_address = UpnpGetServerIpAddress(); const char* ip_address = UpnpGetServerIpAddress();