diff --git a/src/driver/rcinput.cpp b/src/driver/rcinput.cpp index 470455bd0..42ffec941 100644 --- a/src/driver/rcinput.cpp +++ b/src/driver/rcinput.cpp @@ -58,6 +58,7 @@ #include #include +#include //const char * const RC_EVENT_DEVICE[NUMBER_OF_EVENT_DEVICES] = {"/dev/input/nevis_ir", "/dev/input/event0"}; const char * const RC_EVENT_DEVICE[NUMBER_OF_EVENT_DEVICES] = {"/dev/input/nevis_ir"}; @@ -1143,12 +1144,11 @@ printf("[neutrino] CSectionsdClient::EVT_GOT_CN_EPG\n"); if (ev.code == rc_last_key) { /* only allow selected keys to be repeated */ /* (why?) */ - if((trkey == RC_up) || (trkey == RC_down ) || + if( (trkey == RC_up) || (trkey == RC_down ) || (trkey == RC_plus ) || (trkey == RC_minus ) || (trkey == RC_page_down ) || (trkey == RC_page_up ) || - //(trkey == RC_standby) || - ((bAllowRepeatLR) && ((trkey == RC_left ) || - (trkey == RC_right)))) + ((bAllowRepeatLR) && ((trkey == RC_left ) || (trkey == RC_right))) || + ((trkey == RC_standby) && (cs_get_revision() > 7)) ) { #ifdef ENABLE_REPEAT_CHECK if (rc_last_repeat_key != ev.code) { diff --git a/src/gui/hdd_menu.cpp b/src/gui/hdd_menu.cpp index c28d2cdf0..4c4f324fa 100644 --- a/src/gui/hdd_menu.cpp +++ b/src/gui/hdd_menu.cpp @@ -115,7 +115,7 @@ int CHDDMenuHandler::doMenu () int removable = 0; printf("HDD: checking /sys/block/%s\n", namelist[i]->d_name); - sprintf(str, "/dev/%s", namelist[i]->d_name); + snprintf(str, sizeof(str), "/dev/%s", namelist[i]->d_name); fd = open(str, O_RDONLY); if(fd < 0) { printf("Cant open %s\n", str); @@ -127,7 +127,7 @@ int CHDDMenuHandler::doMenu () megabytes = bytes/1000000; - sprintf(str, "/sys/block/%s/device/vendor", namelist[i]->d_name); + snprintf(str, sizeof(str), "/sys/block/%s/device/vendor", namelist[i]->d_name); f = fopen(str, "r"); if(!f) { printf("Cant open %s\n", str); @@ -136,7 +136,7 @@ int CHDDMenuHandler::doMenu () fscanf(f, "%s", vendor); fclose(f); - sprintf(str, "/sys/block/%s/device/model", namelist[i]->d_name); + snprintf(str, sizeof(str), "/sys/block/%s/device/model", namelist[i]->d_name); f = fopen(str, "r"); if(!f) { printf("Cant open %s\n", str); @@ -145,7 +145,7 @@ int CHDDMenuHandler::doMenu () fscanf(f, "%s", model); fclose(f); - sprintf(str, "/sys/block/%s/removable", namelist[i]->d_name); + snprintf(str, sizeof(str), "/sys/block/%s/removable", namelist[i]->d_name); f = fopen(str, "r"); if(!f) { printf("Cant open %s\n", str); @@ -154,7 +154,7 @@ int CHDDMenuHandler::doMenu () fscanf(f, "%d", &removable); fclose(f); - sprintf(str, "%s %s (%s-%s %lld %s)\n", g_Locale->getText(LOCALE_HDD_MANAGE), namelist[i]->d_name, vendor, model, megabytes < 10000 ? megabytes : megabytes/1000, megabytes < 10000 ? "MB" : "GB"); + snprintf(str, sizeof(str), "%s %s (%s-%s %lld %s)\n", g_Locale->getText(LOCALE_HDD_MANAGE), namelist[i]->d_name, vendor, model, megabytes < 10000 ? megabytes : megabytes/1000, megabytes < 10000 ? "MB" : "GB"); printf("HDD: %s\n", str); CMenuWidget * tempMenu = new CMenuWidget(str, NEUTRINO_ICON_SETTINGS); tempMenu->addItem( GenericMenuBack ); @@ -179,17 +179,17 @@ int CHDDDestExec::exec(CMenuTarget* /*parent*/, const std::string&) printf("CHDDDestExec: noise %d sleep %d\n", g_settings.hdd_noise, g_settings.hdd_sleep); //FIXME: atm we can have 2 hdd, sata and usb - sprintf(cmd, "hdparm -S%d /dev/sda >/dev/null 2>/dev/null", g_settings.hdd_sleep); + snprintf(cmd, sizeof(cmd), "hdparm -S%d /dev/sda >/dev/null 2>/dev/null", g_settings.hdd_sleep); system(cmd); - sprintf(cmd, "hdparm -M%d /dev/sda >/dev/null 2>/dev/null", g_settings.hdd_noise); + snprintf(cmd, sizeof(cmd), "hdparm -M%d /dev/sda >/dev/null 2>/dev/null", g_settings.hdd_noise); system(cmd); - sprintf(cmd, "hdparm -S%d /dev/sdb >/dev/null 2>/dev/null", g_settings.hdd_sleep); + snprintf(cmd, sizeof(cmd), "hdparm -S%d /dev/sdb >/dev/null 2>/dev/null", g_settings.hdd_sleep); system(cmd); - sprintf(cmd, "hdparm -M%d /dev/sdb >/dev/null 2>/dev/null", g_settings.hdd_noise); + snprintf(cmd, sizeof(cmd), "hdparm -M%d /dev/sdb >/dev/null 2>/dev/null", g_settings.hdd_noise); system(cmd); - sprintf(cmd, "hdparm -K /dev/sda >/dev/null 2>/dev/null"); + snprintf(cmd, sizeof(cmd), "hdparm -K /dev/sda >/dev/null 2>/dev/null"); system(cmd); - sprintf(cmd, "hdparm -K /dev/sdb >/dev/null 2>/dev/null"); + snprintf(cmd, sizeof(cmd), "hdparm -K /dev/sdb >/dev/null 2>/dev/null"); system(cmd); return 1; } @@ -222,8 +222,8 @@ int CHDDFmtExec::exec(CMenuTarget* /*parent*/, const std::string& key) CProgressWindow * progress; bool idone; - sprintf(src, "/dev/%s1", key.c_str()); - sprintf(dst, "/media/%s1", key.c_str()); + snprintf(src, sizeof(src), "/dev/%s1", key.c_str()); + snprintf(dst, sizeof(dst), "/media/%s1", key.c_str()); printf("CHDDFmtExec: key %s\n", key.c_str()); @@ -257,7 +257,7 @@ int CHDDFmtExec::exec(CMenuTarget* /*parent*/, const std::string& key) progress->showStatusMessageUTF("Executing fdisk"); progress->showGlobalStatus(0); - sprintf(cmd, "/sbin/sfdisk -f -uM /dev/%s", key.c_str()); + snprintf(cmd, sizeof(cmd), "/sbin/sfdisk -f -uM /dev/%s", key.c_str()); printf("CHDDFmtExec: executing %s\n", cmd); f=popen(cmd, "w"); if (!f) { @@ -274,10 +274,10 @@ int CHDDFmtExec::exec(CMenuTarget* /*parent*/, const std::string& key) switch(g_settings.hdd_fs) { case 0: - sprintf(cmd, "/sbin/mkfs.ext3 -T largefile -m0 %s", src); + snprintf(cmd, sizeof(cmd), "/sbin/mkfs.ext3 -T largefile -m0 %s", src); break; case 1: - sprintf(cmd, "/sbin/mkreiserfs -f -f %s", src); + snprintf(cmd, sizeof(cmd), "/sbin/mkreiserfs -f -f %s", src); break; default: return 0; @@ -318,7 +318,7 @@ int CHDDFmtExec::exec(CMenuTarget* /*parent*/, const std::string& key) progress->showGlobalStatus(100); sleep(2); - sprintf(cmd, "/sbin/tune2fs -r 0 -c 0 -i 0 %s", src); + snprintf(cmd, sizeof(cmd), "/sbin/tune2fs -r 0 -c 0 -i 0 %s", src); printf("CHDDFmtExec: executing %s\n", cmd); system(cmd); @@ -343,13 +343,13 @@ _remount: } if(!res) { - sprintf(cmd, "%s/movies", dst); + snprintf(cmd, sizeof(cmd), "%s/movies", dst); safe_mkdir((char *) cmd); - sprintf(cmd, "%s/pictures", dst); + snprintf(cmd, sizeof(cmd), "%s/pictures", dst); safe_mkdir((char *) cmd); - sprintf(cmd, "%s/epg", dst); + snprintf(cmd, sizeof(cmd), "%s/epg", dst); safe_mkdir((char *) cmd); - sprintf(cmd, "%s/music", dst); + snprintf(cmd, sizeof(cmd), "%s/music", dst); safe_mkdir((char *) cmd); sync(); } @@ -369,8 +369,8 @@ int CHDDChkExec::exec(CMenuTarget* /*parent*/, const std::string& key) int oldpass = 0, pass, step, total; int percent = 0, opercent = 0; - sprintf(src, "/dev/%s1", key.c_str()); - sprintf(dst, "/media/%s1", key.c_str()); + snprintf(src, sizeof(src), "/dev/%s1", key.c_str()); + snprintf(dst, sizeof(dst), "/media/%s1", key.c_str()); printf("CHDDChkExec: key %s\n", key.c_str()); @@ -389,10 +389,10 @@ printf("CHDDChkExec: key %s\n", key.c_str()); switch(g_settings.hdd_fs) { case 0: - sprintf(cmd, "/sbin/fsck.ext3 -C 1 -f -y %s", src); + snprintf(cmd, sizeof(cmd), "/sbin/fsck.ext3 -C 1 -f -y %s", src); break; case 1: - sprintf(cmd, "/sbin/reiserfsck --fix-fixable %s", src); + snprintf(cmd, sizeof(cmd), "/sbin/reiserfsck --fix-fixable %s", src); break; default: return 0; diff --git a/src/gui/moviebrowser.cpp b/src/gui/moviebrowser.cpp index f45bae56b..c76b6ea7b 100644 --- a/src/gui/moviebrowser.cpp +++ b/src/gui/moviebrowser.cpp @@ -715,9 +715,9 @@ bool CMovieBrowser::loadSettings(MB_SETTINGS* settings) char cfg_key[81]; for(int i = 0; i < MB_MAX_DIRS; i++) { - sprintf(cfg_key, "mb_dir_%d", i); + snprintf(cfg_key, sizeof(cfg_key), "mb_dir_%d", i); settings->storageDir[i] = configfile.getString( cfg_key, "" ); - sprintf(cfg_key, "mb_dir_used%d", i); + snprintf(cfg_key, sizeof(cfg_key), "mb_dir_used%d", i); settings->storageDirUsed[i] = configfile.getInt32( cfg_key,false ); } /* these variables are used for the listframes */ @@ -725,9 +725,9 @@ bool CMovieBrowser::loadSettings(MB_SETTINGS* settings) settings->browserRowNr = configfile.getInt32("mb_browserRowNr", 0); for(int i = 0; i < MB_MAX_ROWS && i < settings->browserRowNr; i++) { - sprintf(cfg_key, "mb_browserRowItem_%d", i); + snprintf(cfg_key, sizeof(cfg_key), "mb_browserRowItem_%d", i); settings->browserRowItem[i] = (MB_INFO_ITEM)configfile.getInt32(cfg_key, MB_INFO_MAX_NUMBER); - sprintf(cfg_key, "mb_browserRowWidth_%d", i); + snprintf(cfg_key, sizeof(cfg_key), "mb_browserRowWidth_%d", i); settings->browserRowWidth[i] = configfile.getInt32(cfg_key, 50); } } @@ -771,9 +771,9 @@ bool CMovieBrowser::saveSettings(MB_SETTINGS* settings) char cfg_key[81]; for(int i = 0; i < MB_MAX_DIRS; i++) { - sprintf(cfg_key, "mb_dir_%d", i); + snprintf(cfg_key, sizeof(cfg_key), "mb_dir_%d", i); configfile.setString( cfg_key, settings->storageDir[i] ); - sprintf(cfg_key, "mb_dir_used%d", i); + snprintf(cfg_key, sizeof(cfg_key), "mb_dir_used%d", i); configfile.setInt32( cfg_key, settings->storageDirUsed[i] ); // do not save this so far } /* these variables are used for the listframes */ @@ -781,9 +781,9 @@ bool CMovieBrowser::saveSettings(MB_SETTINGS* settings) configfile.setInt32("mb_browserRowNr",settings->browserRowNr); for(int i = 0; i < MB_MAX_ROWS && i < settings->browserRowNr; i++) { - sprintf(cfg_key, "mb_browserRowItem_%d", i); + snprintf(cfg_key, sizeof(cfg_key), "mb_browserRowItem_%d", i); configfile.setInt32(cfg_key, settings->browserRowItem[i]); - sprintf(cfg_key, "mb_browserRowWidth_%d", i); + snprintf(cfg_key, sizeof(cfg_key), "mb_browserRowWidth_%d", i); configfile.setInt32(cfg_key, settings->browserRowWidth[i]); } @@ -2000,7 +2000,7 @@ void CMovieBrowser::onDeleteFile(MI_MOVIE_INFO& movieSelectionHandler) int i = 1; char newpath[1024]; do { - sprintf(newpath, "%s.%03d", movieSelectionHandler.file.Name.c_str(), i); + snprintf(newpath, sizeof(newpath), "%s.%03d", movieSelectionHandler.file.Name.c_str(), i); if(access(newpath, R_OK)) { break; } else { @@ -3651,7 +3651,7 @@ void CDirMenu::show(void) updateDirState(); for(unsigned int i = 0; i < dirList->size() && i < MAX_DIR; i++) { - sprintf(tmp,"%d",i); + snprintf(tmp, sizeof(tmp),"%d",i); tmp[1]=0; dirMenu.addItem( new CMenuForwarderNonLocalized ( (*dirList)[i].name.c_str(), (dirState[i] != DIR_STATE_UNKNOWN), dirOptionText[i], this,tmp)); } @@ -3670,7 +3670,7 @@ off64_t get_full_len(char * startname) stat64(startname, &s); do { fulllength +=s.st_size; - sprintf(spart, "%s.%03d", startname, ++part); + snprintf(spart, sizeof(spart), "%s.%03d", startname, ++part); } while (!stat64(spart, &s)); return fulllength; } @@ -3707,7 +3707,7 @@ static off64_t truncate_movie(MI_MOVIE_INFO * minfo) off64_t newsize = secoffset; //printf("truncate: name %s size %lld len %d sec truncate to %d sec, new size %lld\n", name, size, len, seconds, secoffset); - sprintf(spart, "%s", name); + snprintf(spart, sizeof(spart), "%s", name); while (!stat64(spart, &s)) { if(found) { //printf("truncate: check part %d file %s - TO REMOVE\n", part, spart); @@ -3720,13 +3720,13 @@ static off64_t truncate_movie(MI_MOVIE_INFO * minfo) } else secoffset -= s.st_size; } - sprintf(spart, "%s.%03d", name, ++part); + snprintf(spart, sizeof(spart), "%s.%03d", name, ++part); } if(found) { if(tpart) - sprintf(spart, "%s.%03d", name, tpart); + snprintf(spart, sizeof(spart), "%s.%03d", name, tpart); else - sprintf(spart, "%s", name); + snprintf(spart, sizeof(spart), "%s", name); printf("truncate: part %s to size %lld\n", spart, secoffset); truncate(spart, secoffset); minfo->file.Size = newsize; @@ -3834,9 +3834,9 @@ static void find_new_part(char * npart, char * dpart) { struct stat64 s; int dp = 0; - sprintf(dpart, "%s_%d.ts", npart, dp); + snprintf(dpart, sizeof(dpart), "%s_%d.ts", npart, dp); while (!stat64(dpart, &s)) { - sprintf(dpart, "%s_%d.ts", npart, ++dp); + snprintf(dpart, sizeof(dpart), "%s_%d.ts", npart, ++dp); } } @@ -3976,7 +3976,7 @@ printf("\n"); } } } - sprintf(npart, "%s", name); + snprintf(npart, sizeof(npart), "%s", name); char * ptr = strstr(npart, ".ts"); if(ptr) *ptr = 0; @@ -3992,7 +3992,7 @@ printf("\n********* new file %s expected size %lld, start time %s", dpart, newsi i = 0; off64_t offset = 0; spos = 0; - sprintf(spart, "%s", name); + snprintf(spart, sizeof(spart), "%s", name); if(read_psi(spart, &psi[0])) { perror(spart); goto ret_err; @@ -4104,7 +4104,7 @@ printf("cut: next bookmark pos: %lld abs %lld relative next file pos %lld cur fi next_file: tdone += s.st_size; close(srcfd); - sprintf(spart, "%s.%03d", name, ++part); + snprintf(spart, sizeof(spart), "%s.%03d", name, ++part); } tt1 = time(0); printf("********* total written %lld tooks %ld secs end time %s", spos, tt1-tt, ctime (&tt1)); @@ -4186,11 +4186,11 @@ printf("copy: jump bookmark %d at %lld len %lld\n", bcount, books[bcount].pos, b tt = time(0); printf("********* %d boormarks, to %s file(s), expected size to copy %lld, start time %s", bcount, onefile ? "one" : "many", newsize, ctime (&tt)); - sprintf(npart, "%s", name); + snprintf(npart, sizeof(npart), "%s", name); char * ptr = strstr(npart, ".ts"); if(ptr) *ptr = 0; - sprintf(spart, "%s", name); + snprintf(spart, sizeof(spart), "%s", name); srcfd = open (spart, O_RDONLY | O_LARGEFILE); if(read_psi(spart, &psi[0])) { perror(spart); @@ -4201,12 +4201,12 @@ printf("\ncopy: processing bookmark %d at %lld len %lld\n", i, books[i].pos, boo off64_t bpos = books[i].pos; off64_t bskip = books[i].len; part = 0; - sprintf(spart, "%s", name); + snprintf(spart, sizeof(spart), "%s", name); int sres; while (!(sres = stat64(spart, &s))) { if(bpos >= s.st_size) { bpos -= s.st_size; - sprintf(spart, "%s.%03d", name, ++part); + snprintf(spart, sizeof(spart), "%s.%03d", name, ++part); //printf("copy: check src part %s\n", spart); continue; } @@ -4303,7 +4303,7 @@ if(buf[0] != 0x47) printf("copy: buffer not aligned at %lld\n", sdone); printf("copy: -> next file, file pos %lld written %lld left %lld\n", sdone, spos, bskip); bpos = 0; close(srcfd); - sprintf(spart, "%s.%03d", name, ++part); + snprintf(spart, sizeof(spart), "%s.%03d", name, ++part); goto next_file; } } /* while(sdone < until) */ diff --git a/src/neutrino_menue.cpp b/src/neutrino_menue.cpp index 63a1cea6d..f3e89f703 100644 --- a/src/neutrino_menue.cpp +++ b/src/neutrino_menue.cpp @@ -755,9 +755,9 @@ void CNeutrinoApp::InitMainMenu(CMenuWidget &mainMenu, CMenuWidget &mainSettings audioPlayer = new CAudioPlayerGui(); media->addItem(new CMenuForwarder(LOCALE_MAINMENU_AUDIOPLAYER, true, NULL, audioPlayer, NULL, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED)); audioPlayer = new CAudioPlayerGui(true); - media->addItem(new CMenuForwarder(LOCALE_INETRADIO_NAME, true, NULL, audioPlayer, NULL, CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE)); - media->addItem(new CMenuForwarder(LOCALE_MAINMENU_MOVIEPLAYER, true, NULL, &moviePlayer, NULL, CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN)); - media->addItem(new CMenuForwarder(LOCALE_MAINMENU_PICTUREVIEWER, true, NULL, new CPictureViewerGui(), NULL, CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW)); + media->addItem(new CMenuForwarder(LOCALE_INETRADIO_NAME, true, NULL, audioPlayer, NULL, CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN)); + media->addItem(new CMenuForwarder(LOCALE_MAINMENU_MOVIEPLAYER, true, NULL, &moviePlayer, NULL, CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW)); + media->addItem(new CMenuForwarder(LOCALE_MAINMENU_PICTUREVIEWER, true, NULL, new CPictureViewerGui(), NULL, CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE)); media->addItem(new CMenuForwarder(LOCALE_UPNPBROWSER_HEAD, true, NULL, new CUpnpBrowserGui(), NULL, CRCInput::convertDigitToKey(0))); mainMenu.addItem(new CMenuForwarder(LOCALE_MAINMENU_MEDIA, true, NULL, media, NULL, CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE)); #else @@ -853,9 +853,9 @@ void CNeutrinoApp::InitMainMenu(CMenuWidget &mainMenu, CMenuWidget &mainSettings if (CVFD::getInstance()->has_lcd) mainSettings.addItem(new CMenuForwarder(LOCALE_MAINSETTINGS_LCD , true, NULL, &lcdSettings , NULL, CRCInput::convertDigitToKey(sett_count++))); - mainSettings.addItem(new CMenuForwarder(LOCALE_MAINSETTINGS_KEYBINDING, true, NULL, &keySettings , NULL, CRCInput::RC_blue , NEUTRINO_ICON_BUTTON_BLUE )); + mainSettings.addItem(new CMenuForwarder(LOCALE_MAINSETTINGS_KEYBINDING, true, NULL, &keySettings , NULL, CRCInput::RC_green , NEUTRINO_ICON_BUTTON_GREEN )); mainSettings.addItem(new CMenuForwarder(LOCALE_AUDIOPLAYERPICSETTINGS_GENERAL , true, NULL, &audiopl_picSettings , NULL, CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW)); - mainSettings.addItem(new CMenuForwarder(LOCALE_MAINSETTINGS_MISC , true, NULL, &miscSettings , NULL, CRCInput::RC_green , NEUTRINO_ICON_BUTTON_GREEN )); + mainSettings.addItem(new CMenuForwarder(LOCALE_MAINSETTINGS_MISC , true, NULL, &miscSettings , NULL, CRCInput::RC_blue , NEUTRINO_ICON_BUTTON_BLUE )); mainSettings.addItem(new CMenuForwarder(LOCALE_HDD_SETTINGS, true, NULL, new CHDDMenuHandler())); //mainSettings.addItem(new CMenuForwarder(LOCALE_CAM_SETTINGS, true, NULL, g_CamHandler)); @@ -1425,11 +1425,11 @@ void CNeutrinoApp::InitServiceSettings(CMenuWidget &service, CMenuWidget &_scanS addMenueIntroItems(service); service.addItem(new CMenuForwarder(LOCALE_SERVICEMENU_SCANTS , true, NULL, &_scanSettings, "savesettings", CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED) ); // service.addItem(new CMenuForwarder(LOCALE_EXTRA_ZAPIT_MENU , true, NULL, zapit_menu, NULL, CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN)); - service.addItem(new CMenuForwarder(LOCALE_SERVICEMENU_RELOAD , true, NULL, this, "reloadchannels", CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW)); - service.addItem(new CMenuForwarder(LOCALE_BOUQUETEDITOR_NAME , true, NULL, new CBEBouquetWidget(), NULL, CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE )); + service.addItem(new CMenuForwarder(LOCALE_SERVICEMENU_RELOAD , true, NULL, this, "reloadchannels", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN )); + service.addItem(new CMenuForwarder(LOCALE_BOUQUETEDITOR_NAME , true, NULL, new CBEBouquetWidget(), NULL, CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW )); CDataResetNotifier * resetNotifier = new CDataResetNotifier(); - service.addItem(new CMenuForwarder(LOCALE_RESET_CHANNELS , true, NULL, resetNotifier, "channels", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN )); + service.addItem(new CMenuForwarder(LOCALE_RESET_CHANNELS , true, NULL, resetNotifier, "channels", CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE )); service.addItem(new CMenuForwarder(LOCALE_SERVICEMENU_GETPLUGINS, true, NULL, this, "reloadplugins")); service.addItem(GenericMenuSeparatorLine);