summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandreas 'randy' weinberger <vdr@smue.org>2010-11-14 13:27:14 +0100
committerandreas 'randy' weinberger <vdr@smue.org>2010-11-14 13:27:14 +0100
commit97aa570b797460a599696cc22801e968015a5be4 (patch)
tree654958ec4718b64f624221b5a5c6098536c86135
parentaed4434fd79ba560ba30ad2d3b34a837a1f442d1 (diff)
downloadvdr-plugin-graphlcd-97aa570b797460a599696cc22801e968015a5be4.tar.gz
vdr-plugin-graphlcd-97aa570b797460a599696cc22801e968015a5be4.tar.bz2
fixed NULL-pointer-exception when using UTF-8 and Freetype fonts
see http://projects.vdr-developer.org/issues/457 & http://www.vdrportal.de/board/thread.php?postid=955543#post955543
-rw-r--r--display.c24
-rw-r--r--layout.c2
2 files changed, 13 insertions, 13 deletions
diff --git a/display.c b/display.c
index d7ea6af..a02c7a4 100644
--- a/display.c
+++ b/display.c
@@ -1413,6 +1413,7 @@ void cGraphLCDDisplay::DisplayReplay(tReplayState & replay)
{
int lineHeight, maxLines;
std::vector <std::string> lines;
+ std::string szReplayName = Convert(replay.name.c_str());
nMaxX = std::max(1, bitmap->Width() - (2 * FRAME_SPACE_X) - 2 * TEXT_OFFSET_X);
lineHeight = FRAME_SPACE_Y + largeFont->TotalHeight();
@@ -1433,16 +1434,16 @@ void cGraphLCDDisplay::DisplayReplay(tReplayState & replay)
if (maxLines <= 1)
{
// use singleline mode
- lines.push_back(replay.name);
+ lines.push_back(szReplayName);
}
else
- largeFont->WrapText(nMaxX, maxLines * lineHeight, replay.name, lines);
+ largeFont->WrapText(nMaxX, maxLines * lineHeight, szReplayName, lines);
}
else if (maxLines == 1) //singleline mode
lines.push_back(replay.name);
else
{
- largeFont->WrapText(nMaxX, maxLines * lineHeight, replay.name, lines);
+ largeFont->WrapText(nMaxX, maxLines * lineHeight, szReplayName, lines);
}
if (scroller.size() != lines.size() ||
@@ -1589,9 +1590,8 @@ void cGraphLCDDisplay::DisplayReplay(tReplayState & replay)
void cGraphLCDDisplay::DisplayMenu(void)
{
- char buffer2[255];
const char * pszTmp1;
- const char * pszTmp2;
+ char * pszTmp2;
int iAT, t;
int FrameWidth, yPos, iEntryHeight;
int extra = 0;
@@ -1662,20 +1662,19 @@ void cGraphLCDDisplay::DisplayMenu(void)
yPos + (i - menuTop + 1) * iEntryHeight - 1,
GLCD::clrBlack, true, TEXT_OFFSET_Y_CHANNEL >= 4 ? 3 : 1);
}
- strncopy(buffer2, osd.items[i].c_str(), sizeof(buffer2));
- pszTmp1 = Convert(buffer2);
- pszTmp2 = strchr(pszTmp1, '\t');
+ pszTmp1 = Convert(osd.items[i].c_str());
+ pszTmp2 = (char*) strchr(pszTmp1, '\t');
iAT = 0; t = 0;
while (pszTmp1 && pszTmp2)
{
- pszTmp2 = '\0';
+ *pszTmp2 = '\0';
bitmap->DrawText(FRAME_SPACE_X + TEXT_OFFSET_X + t,
yPos + (i - menuTop) * iEntryHeight + extra,
std::min(FRAME_SPACE_X + TEXT_OFFSET_X + t + tab[iAT + 1], bitmap->Width() - 1 - FRAME_SPACE_X),
pszTmp1, normalFont, (i == osd.currentItemIndex) ? GLCD::clrWhite : GLCD::clrBlack);
pszTmp1 = pszTmp2+1;
- pszTmp2 = strchr(pszTmp1, '\t');
+ pszTmp2 = (char*) strchr(pszTmp1, '\t');
t = t + tab[iAT + 1] + TEXT_OFFSET_X;
iAT++;
}
@@ -1988,12 +1987,13 @@ const char * cGraphLCDDisplay::Convert(const char *s)
{
// do character recoding to ISO-8859-1
// code based on jowi24s vdr-lcdprog
- if (!s || strlen(s)==0) {
+ if (!s || !*s) {
return s;
}
const char *s_converted = conv->Convert(s);
if (s_converted == s) {
- esyslog("graphlcd plugin: ERROR: conversion from %s to ISO-8859-1 failed.", cCharSetConv::SystemCharacterTable());
+ const char* SCT = cCharSetConv::SystemCharacterTable() ? cCharSetConv::SystemCharacterTable() : "UTF-8";
+ esyslog("graphlcd plugin: ERROR: conversion from %s to ISO-8859-1 failed.", SCT);
esyslog("graphlcd plugin: ERROR: '%s'",s);
}
return s_converted;
diff --git a/layout.c b/layout.c
index 254fbb1..dc5e34d 100644
--- a/layout.c
+++ b/layout.c
@@ -66,7 +66,7 @@ bool cFontElement::Load(const std::string & url)
file += url.substr(4, pos - 4);
}
#if APIVERSNUM >= 10503
- return font.LoadFT2(file, cCharSetConv::SystemCharacterTable(), size);
+ return font.LoadFT2(file, cCharSetConv::SystemCharacterTable() ? cCharSetConv::SystemCharacterTable() : "ISO-8859-1", size);
#else
return font.LoadFT2(file, I18nCharSets()[Setup.OSDLanguage], size);
#endif