diff --git a/src/gui/update.cpp b/src/gui/update.cpp index ac3c026ee..df4071394 100644 --- a/src/gui/update.cpp +++ b/src/gui/update.cpp @@ -660,126 +660,7 @@ int CFlashUpdate::exec(CMenuTarget* parent, const std::string &actionKey) // get active partition char c[2] = {0}; - FILE *f; -#if BOXMODEL_VUPLUS4K - f = fopen("/proc/cmdline", "r"); - if (f) { -#if BOXMODEL_VUUNO4K || BOXMODEL_VUUNO4KSE || BOXMODEL_VUSOLO4K || BOXMODEL_VUULTIMO4K - char buf[256] = ""; - while(fgets(buf, sizeof(buf), f) != NULL) { - if (strstr(buf, "mmcblk0p5") != NULL) { - c[0] = '1'; - c[1] = '\0'; - break; - } - if (strstr(buf, "mmcblk0p7") != NULL) { - c[0] = '2'; - c[1] = '\0'; - break; - } - if (strstr(buf, "mmcblk0p9") != NULL) { - c[0] = '3'; - c[1] = '\0'; - break; - } - if (strstr(buf, "mmcblk0p11") != NULL) { - c[0] = '4'; - c[1] = '\0'; - break; - } - } -#elif BOXMODEL_VUZERO4K - char buf[256] = ""; - while(fgets(buf, sizeof(buf), f) != NULL) { - if (strstr(buf, "mmcblk0p8") != NULL) { - c[0] = '1'; - c[1] = '\0'; - break; - } - if (strstr(buf, "mmcblk0p10") != NULL) { - c[0] = '2'; - c[1] = '\0'; - break; - } - if (strstr(buf, "mmcblk0p12") != NULL) { - c[0] = '3'; - c[1] = '\0'; - break; - } - if (strstr(buf, "mmcblk0p14") != NULL) { - c[0] = '4'; - c[1] = '\0'; - break; - } - } -#elif BOXMODEL_VUDUO4K - char buf[256] = ""; - while(fgets(buf, sizeof(buf), f) != NULL) { - if (strstr(buf, "mmcblk0p10") != NULL) { - c[0] = '1'; - c[1] = '\0'; - break; - } - if (strstr(buf, "mmcblk0p12") != NULL) { - c[0] = '2'; - c[1] = '\0'; - break; - } - if (strstr(buf, "mmcblk0p14") != NULL) { - c[0] = '3'; - c[1] = '\0'; - break; - } - if (strstr(buf, "mmcblk0p16") != NULL) { - c[0] = '4'; - c[1] = '\0'; - break; - } - } -#else - printf("VU+ not found.\n"); -#endif - fclose(f); - } -#else - char line[1024]; - char *pch; - // first check for hd51 new layout - f = fopen("/sys/firmware/devicetree/base/chosen/bootargs", "r"); - if (f) - { - if (fgets (line , sizeof(line), f) != NULL) - { - pch = strtok(line, " ="); - while (pch != NULL) - { - if (strncmp("linuxrootfs", pch, 11) == 0) - { - strncpy(c, pch + 11, 1); - c[1] = '\0'; - dprintf(DEBUG_NORMAL, "[update] Current partition: %s\n", c); - break; - } - pch = strtok(NULL, " ="); - } - } - fclose(f); - } - // if no new layout - if (!atoi(c)) - { - f = fopen("/sys/firmware/devicetree/base/chosen/kerneldev", "r"); - if (f) - { - if (fseek(f, -2, SEEK_END) == 0) - { - c[0] = fgetc(f); - dprintf(DEBUG_NORMAL, "[update] Current partition: %s\n", c); - } - fclose(f); - } - } -#endif + sprintf(c, "%d", getActivePartition()); // select partition int selected = 0; diff --git a/src/system/helpers.cpp b/src/system/helpers.cpp index 6f36e92bb..f83ba04cc 100644 --- a/src/system/helpers.cpp +++ b/src/system/helpers.cpp @@ -1794,4 +1794,122 @@ bool isDigitWord(std::string str) return true; } -// +int getActivePartition() +{ + int c = -1; + +#if BOXMODEL_VUPLUS4K + FILE *f; + f = fopen("/proc/cmdline", "r"); + if (f) + { + char buf[256] = ""; + while(fgets(buf, sizeof(buf), f) != NULL) + { +#if BOXMODEL_VUUNO4K || BOXMODEL_VUUNO4KSE || BOXMODEL_VUSOLO4K || BOXMODEL_VUULTIMO4K + if (strstr(buf, "mmcblk0p5") != NULL) + { + c = 1; + break; + } + if (strstr(buf, "mmcblk0p7") != NULL) + { + c = 2; + break; + } + if (strstr(buf, "mmcblk0p9") != NULL) + { + c = 3; + break; + } + if (strstr(buf, "mmcblk0p11") != NULL) + { + c = 4; + break; + } +#elif BOXMODEL_VUZERO4K + if (strstr(buf, "mmcblk0p8") != NULL) + { + c = 1; + break; + } + if (strstr(buf, "mmcblk0p10") != NULL) + { + c = 2; + break; + } + if (strstr(buf, "mmcblk0p12") != NULL) + { + c = 3; + break; + } + if (strstr(buf, "mmcblk0p14") != NULL) + { + c = 4; + break; + } +#elif BOXMODEL_VUDUO4K + if (strstr(buf, "mmcblk0p10") != NULL) + { + c = 1; + break; + } + if (strstr(buf, "mmcblk0p12") != NULL) + { + c = 2; + break; + } + if (strstr(buf, "mmcblk0p14") != NULL) + { + c = 3; + break; + } + if (strstr(buf, "mmcblk0p16") != NULL) + { + c = 4; + break; + } +#endif + } + fclose(f); + } +#elif BOXMODEL_HD51 || BOXMODEL_HD60 || BOXMODEL_HD61 || BOXMODEL_BRE2ZE4K || BOXMODEL_H7 + FILE *f; + // first check for subdirboot layout + f = fopen("/sys/firmware/devicetree/base/chosen/bootargs", "r"); + if (f) + { + char line[1024]; + char *p; + if (fgets(line, sizeof(line), f) != NULL) + { + p = strtok(line, " ="); + while (p != NULL) + { + if (strncmp("linuxrootfs", p, 11) == 0) + { + c = atoi(p + 11); + break; + } + p = strtok(NULL, " ="); + } + } + fclose(f); + } + // then check for classic layout + if (c < 0) + { + f = fopen("/sys/firmware/devicetree/base/chosen/kerneldev", "r"); + if (f) + { + if (fseek(f, -2, SEEK_END) == 0) + { + c = (int)fgetc(f); + } + fclose(f); + } + } +#endif + + return c; +} diff --git a/src/system/helpers.h b/src/system/helpers.h index 61e901e3c..918ed941d 100644 --- a/src/system/helpers.h +++ b/src/system/helpers.h @@ -188,5 +188,6 @@ bool downloadUrl(std::string url, std::string file, const std::string userAgent bool isDigitWord(std::string str); -// +int getActivePartition(); + #endif