From c14a38868794215d145c96f01fd65f6de66aa673 Mon Sep 17 00:00:00 2001 From: mikeller Date: Sun, 8 Sep 2019 13:22:46 +1200 Subject: [PATCH] Fix problem with empty string set as 'manufacturer_id'. --- src/main/cli/cli.c | 26 +++++++++++++++----------- src/main/fc/board_info.c | 11 ++++++++--- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/main/cli/cli.c b/src/main/cli/cli.c index b2dadc560..f17fb351d 100644 --- a/src/main/cli/cli.c +++ b/src/main/cli/cli.c @@ -3017,12 +3017,14 @@ static void printBoardName(dumpFlags_t dumpMask) static void cliBoardName(char *cmdline) { const unsigned int len = strlen(cmdline); - if (len > 0 && boardInformationIsSet() && (len != strlen(getBoardName()) || strncmp(getBoardName(), cmdline, len))) { - cliPrintErrorLinef(ERROR_MESSAGE, "BOARD_NAME", getBoardName()); + const char *boardName = getBoardName(); + if (len > 0 && strlen(boardName) != 0 && boardInformationIsSet() && (len != strlen(boardName) || strncmp(boardName, cmdline, len))) { + cliPrintErrorLinef(ERROR_MESSAGE, "BOARD_NAME", boardName); } else { - if (len > 0) { - setBoardName(cmdline); + if (len > 0 && !configIsInCopy && setBoardName(cmdline)) { boardInformationUpdated = true; + + cliPrintHashLine("Set board_name."); } printBoardName(DUMP_ALL); } @@ -3038,12 +3040,14 @@ static void printManufacturerId(dumpFlags_t dumpMask) static void cliManufacturerId(char *cmdline) { const unsigned int len = strlen(cmdline); - if (len > 0 && boardInformationIsSet() && (len != strlen(getManufacturerId()) || strncmp(getManufacturerId(), cmdline, len))) { - cliPrintErrorLinef(ERROR_MESSAGE, "MANUFACTURER_ID", getManufacturerId()); + const char *manufacturerId = getManufacturerId(); + if (len > 0 && boardInformationIsSet() && strlen(manufacturerId) != 0 && (len != strlen(manufacturerId) || strncmp(manufacturerId, cmdline, len))) { + cliPrintErrorLinef(ERROR_MESSAGE, "MANUFACTURER_ID", manufacturerId); } else { - if (len > 0) { - setManufacturerId(cmdline); + if (len > 0 && !configIsInCopy && setManufacturerId(cmdline)) { boardInformationUpdated = true; + + cliPrintHashLine("Set manufacturer_id."); } printManufacturerId(DUMP_ALL); } @@ -3092,12 +3096,12 @@ static void cliSignature(char *cmdline) writeSignature(signatureStr, getSignature()); cliPrintErrorLinef(ERROR_MESSAGE, "SIGNATURE", signatureStr); } else { - if (len > 0) { - setSignature(signature); - + if (len > 0 && !configIsInCopy && setSignature(signature)) { signatureUpdated = true; writeSignature(signatureStr, getSignature()); + + cliPrintHashLine("Set signature."); } else if (signatureUpdated || signatureIsSet()) { writeSignature(signatureStr, getSignature()); } diff --git a/src/main/fc/board_info.c b/src/main/fc/board_info.c index 247e3dc86..d484d4584 100644 --- a/src/main/fc/board_info.c +++ b/src/main/fc/board_info.c @@ -29,6 +29,7 @@ static bool boardInformationSet = false; static char manufacturerId[MAX_MANUFACTURER_ID_LENGTH + 1]; static char boardName[MAX_BOARD_NAME_LENGTH + 1]; +static bool boardInformationWasUpdated = false; static bool signatureSet = false; static uint8_t signature[SIGNATURE_LENGTH]; @@ -64,9 +65,11 @@ bool boardInformationIsSet(void) bool setManufacturerId(const char *newManufacturerId) { - if (!boardInformationSet) { + if (!boardInformationSet || strlen(manufacturerId) == 0) { strncpy(manufacturerId, newManufacturerId, MAX_MANUFACTURER_ID_LENGTH); + boardInformationWasUpdated = true; + return true; } else { return false; @@ -75,9 +78,11 @@ bool setManufacturerId(const char *newManufacturerId) bool setBoardName(const char *newBoardName) { - if (!boardInformationSet) { + if (!boardInformationSet || strlen(boardName) == 0) { strncpy(boardName, newBoardName, MAX_BOARD_NAME_LENGTH); + boardInformationWasUpdated = true; + return true; } else { return false; @@ -86,7 +91,7 @@ bool setBoardName(const char *newBoardName) bool persistBoardInformation(void) { - if (!boardInformationSet) { + if (boardInformationWasUpdated) { strncpy(boardConfigMutable()->manufacturerId, manufacturerId, MAX_MANUFACTURER_ID_LENGTH); strncpy(boardConfigMutable()->boardName, boardName, MAX_BOARD_NAME_LENGTH); boardConfigMutable()->boardInformationSet = true; -- 2.11.4.GIT