Remove some of the implicit cast in upnp part

Remove some of the "implicit integer or enum conversions" as well as
some access to NULL reference in upnp part.

(forward port of commit c67187ac94)
This commit is contained in:
Fabrice Fontaine 2012-03-10 20:20:03 +01:00 committed by Marcelo Roberto Jimenez
parent 24f12e3ce0
commit f020c4f5fb
18 changed files with 191 additions and 161 deletions

View File

@ -318,6 +318,13 @@ Version 1.8.0
Version 1.6.16 Version 1.6.16
******************************************************************************* *******************************************************************************
2012-03-10 Fabrice Fontaine <fabrice.fontaine(at)orange.com>
Remove some of the implicit cast in upnp part
Remove some of the "implicit integer or enum conversions" as well as
some access to NULL reference in upnp part.
2012-03-10 Fabrice Fontaine <fabrice.fontaine(at)orange.com> 2012-03-10 Fabrice Fontaine <fabrice.fontaine(at)orange.com>
Remove lock in ThreadPoolInit Remove lock in ThreadPoolInit

View File

@ -5,7 +5,7 @@
* *
* Copyright (c) 2000-2003 Intel Corporation * Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. * All rights reserved.
* Copyright (C) 2011 France Telecom All rights reserved. * Copyright (C) 2011-2012 France Telecom All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
@ -65,8 +65,8 @@
#include <openssl/ssl.h> #include <openssl/ssl.h>
#endif #endif
#define LINE_SIZE 180 #define LINE_SIZE (size_t)180
#define NAME_SIZE 256 #define NAME_SIZE (size_t)256
#define MNFT_NAME_SIZE 64 #define MNFT_NAME_SIZE 64
#define MODL_NAME_SIZE 32 #define MODL_NAME_SIZE 32
#define SERL_NUMR_SIZE 64 #define SERL_NUMR_SIZE 64

View File

@ -394,7 +394,9 @@ static int UpnpInitStartServers(
/*! [in] Local Port to listen for incoming connections. */ /*! [in] Local Port to listen for incoming connections. */
unsigned short DestPort) unsigned short DestPort)
{ {
#if EXCLUDE_MINISERVER == 0 || EXCLUDE_WEB_SERVER == 0
int retVal = 0; int retVal = 0;
#endif
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__, UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
"Entering UpnpInitStartServers\n" ); "Entering UpnpInitStartServers\n" );
@ -1291,9 +1293,9 @@ int UpnpUnRegisterRootDeviceLowPower(UpnpDevice_Handle Hnd, int PowerState,
HandleUnlock(); HandleUnlock();
#if EXCLUDE_SSDP == 0 #if EXCLUDE_SSDP == 0
retVal = AdvertiseAndReply(-1, Hnd, 0, (struct sockaddr *)NULL, retVal = AdvertiseAndReply(-1, Hnd, (enum SsdpSearchType)0,
(char *)NULL, (char *)NULL, (char *)NULL, (struct sockaddr *)NULL, (char *)NULL, (char *)NULL,
HInfo->MaxAge); (char *)NULL, HInfo->MaxAge);
#endif #endif
HandleLock(); HandleLock();
@ -1690,9 +1692,9 @@ int UpnpSendAdvertisementLowPower(UpnpDevice_Handle Hnd, int Exp,
SInfo->SleepPeriod = SleepPeriod; SInfo->SleepPeriod = SleepPeriod;
SInfo->RegistrationState = RegistrationState; SInfo->RegistrationState = RegistrationState;
HandleUnlock(); HandleUnlock();
retVal = AdvertiseAndReply( 1, Hnd, 0, ( struct sockaddr * )NULL, retVal = AdvertiseAndReply( 1, Hnd, ( enum SsdpSearchType )0,
( char * )NULL, ( char * )NULL, ( struct sockaddr * )NULL, ( char * )NULL,
( char * )NULL, Exp ); ( char * )NULL, ( char * )NULL, Exp );
if( retVal != UPNP_E_SUCCESS ) if( retVal != UPNP_E_SUCCESS )
return retVal; return retVal;
@ -3703,13 +3705,13 @@ Upnp_Handle_Type GetClientHandleInfo(
Upnp_Handle_Type GetDeviceHandleInfo( Upnp_Handle_Type GetDeviceHandleInfo(
const int AddressFamily, const unsigned short AddressFamily,
UpnpDevice_Handle *device_handle_out, UpnpDevice_Handle *device_handle_out,
struct Handle_Info **HndInfo) struct Handle_Info **HndInfo)
{ {
/* Check if we've got a registered device of the address family specified. */ /* Check if we've got a registered device of the address family specified. */
if ((AddressFamily == AF_INET && UpnpSdkDeviceRegisteredV4 == 0) || if ((AddressFamily == (unsigned short)AF_INET && UpnpSdkDeviceRegisteredV4 == 0) ||
(AddressFamily == AF_INET6 && UpnpSdkDeviceregisteredV6 == 0)) { (AddressFamily == (unsigned short)AF_INET6 && UpnpSdkDeviceregisteredV6 == 0)) {
*device_handle_out = -1; *device_handle_out = -1;
return HND_INVALID; return HND_INVALID;
} }
@ -3732,7 +3734,7 @@ Upnp_Handle_Type GetHandleInfo(
UpnpClient_Handle Hnd, UpnpClient_Handle Hnd,
struct Handle_Info **HndInfo) struct Handle_Info **HndInfo)
{ {
Upnp_Handle_Type ret = UPNP_E_INVALID_HANDLE; Upnp_Handle_Type ret = HND_INVALID;
UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__, UpnpPrintf( UPNP_INFO, API, __FILE__, __LINE__,
"GetHandleInfo: entering, Handle is %d\n", Hnd); "GetHandleInfo: entering, Handle is %d\n", Hnd);

View File

@ -522,11 +522,11 @@ http_header_t *httpmsg_find_hdr(
* *
* Description : skips blank lines at the start of a msg. * Description : skips blank lines at the start of a msg.
* *
* Return : int ; * Return : parse_status_t ;
* *
* Note : * Note :
************************************************************************/ ************************************************************************/
static UPNP_INLINE int skip_blank_lines(INOUT scanner_t *scanner) static UPNP_INLINE parse_status_t skip_blank_lines(INOUT scanner_t *scanner)
{ {
memptr token; memptr token;
token_type_t tok_type; token_type_t tok_type;
@ -535,9 +535,9 @@ static UPNP_INLINE int skip_blank_lines(INOUT scanner_t *scanner)
/* skip ws, crlf */ /* skip ws, crlf */
do { do {
status = scanner_get_token(scanner, &token, &tok_type); status = scanner_get_token(scanner, &token, &tok_type);
} while (status == PARSE_OK && } while (status == (parse_status_t)PARSE_OK &&
(tok_type == TT_WHITESPACE || tok_type == TT_CRLF)); (tok_type == TT_WHITESPACE || tok_type == TT_CRLF));
if (status == PARSE_OK) { if (status == (parse_status_t)PARSE_OK) {
/* pushback a non-whitespace token */ /* pushback a non-whitespace token */
scanner->cursor -= token.length; scanner->cursor -= token.length;
} }
@ -560,7 +560,7 @@ static UPNP_INLINE int skip_blank_lines(INOUT scanner_t *scanner)
* *
* Note : * Note :
************************************************************************/ ************************************************************************/
static UPNP_INLINE int skip_lws(INOUT scanner_t *scanner) static UPNP_INLINE parse_status_t skip_lws(INOUT scanner_t *scanner)
{ {
memptr token; memptr token;
token_type_t tok_type; token_type_t tok_type;
@ -574,13 +574,14 @@ static UPNP_INLINE int skip_lws(INOUT scanner_t *scanner)
/* get CRLF or WS */ /* get CRLF or WS */
status = scanner_get_token( scanner, &token, &tok_type ); status = scanner_get_token( scanner, &token, &tok_type );
if( status == PARSE_OK ) { if( status == ( parse_status_t ) PARSE_OK ) {
if( tok_type == TT_CRLF ) { if( tok_type == TT_CRLF ) {
/* get WS */ /* get WS */
status = scanner_get_token( scanner, &token, &tok_type ); status = scanner_get_token( scanner, &token, &tok_type );
} }
if( status == PARSE_OK && tok_type == TT_WHITESPACE ) { if( status == ( parse_status_t ) PARSE_OK &&
tok_type == TT_WHITESPACE ) {
matched = TRUE; matched = TRUE;
} else { } else {
/* did not match LWS; pushback token(s) */ /* did not match LWS; pushback token(s) */
@ -590,7 +591,8 @@ static UPNP_INLINE int skip_lws(INOUT scanner_t *scanner)
} while( matched ); } while( matched );
/* if entire msg is loaded, ignore an 'incomplete' warning */ /* if entire msg is loaded, ignore an 'incomplete' warning */
if( status == PARSE_INCOMPLETE && scanner->entire_msg_loaded ) { if( status == ( parse_status_t ) PARSE_INCOMPLETE &&
scanner->entire_msg_loaded ) {
status = PARSE_OK; status = PARSE_OK;
} }
@ -631,7 +633,7 @@ static UPNP_INLINE parse_status_t match_non_ws_string(
while( !done ) { while( !done ) {
status = scanner_get_token( scanner, &token, &tok_type ); status = scanner_get_token( scanner, &token, &tok_type );
if( status == PARSE_OK && if( status == ( parse_status_t ) PARSE_OK &&
tok_type != TT_WHITESPACE && tok_type != TT_CRLF ) { tok_type != TT_WHITESPACE && tok_type != TT_CRLF ) {
/* append non-ws token */ /* append non-ws token */
str->length += token.length; str->length += token.length;
@ -640,13 +642,13 @@ static UPNP_INLINE parse_status_t match_non_ws_string(
} }
} }
if( status == PARSE_OK ) { if( status == ( parse_status_t ) PARSE_OK ) {
/* last token was WS; push it back in */ /* last token was WS; push it back in */
scanner->cursor -= token.length; scanner->cursor -= token.length;
} }
/* tolerate 'incomplete' msg */ /* tolerate 'incomplete' msg */
if( status == PARSE_OK || if( status == ( parse_status_t ) PARSE_OK ||
( status == PARSE_INCOMPLETE && scanner->entire_msg_loaded ) ( status == ( parse_status_t ) PARSE_INCOMPLETE && scanner->entire_msg_loaded )
) { ) {
if( str->length == 0 ) { if( str->length == 0 ) {
/* no strings found */ /* no strings found */
@ -701,7 +703,7 @@ static UPNP_INLINE parse_status_t match_raw_value(
while( !done ) { while( !done ) {
status = scanner_get_token( scanner, &token, &tok_type ); status = scanner_get_token( scanner, &token, &tok_type );
if( status == PARSE_OK ) { if( status == ( parse_status_t ) PARSE_OK ) {
if( !saw_crlf ) { if( !saw_crlf ) {
if( tok_type == TT_CRLF ) { if( tok_type == TT_CRLF ) {
/* CRLF could end value */ /* CRLF could end value */
@ -733,7 +735,7 @@ static UPNP_INLINE parse_status_t match_raw_value(
} }
} }
if( status == PARSE_OK ) { if( status == ( parse_status_t ) PARSE_OK ) {
/* trim whitespace on right side of value */ /* trim whitespace on right side of value */
while( raw_value->length > 0 ) { while( raw_value->length > 0 ) {
/* get last char */ /* get last char */
@ -771,7 +773,7 @@ static UPNP_INLINE parse_status_t match_raw_value(
* PARSE_FAILURE -- bad input * PARSE_FAILURE -- bad input
* PARSE_INCOMPLETE * PARSE_INCOMPLETE
************************************************************************/ ************************************************************************/
static UPNP_INLINE int match_int( static UPNP_INLINE parse_status_t match_int(
INOUT scanner_t *scanner, INOUT scanner_t *scanner,
IN int base, IN int base,
OUT int *value) OUT int *value)
@ -785,7 +787,7 @@ static UPNP_INLINE int match_int(
save_pos = scanner->cursor; save_pos = scanner->cursor;
status = scanner_get_token(scanner, &token, &tok_type); status = scanner_get_token(scanner, &token, &tok_type);
if (status == PARSE_OK) { if (status == (parse_status_t)PARSE_OK) {
if (tok_type == TT_IDENTIFIER) { if (tok_type == TT_IDENTIFIER) {
errno = 0; errno = 0;
num = strtol(token.buf, &end_ptr, base); num = strtol(token.buf, &end_ptr, base);
@ -801,7 +803,7 @@ static UPNP_INLINE int match_int(
status = PARSE_NO_MATCH; status = PARSE_NO_MATCH;
} }
} }
if (status != PARSE_OK) { if (status != (parse_status_t)PARSE_OK) {
/* restore scanner position for bad values */ /* restore scanner position for bad values */
scanner->cursor = save_pos; scanner->cursor = save_pos;
} }
@ -825,7 +827,7 @@ static UPNP_INLINE int match_int(
* PARSE_FAILURE * PARSE_FAILURE
* PARSE_INCOMPLETE * PARSE_INCOMPLETE
************************************************************************/ ************************************************************************/
static UPNP_INLINE int static UPNP_INLINE parse_status_t
read_until_crlf( INOUT scanner_t * scanner, read_until_crlf( INOUT scanner_t * scanner,
OUT memptr * str ) OUT memptr * str )
{ {
@ -840,9 +842,9 @@ read_until_crlf( INOUT scanner_t * scanner,
/* read until we hit a crlf */ /* read until we hit a crlf */
do { do {
status = scanner_get_token( scanner, &token, &tok_type ); status = scanner_get_token( scanner, &token, &tok_type );
} while( status == PARSE_OK && tok_type != TT_CRLF ); } while( status == ( parse_status_t ) PARSE_OK && tok_type != TT_CRLF );
if( status == PARSE_OK ) { if( status == ( parse_status_t ) PARSE_OK ) {
/* pushback crlf in stream */ /* pushback crlf in stream */
scanner->cursor -= token.length; scanner->cursor -= token.length;
@ -947,7 +949,7 @@ match_char( INOUT scanner_t * scanner,
* *
* Note : * Note :
************************************************************************/ ************************************************************************/
static int vfmatch( static parse_status_t vfmatch(
INOUT scanner_t *scanner, INOUT scanner_t *scanner,
IN const char *fmt, IN const char *fmt,
va_list argp) va_list argp)
@ -988,7 +990,8 @@ static int vfmatch(
assert( str_ptr != NULL ); assert( str_ptr != NULL );
status = scanner_get_token( scanner, str_ptr, status = scanner_get_token( scanner, str_ptr,
&tok_type ); &tok_type );
if( status == PARSE_OK && tok_type != TT_IDENTIFIER ) { if( status == ( parse_status_t ) PARSE_OK &&
tok_type != TT_IDENTIFIER ) {
/* not an identifier */ /* not an identifier */
status = PARSE_NO_MATCH; status = PARSE_NO_MATCH;
} }
@ -996,7 +999,8 @@ static int vfmatch(
case 'c': /* crlf */ case 'c': /* crlf */
status = scanner_get_token( scanner, status = scanner_get_token( scanner,
&token, &tok_type ); &token, &tok_type );
if( status == PARSE_OK && tok_type != TT_CRLF ) { if( status == ( parse_status_t ) PARSE_OK &&
tok_type != TT_CRLF ) {
/* not CRLF token */ /* not CRLF token */
status = PARSE_NO_MATCH; status = PARSE_NO_MATCH;
} }
@ -1046,7 +1050,8 @@ static int vfmatch(
str_ptr = ( memptr * ) va_arg( argp, memptr * ); str_ptr = ( memptr * ) va_arg( argp, memptr * );
status = status =
scanner_get_token( scanner, str_ptr, &tok_type ); scanner_get_token( scanner, str_ptr, &tok_type );
if( status == PARSE_OK && tok_type != TT_QUOTEDSTRING ) { if( status == ( parse_status_t ) PARSE_OK &&
tok_type != TT_QUOTEDSTRING ) {
status = PARSE_NO_MATCH; /* not a quoted string */ status = PARSE_NO_MATCH; /* not a quoted string */
} }
break; break;
@ -1054,7 +1059,8 @@ static int vfmatch(
/* optional whitespace */ /* optional whitespace */
status = scanner_get_token( scanner, status = scanner_get_token( scanner,
&token, &tok_type ); &token, &tok_type );
if( status == PARSE_OK && tok_type != TT_WHITESPACE ) { if( status == ( parse_status_t ) PARSE_OK &&
tok_type != TT_WHITESPACE ) {
/* restore non-whitespace token */ /* restore non-whitespace token */
scanner->cursor -= token.length; scanner->cursor -= token.length;
} }
@ -1124,7 +1130,7 @@ static int vfmatch(
* PARSE_NO_MATCH * PARSE_NO_MATCH
* PARSE_INCOMPLETE * PARSE_INCOMPLETE
************************************************************************/ ************************************************************************/
static int match( static parse_status_t match(
INOUT scanner_t *scanner, INOUT scanner_t *scanner,
IN const char *fmt, IN const char *fmt,
...) ...)
@ -1156,13 +1162,13 @@ static int match(
* PARSE_NO_MATCH -- failure to match pattern 'fmt' * PARSE_NO_MATCH -- failure to match pattern 'fmt'
* PARSE_FAILURE -- 'str' is bad input * PARSE_FAILURE -- 'str' is bad input
************************************************************************/ ************************************************************************/
int parse_status_t
matchstr( IN char *str, matchstr( IN char *str,
IN size_t slen, IN size_t slen,
IN const char *fmt, IN const char *fmt,
... ) ... )
{ {
int ret_code; parse_status_t ret_code;
char save_char; char save_char;
scanner_t scanner; scanner_t scanner;
membuffer buf; membuffer buf;
@ -1245,7 +1251,7 @@ parser_parse_requestline( INOUT http_parser_t * parser )
assert( parser->position == POS_REQUEST_LINE ); assert( parser->position == POS_REQUEST_LINE );
status = skip_blank_lines( &parser->scanner ); status = skip_blank_lines( &parser->scanner );
if( status != PARSE_OK ) { if( status != ( parse_status_t ) PARSE_OK ) {
return status; return status;
} }
/*simple get http 0.9 as described in http 1.0 spec */ /*simple get http 0.9 as described in http 1.0 spec */
@ -1253,7 +1259,7 @@ parser_parse_requestline( INOUT http_parser_t * parser )
status = status =
match( &parser->scanner, "%s\t%S%w%c", &method_str, &url_str ); match( &parser->scanner, "%s\t%S%w%c", &method_str, &url_str );
if( status == PARSE_OK ) { if( status == ( parse_status_t ) PARSE_OK ) {
index = index =
map_str_to_int( method_str.buf, method_str.length, map_str_to_int( method_str.buf, method_str.length,
@ -1292,7 +1298,7 @@ parser_parse_requestline( INOUT http_parser_t * parser )
status = match( &parser->scanner, status = match( &parser->scanner,
"%s\t%S\t%ihttp%w/%w%L%c", &method_str, &url_str, "%s\t%S\t%ihttp%w/%w%L%c", &method_str, &url_str,
&version_str ); &version_str );
if( status != PARSE_OK ) { if( status != ( parse_status_t ) PARSE_OK ) {
return status; return status;
} }
/* store url */ /* store url */
@ -1333,7 +1339,7 @@ parser_parse_requestline( INOUT http_parser_t * parser )
return PARSE_FAILURE; return PARSE_FAILURE;
} }
hmsg->method = Http_Method_Table[index].id; hmsg->method = ( http_method_t ) Http_Method_Table[index].id;
parser->position = POS_HEADERS; /* move to headers */ parser->position = POS_HEADERS; /* move to headers */
return PARSE_OK; return PARSE_OK;
@ -1366,14 +1372,14 @@ parse_status_t parser_parse_responseline(INOUT http_parser_t *parser)
assert(parser->position == POS_RESPONSE_LINE); assert(parser->position == POS_RESPONSE_LINE);
status = skip_blank_lines(&parser->scanner); status = skip_blank_lines(&parser->scanner);
if (status != PARSE_OK) if (status != ( parse_status_t) PARSE_OK)
return status; return status;
/* response line */ /* response line */
/*status = match( &parser->scanner, "%ihttp%w/%w%d\t.\t%d\t%d\t%L%c", */ /*status = match( &parser->scanner, "%ihttp%w/%w%d\t.\t%d\t%d\t%L%c", */
/* &hmsg->major_version, &hmsg->minor_version, */ /* &hmsg->major_version, &hmsg->minor_version, */
/* &hmsg->status_code, &hmsg->status_msg ); */ /* &hmsg->status_code, &hmsg->status_msg ); */
status = match(&parser->scanner, "%ihttp%w/%w%L%c", &line); status = match(&parser->scanner, "%ihttp%w/%w%L%c", &line);
if (status != PARSE_OK) if (status != ( parse_status_t ) PARSE_OK)
return status; return status;
save_char = line.buf[line.length]; save_char = line.buf[line.length];
line.buf[line.length] = '\0'; /* null-terminate */ line.buf[line.length] = '\0'; /* null-terminate */

View File

@ -902,7 +902,7 @@ typedef struct HTTPCONNECTIONHANDLE {
* \li \c PARSE_FAILURE - Failure to parse data correctly * \li \c PARSE_FAILURE - Failure to parse data correctly
* \li \c UPNP_E_BAD_HTTPMSG - Socker read() returns an error * \li \c UPNP_E_BAD_HTTPMSG - Socker read() returns an error
*/ */
static int ReadResponseLineAndHeaders( static parse_status_t ReadResponseLineAndHeaders(
/*! Socket information object. */ /*! Socket information object. */
IN SOCKINFO *info, IN SOCKINFO *info,
/*! HTTP Parser object. */ /*! HTTP Parser object. */
@ -1220,12 +1220,13 @@ int http_GetHttpResponse(void *Handle, UpnpString *headers,
status = ReadResponseLineAndHeaders(&handle->sock_info, status = ReadResponseLineAndHeaders(&handle->sock_info,
&handle->response, &timeout, &handle->response, &timeout,
&http_error_code); &http_error_code);
if (status != PARSE_OK) { if (status != (parse_status_t)PARSE_OK) {
ret_code = UPNP_E_BAD_RESPONSE; ret_code = UPNP_E_BAD_RESPONSE;
goto errorHandler; goto errorHandler;
} }
status = parser_get_entity_read_method(&handle->response); status = parser_get_entity_read_method(&handle->response);
if (status != PARSE_CONTINUE_1 && status != PARSE_SUCCESS) { if (status != (parse_status_t)PARSE_CONTINUE_1 &&
status != (parse_status_t)PARSE_SUCCESS) {
ret_code = UPNP_E_BAD_RESPONSE; ret_code = UPNP_E_BAD_RESPONSE;
goto errorHandler; goto errorHandler;
} }
@ -1515,6 +1516,8 @@ int http_MakeMessage(membuffer *buf, int http_major_version,
} }
assert(loc_time); assert(loc_time);
date = gmtime(loc_time); date = gmtime(loc_time);
if (date == NULL)
goto error_handler;
rc = snprintf(tempbuf, sizeof(tempbuf), rc = snprintf(tempbuf, sizeof(tempbuf),
"%s%s, %02d %s %d %02d:%02d:%02d GMT%s", "%s%s, %02d %s %d %02d:%02d:%02d GMT%s",
start_str, &weekday_str[date->tm_wday * 4], start_str, &weekday_str[date->tm_wday * 4],
@ -1875,13 +1878,14 @@ int http_OpenHttpGetEx(
} }
status = ReadResponseLineAndHeaders(&handle->sock_info, status = ReadResponseLineAndHeaders(&handle->sock_info,
&handle->response, &timeout, &http_error_code); &handle->response, &timeout, &http_error_code);
if (status != PARSE_OK) { if (status != (parse_status_t)PARSE_OK) {
errCode = UPNP_E_BAD_RESPONSE; errCode = UPNP_E_BAD_RESPONSE;
free(handle); free(handle);
break; break;
} }
status = parser_get_entity_read_method(&handle->response); status = parser_get_entity_read_method(&handle->response);
if (status != PARSE_CONTINUE_1 && status != PARSE_SUCCESS) { if (status != (parse_status_t)PARSE_CONTINUE_1 &&
status != (parse_status_t)PARSE_SUCCESS) {
errCode = UPNP_E_BAD_RESPONSE; errCode = UPNP_E_BAD_RESPONSE;
free(handle); free(handle);
break; break;

View File

@ -139,14 +139,14 @@ int replace_escaped(char *in, size_t index, size_t *max)
size_t i = 0; size_t i = 0;
size_t j = 0; size_t j = 0;
if (in[index] == '%' && isxdigit(in[index + 1]) && isxdigit(in[index + 2])) { if (in[index] == '%' && isxdigit(in[index + (size_t)1]) && isxdigit(in[index + (size_t)2])) {
/* Note the "%2x", makes sure that we convert a maximum of two /* Note the "%2x", makes sure that we convert a maximum of two
* characters. */ * characters. */
if (sscanf(&in[index + 1], "%2x", &tempInt) != 1) { if (sscanf(&in[index + (size_t)1], "%2x", &tempInt) != 1) {
return 0; return 0;
} }
tempChar = (char)tempInt; tempChar = (char)tempInt;
for (i = index + 3, j = index; j < *max; i++, j++) { for (i = index + (size_t)3, j = index; j < *max; i++, j++) {
in[j] = tempChar; in[j] = tempChar;
if (i < *max) { if (i < *max) {
tempChar = in[i]; tempChar = in[i];
@ -154,7 +154,7 @@ int replace_escaped(char *in, size_t index, size_t *max)
tempChar = 0; tempChar = 0;
} }
} }
*max -= 2; *max -= (size_t)2;
return 1; return 1;
} else { } else {
return 0; return 0;
@ -176,12 +176,12 @@ static size_t parse_uric(
/*! [out] Token object where the string of characters is copied. */ /*! [out] Token object where the string of characters is copied. */
token *out) token *out)
{ {
size_t i = 0; size_t i = (size_t)0;
while (i < max && while (i < max &&
(is_unreserved(in[i]) || (is_unreserved(in[i]) ||
is_reserved(in[i]) || is_reserved(in[i]) ||
((i + 2 < max) && is_escaped(&in[i])))) { ((i + (size_t)2 < max) && is_escaped(&in[i])))) {
i++; i++;
} }
@ -414,14 +414,14 @@ int parse_hostport(
} }
/* The length of the host and port string can be calculated by */ /* The length of the host and port string can be calculated by */
/* subtracting pointers. */ /* subtracting pointers. */
hostport_size = (size_t)(c - workbuf); hostport_size = (size_t)c - (size_t)workbuf;
/* Fill in the 'out' information. */ /* Fill in the 'out' information. */
if (af == AF_INET) { if (af == AF_INET) {
sai4->sin_family = AF_INET; sai4->sin_family = (unsigned short)AF_INET;
sai4->sin_port = htons(port); sai4->sin_port = htons(port);
ret = inet_pton(AF_INET, srvname, &sai4->sin_addr); ret = inet_pton(AF_INET, srvname, &sai4->sin_addr);
} else if (af == AF_INET6) { } else if (af == AF_INET6) {
sai6->sin6_family = AF_INET6; sai6->sin6_family = (unsigned short)AF_INET6;
sai6->sin6_port = htons(port); sai6->sin6_port = htons(port);
sai6->sin6_scope_id = gIF_INDEX; sai6->sin6_scope_id = gIF_INDEX;
ret = inet_pton(AF_INET6, srvname, &sai6->sin6_addr); ret = inet_pton(AF_INET6, srvname, &sai6->sin6_addr);
@ -462,19 +462,19 @@ static size_t parse_scheme(
/*! [out] Output parameter whose buffer is filled in with the scheme. */ /*! [out] Output parameter whose buffer is filled in with the scheme. */
token *out) token *out)
{ {
size_t i = 0; size_t i = (size_t)0;
out->size = 0; out->size = (size_t)0;
out->buff = NULL; out->buff = NULL;
if( ( max == 0 ) || ( !isalpha( in[0] ) ) ) if( ( max == (size_t)0 ) || ( !isalpha( in[0] ) ) )
return 0; return (size_t)0;
i++; i++;
while( ( i < max ) && ( in[i] != ':' ) ) { while( ( i < max ) && ( in[i] != ':' ) ) {
if( !( isalnum( in[i] ) || ( in[i] == '+' ) || ( in[i] == '-' ) if( !( isalnum( in[i] ) || ( in[i] == '+' ) || ( in[i] == '-' )
|| ( in[i] == '.' ) ) ) || ( in[i] == '.' ) ) )
return 0; return (size_t)0;
i++; i++;
} }
if( i < max ) { if( i < max ) {
@ -483,15 +483,15 @@ static size_t parse_scheme(
return i; return i;
} }
return 0; return (size_t)0;
} }
int remove_escaped_chars(INOUT char *in, INOUT size_t *size) int remove_escaped_chars(INOUT char *in, INOUT size_t *size)
{ {
size_t i = 0; size_t i = (size_t)0;
for (i = 0; i < *size; i++) { for (i = (size_t)0; i < *size; i++) {
replace_escaped(in, i, size); replace_escaped(in, i, size);
} }
@ -570,7 +570,7 @@ char *resolve_rel_url(char *base_url, char *rel_url)
uri_type base; uri_type base;
uri_type rel; uri_type rel;
size_t i = 0; size_t i = (size_t)0;
char *finger = NULL; char *finger = NULL;
char *last_slash = NULL; char *last_slash = NULL;
@ -579,7 +579,7 @@ char *resolve_rel_url(char *base_url, char *rel_url)
if( base_url && rel_url ) { if( base_url && rel_url ) {
out = out =
( char * )malloc( strlen( base_url ) + strlen( rel_url ) + 2 ); ( char * )malloc( strlen( base_url ) + strlen( rel_url ) + (size_t)2 );
} else { } else {
if( rel_url ) if( rel_url )
return strdup( rel_url ); return strdup( rel_url );
@ -590,36 +590,36 @@ char *resolve_rel_url(char *base_url, char *rel_url)
if( out == NULL ) { if( out == NULL ) {
return NULL; return NULL;
} }
memset( out, 0, strlen( base_url ) + strlen( rel_url ) + 2 ); memset( out, 0, strlen( base_url ) + strlen( rel_url ) + (size_t)2 );
if( ( parse_uri( rel_url, strlen( rel_url ), &rel ) ) == HTTP_SUCCESS ) { if( ( parse_uri( rel_url, strlen( rel_url ), &rel ) ) == HTTP_SUCCESS ) {
if( rel.type == ABSOLUTE ) { if( rel.type == ( enum uriType) ABSOLUTE ) {
strncpy( out, rel_url, strlen ( rel_url ) ); strncpy( out, rel_url, strlen ( rel_url ) );
} else { } else {
if( ( parse_uri( base_url, strlen( base_url ), &base ) == if( ( parse_uri( base_url, strlen( base_url ), &base ) ==
HTTP_SUCCESS ) HTTP_SUCCESS )
&& ( base.type == ABSOLUTE ) ) { && ( base.type == ( enum uriType ) ABSOLUTE ) ) {
if( strlen( rel_url ) == 0 ) { if( strlen( rel_url ) == (size_t)0 ) {
strncpy( out, base_url, strlen ( base_url ) ); strncpy( out, base_url, strlen ( base_url ) );
} else { } else {
char *out_finger = out; char *out_finger = out;
assert( base.scheme.size + 1 /* ':' */ <= strlen ( base_url ) ); assert( base.scheme.size + (size_t)1 /* ':' */ <= strlen ( base_url ) );
memcpy( out, base.scheme.buff, base.scheme.size ); memcpy( out, base.scheme.buff, base.scheme.size );
out_finger += base.scheme.size; out_finger += base.scheme.size;
( *out_finger ) = ':'; ( *out_finger ) = ':';
out_finger++; out_finger++;
if( rel.hostport.text.size > 0 ) { if( rel.hostport.text.size > (size_t)0 ) {
snprintf( out_finger, strlen( rel_url ) + 1, "%s", snprintf( out_finger, strlen( rel_url ) + (size_t)1,
rel_url ); "%s", rel_url );
} else { } else {
if( base.hostport.text.size > 0 ) { if( base.hostport.text.size > (size_t)0 ) {
assert( base.scheme.size + 1 assert( base.scheme.size + (size_t)1
+ base.hostport.text.size + 2 /* "//" */ <= strlen ( base_url ) ); + base.hostport.text.size + (size_t)2 /* "//" */ <= strlen ( base_url ) );
memcpy( out_finger, "//", 2 ); memcpy( out_finger, "//", 2 );
out_finger += 2; out_finger += 2;
memcpy( out_finger, base.hostport.text.buff, memcpy( out_finger, base.hostport.text.buff,
@ -627,22 +627,22 @@ char *resolve_rel_url(char *base_url, char *rel_url)
out_finger += base.hostport.text.size; out_finger += base.hostport.text.size;
} }
if( rel.path_type == ABS_PATH ) { if( rel.path_type == ( enum pathType ) ABS_PATH ) {
strncpy( out_finger, rel_url, strlen ( rel_url ) ); strncpy( out_finger, rel_url, strlen ( rel_url ) );
} else { } else {
char temp_path = '/'; char temp_path = '/';
if( base.pathquery.size == 0 ) { if( base.pathquery.size == (size_t)0 ) {
base.pathquery.size = 1; base.pathquery.size = (size_t)1;
base.pathquery.buff = &temp_path; base.pathquery.buff = &temp_path;
} }
assert( base.scheme.size + 1 + base.hostport.text.size + 2 assert( base.scheme.size + (size_t)1 + base.hostport.text.size + (size_t)2
+ base.pathquery.size <= strlen ( base_url ) + 1 /* temp_path */); + base.pathquery.size <= strlen ( base_url ) + (size_t)1 /* temp_path */);
finger = out_finger; finger = out_finger;
last_slash = finger; last_slash = finger;
i = 0; i = (size_t)0;
while( ( i < base.pathquery.size ) && while( ( i < base.pathquery.size ) &&
( base.pathquery.buff[i] != '?' ) ) { ( base.pathquery.buff[i] != '?' ) ) {
( *finger ) = base.pathquery.buff[i]; ( *finger ) = base.pathquery.buff[i];
@ -684,8 +684,8 @@ char *resolve_rel_url(char *base_url, char *rel_url)
int parse_uri(const char *in, size_t max, uri_type *out) int parse_uri(const char *in, size_t max, uri_type *out)
{ {
int begin_path = 0; int begin_path = 0;
size_t begin_hostport = 0; size_t begin_hostport = (size_t)0;
size_t begin_fragment = 0; size_t begin_fragment = (size_t)0;
int defaultPort = 80; int defaultPort = 80;
begin_hostport = parse_scheme(in, max, &out->scheme); begin_hostport = parse_scheme(in, max, &out->scheme);
@ -697,10 +697,10 @@ int parse_uri(const char *in, size_t max, uri_type *out)
out->type = RELATIVE; out->type = RELATIVE;
out->path_type = REL_PATH; out->path_type = REL_PATH;
} }
if (begin_hostport + 1 < max && if (begin_hostport + (size_t)1 < max &&
in[begin_hostport] == '/' && in[begin_hostport] == '/' &&
in[begin_hostport + 1] == '/') { in[begin_hostport + (size_t)1] == '/') {
begin_hostport += 2; begin_hostport += (size_t)2;
if (token_string_casecmp(&out->scheme, "https") == 0) { if (token_string_casecmp(&out->scheme, "https") == 0) {
defaultPort = 443; defaultPort = 443;
} }
@ -728,7 +728,7 @@ int parse_uri(const char *in, size_t max, uri_type *out)
&out->fragment); &out->fragment);
} else { } else {
out->fragment.buff = NULL; out->fragment.buff = NULL;
out->fragment.size = 0; out->fragment.size = (size_t)0;
} }
return HTTP_SUCCESS; return HTTP_SUCCESS;
@ -742,10 +742,10 @@ int parse_uri_and_unescape(char *in, size_t max, uri_type *out)
return ret; return ret;
} }
if (out->pathquery.size > 0) { if (out->pathquery.size > (size_t)0) {
remove_escaped_chars((char *)out->pathquery.buff, &out->pathquery.size); remove_escaped_chars((char *)out->pathquery.buff, &out->pathquery.size);
} }
if (out->fragment.size > 0) { if (out->fragment.size > (size_t)0) {
remove_escaped_chars((char *)out->fragment.buff, &out->fragment.size); remove_escaped_chars((char *)out->fragment.buff, &out->fragment.size);
} }

View File

@ -743,8 +743,8 @@ service_info *getServiceList(
service_info *current = NULL; service_info *current = NULL;
service_info *previous = NULL; service_info *previous = NULL;
IXML_NodeList *serviceNodeList = NULL; IXML_NodeList *serviceNodeList = NULL;
long unsigned int NumOfServices = 0; long unsigned int NumOfServices = 0lu;
long unsigned int i = 0; long unsigned int i = 0lu;
int fail = 0; int fail = 0;
if (getSubElement("UDN", node, &UDN) && if (getSubElement("UDN", node, &UDN) &&
@ -753,7 +753,7 @@ service_info *getServiceList(
(IXML_Element *)serviceList, "service"); (IXML_Element *)serviceList, "service");
if (serviceNodeList != NULL) { if (serviceNodeList != NULL) {
NumOfServices = ixmlNodeList_length(serviceNodeList); NumOfServices = ixmlNodeList_length(serviceNodeList);
for (i = 0; i < NumOfServices; i++) { for (i = 0lu; i < NumOfServices; i++) {
current_service = current_service =
ixmlNodeList_item(serviceNodeList, i); ixmlNodeList_item(serviceNodeList, i);
fail = 0; fail = 0;
@ -867,8 +867,8 @@ getAllServiceList( IXML_Node * node,
IXML_NodeList *deviceList = NULL; IXML_NodeList *deviceList = NULL;
IXML_Node *currentDevice = NULL; IXML_Node *currentDevice = NULL;
long unsigned int NumOfDevices = 0; long unsigned int NumOfDevices = 0lu;
long unsigned int i = 0; long unsigned int i = 0lu;
(*out_end) = NULL; (*out_end) = NULL;
@ -876,7 +876,7 @@ getAllServiceList( IXML_Node * node,
(IXML_Element *)node, "device"); (IXML_Element *)node, "device");
if (deviceList) { if (deviceList) {
NumOfDevices = ixmlNodeList_length(deviceList); NumOfDevices = ixmlNodeList_length(deviceList);
for (i = 0; i < NumOfDevices; i++) { for (i = 0lu; i < NumOfDevices; i++) {
currentDevice = ixmlNodeList_item(deviceList, i); currentDevice = ixmlNodeList_item(deviceList, i);
if (head) { if (head) {
end->next = getServiceList(currentDevice, end->next = getServiceList(currentDevice,
@ -922,8 +922,8 @@ removeServiceTable( IXML_Node * node,
service_info *current_service = NULL; service_info *current_service = NULL;
service_info *start_search = NULL; service_info *start_search = NULL;
service_info *prev_service = NULL; service_info *prev_service = NULL;
long unsigned int NumOfDevices = 0; long unsigned int NumOfDevices = 0lu;
long unsigned int i = 0; long unsigned int i = 0lu;
if( getSubElement( "root", node, &root ) ) { if( getSubElement( "root", node, &root ) ) {
current_service = in->serviceList; current_service = in->serviceList;
@ -933,7 +933,7 @@ removeServiceTable( IXML_Node * node,
"device" ); "device" );
if( deviceList != NULL ) { if( deviceList != NULL ) {
NumOfDevices = ixmlNodeList_length( deviceList ); NumOfDevices = ixmlNodeList_length( deviceList );
for( i = 0; i < NumOfDevices; i++ ) { for( i = 0lu; i < NumOfDevices; i++ ) {
if( ( start_search ) if( ( start_search )
&& ( ( getSubElement( "UDN", node, &currentUDN ) ) && ( ( getSubElement( "UDN", node, &currentUDN ) )
&& ( UDN = getElementValue( currentUDN ) ) ) ) { && ( UDN = getElementValue( currentUDN ) ) ) ) {
@ -944,7 +944,8 @@ removeServiceTable( IXML_Node * node,
while( ( current_service ) while( ( current_service )
&& ( strcmp( current_service->UDN, UDN ) ) ) { && ( strcmp( current_service->UDN, UDN ) ) ) {
current_service = current_service->next; current_service = current_service->next;
prev_service = current_service->next; if( current_service != NULL)
prev_service = current_service->next;
} }
while( ( current_service ) while( ( current_service )
&& ( !strcmp( current_service->UDN, UDN ) ) ) { && ( !strcmp( current_service->UDN, UDN ) ) ) {

View File

@ -2,6 +2,7 @@
* *
* Copyright (c) 2000-2003 Intel Corporation * Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. * All rights reserved.
* Copyright (c) 2012 France Telecom All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
@ -48,7 +49,7 @@ char *str_alloc(const char *str, size_t str_len)
{ {
char *s; char *s;
s = (char *)malloc(str_len + 1); s = (char *)malloc(str_len + (size_t)1);
if (s == NULL) { if (s == NULL) {
return NULL; /* no mem */ return NULL; /* no mem */
} }
@ -96,8 +97,8 @@ static UPNP_INLINE void membuffer_initialize(
membuffer *m) membuffer *m)
{ {
m->buf = NULL; m->buf = NULL;
m->length = 0; m->length = (size_t)0;
m->capacity = 0; m->capacity = (size_t)0;
} }
int membuffer_set_size(membuffer *m, size_t new_length) int membuffer_set_size(membuffer *m, size_t new_length)
@ -128,14 +129,14 @@ int membuffer_set_size(membuffer *m, size_t new_length)
assert(alloc_len >= new_length); assert(alloc_len >= new_length);
temp_buf = realloc(m->buf, alloc_len + 1); /*LEAK_FIX_MK */ temp_buf = realloc(m->buf, alloc_len + (size_t)1); /*LEAK_FIX_MK */
/*temp_buf = Realloc( m->buf,m->length, alloc_len + 1 );LEAK_FIX_MK */ /*temp_buf = Realloc( m->buf,m->length, alloc_len + 1 );LEAK_FIX_MK */
if (temp_buf == NULL) { if (temp_buf == NULL) {
/* try smaller size */ /* try smaller size */
alloc_len = new_length; alloc_len = new_length;
temp_buf = realloc(m->buf, alloc_len + 1); /*LEAK_FIX_MK */ temp_buf = realloc(m->buf, alloc_len + (size_t)1); /*LEAK_FIX_MK */
/*temp_buf = Realloc( m->buf,m->length, alloc_len + 1 );LEAK_FIX_MK */ /*temp_buf = Realloc( m->buf,m->length, alloc_len + 1 );LEAK_FIX_MK */
if (temp_buf == NULL) { if (temp_buf == NULL) {
@ -250,7 +251,7 @@ void membuffer_delete(membuffer * m, size_t index, size_t num_bytes)
if (index + num_bytes > m->length) { if (index + num_bytes > m->length) {
num_bytes = m->length - index; num_bytes = m->length - index;
/* every thing at and after index purged */ /* every thing at and after index purged */
copy_len = 0; copy_len = (size_t)0;
} else { } else {
/* calc num bytes after deleted string */ /* calc num bytes after deleted string */
copy_len = m->length - (index + num_bytes); copy_len = m->length - (index + num_bytes);
@ -261,6 +262,8 @@ void membuffer_delete(membuffer * m, size_t index, size_t num_bytes)
return_value = membuffer_set_size(m, new_length); return_value = membuffer_set_size(m, new_length);
/* shrinking should always work */ /* shrinking should always work */
assert(return_value == 0); assert(return_value == 0);
if (return_value != 0)
return;
/* don't modify until buffer is set */ /* don't modify until buffer is set */
m->length = new_length; m->length = new_length;

View File

@ -2,6 +2,7 @@
* *
* Copyright (c) 2000-2003 Intel Corporation * Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. * All rights reserved.
* Copyright (c) 2012 France Telecom All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
@ -44,14 +45,14 @@
void linecopy(char dest[LINE_SIZE], const char *src) void linecopy(char dest[LINE_SIZE], const char *src)
{ {
strncpy(dest, src, LINE_SIZE - 1); strncpy(dest, src, LINE_SIZE - (size_t)1);
/* null-terminate if len(src) >= LINE_SIZE. */ /* null-terminate if len(src) >= LINE_SIZE. */
dest[LINE_SIZE - 1] = '\0'; dest[LINE_SIZE - 1] = '\0';
} }
void namecopy(char dest[NAME_SIZE], const char *src) void namecopy(char dest[NAME_SIZE], const char *src)
{ {
strncpy(dest, src, NAME_SIZE - 1); strncpy(dest, src, NAME_SIZE - (size_t)1);
/* null-terminate if len(src) >= NAME_SIZE. */ /* null-terminate if len(src) >= NAME_SIZE. */
dest[NAME_SIZE - 1] = '\0'; dest[NAME_SIZE - 1] = '\0';
} }
@ -60,7 +61,7 @@ void linecopylen(char dest[LINE_SIZE], const char *src, size_t srclen)
{ {
size_t len; size_t len;
len = srclen < (LINE_SIZE - 1) ? srclen : (LINE_SIZE - 1); len = srclen < (LINE_SIZE - (size_t)1) ? srclen : (LINE_SIZE - (size_t)1);
strncpy(dest, src, len); strncpy(dest, src, len);
dest[len] = '\0'; dest[len] = '\0';
} }

View File

@ -2,6 +2,7 @@
* *
* Copyright (c) 2000-2003 Intel Corporation * Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. * All rights reserved.
* Copyright (c) 2012 France Telecom All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
@ -433,7 +434,7 @@ parse_status_t parser_append( INOUT http_parser_t* parser,
* PARSE_NO_MATCH -- failure to match pattern 'fmt' * PARSE_NO_MATCH -- failure to match pattern 'fmt'
* PARSE_FAILURE -- 'str' is bad input * PARSE_FAILURE -- 'str' is bad input
************************************************************************/ ************************************************************************/
int matchstr( IN char *str, IN size_t slen, IN const char* fmt, ... ); parse_status_t matchstr( IN char *str, IN size_t slen, IN const char* fmt, ... );
/************************************************************************ /************************************************************************
* Function: raw_to_int * Function: raw_to_int

View File

@ -2,6 +2,7 @@
* *
* Copyright (c) 2000-2003 Intel Corporation * Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. * All rights reserved.
* Copyright (c) 2012 France Telecom All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
@ -62,7 +63,7 @@ typedef struct {
/*! used to increase size; MUST be > 0; (read/write). */ /*! used to increase size; MUST be > 0; (read/write). */
size_t size_inc; size_t size_inc;
/*! default value of size_inc. */ /*! default value of size_inc. */
#define MEMBUF_DEF_SIZE_INC 5 #define MEMBUF_DEF_SIZE_INC (size_t)5
} membuffer; } membuffer;
#ifdef __cplusplus #ifdef __cplusplus

View File

@ -2,6 +2,7 @@
* *
* Copyright (c) 2000-2003 Intel Corporation * Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. * All rights reserved.
* Copyright (c) 2012 France Telecom All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
@ -49,7 +50,7 @@ extern "C" {
#include <stdio.h> #include <stdio.h>
#include <time.h> #include <time.h>
#define SID_SIZE 41 #define SID_SIZE (size_t)41
#ifdef INCLUDE_DEVICE_APIS #ifdef INCLUDE_DEVICE_APIS

View File

@ -5,7 +5,7 @@
* *
* Copyright (c) 2000-2003 Intel Corporation * Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. * All rights reserved.
* Copyright (C) 2011 France Telecom All rights reserved. * Copyright (C) 2011-2012 France Telecom All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
@ -73,7 +73,7 @@ typedef enum SsdpSearchType {
SSDP_SERVICE SSDP_SERVICE
} SType; } SType;
#define BUFSIZE 2500 #define BUFSIZE (size_t)2500
#define SSDP_IP "239.255.255.250" #define SSDP_IP "239.255.255.250"
#define SSDP_IPV6_LINKLOCAL "FF02::C" #define SSDP_IPV6_LINKLOCAL "FF02::C"
#define SSDP_IPV6_SITELOCAL "FF05::C" #define SSDP_IPV6_SITELOCAL "FF05::C"

View File

@ -174,7 +174,7 @@ Upnp_Handle_Type GetClientHandleInfo(
*/ */
Upnp_Handle_Type GetDeviceHandleInfo( Upnp_Handle_Type GetDeviceHandleInfo(
/*! [in] Address family. */ /*! [in] Address family. */
const int AddressFamily, const unsigned short AddressFamily,
/*! [out] Device handle pointer. */ /*! [out] Device handle pointer. */
int *device_handle_out, int *device_handle_out,
/*! [out] Device handle structure passed by this function. */ /*! [out] Device handle structure passed by this function. */

View File

@ -5,6 +5,7 @@
* *
* Copyright (c) 2000-2003 Intel Corporation * Copyright (c) 2000-2003 Intel Corporation
* All rights reserved. * All rights reserved.
* Copyright (c) 2012 France Telecom All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
@ -109,7 +110,7 @@ void linecopylen(
#endif #endif
/* Size of the errorBuffer variable, passed to the strerror_r() function */ /* Size of the errorBuffer variable, passed to the strerror_r() function */
#define ERROR_BUFFER_LEN 256 #define ERROR_BUFFER_LEN (size_t)256
/* C specific */ /* C specific */
/* VC needs these in C++ mode too (do other compilers?) */ /* VC needs these in C++ mode too (do other compilers?) */

View File

@ -187,7 +187,7 @@ static int NewRequestHandler(
char buf_ntop[INET6_ADDRSTRLEN]; char buf_ntop[INET6_ADDRSTRLEN];
int ret = UPNP_E_SUCCESS; int ret = UPNP_E_SUCCESS;
ReplySock = socket(DestAddr->sa_family, SOCK_DGRAM, 0); ReplySock = socket((int)DestAddr->sa_family, SOCK_DGRAM, 0);
if (ReplySock == INVALID_SOCKET) { if (ReplySock == INVALID_SOCKET) {
strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN); strerror_r(errno, errorBuffer, ERROR_BUFFER_LEN);
UpnpPrintf(UPNP_INFO, SSDP, __FILE__, __LINE__, UpnpPrintf(UPNP_INFO, SSDP, __FILE__, __LINE__,
@ -320,7 +320,7 @@ static void CreateServicePacket(
/*! [out] Output buffer filled with HTTP statement. */ /*! [out] Output buffer filled with HTTP statement. */
char **packet, char **packet,
/*! [in] Address family of the HTTP request. */ /*! [in] Address family of the HTTP request. */
int AddressFamily, unsigned short AddressFamily,
/*! [in] PowerState as defined by UPnP Low Power. */ /*! [in] PowerState as defined by UPnP Low Power. */
int PowerState, int PowerState,
/*! [in] SleepPeriod as defined by UPnP Low Power. */ /*! [in] SleepPeriod as defined by UPnP Low Power. */
@ -336,7 +336,7 @@ static void CreateServicePacket(
* Notf == 1 means service advertisement, * Notf == 1 means service advertisement,
* Notf == 2 means reply */ * Notf == 2 means reply */
membuffer_init(&buf); membuffer_init(&buf);
buf.size_inc = 30; buf.size_inc = (size_t)30;
*packet = NULL; *packet = NULL;
if (msg_type == MSGTYPE_REPLY) { if (msg_type == MSGTYPE_REPLY) {
if (PowerState > 0) { if (PowerState > 0) {
@ -447,11 +447,11 @@ int DeviceAdvertisement(char *DevType, int RootDev, char *Udn, char *Location,
memset(&__ss, 0, sizeof(__ss)); memset(&__ss, 0, sizeof(__ss));
memset(Mil_Usn, 0, sizeof(Mil_Usn)); memset(Mil_Usn, 0, sizeof(Mil_Usn));
if (AddressFamily == AF_INET) { if (AddressFamily == AF_INET) {
DestAddr4->sin_family = AF_INET; DestAddr4->sin_family = (unsigned short)AF_INET;
inet_pton(AF_INET, SSDP_IP, &DestAddr4->sin_addr); inet_pton(AF_INET, SSDP_IP, &DestAddr4->sin_addr);
DestAddr4->sin_port = htons(SSDP_PORT); DestAddr4->sin_port = htons(SSDP_PORT);
} else if (AddressFamily == AF_INET6) { } else if (AddressFamily == AF_INET6) {
DestAddr6->sin6_family = AF_INET6; DestAddr6->sin6_family = (unsigned short)AF_INET6;
inet_pton(AF_INET6, inet_pton(AF_INET6,
(isUrlV6UlaGua(Location)) ? SSDP_IPV6_SITELOCAL : (isUrlV6UlaGua(Location)) ? SSDP_IPV6_SITELOCAL :
SSDP_IPV6_LINKLOCAL, &DestAddr6->sin6_addr); SSDP_IPV6_LINKLOCAL, &DestAddr6->sin6_addr);
@ -656,11 +656,11 @@ int ServiceAdvertisement(char *Udn, char *ServType, char *Location,
memset(Mil_Usn, 0, sizeof(Mil_Usn)); memset(Mil_Usn, 0, sizeof(Mil_Usn));
szReq[0] = NULL; szReq[0] = NULL;
if (AddressFamily == AF_INET) { if (AddressFamily == AF_INET) {
DestAddr4->sin_family = AF_INET; DestAddr4->sin_family = (unsigned short)AF_INET;
inet_pton(AF_INET, SSDP_IP, &DestAddr4->sin_addr); inet_pton(AF_INET, SSDP_IP, &DestAddr4->sin_addr);
DestAddr4->sin_port = htons(SSDP_PORT); DestAddr4->sin_port = htons(SSDP_PORT);
} else if (AddressFamily == AF_INET6) { } else if (AddressFamily == AF_INET6) {
DestAddr6->sin6_family = AF_INET6; DestAddr6->sin6_family = (unsigned short)AF_INET6;
inet_pton(AF_INET6, inet_pton(AF_INET6,
(isUrlV6UlaGua(Location)) ? SSDP_IPV6_SITELOCAL : (isUrlV6UlaGua(Location)) ? SSDP_IPV6_SITELOCAL :
SSDP_IPV6_LINKLOCAL, &DestAddr6->sin6_addr); SSDP_IPV6_LINKLOCAL, &DestAddr6->sin6_addr);
@ -783,11 +783,11 @@ int DeviceShutdown(char *DevType, int RootDev, char *Udn, char *_Server,
memset(&__ss, 0, sizeof(__ss)); memset(&__ss, 0, sizeof(__ss));
memset(Mil_Usn, 0, sizeof(Mil_Usn)); memset(Mil_Usn, 0, sizeof(Mil_Usn));
if (AddressFamily == AF_INET) { if (AddressFamily == AF_INET) {
DestAddr4->sin_family = AF_INET; DestAddr4->sin_family = (unsigned short)AF_INET;
inet_pton(AF_INET, SSDP_IP, &DestAddr4->sin_addr); inet_pton(AF_INET, SSDP_IP, &DestAddr4->sin_addr);
DestAddr4->sin_port = htons(SSDP_PORT); DestAddr4->sin_port = htons(SSDP_PORT);
} else if (AddressFamily == AF_INET6) { } else if (AddressFamily == AF_INET6) {
DestAddr6->sin6_family = AF_INET6; DestAddr6->sin6_family = (unsigned short)AF_INET6;
inet_pton(AF_INET6, inet_pton(AF_INET6,
(isUrlV6UlaGua(Location)) ? SSDP_IPV6_SITELOCAL : (isUrlV6UlaGua(Location)) ? SSDP_IPV6_SITELOCAL :
SSDP_IPV6_LINKLOCAL, &DestAddr6->sin6_addr); SSDP_IPV6_LINKLOCAL, &DestAddr6->sin6_addr);

View File

@ -346,7 +346,7 @@ int AdvertiseAndReply(int AdFlag, UpnpDevice_Handle Hnd,
"ServiceType not found \n"); "ServiceType not found \n");
continue; continue;
} }
tmpNode2 = ixmlNodeList_item(tmpNodeList, 0); tmpNode2 = ixmlNodeList_item(tmpNodeList, 0lu);
if (!tmpNode2) if (!tmpNode2)
continue; continue;
textNode = ixmlNode_getFirstChild(tmpNode2); textNode = ixmlNode_getFirstChild(tmpNode2);
@ -404,7 +404,7 @@ int AdvertiseAndReply(int AdFlag, UpnpDevice_Handle Hnd,
SInfo->SleepPeriod, SInfo->SleepPeriod,
SInfo->RegistrationState); SInfo->RegistrationState);
} else if (atoi(strrchr (ServiceType, ':') + 1) == } else if (atoi(strrchr (ServiceType, ':') + 1) ==
atoi(&servType[strlen(servType) - 1])) { atoi(&servType[strlen(servType) - (size_t)1])) {
UpnpPrintf(UPNP_INFO, API, __FILE__, __LINE__, UpnpPrintf(UPNP_INFO, API, __FILE__, __LINE__,
"ServiceType=%s and search servType=%s MATCH\n", "ServiceType=%s and search servType=%s MATCH\n",
ServiceType, servType); ServiceType, servType);
@ -457,7 +457,7 @@ int unique_service_name(char *cmd, SsdpEvent *Evt)
char *ptr2 = NULL; char *ptr2 = NULL;
char *ptr3 = NULL; char *ptr3 = NULL;
int CommandFound = 0; int CommandFound = 0;
size_t n = 0; size_t n = (size_t)0;
int rc = 0; int rc = 0;
if (strstr(cmd, "uuid:schemas") != NULL) { if (strstr(cmd, "uuid:schemas") != NULL) {
@ -480,7 +480,7 @@ int unique_service_name(char *cmd, SsdpEvent *Evt)
return -1; return -1;
ptr1 = strstr(cmd, ":"); ptr1 = strstr(cmd, ":");
if (ptr1 != NULL) { if (ptr1 != NULL) {
n = (size_t) (ptr3 - ptr1); n = (size_t)ptr3 - (size_t)ptr1;
strncpy(TempBuf, ptr1, n); strncpy(TempBuf, ptr1, n);
TempBuf[n] = '\0'; TempBuf[n] = '\0';
rc = snprintf(Evt->DeviceType, sizeof(Evt->DeviceType), rc = snprintf(Evt->DeviceType, sizeof(Evt->DeviceType),
@ -493,7 +493,7 @@ int unique_service_name(char *cmd, SsdpEvent *Evt)
} }
if ((TempPtr = strstr(cmd, "uuid")) != NULL) { if ((TempPtr = strstr(cmd, "uuid")) != NULL) {
if ((Ptr = strstr(cmd, "::")) != NULL) { if ((Ptr = strstr(cmd, "::")) != NULL) {
n = (size_t) (Ptr - TempPtr); n = (size_t)Ptr - (size_t)TempPtr;
strncpy(Evt->UDN, TempPtr, n); strncpy(Evt->UDN, TempPtr, n);
Evt->UDN[n] = '\0'; Evt->UDN[n] = '\0';
} else { } else {
@ -521,7 +521,7 @@ int unique_service_name(char *cmd, SsdpEvent *Evt)
if ((TempPtr = strstr(cmd, "::upnp:rootdevice")) != NULL) { if ((TempPtr = strstr(cmd, "::upnp:rootdevice")) != NULL) {
/* Everything before "::upnp::rootdevice" is the UDN. */ /* Everything before "::upnp::rootdevice" is the UDN. */
if (TempPtr != cmd) { if (TempPtr != cmd) {
n = (size_t) (TempPtr - cmd); n = (size_t)TempPtr - (size_t)cmd;
strncpy(Evt->UDN, cmd, n); strncpy(Evt->UDN, cmd, n);
Evt->UDN[n] = 0; Evt->UDN[n] = 0;
CommandFound = 1; CommandFound = 1;
@ -595,14 +595,14 @@ static UPNP_INLINE int valid_ssdp_msg(
memptr hdr_value; memptr hdr_value;
/* check for valid methods - NOTIFY or M-SEARCH */ /* check for valid methods - NOTIFY or M-SEARCH */
if (hmsg->method != HTTPMETHOD_NOTIFY && if (hmsg->method != (http_method_t)HTTPMETHOD_NOTIFY &&
hmsg->method != HTTPMETHOD_MSEARCH && hmsg->method != (http_method_t)HTTPMETHOD_MSEARCH &&
hmsg->request_method != HTTPMETHOD_MSEARCH) { hmsg->request_method != (http_method_t)HTTPMETHOD_MSEARCH) {
return FALSE; return FALSE;
} }
if (hmsg->request_method != HTTPMETHOD_MSEARCH) { if (hmsg->request_method != (http_method_t)HTTPMETHOD_MSEARCH) {
/* check PATH == "*" */ /* check PATH == "*" */
if (hmsg->uri.type != RELATIVE || if (hmsg->uri.type != (enum uriType)RELATIVE ||
strncmp("*", hmsg->uri.pathquery.buff, strncmp("*", hmsg->uri.pathquery.buff,
hmsg->uri.pathquery.size) != 0) { hmsg->uri.pathquery.size) != 0) {
return FALSE; return FALSE;
@ -642,8 +642,8 @@ static UPNP_INLINE int start_event_handler(
parser = &data->parser; parser = &data->parser;
status = parser_parse(parser); status = parser_parse(parser);
if (status == PARSE_FAILURE) { if (status == (parse_status_t)PARSE_FAILURE) {
if (parser->msg.method != HTTPMETHOD_NOTIFY || if (parser->msg.method != (http_method_t)HTTPMETHOD_NOTIFY ||
!parser->valid_ssdp_notify_hack) { !parser->valid_ssdp_notify_hack) {
UpnpPrintf(UPNP_INFO, SSDP, __FILE__, __LINE__, UpnpPrintf(UPNP_INFO, SSDP, __FILE__, __LINE__,
"SSDP recvd bad msg code = %d\n", status); "SSDP recvd bad msg code = %d\n", status);
@ -651,7 +651,7 @@ static UPNP_INLINE int start_event_handler(
goto error_handler; goto error_handler;
} }
/* valid notify msg */ /* valid notify msg */
} else if (status != PARSE_SUCCESS) { } else if (status != (parse_status_t)PARSE_SUCCESS) {
UpnpPrintf(UPNP_INFO, SSDP, __FILE__, __LINE__, UpnpPrintf(UPNP_INFO, SSDP, __FILE__, __LINE__,
"SSDP recvd bad msg code = %d\n", status); "SSDP recvd bad msg code = %d\n", status);
@ -683,8 +683,8 @@ static void ssdp_event_handler_thread(
if (start_event_handler(the_data) != 0) if (start_event_handler(the_data) != 0)
return; return;
/* send msg to device or ctrlpt */ /* send msg to device or ctrlpt */
if (hmsg->method == HTTPMETHOD_NOTIFY || if (hmsg->method == (http_method_t)HTTPMETHOD_NOTIFY ||
hmsg->request_method == HTTPMETHOD_MSEARCH) { hmsg->request_method == (http_method_t)HTTPMETHOD_MSEARCH) {
#ifdef INCLUDE_CLIENT_APIS #ifdef INCLUDE_CLIENT_APIS
ssdp_handle_ctrlpt_msg(hmsg, ssdp_handle_ctrlpt_msg(hmsg,
&data->dest_addr, &data->dest_addr,
@ -739,7 +739,7 @@ void readFromSSDPSocket(SOCKET socket)
data = NULL; data = NULL;
} }
} }
byteReceived = recvfrom(socket, requestBuf, BUFSIZE - 1, 0, byteReceived = recvfrom(socket, requestBuf, BUFSIZE - (size_t)1, 0,
(struct sockaddr *)&__ss, &socklen); (struct sockaddr *)&__ss, &socklen);
if (byteReceived > 0) { if (byteReceived > 0) {
requestBuf[byteReceived] = '\0'; requestBuf[byteReceived] = '\0';
@ -790,7 +790,7 @@ static int create_ssdp_sock_v4(
{ {
char errorBuffer[ERROR_BUFFER_LEN]; char errorBuffer[ERROR_BUFFER_LEN];
int onOff; int onOff;
u_char ttl = 4; u_char ttl = (u_char)4;
struct ip_mreq ssdpMcastAddr; struct ip_mreq ssdpMcastAddr;
struct sockaddr_storage __ss; struct sockaddr_storage __ss;
struct sockaddr_in *ssdpAddr4 = (struct sockaddr_in *)&__ss; struct sockaddr_in *ssdpAddr4 = (struct sockaddr_in *)&__ss;
@ -834,7 +834,7 @@ static int create_ssdp_sock_v4(
} }
#endif /* BSD, __OSX__, __APPLE__ */ #endif /* BSD, __OSX__, __APPLE__ */
memset(&__ss, 0, sizeof(__ss)); memset(&__ss, 0, sizeof(__ss));
ssdpAddr4->sin_family = AF_INET; ssdpAddr4->sin_family = (unsigned short)AF_INET;
ssdpAddr4->sin_addr.s_addr = htonl(INADDR_ANY); ssdpAddr4->sin_addr.s_addr = htonl(INADDR_ANY);
ssdpAddr4->sin_port = htons(SSDP_PORT); ssdpAddr4->sin_port = htons(SSDP_PORT);
ret = bind(*ssdpSock, (struct sockaddr *)ssdpAddr4, sizeof(*ssdpAddr4)); ret = bind(*ssdpSock, (struct sockaddr *)ssdpAddr4, sizeof(*ssdpAddr4));
@ -1215,7 +1215,7 @@ int get_ssdp_sockets(MiniServerSockArray * out)
#endif /* IPv6 */ #endif /* IPv6 */
#endif /* INCLUDE_CLIENT_APIS */ #endif /* INCLUDE_CLIENT_APIS */
/* Create the IPv4 socket for SSDP */ /* Create the IPv4 socket for SSDP */
if (strlen(gIF_IPV4) > 0) { if (strlen(gIF_IPV4) > (size_t)0) {
retVal = create_ssdp_sock_v4(&out->ssdpSock4); retVal = create_ssdp_sock_v4(&out->ssdpSock4);
if (retVal != UPNP_E_SUCCESS) { if (retVal != UPNP_E_SUCCESS) {
#ifdef INCLUDE_CLIENT_APIS #ifdef INCLUDE_CLIENT_APIS
@ -1230,7 +1230,7 @@ int get_ssdp_sockets(MiniServerSockArray * out)
out->ssdpSock4 = INVALID_SOCKET; out->ssdpSock4 = INVALID_SOCKET;
/* Create the IPv6 socket for SSDP */ /* Create the IPv6 socket for SSDP */
#ifdef UPNP_ENABLE_IPV6 #ifdef UPNP_ENABLE_IPV6
if (strlen(gIF_IPV6) > 0) { if (strlen(gIF_IPV6) > (size_t)0) {
retVal = create_ssdp_sock_v6(&out->ssdpSock6); retVal = create_ssdp_sock_v6(&out->ssdpSock6);
if (retVal != UPNP_E_SUCCESS) { if (retVal != UPNP_E_SUCCESS) {
shutdown(out->ssdpSock4, SD_BOTH); shutdown(out->ssdpSock4, SD_BOTH);
@ -1245,7 +1245,7 @@ int get_ssdp_sockets(MiniServerSockArray * out)
} }
} else } else
out->ssdpSock6 = INVALID_SOCKET; out->ssdpSock6 = INVALID_SOCKET;
if (strlen(gIF_IPV6_ULA_GUA) > 0) { if (strlen(gIF_IPV6_ULA_GUA) > (size_t)0) {
retVal = create_ssdp_sock_v6_ula_gua(&out->ssdpSock6UlaGua); retVal = create_ssdp_sock_v6_ula_gua(&out->ssdpSock6UlaGua);
if (retVal != UPNP_E_SUCCESS) { if (retVal != UPNP_E_SUCCESS) {
shutdown(out->ssdpSock4, SD_BOTH); shutdown(out->ssdpSock4, SD_BOTH);

View File

@ -83,16 +83,18 @@ addrToString( IN const struct sockaddr *addr,
IN size_t ipaddr_port_size ) IN size_t ipaddr_port_size )
{ {
char buf_ntop[INET6_ADDRSTRLEN]; char buf_ntop[INET6_ADDRSTRLEN];
int rc; int rc = 0;
if( addr->sa_family == AF_INET ) { if( addr->sa_family == AF_INET ) {
struct sockaddr_in* sa4 = (struct sockaddr_in*)addr; struct sockaddr_in* sa4 = (struct sockaddr_in*)addr;
inet_ntop(AF_INET, &sa4->sin_addr, buf_ntop, sizeof(buf_ntop) ); inet_ntop(AF_INET, &sa4->sin_addr, buf_ntop, sizeof(buf_ntop) );
rc = snprintf( ipaddr_port, ipaddr_port_size, "%s:%d", buf_ntop, ntohs( sa4->sin_port ) ); rc = snprintf( ipaddr_port, ipaddr_port_size, "%s:%d", buf_ntop,
(int)ntohs( sa4->sin_port ) );
} else if( addr->sa_family == AF_INET6 ) { } else if( addr->sa_family == AF_INET6 ) {
struct sockaddr_in6* sa6 = (struct sockaddr_in6*)addr; struct sockaddr_in6* sa6 = (struct sockaddr_in6*)addr;
inet_ntop(AF_INET6, &sa6->sin6_addr, buf_ntop, sizeof(buf_ntop) ); inet_ntop(AF_INET6, &sa6->sin6_addr, buf_ntop, sizeof(buf_ntop) );
rc = snprintf( ipaddr_port, ipaddr_port_size, "[%s]:%d", buf_ntop, ntohs( sa6->sin6_port ) ); rc = snprintf( ipaddr_port, ipaddr_port_size, "[%s]:%d", buf_ntop,
(int)ntohs( sa6->sin6_port ) );
} }
if (rc < 0 || (unsigned int) rc >= ipaddr_port_size) if (rc < 0 || (unsigned int) rc >= ipaddr_port_size)
return UPNP_E_BUFFER_TOO_SMALL; return UPNP_E_BUFFER_TOO_SMALL;
@ -142,10 +144,10 @@ static UPNP_INLINE int calc_alias(
else else
aliasPtr = alias; aliasPtr = alias;
new_alias_len = root_len + strlen(temp_str) + strlen(aliasPtr); new_alias_len = root_len + strlen(temp_str) + strlen(aliasPtr);
alias_temp = malloc(new_alias_len + 1); alias_temp = malloc(new_alias_len + (size_t)1);
if (alias_temp == NULL) if (alias_temp == NULL)
return UPNP_E_OUTOF_MEMORY; return UPNP_E_OUTOF_MEMORY;
memset(alias_temp, 0, new_alias_len + 1); memset(alias_temp, 0, new_alias_len + (size_t)1);
strncpy(alias_temp, rootPath, root_len); strncpy(alias_temp, rootPath, root_len);
alias_temp[root_len] = '\0'; alias_temp[root_len] = '\0';
strncat(alias_temp, temp_str, strlen(temp_str)); strncat(alias_temp, temp_str, strlen(temp_str));
@ -185,7 +187,7 @@ static UPNP_INLINE int calc_descURL(
assert(alias != NULL && strlen(alias) > 0); assert(alias != NULL && strlen(alias) > 0);
len = strlen(http_scheme) + strlen(ipPortStr) + strlen(alias); len = strlen(http_scheme) + strlen(ipPortStr) + strlen(alias);
if (len > (LINE_SIZE - 1)) if (len > ((size_t)LINE_SIZE - (size_t)1))
return UPNP_E_URL_TOO_BIG; return UPNP_E_URL_TOO_BIG;
strncpy(descURL, http_scheme, strlen(http_scheme)); strncpy(descURL, http_scheme, strlen(http_scheme));
descURL[strlen(http_scheme)] = '\0'; descURL[strlen(http_scheme)] = '\0';
@ -279,7 +281,7 @@ static int config_description_doc(
} }
} else { } else {
/* urlbase found */ /* urlbase found */
urlbase_node = ixmlNodeList_item(baseList, 0); urlbase_node = ixmlNodeList_item(baseList, 0lu);
assert(urlbase_node != NULL); assert(urlbase_node != NULL);
textNode = ixmlNode_getFirstChild(urlbase_node); textNode = ixmlNode_getFirstChild(urlbase_node);
if (textNode == NULL) { if (textNode == NULL) {
@ -319,7 +321,7 @@ static int config_description_doc(
} }
/* add trailing '/' if missing */ /* add trailing '/' if missing */
if (url_str.buf[url_str.length - 1] != '/') { if (url_str.buf[url_str.length - 1] != '/') {
if (membuffer_append(&url_str, "/", 1) != 0) { if (membuffer_append(&url_str, "/", (size_t)1) != 0) {
goto error_handler; goto error_handler;
} }
} }