diff --git a/src/daemonc/remotecontrol.cpp b/src/daemonc/remotecontrol.cpp index 34c3f8f49..b8e64a95b 100644 --- a/src/daemonc/remotecontrol.cpp +++ b/src/daemonc/remotecontrol.cpp @@ -507,24 +507,30 @@ void CRemoteControl::processAPIDnames() { has_unresolved_ctags= true; } - if ( strlen( current_PIDs.APIDs[count].desc ) == 3 ) + std::string tmp_desc = current_PIDs.APIDs[count].desc; + if ( tmp_desc.size() == 3 ) { // unaufgeloeste Sprache... - strcpy( current_PIDs.APIDs[count].desc, getISO639Description( current_PIDs.APIDs[count].desc ) ); + tmp_desc = getISO639Description( current_PIDs.APIDs[count].desc ); } if ( current_PIDs.APIDs[count].is_ac3 ) { if(!strstr(current_PIDs.APIDs[count].desc, " (AC3)")) - strncat(current_PIDs.APIDs[count].desc, " (AC3)", DESC_MAX_LEN - strlen(current_PIDs.APIDs[count].desc)-1); + tmp_desc += " (AC3)"; has_ac3 = true; if(g_settings.audio_DolbyDigital && (ac3_found < 0)) ac3_found = count; } else if (current_PIDs.APIDs[count].is_aac && !strstr(current_PIDs.APIDs[count].desc, " (AAC)")) - strncat(current_PIDs.APIDs[count].desc, " (AAC)", DESC_MAX_LEN - strlen(current_PIDs.APIDs[count].desc)-1); + tmp_desc += " (AAC)"; else if (current_PIDs.APIDs[count].is_eac3 && !strstr(current_PIDs.APIDs[count].desc, " (EAC3)")) - strncat(current_PIDs.APIDs[count].desc, " (EAC3)", DESC_MAX_LEN - strlen(current_PIDs.APIDs[count].desc)-1); + tmp_desc += " (EAC3)"; + + if(!tmp_desc.empty()){ + strncpy(current_PIDs.APIDs[count].desc, tmp_desc.c_str(), DESC_MAX_LEN -1); + } + } if ( has_unresolved_ctags ) @@ -545,13 +551,17 @@ void CRemoteControl::processAPIDnames() // workaround for buggy ZDF ctags / or buggy sectionsd/drivers , who knows... if(!tags[i].component.empty()) { - strncpy(current_PIDs.APIDs[j].desc, tags[i].component.c_str(), DESC_MAX_LEN-1); - if (current_PIDs.APIDs[j].is_ac3 && !strstr(current_PIDs.APIDs[j].desc, " (AC3)")) - strncat(current_PIDs.APIDs[j].desc, " (AC3)", DESC_MAX_LEN - strlen(current_PIDs.APIDs[j].desc)-1); - else if (current_PIDs.APIDs[j].is_aac && !strstr(current_PIDs.APIDs[j].desc, " (AAC)")) - strncat(current_PIDs.APIDs[j].desc, " (AAC)", DESC_MAX_LEN - strlen(current_PIDs.APIDs[j].desc)-1); - else if (current_PIDs.APIDs[j].is_eac3 && !strstr(current_PIDs.APIDs[j].desc, " (EAC3)")) - strncat(current_PIDs.APIDs[j].desc, " (EAC3)", DESC_MAX_LEN - strlen(current_PIDs.APIDs[j].desc)-1); + std::string tmp_desc2 = tags[i].component.c_str(); + if (current_PIDs.APIDs[j].is_ac3 && tmp_desc2.find(" (AC3)")) + tmp_desc2 += " (AC3)"; + else if (current_PIDs.APIDs[j].is_aac && tmp_desc2.find(" (AAC)")) + tmp_desc2 += " (AAC)"; + else if (current_PIDs.APIDs[j].is_eac3 && tmp_desc2.find(" (EAC3)")) + tmp_desc2 += " (EAC3)"; + + if(!tmp_desc2.empty()){ + strncpy(current_PIDs.APIDs[j].desc, tmp_desc2.c_str(), DESC_MAX_LEN -1); + } } current_PIDs.APIDs[j].component_tag = -1; break; diff --git a/src/driver/record.cpp b/src/driver/record.cpp index f30957262..fb4211c20 100644 --- a/src/driver/record.cpp +++ b/src/driver/record.cpp @@ -395,15 +395,20 @@ void CRecordInstance::ProcessAPIDnames() if (allpids.APIDs[count].component_tag != 0xFF) has_unresolved_ctags= true; - if ( strlen( allpids.APIDs[count].desc ) == 3 ) - strncpy( allpids.APIDs[count].desc, getISO639Description( allpids.APIDs[count].desc ),DESC_MAX_LEN -1 ); + std::string tmp_desc = allpids.APIDs[count].desc; + if ( strlen( allpids.APIDs[count].desc ) == 3 ){ + tmp_desc = getISO639Description( allpids.APIDs[count].desc ); + } - if ( allpids.APIDs[count].is_ac3 && !strstr(allpids.APIDs[count].desc, " (AC3)")) - strncat(allpids.APIDs[count].desc, " (AC3)", DESC_MAX_LEN - strlen(allpids.APIDs[count].desc) -1); - else if (allpids.APIDs[count].is_aac && !strstr(allpids.APIDs[count].desc, " (AAC)")) - strncat(allpids.APIDs[count].desc, " (AAC)", DESC_MAX_LEN - strlen(allpids.APIDs[count].desc) -1); - else if (allpids.APIDs[count].is_eac3 && !strstr(allpids.APIDs[count].desc, " (EAC3)")) - strncat(allpids.APIDs[count].desc, " (EAC3)", DESC_MAX_LEN - strlen(allpids.APIDs[count].desc) -1); + if ( allpids.APIDs[count].is_ac3 && tmp_desc.find(" (AC3)")) + tmp_desc += " (AC3)"; + else if (allpids.APIDs[count].is_aac && tmp_desc.find(" (AAC)")) + tmp_desc += " (AAC)"; + else if (allpids.APIDs[count].is_eac3 && tmp_desc.find(" (EAC3)")) + tmp_desc += " (EAC3)"; + if(!tmp_desc.empty()){ + strncpy( allpids.APIDs[count].desc, tmp_desc.c_str(),DESC_MAX_LEN -1) ; + } } if(has_unresolved_ctags && (epgid != 0)) { @@ -413,13 +418,18 @@ void CRecordInstance::ProcessAPIDnames() for(unsigned int j=0; j< allpids.APIDs.size(); j++) { if(allpids.APIDs[j].component_tag == tags[i].componentTag) { if(!tags[i].component.empty()) { - strncpy(allpids.APIDs[j].desc, tags[i].component.c_str(), DESC_MAX_LEN -1); - if (allpids.APIDs[j].is_ac3 && !strstr(allpids.APIDs[j].desc, " (AC3)")) - strncat(allpids.APIDs[j].desc, " (AC3)", DESC_MAX_LEN - strlen(allpids.APIDs[j].desc)-1); - else if (allpids.APIDs[j].is_aac && !strstr(allpids.APIDs[j].desc, " (AAC)")) - strncat(allpids.APIDs[j].desc, " (AAC)", DESC_MAX_LEN - strlen(allpids.APIDs[j].desc)-1); - else if (allpids.APIDs[j].is_eac3 && !strstr(allpids.APIDs[j].desc, " (EAC3)")) - strncat(allpids.APIDs[j].desc, " (EAC3)", DESC_MAX_LEN - strlen(allpids.APIDs[j].desc)-1); + std::string tmp_desc2; + tmp_desc2 = tags[i].component; + if (allpids.APIDs[j].is_ac3 && tmp_desc2.find(" (AC3)")) + tmp_desc2 += " (AC3)"; + else if (allpids.APIDs[j].is_aac && tmp_desc2.find(" (AAC)")) + tmp_desc2 += " (AAC)"; + else if (allpids.APIDs[j].is_eac3 && tmp_desc2.find(" (EAC3)")) + tmp_desc2 += " (EAC3)"; + + if(!tmp_desc2.empty()){ + strncpy(allpids.APIDs[j].desc, tmp_desc2.c_str(), DESC_MAX_LEN -1); + } } allpids.APIDs[j].component_tag = -1; break; diff --git a/src/nhttpd/tuxboxapi/controlapi.cpp b/src/nhttpd/tuxboxapi/controlapi.cpp index 26396cc90..863309357 100644 --- a/src/nhttpd/tuxboxapi/controlapi.cpp +++ b/src/nhttpd/tuxboxapi/controlapi.cpp @@ -2216,11 +2216,12 @@ void CControlAPI::SendAllCurrentVAPid(CyhookHandler *hh) } else { + std::string tmp_desc = pids.APIDs[j].desc; if(!(init_iso)) { - strncpy( pids.APIDs[j].desc, _getISO639Description( pids.APIDs[j].desc ),DESC_MAX_LEN ); + tmp_desc = _getISO639Description( pids.APIDs[j].desc ); } - hh->printf("%05u %s %s\n",pids.APIDs[j].pid,pids.APIDs[j].desc,pids.APIDs[j].is_ac3 ? " (AC3)": pids.APIDs[j].desc,pids.APIDs[j].is_aac ? "(AAC)" : pids.APIDs[j].desc,pids.APIDs[j].is_eac3 ? "(EAC3)" : " "); + hh->printf("%05u %s %s\n",pids.APIDs[j].pid,tmp_desc.c_str(),pids.APIDs[j].is_ac3 ? " (AC3)": tmp_desc.c_str(),pids.APIDs[j].is_aac ? "(AAC)" : tmp_desc.c_str(),pids.APIDs[j].is_eac3 ? "(EAC3)" : " "); } eit_not_ok=false; break;