]> granicus.if.org Git - esp-idf/commitdiff
components/nvs: strlcpy is not available on Linux, replace with strncpy and terminate...
authorIvan Grokhotkov <ivan@espressif.com>
Tue, 23 Aug 2016 07:14:13 +0000 (15:14 +0800)
committerIvan Grokhotkov <ivan@espressif.com>
Tue, 23 Aug 2016 07:14:13 +0000 (15:14 +0800)
components/nvs_flash/src/nvs_page.cpp
components/nvs_flash/src/nvs_storage.cpp
components/nvs_flash/test/Makefile
components/nvs_flash/test/test_intrusive_list.cpp
components/nvs_flash/test/test_nvs.cpp

index 918908dd6f8fc94237fb5d37222bc5713507d66c..cddb69393b018abc0a39ecee6ea63fb402bfea7f 100644 (file)
@@ -18,7 +18,7 @@
 #include "crc.h"
 #endif
 #include <cstdio>
-
+#include <cstring>
 
 namespace nvs
 {
@@ -156,8 +156,8 @@ esp_err_t Page::writeItem(uint8_t nsIndex, ItemType datatype, const char* key, c
     std::fill_n(reinterpret_cast<uint32_t*>(item.key),  sizeof(item.key)  / 4, 0xffffffff);
     std::fill_n(reinterpret_cast<uint32_t*>(item.data), sizeof(item.data) / 4, 0xffffffff);
 
-    strlcpy(item.key, key, Item::MAX_KEY_LENGTH + 1);
-
+    strncpy(item.key, key, sizeof(item.key) - 1);
+    item.key[sizeof(item.key) - 1] = 0;
 
     if (datatype != ItemType::SZ && datatype != ItemType::BLOB) {
         memcpy(item.data, data, dataSize);
index 5cbc52bee3aa06d17d229a5a95be2b5528cae1b7..9be6580a1d15e72ade4b4ebe261f14657f593a9f 100644 (file)
@@ -161,7 +161,8 @@ esp_err_t Storage::createOrOpenNamespace(const char* nsName, bool canCreate, uin
         
         NamespaceEntry* entry = new NamespaceEntry;
         entry->mIndex = ns;
-        strlcpy(entry->mName, nsName, sizeof(entry->mName));
+        strncpy(entry->mName, nsName, sizeof(entry->mName) - 1);
+        entry->mName[sizeof(entry->mName) - 1] = 0;
         mNamespaces.push_back(entry);
 
     } else {
@@ -250,4 +251,4 @@ void Storage::debugCheck()
 }
 #endif //ESP_PLATFORM
 
-}
\ No newline at end of file
+}
index 0b4de9c6b22661b508fbcd545054aa1bb60f731f..d14dbaa3c97fa0cf86f1ccc70bc624e9b5af101b 100644 (file)
@@ -29,7 +29,7 @@ COVERAGE_FILES = $(OBJ_FILES:.o=.gc*)
 $(OBJ_FILES): %.o: %.cpp
 
 $(TEST_PROGRAM): $(OBJ_FILES)
-       gcc $(LDFLAGS) -o $(TEST_PROGRAM) $(OBJ_FILES)
+       g++ $(LDFLAGS) -o $(TEST_PROGRAM) $(OBJ_FILES)
 
 $(OUTPUT_DIR):
        mkdir -p $(OUTPUT_DIR)
index 8fc7aa95de493bcf4f3623b157a0765db7c5ad66..979438a0bccfbeea563309ca93fcee58092404c9 100644 (file)
@@ -19,7 +19,8 @@
 struct TestNode : public intrusive_list_node<TestNode> {
     TestNode(const char* name_ = "", int num_ = 0) : num(num_)
     {
-        strlcpy(name, name_, sizeof(name));
+        strncpy(name, name_, sizeof(name) - 1);
+        name[sizeof(name) - 1] = 0;
     }
     char name[32];
     int num;
index c137d9c6cc4cf56015f328e7b31880d601d91d31..325cdcf45bfd78da091bb07fe4b1ecf250394f53 100644 (file)
@@ -62,7 +62,7 @@ TEST_CASE("crc32 behaves as expected", "[nvs]")
     CHECK(crc32_1 != item2.calculateCrc32());
 
     item2 = item1;
-    strlcpy(item2.key, "foo", Item::MAX_KEY_LENGTH);
+    strncpy(item2.key, "foo", Item::MAX_KEY_LENGTH);
     CHECK(crc32_1 != item2.calculateCrc32());
 }
 
@@ -672,12 +672,12 @@ public:
                     }
                     if (err == ESP_ERR_NVS_REMOVE_FAILED) {
                         written[index] = true;
-                        strlcpy(reinterpret_cast<char*>(values[index]), buf, strBufLen);
+                        strncpy(reinterpret_cast<char*>(values[index]), buf, strBufLen);
                         return ESP_ERR_FLASH_OP_FAIL;
                     }
                     REQUIRE(err == ESP_OK);
                     written[index] = true;
-                    strlcpy(reinterpret_cast<char*>(values[index]), buf, strBufLen);
+                    strncpy(reinterpret_cast<char*>(values[index]), buf, strBufLen);
                     break;
                 }