Allow RenameFile to overwrite existing files

custom
jacqueline 2 years ago
parent 7972bd4567
commit 2be4d4204c
  1. 2
      src/database/database.cpp
  2. 10
      src/database/env_esp.cpp
  3. 16
      src/main/main.cpp

@ -23,7 +23,7 @@ auto Database::Open() -> cpp::result<Database*, DatabaseError> {
auto status = leveldb::DB::Open(options, "/.db", &db); auto status = leveldb::DB::Open(options, "/.db", &db);
if (!status.ok()) { if (!status.ok()) {
delete cache; delete cache;
ESP_LOGE("DB", "failed to open db"); ESP_LOGE("DB", "failed to open db, status %s", status.ToString().c_str());
return cpp::fail(FAILED_TO_OPEN); return cpp::fail(FAILED_TO_OPEN);
} }

@ -230,7 +230,6 @@ class EspFileLock : public FileLock {
const std::string filename_; const std::string filename_;
}; };
class EspLogger final : public Logger { class EspLogger final : public Logger {
public: public:
explicit EspLogger(FIL file) : file_(file) {} explicit EspLogger(FIL file) : file_(file) {}
@ -247,7 +246,7 @@ class EspLogger final : public Logger {
snprintf(output, bytes_needed, format, args_copy); snprintf(output, bytes_needed, format, args_copy);
#pragma GCC diagnostic pop #pragma GCC diagnostic pop
va_end(args_copy); va_end(args_copy);
ESP_LOGV("LEVELDB", "%s", output); ESP_LOGI("LEVELDB", "%s", output);
// f_puts(output, &file_); // f_puts(output, &file_);
free(reinterpret_cast<void*>(output)); free(reinterpret_cast<void*>(output));
} }
@ -382,6 +381,13 @@ class EspLogger final : public Logger {
} }
Status EspEnv::RenameFile(const std::string& from, const std::string& to) { Status EspEnv::RenameFile(const std::string& from, const std::string& to) {
// Match the POSIX behaviour of replacing any existing file.
if (FileExists(to)) {
Status s = RemoveFile(to);
if (!s.ok()) {
return s;
}
}
FRESULT res = f_rename(from.c_str(), to.c_str()); FRESULT res = f_rename(from.c_str(), to.c_str());
if (res != FR_OK) { if (res != FR_OK) {
return EspError(from, res); return EspError(from, res);

@ -39,13 +39,15 @@ static const char* TAG = "MAIN";
void db_main(void* whatever) { void db_main(void* whatever) {
ESP_LOGI(TAG, "Init database"); ESP_LOGI(TAG, "Init database");
std::unique_ptr<database::Database> db;
auto db_res = database::Database::Open(); auto db_res = database::Database::Open();
if (db_res.has_error()) { if (db_res.has_error()) {
ESP_LOGE(TAG, "Failed!"); ESP_LOGE(TAG, "database failed :(");
} else {
db.reset(db_res.value());
ESP_LOGI(TAG, "database good :)");
} }
std::unique_ptr<database::Database> db(db_res.value());
ESP_LOGI(TAG, "database good :)");
vTaskDelay(pdMS_TO_TICKS(10000)); vTaskDelay(pdMS_TO_TICKS(10000));
vTaskDelete(NULL); vTaskDelete(NULL);
@ -79,9 +81,10 @@ extern "C" void app_main(void) {
ESP_LOGI(TAG, "Launch database task"); ESP_LOGI(TAG, "Launch database task");
std::size_t db_stack_size = 256 * 1024; std::size_t db_stack_size = 256 * 1024;
StaticTask_t database_task_buffer = {}; StaticTask_t database_task_buffer = {};
StackType_t *database_stack = StackType_t* database_stack = reinterpret_cast<StackType_t*>(
reinterpret_cast<StackType_t*>(heap_caps_malloc(db_stack_size, MALLOC_CAP_SPIRAM)); heap_caps_malloc(db_stack_size, MALLOC_CAP_SPIRAM));
xTaskCreateStatic(&db_main, "LEVELDB", db_stack_size, NULL, 1, database_stack, &database_task_buffer); xTaskCreateStatic(&db_main, "LEVELDB", db_stack_size, NULL, 1, database_stack,
&database_task_buffer);
ESP_LOGI(TAG, "Init touch wheel"); ESP_LOGI(TAG, "Init touch wheel");
std::shared_ptr<drivers::TouchWheel> touchwheel = std::shared_ptr<drivers::TouchWheel> touchwheel =
@ -115,4 +118,3 @@ extern "C" void app_main(void) {
vTaskDelay(pdMS_TO_TICKS(100)); vTaskDelay(pdMS_TO_TICKS(100));
} }
} }

Loading…
Cancel
Save