diff --git a/upnpsoap.c b/upnpsoap.c index a32808e..d3b50b4 100644 --- a/upnpsoap.c +++ b/upnpsoap.c @@ -1048,6 +1048,7 @@ SearchContentDirectory(struct upnphttp * h, const char * action) { SearchCriteria = modifyString(SearchCriteria, """, "\"", 0); SearchCriteria = modifyString(SearchCriteria, "'", "'", 0); + SearchCriteria = modifyString(SearchCriteria, "object.", "", 0); SearchCriteria = modifyString(SearchCriteria, "derivedfrom", "glob", 1); SearchCriteria = modifyString(SearchCriteria, "contains", "glob", 1); SearchCriteria = modifyString(SearchCriteria, "dc:title", "d.TITLE", 0); @@ -1058,11 +1059,18 @@ SearchContentDirectory(struct upnphttp * h, const char * action) SearchCriteria = modifyString(SearchCriteria, "exists true", "is not NULL", 0); SearchCriteria = modifyString(SearchCriteria, "exists false", "is NULL", 0); SearchCriteria = modifyString(SearchCriteria, "@refID", "REF_ID", 0); - SearchCriteria = modifyString(SearchCriteria, "object.", "", 0); - #if 0 + if( strstr(SearchCriteria, "@id") ) + { + newSearchCriteria = modifyString(strdup(SearchCriteria), "@id", "OBJECT_ID", 0); + SearchCriteria = newSearchCriteria; + } + #if 0 // Does 360 need this? if( strstr(SearchCriteria, "&") ) { - newSearchCriteria = modifyString(strdup(SearchCriteria), "&", "&amp;", 0); + if( newSearchCriteria ) + newSearchCriteria = modifyString(newSearchCriteria, "&", "&amp;", 0); + else + newSearchCriteria = modifyString(strdup(SearchCriteria), "&", "&amp;", 0); SearchCriteria = newSearchCriteria; } #endif diff --git a/utils.c b/utils.c index a3ea9f3..fa8f516 100644 --- a/utils.c +++ b/utils.c @@ -64,7 +64,7 @@ modifyString(char * string, const char * before, const char * after, short like) chgcnt++; s = p+oldlen; } - string = realloc(string, strlen(string)+((newlen-oldlen)*chgcnt)+1); + string = realloc(string, strlen(string)+((newlen-oldlen)*chgcnt)+1+like); } s = string; @@ -73,9 +73,11 @@ modifyString(char * string, const char * before, const char * after, short like) p = strcasestr(s, before); if( !p ) return string; + memmove(p + newlen, p + oldlen, strlen(p + oldlen) + 1); + memcpy(p, after, newlen); if( like ) { - t = p+oldlen; + t = p+newlen; while( isspace(*t) ) t++; if( *t == '"' ) @@ -84,12 +86,8 @@ modifyString(char * string, const char * before, const char * after, short like) memmove(t+1, t, strlen(t)+1); *t = '*'; } - memmove(p + newlen, p + oldlen, strlen(p + oldlen) + 1); - memcpy(p, after, newlen); s = p + newlen; } - if( newlen < oldlen ) - string = realloc(string, strlen(string)+1); return string; }