diff options
| author | kamel5 <vdr.kamel5 (at) gmx (dot) net> | 2021-03-11 12:52:48 +0100 |
|---|---|---|
| committer | kamel5 <vdr.kamel5 (at) gmx (dot) net> | 2021-03-11 12:52:48 +0100 |
| commit | 3334263a96790128fba9e9299e52712a8f7847a8 (patch) | |
| tree | be93e62f9f9fa55fcc840936fbb649d7ae424b57 | |
| parent | 9a0eac1c4feb8fbf9cac4733080e34b481d3ded3 (diff) | |
| parent | 4d3fa0bc71ff24c37446c621bd16ddb039f396ff (diff) | |
| download | vdr-plugin-skindesigner-3334263a96790128fba9e9299e52712a8f7847a8.tar.gz vdr-plugin-skindesigner-3334263a96790128fba9e9299e52712a8f7847a8.tar.bz2 | |
Merge branch 'pbiering/skindesigner-fix-tuner-device-mapping'
| -rw-r--r-- | coreengine/complextypes.c | 33 | ||||
| -rw-r--r-- | coreengine/viewelementscommon.c | 12 | ||||
| -rw-r--r-- | extensions/imageloader.c | 4 |
3 files changed, 30 insertions, 19 deletions
diff --git a/coreengine/complextypes.c b/coreengine/complextypes.c index 2574208..064e2bf 100644 --- a/coreengine/complextypes.c +++ b/coreengine/complextypes.c @@ -726,15 +726,15 @@ bool cNumericExpr::IsNumericExpression(const char *e) { } bool cNumericExpr::PercentValue(const char *e) { + if (!e) + return e; const char *hit = strchr(e, '%'); if (!hit) return false; - char buffer[20] = ""; - if (strlen(e) > 20) - return false; - strncpy(buffer, e, strlen(e)-1); - buffer[strlen(e)-1] = '\0'; - int val = atoi(buffer); + int val; + int r = sscanf(e, "%d%%", &val); // use sscanf to retrieve %-value to avoid -Wstringop-overflow + if (r != 1) + return false; // sscanf parsing problem bool ok = false; if (horizontal && container->Width() > 0) { value = container->Width() * val / 100; @@ -747,22 +747,22 @@ bool cNumericExpr::PercentValue(const char *e) { } char *cNumericExpr::ReplacePercentValue(char *e) { + if (!e) + return e; const char *hit = strchr(e, '%'); if (!hit) return e; - char buffer[20] = ""; - if (strlen(e) > 20) - return e; - strncpy(buffer, e, strlen(e)-1); - buffer[strlen(e)-1] = '\0'; - int val = atoi(buffer); + int val; + int r = sscanf(e, "%d%%", &val); // use sscanf to retrieve %-value to avoid -Wstringop-overflow + if (r != 1) + return e; // sscanf parsing problem double percentVal = (double)val/100.0f; char replacement[50] = ""; if (horizontal) { - sprintf(replacement, "%.5f*{areawidth}", percentVal); + snprintf(replacement, sizeof(replacement), "%.5f*{areawidth}", percentVal); } else { - sprintf(replacement, "%.5f*{areaheight}", percentVal); + snprintf(replacement, sizeof(replacement), "%.5f*{areaheight}", percentVal); } int len = strlen(replacement) + 1; @@ -774,16 +774,19 @@ char *cNumericExpr::ReplacePercentValue(char *e) { } char *cNumericExpr::ReplaceToken(char *e, const char* token, int val) { + if (!e) + return e; char *tokenStart = strstr(e, token); if (!tokenStart) { return e; } char buffer[20] = ""; - sprintf(buffer, "%d", val); + snprintf(buffer, sizeof(buffer), "%d", val); size_t newSize = strlen(e) - strlen(token) + strlen(buffer) + 1; char *replaced = (char*)malloc(newSize); memset(replaced, 0, newSize); size_t beginning = strlen(e) - strlen(tokenStart); + if (beginning >= newSize) beginning = newSize - 1; // will never happen but avoid -Wstringop-overflow if (beginning > 0) strncpy(replaced, e, beginning); strcat(replaced, buffer); diff --git a/coreengine/viewelementscommon.c b/coreengine/viewelementscommon.c index a1067c2..2df678a 100644 --- a/coreengine/viewelementscommon.c +++ b/coreengine/viewelementscommon.c @@ -306,7 +306,15 @@ bool cVeDevices::Parse(bool forced) { if (recDevice) { mutexDevices.Lock(); if (recDevices) - recDevices[recDevice->DeviceNumber()] = true; + { + int d = recDevice->DeviceNumber(); + for (int i = 0; i < numDevices; i++) { + if (devices[i] == d) { + recDevices[i] = true; + break; + } + } + } mutexDevices.Unlock(); } } @@ -347,7 +355,7 @@ bool cVeDevices::Parse(bool forced) { } tokenContainer->AddLoopToken(devicesIndex, i, (int)eDevicesLT::signalstrength, *cString::sprintf("%d", signalStrength)); tokenContainer->AddLoopToken(devicesIndex, i, (int)eDevicesLT::signalquality, *cString::sprintf("%d", signalQuality)); - tokenContainer->AddLoopToken(devicesIndex, i, (int)eDevicesLT::livetv, i == deviceLiveTV ? "1" : "0"); + tokenContainer->AddLoopToken(devicesIndex, i, (int)eDevicesLT::livetv, devices[i] == deviceLiveTV ? "1" : "0"); bool isRecording = false; mutexDevices.Lock(); diff --git a/extensions/imageloader.c b/extensions/imageloader.c index 88ecb14..467e17d 100644 --- a/extensions/imageloader.c +++ b/extensions/imageloader.c @@ -178,14 +178,14 @@ cImageImporterSVG::cImageImporterSVG() { cImageImporterSVG::~cImageImporterSVG() { if (handle) { - rsvg_handle_close(handle, NULL); // deprecated since version 2.46 + rsvg_handle_close(handle, NULL); // TODO: deprecated since version 2.46 g_object_unref(handle); } } bool cImageImporterSVG::LoadImage(const char *path) { if (handle) { - rsvg_handle_close(handle, NULL); // deprecated since version 2.46 + rsvg_handle_close(handle, NULL); // TODO: deprecated since version 2.46 g_object_unref(handle); } |
