esp_err_t esp_vfs_semihost_unregister(const char* base_path) { ESP_LOGD(TAG, "Unregister semihosting driver @ '%s'", base_path); int i = 0; for (i = 0; i < CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS; i++) { if (s_semhost_ctx[i].base_path[0] != 0 && strcmp(base_path, s_semhost_ctx[i].base_path) == 0) { break; } } if (i == CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS) { return ESP_ERR_INVALID_ARG; } esp_err_t ret = esp_vfs_unregister(s_semhost_ctx[i].base_path); if (ret != ESP_OK) { return ret; } s_semhost_ctx[i].base_path[0] = 0; s_semhost_ctx[i].host_path[0] = 0; ESP_LOGD(TAG, "Unregistered semihosting driver @ '%s'", base_path); return ESP_OK; }
}; esp_vfs_t desc_toplevel = DUMMY_VFS(); TEST_ESP_OK( esp_vfs_register("", &desc_toplevel, &inst_toplevel) ); inst_foo.match_path = "/bar/file"; inst_foobar.match_path = "/file"; test_not_called(&inst_foo, "/foo/bar/file"); test_opened(&inst_foobar, "/foo/bar/file"); test_dir_not_called(&inst_foo, "/foo/bar/file"); test_dir_opened(&inst_foobar, "/foo/bar/file"); inst_toplevel.match_path = "/tmp/foo"; test_opened(&inst_toplevel, "/tmp/foo"); inst_toplevel.match_path = "foo"; test_opened(&inst_toplevel, "foo"); TEST_ESP_OK( esp_vfs_unregister("/foo") ); TEST_ESP_OK( esp_vfs_unregister("/foo1") ); TEST_ESP_OK( esp_vfs_unregister("/foo/bar") ); TEST_ESP_OK( esp_vfs_unregister("") ); } TEST_CASE("vfs unregisters correct nested mount point", "[vfs]") { dummy_vfs_t inst_foobar = { .match_path = "/file", .called = false }; esp_vfs_t desc_foobar = DUMMY_VFS(); TEST_ESP_OK( esp_vfs_register("/foo/bar", &desc_foobar, &inst_foobar) ); dummy_vfs_t inst_foo = {