From 30f902c06a7bd3c726aeb08a5424d6a59871615f Mon Sep 17 00:00:00 2001 From: Andreas Oberritter Date: Fri, 22 Oct 2010 17:16:23 +0000 Subject: assume HAVE_GSTREAMER is always set --- main/enigma.cpp | 4 ---- 1 file changed, 4 deletions(-) (limited to 'main/enigma.cpp') diff --git a/main/enigma.cpp b/main/enigma.cpp index b8554d58..b3364679 100644 --- a/main/enigma.cpp +++ b/main/enigma.cpp @@ -31,9 +31,7 @@ #include "bsod.h" -#ifdef HAVE_GSTREAMER #include -#endif #ifdef OBJECT_DEBUG int object_total_remaining; @@ -135,9 +133,7 @@ int main(int argc, char **argv) atexit(object_dump); #endif -#ifdef HAVE_GSTREAMER gst_init(&argc, &argv); -#endif // set pythonpath if unset setenv("PYTHONPATH", LIBDIR "/enigma2/python", 0); -- cgit v1.2.3 From 879d60c88e24c2c3f2aab9dff73192c901f63f31 Mon Sep 17 00:00:00 2001 From: Andreas Oberritter Date: Thu, 28 Oct 2010 20:29:01 +0200 Subject: use eEnv::resolve() / eEnv.resolve() --- lib/base/encoding.cpp | 7 +++--- lib/dvb/db.cpp | 15 ++++++------ lib/dvb/scan.cpp | 6 +++-- lib/python/Components/NimManager.py | 4 ++-- lib/python/Components/Renderer/Picon.py | 4 ++-- lib/python/Components/UsageConfig.py | 4 ++-- .../CommonInterfaceAssignment/plugin.py | 6 ++--- .../Plugins/SystemPlugins/NFIFlash/flasher.py | 6 ++--- .../Plugins/SystemPlugins/SkinSelector/plugin.py | 3 ++- .../SystemPlugins/SoftwareManager/BackupRestore.py | 4 ++-- .../SystemPlugins/SoftwareManager/ImageWizard.py | 3 ++- .../SystemPlugins/SoftwareManager/plugin.py | 6 ++--- .../Plugins/SystemPlugins/WirelessLan/plugin.py | 4 ++-- lib/python/Screens/ChannelSelection.py | 4 ++-- lib/python/Screens/Setup.py | 3 ++- lib/python/Screens/Wizard.py | 4 ++-- lib/python/Tools/Directories.py | 27 +++++++++++----------- main/bsod.cpp | 16 +++++-------- main/enigma-gdi.cpp | 3 ++- main/enigma-gui.cpp | 2 +- main/enigma.cpp | 17 ++++++++------ 21 files changed, 78 insertions(+), 70 deletions(-) (limited to 'main/enigma.cpp') diff --git a/lib/base/encoding.cpp b/lib/base/encoding.cpp index 8b4b592b..361acce5 100644 --- a/lib/base/encoding.cpp +++ b/lib/base/encoding.cpp @@ -2,6 +2,7 @@ #include #include #include +#include eDVBTextEncodingHandler encodingHandler; // the one and only instance @@ -17,8 +18,8 @@ inline char toupper(char c) eDVBTextEncodingHandler::eDVBTextEncodingHandler() { - const char * file=DATADIR "/enigma2/encoding.conf"; - FILE *f = fopen(file, "rt"); + std::string file = eEnv::resolve("${datadir}/enigma2/encoding.conf"); + FILE *f = fopen(file.c_str(), "rt"); if (f) { char *line = (char*) malloc(256); @@ -61,7 +62,7 @@ eDVBTextEncodingHandler::eDVBTextEncodingHandler() free(line); } else - eDebug("[eDVBTextEncodingHandler] couldn't open %s !", file); + eDebug("[eDVBTextEncodingHandler] couldn't open %s !", file.c_str()); } void eDVBTextEncodingHandler::getTransponderDefaultMapping(int tsidonid, int &table) diff --git a/lib/dvb/db.cpp b/lib/dvb/db.cpp index 38be6359..522035eb 100644 --- a/lib/dvb/db.cpp +++ b/lib/dvb/db.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include @@ -73,7 +74,7 @@ RESULT eBouquet::moveService(const eServiceReference &ref, unsigned int pos) RESULT eBouquet::flushChanges() { - FILE *f=fopen((CONFIGDIR"/enigma2/"+m_filename).c_str(), "w"); + FILE *f=fopen(eEnv::resolve("${sysconfdir}/enigma2/" + m_filename).c_str(), "w"); if (!f) return -1; if ( fprintf(f, "#NAME %s\r\n", m_bouquet_name.c_str()) < 0 ) @@ -280,7 +281,7 @@ DEFINE_REF(eDVBDB); void eDVBDB::reloadServicelist() { - loadServicelist(CONFIGDIR"/enigma2/lamedb"); + loadServicelist(eEnv::resolve("${sysconfdir}/enigma2/lamedb").c_str()); } void eDVBDB::parseServiceData(ePtr s, std::string str) @@ -324,14 +325,14 @@ void eDVBDB::loadServicelist(const char *file) { eDebug("---- opening lame channel db"); FILE *f=fopen(file, "rt"); - if (!f && strcmp(file, CONFIGDIR"/enigma2/lamedb") == 0) + if (!f && strcmp(file, eEnv::resolve("${sysconfdir}/enigma2/lamedb").c_str()) == 0) { struct stat s; if ( !stat("lamedb", &s) ) { - if ( !stat(CONFIGDIR"/enigma2", &s) ) + if ( !stat(eEnv::resolve("${sysconfdir}/enigma2").c_str(), &s) ) { - rename("lamedb", CONFIGDIR"/enigma2/lamedb" ); + rename("lamedb", eEnv::resolve("${sysconfdir}/enigma2/lamedb").c_str()); reloadServicelist(); } } @@ -594,7 +595,7 @@ void eDVBDB::saveServicelist(const char *file) void eDVBDB::saveServicelist() { - saveServicelist(CONFIGDIR"/enigma2/lamedb"); + saveServicelist(eEnv::resolve("${sysconfdir}/enigma2/lamedb").c_str()); } void eDVBDB::loadBouquet(const char *path) @@ -618,7 +619,7 @@ void eDVBDB::loadBouquet(const char *path) std::list &list = bouquet.m_services; list.clear(); - std::string p = CONFIGDIR"/enigma2/"; + std::string p = eEnv::resolve("${sysconfdir}/enigma2/"); p+=path; eDebug("loading bouquet... %s", p.c_str()); FILE *fp=fopen(p.c_str(), "rt"); diff --git a/lib/dvb/scan.cpp b/lib/dvb/scan.cpp index b37aa714..d559614c 100644 --- a/lib/dvb/scan.cpp +++ b/lib/dvb/scan.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -29,7 +30,8 @@ eDVBScan::eDVBScan(iDVBChannel *channel, bool usePAT, bool debug) if (m_channel->getDemux(m_demux)) SCAN_eDebug("scan: failed to allocate demux!"); m_channel->connectStateChange(slot(*this, &eDVBScan::stateChange), m_stateChanged_connection); - FILE *f = fopen("/etc/enigma2/scan_tp_valid_check.py", "r"); + std::string filename = eEnv::resolve("${sysconfdir}/scan_tp_valid_check.py"); + FILE *f = fopen(filename.c_str(), "r"); if (f) { char code[16384]; @@ -37,7 +39,7 @@ eDVBScan::eDVBScan(iDVBChannel *channel, bool usePAT, bool debug) if (rd) { code[rd]=0; - m_additional_tsid_onid_check_func = Py_CompileString(code, "/etc/enigma2/scan_tp_valid_check.py", Py_file_input); + m_additional_tsid_onid_check_func = Py_CompileString(code, filename.c_str(), Py_file_input); } fclose(f); } diff --git a/lib/python/Components/NimManager.py b/lib/python/Components/NimManager.py index 73031861..d8a7c5c2 100644 --- a/lib/python/Components/NimManager.py +++ b/lib/python/Components/NimManager.py @@ -10,7 +10,7 @@ from enigma import eDVBSatelliteEquipmentControl as secClass, \ eDVBSatelliteDiseqcParameters as diseqcParam, \ eDVBSatelliteSwitchParameters as switchParam, \ eDVBSatelliteRotorParameters as rotorParam, \ - eDVBResourceManager, eDVBDB + eDVBResourceManager, eDVBDB, eEnv from time import localtime, mktime from datetime import datetime @@ -1082,7 +1082,7 @@ def InitNimManager(nimmgr): unicablelnbproducts = {} unicablematrixproducts = {} - doc = xml.etree.cElementTree.parse("/usr/share/enigma2/unicable.xml") + doc = xml.etree.cElementTree.parse(eEnv.resolve("${datadir}/enigma2/unicable.xml")) root = doc.getroot() entry = root.find("lnb") diff --git a/lib/python/Components/Renderer/Picon.py b/lib/python/Components/Renderer/Picon.py index 5ae43ed8..51dc09a5 100644 --- a/lib/python/Components/Renderer/Picon.py +++ b/lib/python/Components/Renderer/Picon.py @@ -2,11 +2,11 @@ ## Picon renderer by Gruffy .. some speedups by Ghost ## from Renderer import Renderer -from enigma import ePixmap +from enigma import ePixmap, eEnv from Tools.Directories import fileExists, SCOPE_SKIN_IMAGE, SCOPE_CURRENT_SKIN, resolveFilename class Picon(Renderer): - searchPaths = ('/usr/share/enigma2/%s/', + searchPaths = (eEnv.resolve('${datadir}/enigma2/%s/'), '/media/cf/%s/', '/media/usb/%s/') diff --git a/lib/python/Components/UsageConfig.py b/lib/python/Components/UsageConfig.py index b86c1a13..8ea9aa6a 100644 --- a/lib/python/Components/UsageConfig.py +++ b/lib/python/Components/UsageConfig.py @@ -1,7 +1,7 @@ from Components.Harddisk import harddiskmanager from config import ConfigSubsection, ConfigYesNo, config, ConfigSelection, ConfigText, ConfigNumber, ConfigSet, ConfigLocations from Tools.Directories import resolveFilename, SCOPE_HDD -from enigma import Misc_Options, setTunerTypePriorityOrder; +from enigma import Misc_Options, setTunerTypePriorityOrder, eEnv; from SystemInfo import SystemInfo import os @@ -94,7 +94,7 @@ def InitUsageConfig(): SystemInfo["12V_Output"] = Misc_Options.getInstance().detected_12V_output() - config.usage.keymap = ConfigText(default = "/usr/share/enigma2/keymap.xml") + config.usage.keymap = ConfigText(default = eEnv.resolve("${datadir}/enigma2/keymap.xml")) config.seek = ConfigSubsection() config.seek.selfdefined_13 = ConfigNumber(default=15) diff --git a/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py b/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py index 2c0edf53..52296c66 100755 --- a/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py +++ b/lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py @@ -12,7 +12,7 @@ from ServiceReference import ServiceReference from Plugins.Plugin import PluginDescriptor from xml.etree.cElementTree import parse as ci_parse from Tools.XMLTools import elementsWithTag, mergeText, stringToXML -from enigma import eDVBCI_UI, eDVBCIInterfaces +from enigma import eDVBCI_UI, eDVBCIInterfaces, eEnv from os import system, path as os_path @@ -115,7 +115,7 @@ class CIconfigMenu(Screen): Screen.__init__(self, session) self.ci_slot=ci_slot - self.filename="/etc/enigma2/ci"+str(self.ci_slot)+".xml" + self.filename = eEnv.resolve("${sysconfdir}/enigma2/ci") + str(self.ci_slot) + ".xml" self["key_red"] = StaticText(_("Delete")) self["key_green"] = StaticText(_("add Service")) @@ -567,7 +567,7 @@ def activate_all(session): return Len > 0 and definitions[Len-1].text or default for ci in range(NUM_CI): - filename="/etc/enigma2/ci"+str(ci)+".xml" + filename = eEnv.resolve("${sysconfdir}/enigma2/ci") + str(ci) + ".xml" if not os_path.exists(filename): print "[CI_Activate_Config_CI%d] no config file found" %ci diff --git a/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py b/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py index ba96c071..3504d4cb 100755 --- a/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py +++ b/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py @@ -14,7 +14,7 @@ from Screens.TaskView import JobView from Tools.Directories import fileExists from Tools.HardwareInfo import HardwareInfo from os import system -from enigma import eConsoleAppContainer, quitMainloop +from enigma import eConsoleAppContainer, quitMainloop, eEnv from Components.About import about class md5Postcondition(Condition): @@ -51,7 +51,7 @@ class md5verify(Task): class writeNAND(Task): def __init__(self, job, param, box): Task.__init__(self,job, ("Writing image file to NAND Flash")) - self.setTool("/usr/lib/enigma2/python/Plugins/SystemPlugins/NFIFlash/writenfi-mipsel-2.6.18-r1") + self.setTool(eEnv.resolve("${libdir}/enigma2/python/Plugins/SystemPlugins/NFIFlash/writenfi-mipsel-2.6.18-r1")) if box == "dm7025": self.end = 256 elif box[:5] == "dm800": @@ -226,4 +226,4 @@ class NFIFlash(Screen): if self.job.status == self.job.FINISHED: self["status"].text = ("rebooting...") from os import system - system("/usr/lib/enigma2/python/Plugins/SystemPlugins/NFIFlash/kill_e2_reboot.sh") + system(eEnv.resolve("${libdir}/enigma2/python/Plugins/SystemPlugins/NFIFlash/kill_e2_reboot.sh")) diff --git a/lib/python/Plugins/SystemPlugins/SkinSelector/plugin.py b/lib/python/Plugins/SystemPlugins/SkinSelector/plugin.py index 997b9571..30cbb6b6 100755 --- a/lib/python/Plugins/SystemPlugins/SkinSelector/plugin.py +++ b/lib/python/Plugins/SystemPlugins/SkinSelector/plugin.py @@ -12,12 +12,13 @@ from Plugins.Plugin import PluginDescriptor from Components.config import config from Tools.Directories import resolveFilename, SCOPE_PLUGINS from os import path, walk +from enigma import eEnv class SkinSelector(Screen): # for i18n: # _("Choose your Skin") skinlist = [] - root = "/usr/share/enigma2/" + root = eEnv.resolve("${datadir}/enigma2/") def __init__(self, session, args = None): diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py b/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py index 7bd7d7a2..01649bb3 100755 --- a/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py +++ b/lib/python/Plugins/SystemPlugins/SoftwareManager/BackupRestore.py @@ -11,7 +11,7 @@ from Components.config import config from Components.ConfigList import ConfigList,ConfigListScreen from Components.FileList import MultiFileSelectList from Plugins.Plugin import PluginDescriptor -from enigma import eTimer +from enigma import eTimer, eEnv from Tools.Directories import * from os import popen, path, makedirs, listdir, access, stat, rename, remove, W_OK, R_OK from time import gmtime, strftime, localtime @@ -20,7 +20,7 @@ from datetime import date config.plugins.configurationbackup = ConfigSubsection() config.plugins.configurationbackup.backuplocation = ConfigText(default = '/media/hdd/', visible_width = 50, fixed_size = False) -config.plugins.configurationbackup.backupdirs = ConfigLocations(default=['/etc/enigma2/', '/etc/network/interfaces', '/etc/wpa_supplicant.conf', '/etc/resolv.conf', '/etc/default_gw', '/etc/hostname']) +config.plugins.configurationbackup.backupdirs = ConfigLocations(default=[eEnv.resolve('${sysconfdir}/enigma2/'), '/etc/network/interfaces', '/etc/wpa_supplicant.conf', '/etc/resolv.conf', '/etc/default_gw', '/etc/hostname']) def getBackupPath(): backuppath = config.plugins.configurationbackup.backuplocation.value diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/ImageWizard.py b/lib/python/Plugins/SystemPlugins/SoftwareManager/ImageWizard.py index 1797e4fe..32d7140a 100755 --- a/lib/python/Plugins/SystemPlugins/SoftwareManager/ImageWizard.py +++ b/lib/python/Plugins/SystemPlugins/SoftwareManager/ImageWizard.py @@ -9,13 +9,14 @@ from Plugins.Plugin import PluginDescriptor from Tools.Directories import fileExists, resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE from Components.Pixmap import Pixmap, MovingPixmap, MultiPixmap from os import popen, path, makedirs, listdir, access, stat, rename, remove, W_OK, R_OK +from enigma import eEnv from Components.config import config, getConfigListEntry, ConfigSubsection, ConfigText, ConfigLocations, ConfigBoolean from Components.Harddisk import harddiskmanager config.misc.firstrun = ConfigBoolean(default = True) config.plugins.configurationbackup = ConfigSubsection() config.plugins.configurationbackup.backuplocation = ConfigText(default = '/media/hdd/', visible_width = 50, fixed_size = False) -config.plugins.configurationbackup.backupdirs = ConfigLocations(default=['/etc/enigma2/', '/etc/network/interfaces', '/etc/wpa_supplicant.conf']) +config.plugins.configurationbackup.backupdirs = ConfigLocations(default=[eEnv.resolve('${sysconfdir}/enigma2/'), '/etc/network/interfaces', '/etc/wpa_supplicant.conf']) backupfile = "enigma2settingsbackup.tar.gz" diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py b/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py index 707663a0..e1f3e1de 100755 --- a/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py +++ b/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py @@ -28,7 +28,7 @@ from Components.Network import iNetwork from Tools.Directories import pathExists, fileExists, resolveFilename, SCOPE_PLUGINS, SCOPE_CURRENT_PLUGIN, SCOPE_CURRENT_SKIN, SCOPE_METADIR from Tools.LoadPixmap import LoadPixmap from Tools.NumericalTextInput import NumericalTextInput -from enigma import eTimer, quitMainloop, RT_HALIGN_LEFT, RT_VALIGN_CENTER, eListboxPythonMultiContent, eListbox, gFont, getDesktop, ePicLoad, eRCInput, getPrevAsciiCode +from enigma import eTimer, quitMainloop, RT_HALIGN_LEFT, RT_VALIGN_CENTER, eListboxPythonMultiContent, eListbox, gFont, getDesktop, ePicLoad, eRCInput, getPrevAsciiCode, eEnv from cPickle import dump, load from os import path as os_path, system as os_system, unlink, stat, mkdir, popen, makedirs, listdir, access, rename, remove, W_OK, R_OK, F_OK from time import time, gmtime, strftime, localtime @@ -43,7 +43,7 @@ from SoftwareTools import iSoftwareTools config.plugins.configurationbackup = ConfigSubsection() config.plugins.configurationbackup.backuplocation = ConfigText(default = '/media/hdd/', visible_width = 50, fixed_size = False) -config.plugins.configurationbackup.backupdirs = ConfigLocations(default=['/etc/enigma2/', '/etc/network/interfaces', '/etc/wpa_supplicant.conf', '/etc/resolv.conf', '/etc/default_gw', '/etc/hostname']) +config.plugins.configurationbackup.backupdirs = ConfigLocations(default=[eEnv.resolve('${sysconfdir}/enigma2/'), '/etc/network/interfaces', '/etc/wpa_supplicant.conf', '/etc/resolv.conf', '/etc/default_gw', '/etc/hostname']) config.plugins.SoftwareManager = ConfigSubsection() config.plugins.SoftwareManager.overwriteConfigFiles = ConfigSelection( @@ -1684,7 +1684,7 @@ class PacketManager(Screen, NumericalTextInput): self.cmdList = [] self.cachelist = [] self.cache_ttl = 86400 #600 is default, 0 disables, Seconds cache is considered valid (24h should be ok for caching ipkgs) - self.cache_file = '/usr/lib/enigma2/python/Plugins/SystemPlugins/SoftwareManager/packetmanager.cache' #Path to cache directory + self.cache_file = eEnv.resolve('${libdir}/enigma2/python/Plugins/SystemPlugins/SoftwareManager/packetmanager.cache') #Path to cache directory self.oktext = _("\nAfter pressing OK, please wait!") self.unwanted_extensions = ('-dbg', '-dev', '-doc', 'busybox') self.opkgAvail = fileExists('/usr/bin/opkg') diff --git a/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py b/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py index 28ee363e..a13c7975 100755 --- a/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py +++ b/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py @@ -1,4 +1,4 @@ -from enigma import eTimer, eTPM +from enigma import eTimer, eTPM, eEnv from Screens.Screen import Screen from Components.ActionMap import ActionMap, NumberActionMap from Components.Pixmap import Pixmap,MultiPixmap @@ -18,7 +18,7 @@ from Tools.HardwareInfo import HardwareInfo from Wlan import Wlan, wpaSupplicant, iStatus import sha -plugin_path = "/usr/lib/enigma2/python/Plugins/SystemPlugins/WirelessLan" +plugin_path = eEnv.resolve("${libdir}/enigma2/python/Plugins/SystemPlugins/WirelessLan") list = [] list.append("WEP") diff --git a/lib/python/Screens/ChannelSelection.py b/lib/python/Screens/ChannelSelection.py index 34316f01..c07e3495 100644 --- a/lib/python/Screens/ChannelSelection.py +++ b/lib/python/Screens/ChannelSelection.py @@ -8,7 +8,7 @@ from Components.MenuList import MenuList from Components.ServiceEventTracker import ServiceEventTracker, InfoBarBase profile("ChannelSelection.py 1") from EpgSelection import EPGSelection -from enigma import eServiceReference, eEPGCache, eServiceCenter, eRCInput, eTimer, eDVBDB, iPlayableService, iServiceInformation, getPrevAsciiCode +from enigma import eServiceReference, eEPGCache, eServiceCenter, eRCInput, eTimer, eDVBDB, iPlayableService, iServiceInformation, getPrevAsciiCode, eEnv from Components.config import config, ConfigSubsection, ConfigText from Tools.NumericalTextInput import NumericalTextInput profile("ChannelSelection.py 2") @@ -544,7 +544,7 @@ class ChannelSelectionEdit: refstr = refstr[pos+14:] pos = refstr.find('"') if pos != -1: - filename = '/etc/enigma2/' + refstr[:pos] # FIXMEEE !!! HARDCODED /etc/enigma2 + filename = eEnv.resolve('${sysconfdir}/enigma2/') + refstr[:pos] self.removeCurrentService() try: if filename is not None: diff --git a/lib/python/Screens/Setup.py b/lib/python/Screens/Setup.py index e9c3c680..61e6fdd7 100755 --- a/lib/python/Screens/Setup.py +++ b/lib/python/Screens/Setup.py @@ -4,6 +4,7 @@ from Components.config import config, ConfigNothing from Components.SystemInfo import SystemInfo from Components.ConfigList import ConfigListScreen from Components.Sources.StaticText import StaticText +from enigma import eEnv import xml.etree.cElementTree @@ -14,7 +15,7 @@ try: setupfile = file('data/setup.xml', 'r') except: # if not found in the current path, we use the global datadir-path - setupfile = file('/usr/share/enigma2/setup.xml', 'r') + setupfile = file(eEnv.resolve('${datadir}/enigma2/setup.xml'), 'r') setupdom = xml.etree.cElementTree.parse(setupfile) setupfile.close() diff --git a/lib/python/Screens/Wizard.py b/lib/python/Screens/Wizard.py index a752d31c..61e1d5ef 100755 --- a/lib/python/Screens/Wizard.py +++ b/lib/python/Screens/Wizard.py @@ -10,7 +10,7 @@ from Components.ActionMap import NumberActionMap from Components.MenuList import MenuList from Components.ConfigList import ConfigList from Components.Sources.List import List -from enigma import eTimer +from enigma import eTimer, eEnv from xml.sax import make_parser from xml.sax.handler import ContentHandler @@ -178,7 +178,7 @@ class Wizard(Screen): parser.setContentHandler(wizardHandler) for xmlfile in self.xmlfile: if xmlfile[0] != '/': - parser.parse('/usr/share/enigma2/' + xmlfile) + parser.parse(eEnv.resolve('${datadir}/enigma2/') + xmlfile) else: parser.parse(xmlfile) diff --git a/lib/python/Tools/Directories.py b/lib/python/Tools/Directories.py index 8ed2c8a4..518db49d 100755 --- a/lib/python/Tools/Directories.py +++ b/lib/python/Tools/Directories.py @@ -3,6 +3,7 @@ from os import path as os_path, mkdir, rmdir, system, walk, stat as os_stat, listdir, readlink, makedirs, error as os_error, symlink, access, F_OK, R_OK, W_OK from stat import S_IMODE from re import compile +from enigma import eEnv try: from os import chmod @@ -39,26 +40,26 @@ PATH_CREATE = 0 PATH_DONTCREATE = 1 PATH_FALLBACK = 2 defaultPaths = { - SCOPE_TRANSPONDERDATA: ("/etc/", PATH_DONTCREATE), - SCOPE_SYSETC: ("/etc/", PATH_DONTCREATE), - SCOPE_FONTS: ("/usr/share/fonts/", PATH_DONTCREATE), - SCOPE_CONFIG: ("/etc/enigma2/", PATH_CREATE), - SCOPE_PLUGINS: ("/usr/lib/enigma2/python/Plugins/", PATH_CREATE), + SCOPE_TRANSPONDERDATA: (eEnv.resolve("${sysconfdir}/"), PATH_DONTCREATE), + SCOPE_SYSETC: (eEnv.resolve("${sysconfdir}/"), PATH_DONTCREATE), + SCOPE_FONTS: (eEnv.resolve("${datadir}/fonts/"), PATH_DONTCREATE), + SCOPE_CONFIG: (eEnv.resolve("${sysconfdir}/enigma2/"), PATH_CREATE), + SCOPE_PLUGINS: (eEnv.resolve("${libdir}/enigma2/python/Plugins/"), PATH_CREATE), - SCOPE_LANGUAGE: ("/usr/share/enigma2/po/", PATH_DONTCREATE), + SCOPE_LANGUAGE: (eEnv.resolve("${datadir}/enigma2/po/"), PATH_DONTCREATE), - SCOPE_SKIN: ("/usr/share/enigma2/", PATH_DONTCREATE), - SCOPE_SKIN_IMAGE: ("/usr/share/enigma2/", PATH_DONTCREATE), + SCOPE_SKIN: (eEnv.resolve("${datadir}/enigma2/"), PATH_DONTCREATE), + SCOPE_SKIN_IMAGE: (eEnv.resolve("${datadir}/enigma2/"), PATH_DONTCREATE), SCOPE_HDD: ("/hdd/movie/", PATH_DONTCREATE), SCOPE_MEDIA: ("/media/", PATH_DONTCREATE), - SCOPE_PLAYLIST: ("/etc/enigma2/playlist/", PATH_CREATE), + SCOPE_PLAYLIST: (eEnv.resolve("${sysconfdir}/enigma2/playlist/"), PATH_CREATE), SCOPE_USERETC: ("", PATH_DONTCREATE), # user home directory - SCOPE_DEFAULTDIR: ("/usr/share/enigma2/defaults/", PATH_CREATE), + SCOPE_DEFAULTDIR: (eEnv.resolve("${datadir}/enigma2/defaults/"), PATH_CREATE), SCOPE_DEFAULTPARTITION: ("/dev/mtdblock/6", PATH_DONTCREATE), - SCOPE_DEFAULTPARTITIONMOUNTDIR: ("/usr/share/enigma2/dealer", PATH_CREATE), - SCOPE_METADIR: ("/usr/share/meta", PATH_CREATE), + SCOPE_DEFAULTPARTITIONMOUNTDIR: (eEnv.resolve("${datadir}/enigma2/dealer"), PATH_CREATE), + SCOPE_METADIR: (eEnv.resolve("${datadir}/meta"), PATH_CREATE), } FILE_COPY = 0 # copy files from fallback dir to the basedir @@ -67,7 +68,7 @@ PATH_COPY = 2 # copy the complete fallback dir to the basedir PATH_MOVE = 3 # move the fallback dir to the basedir (can be used for changes in paths) fallbackPaths = { SCOPE_CONFIG: [("/home/root/", FILE_MOVE), - ("/usr/share/enigma2/defaults/", FILE_COPY)], + (eEnv.resolve("${datadir}/enigma2/defaults/"), FILE_COPY)], SCOPE_HDD: [("/hdd/movies", PATH_MOVE)] } diff --git a/main/bsod.cpp b/main/bsod.cpp index 68b5d571..c0362832 100755 --- a/main/bsod.cpp +++ b/main/bsod.cpp @@ -2,6 +2,7 @@ #include #include +#include #include #include #include @@ -65,7 +66,7 @@ static void addToLogbuffer(int level, const std::string &log) static std::string getConfigFileValue(const char *entry) { - std::string configfile = "/etc/enigma2/settings"; + std::string configfile = eEnv::resolve("${sysconfdir}/enigma2/settings"); std::string configvalue; if (entry) { @@ -140,8 +141,8 @@ static std::string getFileContent(const char *file) return filecontent; } -static std::string execCommand(char* cmd) { - FILE* pipe = popen(cmd, "r"); +static std::string execCommand(std::string cmd) { + FILE* pipe = popen(cmd.c_str(), "r"); if (!pipe) return "Error"; char buffer[STDBUFFER_SIZE]; @@ -156,11 +157,6 @@ static std::string execCommand(char* cmd) { return result; } -extern std::string execCommand(); -extern std::string getConfigFileValue(); -extern std::string getFileContent(); -extern std::string getLogBuffer(); - #define INFOFILE "/maintainer.info" void bsodFatal(const char *component) @@ -274,7 +270,7 @@ void bsodFatal(const char *component) dreamboxca[strlen(dreamboxca)-1] = 0; fprintf(f, "\t\t\n\t\t\n\t\t\n", dreamboxca); } - std::string settings = getFileContent("/etc/enigma2/settings"); + std::string settings = getFileContent(eEnv::resolve("${sysconfdir}/enigma2/settings").c_str()); if (settings != "Error") { fprintf(f, "\t\t\n\t\t\n\t\t\n", settings.c_str()); @@ -336,7 +332,7 @@ void bsodFatal(const char *component) fprintf(f, "\t\n"); std::string buffer = getLogBuffer(); fprintf(f, "\t\t\n\t\t\n\t\t\n", buffer.c_str()); - std::string pythonmd5 = execCommand("find /usr/lib/enigma2/python/ -name \"*.py\" | xargs md5sum"); + std::string pythonmd5 = execCommand("find " + eEnv::resolve("${libdir}/enigma2/python/") + " -name \"*.py\" | xargs md5sum"); fprintf(f, "\t\t\n\t\t\n\t\t\n", pythonmd5.c_str()); fprintf(f, "\t\n"); diff --git a/main/enigma-gdi.cpp b/main/enigma-gdi.cpp index 144e2d3a..328fba44 100644 --- a/main/enigma-gdi.cpp +++ b/main/enigma-gdi.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include #include #include @@ -67,7 +68,7 @@ int main() pal[a | 0x10] = (0x111111 * a) | 0xFF; p.setPalette(pal, 0, 256); - fontRenderClass::getInstance()->AddFont(FONTDIR "/arial.ttf", "Regular", 100); + fontRenderClass::getInstance()->AddFont(eEnv::resolve("${datadir}/fonts/arial.ttf"), "Regular", 100); p.resetClip(gRegion(eRect(0, 0, 720, 576))); diff --git a/main/enigma-gui.cpp b/main/enigma-gui.cpp index e53fccab..2ba61067 100644 --- a/main/enigma-gui.cpp +++ b/main/enigma-gui.cpp @@ -67,7 +67,7 @@ int main() pal[a | 0x10] = (0x111111 * a) | 0xFF; p.setPalette(pal, 0, 256); - fontRenderClass::getInstance()->AddFont(FONTDIR "/arial.ttf", "Regular", 100); + fontRenderClass::getInstance()->AddFont(eEnv::resolve("${datadir}/fonts/arial.ttf"), "Regular", 100); eWidgetDesktop dsk(eSize(720, 576)); dsk.setDC(my_dc); diff --git a/main/enigma.cpp b/main/enigma.cpp index b3364679..882af996 100644 --- a/main/enigma.cpp +++ b/main/enigma.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -136,7 +137,7 @@ int main(int argc, char **argv) gst_init(&argc, &argv); // set pythonpath if unset - setenv("PYTHONPATH", LIBDIR "/enigma2/python", 0); + setenv("PYTHONPATH", eEnv::resolve("${libdir}/enigma2/python").c_str(), 0); printf("PYTHONPATH: %s\n", getenv("PYTHONPATH")); bsodLogInit(); @@ -186,7 +187,7 @@ int main(int argc, char **argv) dsk_lcd.setDC(my_lcd_dc); ePtr m_pm; - loadPNG(m_pm, DATADIR "/enigma2/skin_default/pal.png"); + loadPNG(m_pm, eEnv::resolve("${datadir}/enigma2/skin_default/pal.png").c_str()); if (!m_pm) { eFatal("pal.png not found!"); @@ -209,14 +210,16 @@ int main(int argc, char **argv) ePtr wait[MAX_SPINNER]; for (i=0; i Date: Fri, 29 Oct 2010 14:54:36 +0200 Subject: Add abstract class gMainDC as an interface for gFBDC and gSDLDC --- configure.ac | 1 - lib/gdi/Makefile.am | 10 ++++++---- lib/gdi/gfbdc.cpp | 16 +--------------- lib/gdi/gfbdc.h | 26 +++----------------------- lib/gdi/glcddc.cpp | 2 +- lib/gdi/glcddc.h | 2 +- lib/gdi/gmaindc.cpp | 28 ++++++++++++++++++++++++++++ lib/gdi/gmaindc.h | 33 +++++++++++++++++++++++++++++++++ lib/gdi/grc.cpp | 2 +- lib/gdi/grc.h | 10 +++++----- lib/gdi/sdl.cpp | 44 ++++++++++++++++++++++---------------------- lib/gdi/sdl.h | 10 ++++------ lib/python/enigma_python.i | 4 ++-- main/bsod.cpp | 14 +++----------- main/enigma-gdi.cpp | 6 +++--- main/enigma-gui.cpp | 6 +++--- main/enigma.cpp | 16 ++++------------ skin.py | 4 ++-- 18 files changed, 122 insertions(+), 112 deletions(-) create mode 100644 lib/gdi/gmaindc.cpp create mode 100644 lib/gdi/gmaindc.h (limited to 'main/enigma.cpp') diff --git a/configure.ac b/configure.ac index d6b695f5..15c1212a 100644 --- a/configure.ac +++ b/configure.ac @@ -55,7 +55,6 @@ AC_ARG_WITH(libsdl, [with_libsdl=$withval],[with_libsdl=no]) if test "$with_libsdl" = "yes"; then PKG_CHECK_MODULES(LIBSDL, sdl) - AC_DEFINE([WITH_SDL],[1],[Define to 1 if you have libsdl]) fi AM_CONDITIONAL(HAVE_LIBSDL, test "$with_libsdl" = "yes") diff --git a/lib/gdi/Makefile.am b/lib/gdi/Makefile.am index febbab22..20321f53 100644 --- a/lib/gdi/Makefile.am +++ b/lib/gdi/Makefile.am @@ -18,9 +18,9 @@ libenigma_gdi_a_SOURCES = \ fb.cpp \ font.cpp \ font_arabic.cpp \ - gfbdc.cpp \ gfont.cpp \ glcddc.cpp \ + gmaindc.cpp \ gpixmap.cpp \ grc.cpp \ lcd.cpp \ @@ -38,7 +38,6 @@ gdiinclude_HEADERS = \ esize.h \ fb.h \ font.h \ - gfbdc.h \ gfont.h \ glcddc.h \ gpixmap.h \ @@ -50,7 +49,10 @@ gdiinclude_HEADERS = \ if HAVE_LIBSDL libenigma_gdi_a_SOURCES += \ - sdl.cpp -gdiinclude_HEADERS += \ + sdl.cpp \ sdl.h +else +libenigma_gdi_a_SOURCES += \ + gfbdc.cpp \ + gfbdc.h endif diff --git a/lib/gdi/gfbdc.cpp b/lib/gdi/gfbdc.cpp index 80dd2479..a4f65ebc 100644 --- a/lib/gdi/gfbdc.cpp +++ b/lib/gdi/gfbdc.cpp @@ -7,18 +7,8 @@ #include -gFBDC *gFBDC::instance; - -ePtr NewgFBDCPtr(void) -{ - ePtr ptr; - gFBDC::getInstance(ptr); - return ptr; -} - gFBDC::gFBDC() { - instance=this; fb=new fbClass; if (!fb->Available()) @@ -34,7 +24,6 @@ gFBDC::~gFBDC() { delete fb; delete[] surface.clut.data; - instance=0; } void gFBDC::calcRamp() @@ -91,7 +80,7 @@ void gFBDC::setPalette() fb->PutCMAP(); } -void gFBDC::exec(gOpcode *o) +void gFBDC::exec(const gOpcode *o) { switch (o->opcode) { @@ -242,7 +231,4 @@ void gFBDC::reloadSettings() setPalette(); } -// eAutoInitPtr init_gFBDC(eAutoInitNumbers::graphic-1, "GFBDC"); -#ifndef WITH_SDL eAutoInitPtr init_gFBDC(eAutoInitNumbers::graphic-1, "GFBDC"); -#endif diff --git a/lib/gdi/gfbdc.h b/lib/gdi/gfbdc.h index 23051c4f..7f76d0c9 100644 --- a/lib/gdi/gfbdc.h +++ b/lib/gdi/gfbdc.h @@ -3,17 +3,12 @@ #include "fb.h" #include "gpixmap.h" -#include "grc.h" +#include "gmaindc.h" -class gFBDC; - -SWIG_IGNORE(gFBDC); -class gFBDC: public gDC +class gFBDC: public gMainDC { -#ifndef SWIG fbClass *fb; - static gFBDC *instance; - void exec(gOpcode *opcode); + void exec(const gOpcode *opcode); unsigned char ramp[256], rampalpha[256]; // RGB ramp 0..255 int brightness, gamma, alpha; void calcRamp(); @@ -21,13 +16,8 @@ class gFBDC: public gDC gSurface surface, surface_back; int m_enable_double_buffering; int m_xres, m_yres; -#else - gFBDC(); - virtual ~gFBDC(); -#endif public: void setResolution(int xres, int yres); -#ifndef SWIG void reloadSettings(); void setAlpha(int alpha); void setBrightness(int brightness); @@ -43,17 +33,7 @@ public: gFBDC(); virtual ~gFBDC(); - static int getInstance(ePtr &ptr) { if (!instance) return -1; ptr = instance; return 0; } int islocked() { return fb->islocked(); } -#endif }; -SWIG_TEMPLATE_TYPEDEF(ePtr, gFBDC); -SWIG_EXTEND(ePtr, - static ePtr getInstance() - { - extern ePtr NewgFBDCPtr(void); - return NewgFBDCPtr(); - } -); #endif diff --git a/lib/gdi/glcddc.cpp b/lib/gdi/glcddc.cpp index a593cfa3..bade53ba 100644 --- a/lib/gdi/glcddc.cpp +++ b/lib/gdi/glcddc.cpp @@ -30,7 +30,7 @@ gLCDDC::~gLCDDC() instance=0; } -void gLCDDC::exec(gOpcode *o) +void gLCDDC::exec(const gOpcode *o) { switch (o->opcode) { diff --git a/lib/gdi/glcddc.h b/lib/gdi/glcddc.h index 6d5f3834..a2b3c7f0 100644 --- a/lib/gdi/glcddc.h +++ b/lib/gdi/glcddc.h @@ -9,7 +9,7 @@ class gLCDDC: public gDC eLCD *lcd; static gLCDDC *instance; int update; - void exec(gOpcode *opcode); + void exec(const gOpcode *opcode); gSurface surface; public: gLCDDC(); diff --git a/lib/gdi/gmaindc.cpp b/lib/gdi/gmaindc.cpp new file mode 100644 index 00000000..4890027f --- /dev/null +++ b/lib/gdi/gmaindc.cpp @@ -0,0 +1,28 @@ +#include + +gMainDC *gMainDC::m_instance; + +ePtr NewgMainDCPtr(void) +{ + ePtr ptr; + gMainDC::getInstance(ptr); + return ptr; +} + +gMainDC::gMainDC() +{ + ASSERT(m_instance == 0); + m_instance = this; +} + +gMainDC::gMainDC(gPixmap *pixmap) : gDC(pixmap) +{ + ASSERT(m_instance == 0); + m_instance = this; +} + +gMainDC::~gMainDC() +{ + m_instance = 0; +} + diff --git a/lib/gdi/gmaindc.h b/lib/gdi/gmaindc.h new file mode 100644 index 00000000..780be2e2 --- /dev/null +++ b/lib/gdi/gmaindc.h @@ -0,0 +1,33 @@ +#ifndef __lib_gdi_gmaindc_h +#define __lib_gdi_gmaindc_h + +#include "grc.h" + +class gMainDC; + +SWIG_IGNORE(gMainDC); +class gMainDC: public gDC +{ +protected: + static gMainDC *m_instance; + + gMainDC(); + gMainDC(gPixmap *pixmap); + virtual ~gMainDC(); +public: + virtual void setResolution(int xres, int yres) = 0; +#ifndef SWIG + static int getInstance(ePtr &ptr) { if (!m_instance) return -1; ptr = m_instance; return 0; } +#endif +}; + +SWIG_TEMPLATE_TYPEDEF(ePtr, gMainDC); +SWIG_EXTEND(ePtr, + static ePtr getInstance() + { + extern ePtr NewgMainDCPtr(void); + return NewgMainDCPtr(); + } +); + +#endif diff --git a/lib/gdi/grc.cpp b/lib/gdi/grc.cpp index dff6b059..a45b3b1e 100644 --- a/lib/gdi/grc.cpp +++ b/lib/gdi/grc.cpp @@ -609,7 +609,7 @@ gDC::~gDC() delete[] m_spinner_pic; } -void gDC::exec(gOpcode *o) +void gDC::exec(const gOpcode *o) { switch (o->opcode) { diff --git a/lib/gdi/grc.h b/lib/gdi/grc.h index 3b8201ad..38caa107 100644 --- a/lib/gdi/grc.h +++ b/lib/gdi/grc.h @@ -286,7 +286,7 @@ protected: eRect m_spinner_pos; int m_spinner_num, m_spinner_i; public: - virtual void exec(gOpcode *opcode); + virtual void exec(const gOpcode *opcode); gDC(gPixmap *pixmap); gDC(); virtual ~gDC(); @@ -296,10 +296,10 @@ public: virtual eSize size() { return m_pixmap->size(); } virtual int islocked() { return 0; } - void enableSpinner(); - void disableSpinner(); - void incrementSpinner(); - void setSpinner(eRect pos, ePtr *pic, int len); + virtual void enableSpinner(); + virtual void disableSpinner(); + virtual void incrementSpinner(); + virtual void setSpinner(eRect pos, ePtr *pic, int len); }; #endif diff --git a/lib/gdi/sdl.cpp b/lib/gdi/sdl.cpp index 6dbdb67c..e816a185 100644 --- a/lib/gdi/sdl.cpp +++ b/lib/gdi/sdl.cpp @@ -1,4 +1,3 @@ -#ifdef WITH_SDL #include #include @@ -6,8 +5,6 @@ #include -gSDLDC *gSDLDC::m_instance; - gSDLDC::gSDLDC() { if (SDL_Init(SDL_INIT_VIDEO) < 0) @@ -15,23 +12,12 @@ gSDLDC::gSDLDC() eWarning("Could not initialize SDL: %s", SDL_GetError()); return; } - - m_screen = SDL_SetVideoMode(720, 576, 32, SDL_HWSURFACE); - if (!m_screen) - { - eWarning("Could not create SDL surface: %s", SDL_GetError()); - return; - } - m_instance=this; - + setResolution(720, 576); + + CONNECT(m_pump.recv_msg, gSDLDC::pumpEvent); + m_surface.type = 0; - m_surface.x = m_screen->w; - m_surface.y = m_screen->h; - m_surface.bpp = m_screen->format->BitsPerPixel; - m_surface.bypp = m_screen->format->BytesPerPixel; - m_surface.stride = m_screen->pitch; - m_surface.data = m_screen->pixels; m_surface.clut.colors=256; m_surface.clut.data=new gRGB[m_surface.clut.colors]; @@ -43,7 +29,6 @@ gSDLDC::gSDLDC() gSDLDC::~gSDLDC() { SDL_Quit(); - m_instance=0; } void gSDLDC::setPalette() @@ -63,7 +48,7 @@ void gSDLDC::setPalette() fb->PutCMAP(); */ } -void gSDLDC::exec(gOpcode *o) +void gSDLDC::exec(const gOpcode *o) { switch (o->opcode) { @@ -83,6 +68,21 @@ void gSDLDC::exec(gOpcode *o) } } -eAutoInitPtr init_gSDLDC(eAutoInitNumbers::graphic-1, "gSDLDC"); +void gSDLDC::setResolution(int xres, int yres) +{ + m_screen = SDL_SetVideoMode(xres, yres, 32, SDL_HWSURFACE); + if (!m_screen) + { + eWarning("Could not create SDL surface: %s", SDL_GetError()); + return; + } + + m_surface.x = m_screen->w; + m_surface.y = m_screen->h; + m_surface.bpp = m_screen->format->BitsPerPixel; + m_surface.bypp = m_screen->format->BytesPerPixel; + m_surface.stride = m_screen->pitch; + m_surface.data = m_screen->pixels; +} -#endif +eAutoInitPtr init_gSDLDC(eAutoInitNumbers::graphic-1, "gSDLDC"); diff --git a/lib/gdi/sdl.h b/lib/gdi/sdl.h index 20ff04fa..9f86cbbd 100644 --- a/lib/gdi/sdl.h +++ b/lib/gdi/sdl.h @@ -3,25 +3,23 @@ #include "fb.h" #include "gpixmap.h" -#include "grc.h" +#include "gmaindc.h" #include -class gSDLDC: public gDC +class gSDLDC: public gMainDC { SDL_Surface *m_screen; - static gSDLDC *m_instance; - void exec(gOpcode *opcode); + void exec(const gOpcode *opcode); void setPalette(); gSurface m_surface; public: + void setResolution(int xres, int yres); gSDLDC(); virtual ~gSDLDC(); - static int getInstance(ePtr &ptr) { if (!m_instance) return -1; ptr = m_instance; return 0; } int islocked() { return 0; } }; - #endif diff --git a/lib/python/enigma_python.i b/lib/python/enigma_python.i index 43d94ac9..7c999277 100644 --- a/lib/python/enigma_python.i +++ b/lib/python/enigma_python.i @@ -51,7 +51,7 @@ is usually caused by not marking PSignals as immutable. #include #include #include -#include +#include #include #include #include @@ -166,7 +166,7 @@ typedef long time_t; %include %include %include -%include +%include %include %include %include diff --git a/main/bsod.cpp b/main/bsod.cpp index c0362832..40252c0f 100755 --- a/main/bsod.cpp +++ b/main/bsod.cpp @@ -7,10 +7,7 @@ #include #include #include -#include -#ifdef WITH_SDL -#include -#endif +#include #include "version.h" @@ -341,13 +338,8 @@ void bsodFatal(const char *component) } -#ifdef WITH_SDL - ePtr my_dc; - gSDLDC::getInstance(my_dc); -#else - ePtr my_dc; - gFBDC::getInstance(my_dc); -#endif + ePtr my_dc; + gMainDC::getInstance(my_dc); { gPainter p(my_dc); diff --git a/main/enigma-gdi.cpp b/main/enigma-gdi.cpp index 328fba44..f21c8701 100644 --- a/main/enigma-gdi.cpp +++ b/main/enigma-gdi.cpp @@ -9,7 +9,7 @@ #include #include -#include +#include #include #include @@ -53,8 +53,8 @@ int main() eInit init; init.setRunlevel(eAutoInitNumbers::main); - ePtr my_dc; - gFBDC::getInstance(my_dc); + ePtr my_dc; + gMainDC::getInstance(my_dc); gPainter p(my_dc); diff --git a/main/enigma-gui.cpp b/main/enigma-gui.cpp index 2ba61067..f3d1b17d 100644 --- a/main/enigma-gui.cpp +++ b/main/enigma-gui.cpp @@ -8,7 +8,7 @@ #include #include -#include +#include #include #include @@ -52,8 +52,8 @@ int main() eInit init; init.setRunlevel(eAutoInitNumbers::main); - ePtr my_dc; - gFBDC::getInstance(my_dc); + ePtr my_dc; + gMainDC::getInstance(my_dc); gPainter p(my_dc); diff --git a/main/enigma.cpp b/main/enigma.cpp index 882af996..3ea4afb7 100644 --- a/main/enigma.cpp +++ b/main/enigma.cpp @@ -13,12 +13,9 @@ #include #include #include -#include +#include #include #include -#ifdef WITH_SDL -#include -#endif #include #include #include @@ -146,15 +143,10 @@ int main(int argc, char **argv) eMain main; #if 1 -#ifdef WITH_SDL - ePtr my_dc; - gSDLDC::getInstance(my_dc); -#else - ePtr my_dc; - gFBDC::getInstance(my_dc); + ePtr my_dc; + gMainDC::getInstance(my_dc); - int double_buffer = my_dc->haveDoubleBuffering(); -#endif + //int double_buffer = my_dc->haveDoubleBuffering(); ePtr my_lcd_dc; gLCDDC::getInstance(my_lcd_dc); diff --git a/skin.py b/skin.py index b490f739..19da2036 100755 --- a/skin.py +++ b/skin.py @@ -284,8 +284,8 @@ def loadSingleSkinData(desktop, skin, path_prefix): else: bpp = 32 #print "Resolution:", xres,yres,bpp - from enigma import gFBDC - gFBDC.getInstance().setResolution(xres, yres) + from enigma import gMainDC + gMainDC.getInstance().setResolution(xres, yres) desktop.resize(eSize(xres, yres)) if bpp != 32: # load palette (not yet implemented) -- cgit v1.2.3 From 728f5f70f2ece1e2ac1e70cf5a3512b6cfd8cd83 Mon Sep 17 00:00:00 2001 From: Andreas Oberritter Date: Mon, 1 Nov 2010 14:36:06 +0100 Subject: bsod: use simple XML generator --- configure.ac | 3 + main/Makefile.am | 42 +++-- main/bsod.cpp | 469 +++++++++++++++++--------------------------------- main/enigma.cpp | 17 +- main/version_info.cpp | 18 ++ main/version_info.h | 8 + main/xmlgenerator.cpp | 188 ++++++++++++++++++++ main/xmlgenerator.h | 43 +++++ 8 files changed, 446 insertions(+), 342 deletions(-) mode change 100755 => 100644 main/bsod.cpp create mode 100644 main/version_info.cpp create mode 100644 main/version_info.h create mode 100644 main/xmlgenerator.cpp create mode 100644 main/xmlgenerator.h (limited to 'main/enigma.cpp') diff --git a/configure.ac b/configure.ac index 25589c2c..c2d8d915 100644 --- a/configure.ac +++ b/configure.ac @@ -34,6 +34,9 @@ AX_PTHREAD TUXBOX_APPS_DVB +AM_CONDITIONAL(HAVE_GIT_DIR, test -d "$srcdir/.git") +AM_CONDITIONAL(HAVE_FAKE_GIT_DIR, test -f "$srcdir/.git/last_commit_info") + PKG_CHECK_MODULES(BASE, [freetype2 fribidi gstreamer-0.10 gstreamer-pbutils-0.10 libdvbsi++ libpng libxml-2.0 sigc++-1.2]) PKG_CHECK_MODULES(LIBDDVD, libdreamdvd, HAVE_LIBDDVD="yes", HAVE_LIBDDVD="no") AM_CONDITIONAL(HAVE_LIBDDVD, test "$HAVE_LIBDDVD" = "yes") diff --git a/main/Makefile.am b/main/Makefile.am index c96f9066..782138e8 100644 --- a/main/Makefile.am +++ b/main/Makefile.am @@ -13,6 +13,10 @@ enigma2_SOURCES = \ bsod.cpp \ bsod.h \ enigma.cpp \ + xmlgenerator.cpp \ + xmlgenerator.h \ + version_info.cpp \ + version_info.h version.h EXTRA_DIST = \ @@ -48,27 +52,29 @@ enigma2_LDADD = \ enigma2_LDFLAGS = -Wl,--export-dynamic -BUILT_SOURCES = version.h - +if HAVE_GIT_DIR GIT_DIR = $(top_srcdir)/.git +GIT = git --git-dir=$(GIT_DIR) -version.h: - if [ -d $(GIT_DIR) ]; then \ - if [ -f $(GIT_DIR)/last_commit_info ]; then \ - echo "#define ENIGMA2_LAST_CHANGE_DATE \"`cat $(GIT_DIR)/last_commit_info | grep 'Date:' | cut -d' ' -f4`\"" > $@; \ - echo "#define ENIGMA2_BRANCH \"`cat $(GIT_DIR)/branch`\"" >> $@; \ - else \ - echo "#define ENIGMA2_LAST_CHANGE_DATE \"`git --git-dir=$(top_srcdir)/.git log --no-color -n 1 --format=format:%cd --date=short`\"" > $@; \ - echo "#define ENIGMA2_BRANCH \"`git --git-dir=$(top_srcdir)/.git branch --no-color 2>/dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'`\"" >> $@; \ - fi; \ - elif [ ! -f $@ ]; then \ - echo "#define ENIGMA2_LAST_CHANGE_DATE \"`date --rfc-3339=date`\"" > $@; \ - echo "#define ENIGMA2_BRANCH \"$(PACKAGE_VERSION)\"" >> $@; \ - fi; +if HAVE_FAKE_GIT_DIR +ENIGMA2_DATE = `cat $(GIT_DIR)/last_commit_info | grep 'Date:' | cut -d' ' -f4` +ENIGMA2_BRANCH = `cat $(GIT_DIR)/branch` +else +ENIGMA2_DATE = `$(GIT) log --no-color -n 1 --format=format:%cd --date=short` +ENIGMA2_BRANCH = `$(GIT) branch --no-color 2>/dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'` +ENIGMA2_REV = `$(GIT) describe --abbrev=7 --always --dirty --long --tags` +endif -dist-hook: - echo "#define ENIGMA2_LAST_CHANGE_DATE \"`date --rfc-3339=date`\"" > version.h; - echo "#define ENIGMA2_BRANCH \"$(PACKAGE_VERSION)\"" >> version.h; +BUILT_SOURCES = version-intermediate.h +CLEANFILES = version-intermediate.h +version-intermediate.h: + $(AM_V_GEN)touch $@ + $(AM_V_at)[ -n "$(ENIGMA2_DATE)" ] && echo "#define ENIGMA2_LAST_CHANGE_DATE \"$(ENIGMA2_DATE)\"" >> $@ + $(AM_V_at)[ -n "$(ENIGMA2_BRANCH)" ] && echo "#define ENIGMA2_BRANCH \"$(ENIGMA2_BRANCH)\"" >> $@ + $(AM_V_at)[ -n "$(ENIGMA2_REV)" ] && echo "#define ENIGMA2_REV \"$(ENIGMA2_REV)\"" >> $@ + $(AM_V_at)([ -f version.h ] && diff -q version.h $@ >/dev/null) || $(INSTALL_HEADER) $@ version.h + $(AM_V_at)$(RM) $@ +endif enigma2$(EXEEXT): $(enigma2_OBJECTS) $(enigma2_DEPENDENCIES) $(enigma2_LDADD_WHOLE) $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ $(enigma2_LDFLAGS) $(enigma2_OBJECTS) \ diff --git a/main/bsod.cpp b/main/bsod.cpp old mode 100755 new mode 100644 index 40252c0f..7256d20a --- a/main/bsod.cpp +++ b/main/bsod.cpp @@ -1,45 +1,51 @@ -#include -#include -#include - +#include +#include #include #include -#include #include -#include #include -#include "version.h" +#if defined(__MIPSEL__) +#include +#else +#warning "no oops support!" +#define NO_OOPS_SUPPORT +#endif + +#include "xmlgenerator.h" +#include "version_info.h" /************************************************/ #define CRASH_EMAILADDR "crashlog@dream-multimedia-tv.de" -#define STDBUFFER_SIZE 512 +#define INFOFILE "/maintainer.info" + #define RINGBUFFER_SIZE 16384 static char ringbuffer[RINGBUFFER_SIZE]; -static int ringbuffer_head; +static unsigned int ringbuffer_head; -static void addToLogbuffer(const char *data, int len) +static void addToLogbuffer(const char *data, unsigned int len) { while (len) { - int remaining = RINGBUFFER_SIZE - ringbuffer_head; - + unsigned int remaining = RINGBUFFER_SIZE - ringbuffer_head; + if (remaining > len) remaining = len; - + memcpy(ringbuffer + ringbuffer_head, data, remaining); len -= remaining; data += remaining; ringbuffer_head += remaining; - if (ringbuffer_head >= RINGBUFFER_SIZE) + ASSERT(ringbuffer_head <= RINGBUFFER_SIZE); + if (ringbuffer_head == RINGBUFFER_SIZE) ringbuffer_head = 0; } } -static std::string getLogBuffer() +static const std::string getLogBuffer() { - int begin = ringbuffer_head; + unsigned int begin = ringbuffer_head; while (ringbuffer[begin] == 0) { ++begin; @@ -48,12 +54,11 @@ static std::string getLogBuffer() if (begin == ringbuffer_head) return ""; } + if (begin < ringbuffer_head) return std::string(ringbuffer + begin, ringbuffer_head - begin); else - { return std::string(ringbuffer + begin, RINGBUFFER_SIZE - begin) + std::string(ringbuffer, ringbuffer_head); - } } static void addToLogbuffer(int level, const std::string &log) @@ -61,117 +66,67 @@ static void addToLogbuffer(int level, const std::string &log) addToLogbuffer(log.c_str(), log.size()); } -static std::string getConfigFileValue(const char *entry) +static const std::string getConfigString(const std::string &key, const std::string &defaultValue) { - std::string configfile = eEnv::resolve("${sysconfdir}/enigma2/settings"); - std::string configvalue; - if (entry) - { - ePythonConfigQuery::getConfigValue(entry, configvalue); - if (configvalue != "") //we get at least the default value if python is still alive - { - return configvalue; - } - else // get value from enigma2 settings file - { - FILE *f = fopen(configfile.c_str(), "r"); - if (!f) - { - return "Error"; - } - while (1) - { - char line[1024]; - if (!fgets(line, 1024, f)) - break; - if (!strncmp(line, entry, strlen(entry) )) - { - if (strlen(line) && line[strlen(line)-1] == '\r') - line[strlen(line)-1] = 0; - if (strlen(line) && line[strlen(line)-1] == '\n') - line[strlen(line)-1] = 0; - std::string tmp = line; - int posEqual = tmp.find("=", 0); - configvalue = tmp.substr(posEqual+1); - } - } - fclose(f); - return configvalue; - } - } -} + std::string value; -static std::string getFileContent(const char *file) -{ - std::string filecontent; + ePythonConfigQuery::getConfigValue(key.c_str(), value); + //we get at least the default value if python is still alive + if (!value.empty()) + return value; - if (file) - { - FILE *f = fopen(file, "r"); - if (!f) - { - return "Error"; - } - while (1) - { - char line[1024]; - if (!fgets(line, 1024, f)) + value = defaultValue; + + // get value from enigma2 settings file + std::ifstream in(eEnv::resolve("${sysconfdir}/enigma2/settings").c_str()); + if (in.good()) { + do { + std::string line; + std::getline(in, line); + size_t size = key.size(); + if (!key.compare(0, size, line) && line[size] == '=') { + value = line.substr(size + 1); break; - std::string tmp = line; - std::string password; - int pwdpos = tmp.find(".password=", 0); - if( pwdpos != std::string::npos) - { - filecontent += tmp.substr(0,pwdpos +10); - for ( int pos = pwdpos +10; pos < tmp.length()-1; ++pos ) - { - filecontent += "X"; - } - filecontent += "\n"; - } - else { - filecontent += line; } - } - fclose(f); + } while (in.good()); + in.close(); } - return filecontent; -} -static std::string execCommand(std::string cmd) { - FILE* pipe = popen(cmd.c_str(), "r"); - if (!pipe) - return "Error"; - char buffer[STDBUFFER_SIZE]; - std::string result = ""; - while(!feof(pipe)) - { - if(!fgets(buffer,STDBUFFER_SIZE, pipe)) - break; - result += buffer; - } - pclose(pipe); - return result; + return value; } -#define INFOFILE "/maintainer.info" +static bool getConfigBool(const std::string &key, bool defaultValue) +{ + std::string value = getConfigString(key, defaultValue ? "true" : "false"); + const char *cvalue = value.c_str(); + + if (!strcasecmp(cvalue, "true")) + return true; + if (!strcasecmp(cvalue, "false")) + return false; + + return defaultValue; +} void bsodFatal(const char *component) { - char logfile[128]; - sprintf(logfile, "/media/hdd/enigma2_crash_%u.log", (unsigned int)time(0)); - FILE *f = fopen(logfile, "wb"); + std::ostringstream os; + os << time(0); + + std::string logfile("/media/hdd/enigma2_crash_" + os.str() + ".log"); + + FILE *f = fopen(logfile.c_str(), "wb"); std::string lines = getLogBuffer(); /* find python-tracebacks, and extract " File "-strings */ size_t start = 0; - char crash_emailaddr[256] = CRASH_EMAILADDR; - char crash_component[256] = "enigma2"; + std::string crash_emailaddr = CRASH_EMAILADDR; + std::string crash_component = "enigma2"; if (component) - snprintf(crash_component, 256, component); + crash_component = component; else { while ((start = lines.find("\n File \"", start)) != std::string::npos) @@ -188,21 +143,12 @@ void bsodFatal(const char *component) if (end == std::string::npos) break; - if (end - start >= (256 - strlen(INFOFILE))) - continue; - char filename[256]; - snprintf(filename, 256, "%s%s", lines.substr(start, end - start).c_str(), INFOFILE); - FILE *cf = fopen(filename, "r"); - if (cf) - { - fgets(crash_emailaddr, sizeof crash_emailaddr, cf); - if (*crash_emailaddr && crash_emailaddr[strlen(crash_emailaddr)-1] == '\n') - crash_emailaddr[strlen(crash_emailaddr)-1] = 0; - - fgets(crash_component, sizeof crash_component, cf); - if (*crash_component && crash_component[strlen(crash_component)-1] == '\n') - crash_component[strlen(crash_component)-1] = 0; - fclose(cf); + + std::string filename(lines.substr(start, end - start) + INFOFILE); + std::ifstream in(filename.c_str()); + if (in.good()) { + std::getline(in, crash_emailaddr) && std::getline(in, crash_component); + in.close(); } } } @@ -210,202 +156,108 @@ void bsodFatal(const char *component) if (f) { time_t t = time(0); - char crashtime[STDBUFFER_SIZE]; - sprintf(crashtime, "%s",ctime(&t)); - if (strlen(crashtime) && crashtime[strlen(crashtime)-1] == '\n') - crashtime[strlen(crashtime)-1] = 0; - fprintf(f, "\n\n"); - fprintf(f, "\t\n"); - fprintf(f, "\t\t%s\n", crashtime); -#ifdef ENIGMA2_CHECKOUT_TAG - fprintf(f, "\t\t" ENIGMA2_CHECKOUT_TAG "\n"); -#else - fprintf(f, "\t\t" __DATE__ "\n"); -#endif -#ifdef ENIGMA2_CHECKOUT_ROOT - fprintf(f, "\t\t" ENIGMA2_CHECKOUT_ROOT "\n"); -#endif - fprintf(f, "\t\t%s\n", crash_emailaddr); - fprintf(f, "\t\t\n"); - std::string activeSkin = getConfigFileValue("config.skin.primary_skin"); - if (activeSkin != "Error") - { - if (activeSkin == "") - activeSkin = "Default Skin"; - fprintf(f, "\t\t%s\n", activeSkin.c_str()); - } - fprintf(f, "\t\n"); + struct tm tm; + char tm_str[32]; - fprintf(f, "\t\n"); - std::string model = getFileContent("/proc/stb/info/model"); - if (model != "Error") - { - char modelname[STDBUFFER_SIZE]; - sprintf(modelname, "%s",model.c_str()); - if (strlen(modelname) && modelname[strlen(modelname)-1] == '\n') - modelname[strlen(modelname)-1] = 0; - fprintf(f, "\t\t%s\n", modelname); - } - std::string kernel = getFileContent("/proc/cmdline"); - if (kernel != "Error") - { - char kernelcmd[STDBUFFER_SIZE]; - sprintf(kernelcmd, "%s",kernel.c_str()); - if (strlen(kernelcmd) && kernelcmd[strlen(kernelcmd)-1] == '\n') - kernelcmd[strlen(kernelcmd)-1] = 0; - fprintf(f, "\t\t%s\n", kernelcmd); - } - std::string sendAnonCrashlog = getConfigFileValue("config.plugins.crashlogautosubmit.sendAnonCrashlog"); - if (sendAnonCrashlog == "False" || sendAnonCrashlog == "false") // defaults to true... default anonymized crashlogs - { - std::string ca = getFileContent("/proc/stb/info/ca"); - if (ca != "Error") - { - char dreamboxca[STDBUFFER_SIZE]; - sprintf(dreamboxca, "%s",ca.c_str()); - if (strlen(dreamboxca) && dreamboxca[strlen(dreamboxca)-1] == '\n') - dreamboxca[strlen(dreamboxca)-1] = 0; - fprintf(f, "\t\t\n\t\t\n\t\t\n", dreamboxca); - } - std::string settings = getFileContent(eEnv::resolve("${sysconfdir}/enigma2/settings").c_str()); - if (settings != "Error") - { - fprintf(f, "\t\t\n\t\t\n\t\t\n", settings.c_str()); - } - } - std::string addNetwork = getConfigFileValue("config.plugins.crashlogautosubmit.addNetwork"); - if (addNetwork == "True" || addNetwork == "true") - { - std::string nwinterfaces = getFileContent("/etc/network/interfaces"); - if (nwinterfaces != "Error") - { - fprintf(f, "\t\t\n\t\t\n\t\t\n", nwinterfaces.c_str()); - } - std::string dns = getFileContent("/etc/resolv.conf"); - if (dns != "Error") - { - fprintf(f, "\t\t\n\t\t\n\t\t\n", dns.c_str()); - } - std::string defaultgw = getFileContent("/etc/default_gw"); - if (defaultgw != "Error") - { - char gateway[STDBUFFER_SIZE]; - sprintf(gateway, "%s",defaultgw.c_str()); - if (strlen(gateway) && gateway[strlen(gateway)-1] == '\n') - gateway[strlen(gateway)-1] = 0; - fprintf(f, "\t\t\n\t\t\n\t\t\n", gateway); - } - } - std::string addWlan = getConfigFileValue("config.plugins.crashlogautosubmit.addWlan"); - if (addWlan == "True" || addWlan == "true") - { - std::string wpasupplicant = getFileContent("/etc/wpa_supplicant.conf"); - if (wpasupplicant != "Error") - { - fprintf(f, "\t\t\n\t\t\n\t\t\n", wpasupplicant.c_str()); - } - } - std::string imageversion = getFileContent("/etc/image-version"); - if (imageversion != "Error") - { - fprintf(f, "\t\t\n\t\t\n\t\t\n", imageversion.c_str()); + localtime_r(&t, &tm); + strftime(tm_str, sizeof(tm_str), "%a %b %_d %T %Y", &tm); + + XmlGenerator xml(f); + + xml.open("opendreambox"); + + xml.open("enigma2"); + xml.string("crashdate", tm_str); + xml.string("compiledate", __DATE__); + xml.string("contactemail", crash_emailaddr); + xml.comment("Please email this crashlog to above address"); + + xml.string("skin", getConfigString("config.skin.primary_skin", "Default Skin")); + xml.string("sourcedate", enigma2_date); + xml.string("branch", enigma2_branch); + xml.string("rev", enigma2_rev); + xml.string("version", PACKAGE_VERSION); + xml.close(); + + xml.open("image"); + xml.stringFromFile("dreamboxmodel", "/proc/stb/info/model"); + xml.stringFromFile("kernelcmdline", "/proc/cmdline"); + if (!getConfigBool("config.plugins.crashlogautosubmit.sendAnonCrashlog", true)) { + xml.cDataFromFile("dreamboxca", "/proc/stb/info/ca"); + xml.cDataFromFile("enigma2settings", eEnv::resolve("${sysconfdir}/enigma2/settings"), ".password="); } - std::string imageissue = getFileContent("/etc/issue.net"); - if (imageissue != "Error") - { - fprintf(f, "\t\t\n\t\t\n\t\t\n", imageissue.c_str()); + if (getConfigBool("config.plugins.crashlogautosubmit.addNetwork", false)) { + xml.cDataFromFile("networkinterfaces", "/etc/network/interfaces"); + xml.cDataFromFile("dns", "/etc/resolv.conf"); + xml.cDataFromFile("defaultgateway", "/etc/default_gw"); } - fprintf(f, "\t\n"); - - fprintf(f, "\t\n"); - std::string installedplugins = execCommand("ipkg list_installed | grep enigma2"); - fprintf(f, "\t\t\n\t\t\n\t\t\n", installedplugins.c_str()); - std::string dreambox = execCommand("ipkg list_installed | grep dream"); - fprintf(f, "\t\t\n\t\t\n\t\t\n", dreambox.c_str()); - std::string gstreamer = execCommand("ipkg list_installed | grep gst"); - fprintf(f, "\t\t\n\t\t\n\t\t\n", gstreamer.c_str()); - fprintf(f, "\t\n"); - - fprintf(f, "\t\n"); - std::string buffer = getLogBuffer(); - fprintf(f, "\t\t\n\t\t\n\t\t\n", buffer.c_str()); - std::string pythonmd5 = execCommand("find " + eEnv::resolve("${libdir}/enigma2/python/") + " -name \"*.py\" | xargs md5sum"); - fprintf(f, "\t\t\n\t\t\n\t\t\n", pythonmd5.c_str()); - fprintf(f, "\t\n"); - - fprintf(f, "\n\n"); + if (getConfigBool("config.plugins.crashlogautosubmit.addWlan", false)) + xml.cDataFromFile("wpasupplicant", "/etc/wpa_supplicant.conf"); + xml.cDataFromFile("imageversion", "/etc/image-version"); + xml.cDataFromFile("imageissue", "/etc/issue.net"); + xml.close(); + + xml.open("software"); + xml.cDataFromCmd("enigma2software", "ipkg list_installed | grep enigma2"); + xml.cDataFromCmd("dreamboxsoftware", "ipkg list_installed | grep dream"); + xml.cDataFromCmd("gstreamersoftware", "ipkg list_installed | grep gst"); + xml.close(); + + xml.open("crashlogs"); + xml.cDataFromString("enigma2crashlog", getLogBuffer()); + xml.cDataFromCmd("pythonMD5sum", "find " + eEnv::resolve("${libdir}/enigma2/python/") + " -name \"*.py\" | xargs md5sum"); + xml.close(); + + xml.close(); + fclose(f); - } - + ePtr my_dc; gMainDC::getInstance(my_dc); - { - gPainter p(my_dc); - p.resetOffset(); - p.resetClip(eRect(ePoint(0, 0), my_dc->size())); -#ifdef ENIGMA2_CHECKOUT_TAG - if (ENIGMA2_CHECKOUT_TAG[0] == 'T') /* tagged checkout (release) */ - p.setBackgroundColor(gRGB(0x0000C0)); - else if (ENIGMA2_CHECKOUT_TAG[0] == 'D') /* dated checkout (daily experimental build) */ - { - srand(time(0)); - int r = rand(); - unsigned int col = 0; - if (r & 1) - col |= 0x800000; - if (r & 2) - col |= 0x008000; - if (r & 4) - col |= 0x0000c0; - p.setBackgroundColor(gRGB(col)); - } -#else - p.setBackgroundColor(gRGB(0x008000)); -#endif + gPainter p(my_dc); + p.resetOffset(); + p.resetClip(eRect(ePoint(0, 0), my_dc->size())); + p.setBackgroundColor(gRGB(0x008000)); + p.setForegroundColor(gRGB(0xFFFFFF)); - p.setForegroundColor(gRGB(0xFFFFFF)); - - ePtr font = new gFont("Regular", 20); - p.setFont(font); - p.clear(); - - eRect usable_area = eRect(100, 70, my_dc->size().width() - 150, 100); - - char text[512]; - snprintf(text, 512, "We are really sorry. Your Dreambox encountered " - "a software problem, and needs to be restarted. " - "Please send the logfile created in /hdd/ to %s.\n" - "Your Dreambox restarts in 10 seconds!\n" - "Component: %s", - crash_emailaddr, crash_component); - - p.renderText(usable_area, text, gPainter::RT_WRAP|gPainter::RT_HALIGN_LEFT); - - usable_area = eRect(100, 170, my_dc->size().width() - 180, my_dc->size().height() - 20); - - int i; + ePtr font = new gFont("Regular", 20); + p.setFont(font); + p.clear(); + + eRect usable_area = eRect(100, 70, my_dc->size().width() - 150, 100); - size_t start = std::string::npos + 1; - for (i=0; i<20; ++i) + std::string text("We are really sorry. Your Dreambox encountered " + "a software problem, and needs to be restarted. " + "Please send the logfile created in /hdd/ to " + crash_emailaddr + ".\n" + "Your Dreambox restarts in 10 seconds!\n" + "Component: " + crash_component); + + p.renderText(usable_area, text.c_str(), gPainter::RT_WRAP|gPainter::RT_HALIGN_LEFT); + + usable_area = eRect(100, 170, my_dc->size().width() - 180, my_dc->size().height() - 20); + + int i; + + start = std::string::npos + 1; + for (i=0; i<20; ++i) + { + start = lines.rfind('\n', start - 1); + if (start == std::string::npos) { - start = lines.rfind('\n', start - 1); - if (start == std::string::npos) - { - start = 0; - break; - } + start = 0; + break; } - - font = new gFont("Regular", 14); - p.setFont(font); - - p.renderText(usable_area, - lines.substr(start), gPainter::RT_HALIGN_LEFT); - sleep(10); } + font = new gFont("Regular", 14); + p.setFont(font); + + p.renderText(usable_area, + lines.substr(start), gPainter::RT_HALIGN_LEFT); + sleep(10); + raise(SIGKILL); } @@ -432,16 +284,13 @@ void oops(const mcontext_t &context, int dumpcode) eDebug(" (end)"); } } -#else -#warning "no oops support!" -#define NO_OOPS_SUPPORT #endif void handleFatalSignal(int signum, siginfo_t *si, void *ctx) { +#ifndef NO_OOPS_SUPPORT ucontext_t *uc = (ucontext_t*)ctx; -#ifndef NO_OOPS_SUPPORT oops(uc->uc_mcontext, signum == SIGSEGV || signum == SIGABRT); #endif eDebug("-------"); diff --git a/main/enigma.cpp b/main/enigma.cpp index 3ea4afb7..6bc35714 100644 --- a/main/enigma.cpp +++ b/main/enigma.cpp @@ -28,6 +28,7 @@ #include #include "bsod.h" +#include "version_info.h" #include @@ -296,22 +297,10 @@ void quitMainloop(int exitCode) eApp->quit(0); } -#include "version.h" - const char *getEnigmaVersionString() { - std::string date = -#ifdef ENIGMA2_LAST_CHANGE_DATE - ENIGMA2_LAST_CHANGE_DATE; -#else - __DATE__; -#endif - std::string branch = -#ifdef ENIGMA2_BRANCH - ENIGMA2_BRANCH; -#else - "HEAD"; -#endif + std::string date = enigma2_date; + std::string branch = enigma2_branch; return std::string(date + '-' + branch).c_str(); } diff --git a/main/version_info.cpp b/main/version_info.cpp new file mode 100644 index 00000000..372101d9 --- /dev/null +++ b/main/version_info.cpp @@ -0,0 +1,18 @@ +#include "version_info.h" +#include "version.h" + +#ifndef ENIGMA2_LAST_CHANGE_DATE +#define ENIGMA2_LAST_CHANGE_DATE __DATE__ +#endif +const char *enigma2_date = ENIGMA2_LAST_CHANGE_DATE; + +#ifndef ENIGMA2_BRANCH +#define ENIGMA2_BRANCH "HEAD" +#endif +const char *enigma2_branch = ENIGMA2_BRANCH; + +#ifndef ENIGMA2_REV +#define ENIGMA2_REV NULL +#endif +const char *enigma2_rev = ENIGMA2_REV; + diff --git a/main/version_info.h b/main/version_info.h new file mode 100644 index 00000000..f93cf01a --- /dev/null +++ b/main/version_info.h @@ -0,0 +1,8 @@ +#ifndef __main_version_info_h__ +#define __main_version_info_h__ + +extern const char *enigma2_date; +extern const char *enigma2_branch; +extern const char *enigma2_rev; + +#endif diff --git a/main/xmlgenerator.cpp b/main/xmlgenerator.cpp new file mode 100644 index 00000000..eb4f1577 --- /dev/null +++ b/main/xmlgenerator.cpp @@ -0,0 +1,188 @@ +#include +#include +#include "xmlgenerator.h" + +XmlGenerator::XmlGenerator(FILE *f) : m_file(f), m_indent(true), m_level(0) +{ + ::fprintf(m_file, "\n"); +} + +XmlGenerator::~XmlGenerator() +{ +} + +void XmlGenerator::vprint(const char *fmt, va_list ap, bool newline) +{ + unsigned int i; + + if (m_indent) + for (i = 0; i < m_level; i++) + ::fprintf(m_file, "\t"); + + ::vfprintf(m_file, fmt, ap); + + if (newline) + ::fprintf(m_file, "\n"); +} + +void XmlGenerator::print(const char *fmt, ...) +{ + va_list ap; + + ::va_start(ap, fmt); + vprint(fmt, ap, false); + ::va_end(ap); +} + +void XmlGenerator::printLn(const char *fmt, ...) +{ + va_list ap; + + ::va_start(ap, fmt); + vprint(fmt, ap, true); + ::va_end(ap); +} + +void XmlGenerator::open(const std::string &tag, bool newline) +{ + if (newline) { + printLn("<%s>", tag.c_str()); + } else { + print("<%s>", tag.c_str()); + m_indent = false; + } + + m_tags.push(tag); + m_level++; +} + +void XmlGenerator::open(const std::string &tag) +{ + open(tag, true); +} + +void XmlGenerator::close() +{ + ASSERT(!m_tags.empty()); + ASSERT(m_level > 0); + m_level--; + + printLn("", m_tags.top().c_str()); + m_indent = true; + + m_tags.pop(); +} + +void XmlGenerator::comment(const std::string &str) +{ + printLn("", str.c_str()); +} + +void XmlGenerator::commentFromErrno(const std::string &tag) +{ + open(tag); + comment(strerror(errno)); + close(); +} + +std::string XmlGenerator::cDataEscape(const std::string &str) +{ + const std::string search = "]]>"; + const std::string replace = "]]]]>"; + std::string ret; + size_t pos = 0, opos; + + for (;;) { + opos = pos; + pos = str.find(search, opos); + if (pos == std::string::npos) + break; + ret.append(str, opos, pos - opos); + ret.append(replace); + pos += search.size(); + } + + ret.append(str, opos, std::string::npos); + return ret; +} + +void XmlGenerator::cDataFromCmd(const std::string &tag, const std::string &cmd) +{ + FILE *pipe = ::popen(cmd.c_str(), "re"); + + if (pipe == 0) { + commentFromErrno(tag); + return; + } + + std::string result; + char *lineptr = NULL; + size_t n = 0; + + for (;;) { + ssize_t ret = ::getline(&lineptr, &n, pipe); + if (ret < 0) + break; + result.append(lineptr, ret); + } + + if (lineptr) + ::free(lineptr); + + ::pclose(pipe); + cDataFromString(tag, result); +} + +void XmlGenerator::cDataFromFile(const std::string &tag, const std::string &filename, const char *filter) +{ + std::ifstream in(filename.c_str()); + std::string line; + std::string content; + + if (!in.good()) { + commentFromErrno(tag); + return; + } + + while (std::getline(in, line)) + if (!filter || !line.find(filter)) + content += line + '\n'; + + in.close(); + cDataFromString(tag, content); +} + +void XmlGenerator::cDataFromString(const std::string &tag, const std::string &str) +{ + bool indent = false; + + open(tag); + printLn(""); + std::swap(m_indent, indent); + close(); +} + +void XmlGenerator::string(const std::string &tag, const std::string &str) +{ + open(tag, false); + print("%s", str.c_str()); + close(); +} + +void XmlGenerator::stringFromFile(const std::string &tag, const std::string &filename) +{ + std::ifstream in(filename.c_str()); + std::string line; + + if (!in.good()) { + commentFromErrno(tag); + return; + } + + std::getline(in, line); + in.close(); + string(tag, line); +} diff --git a/main/xmlgenerator.h b/main/xmlgenerator.h new file mode 100644 index 00000000..0dbb2628 --- /dev/null +++ b/main/xmlgenerator.h @@ -0,0 +1,43 @@ +#ifndef _main_xmlgenerator_h__ +#define _main_xmlgenerator_h__ + +#include +#include +#include +#include + +class XmlGenerator +{ +private: + FILE *m_file; + bool m_indent; + unsigned int m_level; + std::stack m_tags; + + void vprint(const char *fmt, va_list ap, bool newline); + void __attribute__ ((__format__(__printf__, 2, 3))) print(const char *fmt, ...); + void __attribute__ ((__format__(__printf__, 2, 3))) printLn(const char *fmt, ...); + + void open(const std::string &tag, bool newline); + void commentFromErrno(const std::string &tag); + + std::string cDataEscape(const std::string &str); + +public: + XmlGenerator(FILE *f); + ~XmlGenerator(); + + void open(const std::string &tag); + void close(); + + void comment(const std::string &str); + + void cDataFromCmd(const std::string &tag, const std::string &cmd); + void cDataFromFile(const std::string &tag, const std::string &filename, const char *filter = 0); + void cDataFromString(const std::string &tag, const std::string &str); + + void string(const std::string &tag, const std::string &str); + void stringFromFile(const std::string &tag, const std::string &filename); +}; + +#endif -- cgit v1.2.3 From 5e8a1b1a1457bd345c3d07467f0a81299d991539 Mon Sep 17 00:00:00 2001 From: Andreas Oberritter Date: Thu, 4 Nov 2010 21:08:56 +0100 Subject: shutdown enigma on SIGTERM --- main/enigma.cpp | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) (limited to 'main/enigma.cpp') diff --git a/main/enigma.cpp b/main/enigma.cpp index 6bc35714..1cdd867b 100644 --- a/main/enigma.cpp +++ b/main/enigma.cpp @@ -268,11 +268,6 @@ eApplication *getApplication() return eApp; } -void runMainloop() -{ - eApp->runLoop(); -} - void quitMainloop(int exitCode) { FILE *f = fopen("/proc/stb/fp/was_timer_wakeup", "w"); @@ -297,6 +292,26 @@ void quitMainloop(int exitCode) eApp->quit(0); } +static void sigterm_handler(int num) +{ + quitMainloop(128 + num); +} + +void runMainloop() +{ + struct sigaction act; + + act.sa_handler = sigterm_handler; + act.sa_flags = SA_RESTART; + + if (sigemptyset(&act.sa_mask) == -1) + perror("sigemptyset"); + if (sigaction(SIGTERM, &act, 0) == -1) + perror("SIGTERM"); + + eApp->runLoop(); +} + const char *getEnigmaVersionString() { std::string date = enigma2_date; -- cgit v1.2.3