summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/formats/fs_coco_rsdos.cpp
diff options
context:
space:
mode:
author ajrhacker <ajrhacker@users.noreply.github.com>2025-02-22 01:02:44 -0500
committer GitHub <noreply@github.com>2025-02-22 17:02:44 +1100
commitc4da9ca64e23c40f3155886726ad75e0dacfa535 (patch)
treea8667c244cb1ee43536b2e847489d7fb503d7591 /src/lib/formats/fs_coco_rsdos.cpp
parentb977c3343211018774815bb53cc04aeea130bf97 (diff)
formats/fsblk.cpp: Replaced fs::err_t enum with a standard error condition category. (#13128)
Also replace "invalid" error with more specific values.
Diffstat (limited to 'src/lib/formats/fs_coco_rsdos.cpp')
-rw-r--r--src/lib/formats/fs_coco_rsdos.cpp72
1 files changed, 36 insertions, 36 deletions
diff --git a/src/lib/formats/fs_coco_rsdos.cpp b/src/lib/formats/fs_coco_rsdos.cpp
index e040ea9dd75..c616c8babc6 100644
--- a/src/lib/formats/fs_coco_rsdos.cpp
+++ b/src/lib/formats/fs_coco_rsdos.cpp
@@ -69,12 +69,12 @@ public:
std::bitset<256> m_visited_granules;
};
- virtual std::pair<err_t, meta_data> metadata(const std::vector<std::string> &path) override;
- virtual std::pair<err_t, std::vector<dir_entry>> directory_contents(const std::vector<std::string> &path) override;
- virtual std::pair<err_t, std::vector<u8>> file_read(const std::vector<std::string> &path) override;
- virtual err_t format(const meta_data &meta) override;
- virtual err_t file_create(const std::vector<std::string> &path, const meta_data &meta) override;
- virtual err_t file_write(const std::vector<std::string> &path, const std::vector<u8> &data) override;
+ virtual std::pair<std::error_condition, meta_data> metadata(const std::vector<std::string> &path) override;
+ virtual std::pair<std::error_condition, std::vector<dir_entry>> directory_contents(const std::vector<std::string> &path) override;
+ virtual std::pair<std::error_condition, std::vector<u8>> file_read(const std::vector<std::string> &path) override;
+ virtual std::error_condition format(const meta_data &meta) override;
+ virtual std::error_condition file_create(const std::vector<std::string> &path, const meta_data &meta) override;
+ virtual std::error_condition file_write(const std::vector<std::string> &path, const std::vector<u8> &data) override;
static bool validate_filename(std::string_view name);
@@ -104,8 +104,8 @@ private:
void iterate_directory_entries(T &&callback);
meta_data get_metadata_from_dirent(const rsdos_dirent &dirent);
static std::string get_filename_from_dirent(const rsdos_dirent &dirent);
- std::pair<err_t, std::string> build_direntry_filename(const std::string &filename);
- std::pair<err_t, u8> claim_granule();
+ std::pair<std::error_condition, std::string> build_direntry_filename(const std::string &filename);
+ std::pair<std::error_condition, u8> claim_granule();
void write_granule_map(u8 granule, u8 map_data);
u8 read_granule_map(u8 granule) const;
bool is_ascii(const std::vector<u8> &data) const;
@@ -239,14 +239,14 @@ coco_rsdos_impl::coco_rsdos_impl(fsblk_t &blockdev)
// coco_rsdos_impl::metadata
//-------------------------------------------------
-std::pair<err_t, meta_data> coco_rsdos_impl::metadata(const std::vector<std::string> &path)
+std::pair<std::error_condition, meta_data> coco_rsdos_impl::metadata(const std::vector<std::string> &path)
{
// attempt to find the file
const std::optional<rsdos_dirent> dirent = dirent_from_path(path);
if (!dirent)
- return std::make_pair(ERR_NOT_FOUND, meta_data());
+ return std::make_pair(error::not_found, meta_data());
- return std::make_pair(ERR_OK, get_metadata_from_dirent(*dirent));
+ return std::make_pair(std::error_condition(), get_metadata_from_dirent(*dirent));
}
@@ -254,7 +254,7 @@ std::pair<err_t, meta_data> coco_rsdos_impl::metadata(const std::vector<std::str
// coco_rsdos_impl::directory_contents
//-------------------------------------------------
-std::pair<err_t, std::vector<dir_entry>> coco_rsdos_impl::directory_contents(const std::vector<std::string> &path)
+std::pair<std::error_condition, std::vector<dir_entry>> coco_rsdos_impl::directory_contents(const std::vector<std::string> &path)
{
std::vector<dir_entry> results;
auto const callback = [this, &results](u8 s, u8 i, const rsdos_dirent &dirent)
@@ -263,7 +263,7 @@ std::pair<err_t, std::vector<dir_entry>> coco_rsdos_impl::directory_contents(con
return false;
};
iterate_directory_entries(callback);
- return std::make_pair(ERR_OK, std::move(results));
+ return std::make_pair(std::error_condition(), std::move(results));
}
@@ -271,12 +271,12 @@ std::pair<err_t, std::vector<dir_entry>> coco_rsdos_impl::directory_contents(con
// coco_rsdos_impl::file_read
//-------------------------------------------------
-std::pair<err_t, std::vector<u8>> coco_rsdos_impl::file_read(const std::vector<std::string> &path)
+std::pair<std::error_condition, std::vector<u8>> coco_rsdos_impl::file_read(const std::vector<std::string> &path)
{
// attempt to find the file
const std::optional<rsdos_dirent> dirent = dirent_from_path(path);
if (!dirent)
- return std::make_pair(ERR_NOT_FOUND, std::vector<u8>());
+ return std::make_pair(error::not_found, std::vector<u8>());
std::vector<u8> result;
u8 granule;
@@ -309,7 +309,7 @@ std::pair<err_t, std::vector<u8>> coco_rsdos_impl::file_read(const std::vector<s
sector++;
}
}
- return std::make_pair(ERR_OK, std::move(result));
+ return std::make_pair(std::error_condition(), std::move(result));
}
@@ -317,23 +317,23 @@ std::pair<err_t, std::vector<u8>> coco_rsdos_impl::file_read(const std::vector<s
// coco_rsdos_impl::format
//-------------------------------------------------
-err_t coco_rsdos_impl::format(const meta_data &meta)
+std::error_condition coco_rsdos_impl::format(const meta_data &meta)
{
// formatting RS-DOS is easy - just fill everything with 0xFF
m_blockdev.fill(0xFF);
- return ERR_OK;
+ return std::error_condition();
}
-std::pair<err_t, std::string> coco_rsdos_impl::build_direntry_filename(const std::string &filename)
+std::pair<std::error_condition, std::string> coco_rsdos_impl::build_direntry_filename(const std::string &filename)
{
// The manual does not say anything about valid characters for a file name.
const std::regex filename_regex("([^.]{0,8})(\\.([^.]{0,3}))?");
std::smatch smatch;
if (!std::regex_match(filename, smatch, filename_regex))
- return std::make_pair(ERR_INVALID, std::string());
+ return std::make_pair(error::invalid_name, std::string());
if (smatch.size() != 4)
- return std::make_pair(ERR_INVALID, std::string());
+ return std::make_pair(error::invalid_name, std::string());
std::string fname;
fname.resize(FNAME_LENGTH, ' ');
@@ -344,18 +344,18 @@ std::pair<err_t, std::string> coco_rsdos_impl::build_direntry_filename(const std
for (int j = 0; j < 3 && j < smatch.str(3).size(); j++)
fname[8 + j] = smatch.str(3)[j];
- return std::make_pair(ERR_OK, std::move(fname));
+ return std::make_pair(std::error_condition(), std::move(fname));
}
-err_t coco_rsdos_impl::file_create(const std::vector<std::string> &path, const meta_data &meta)
+std::error_condition coco_rsdos_impl::file_create(const std::vector<std::string> &path, const meta_data &meta)
{
if (!path.empty())
- return ERR_UNSUPPORTED;
+ return error::unsupported;
const std::string filename = meta.get_string(meta_name::name, "");
auto [err, fname] = build_direntry_filename(filename);
- if (err != ERR_OK)
+ if (err)
return err;
bool found_entry = false;
@@ -376,7 +376,7 @@ err_t coco_rsdos_impl::file_create(const std::vector<std::string> &path, const m
dir_block.w8(file_index * DIRECTORY_ENTRY_SIZE + i, 0);
auto [cerr, granule] = claim_granule();
- if (cerr != ERR_OK)
+ if (cerr != std::error_condition())
return cerr;
dir_block.wstr(file_index * DIRECTORY_ENTRY_SIZE + 0, fname);
@@ -386,16 +386,16 @@ err_t coco_rsdos_impl::file_create(const std::vector<std::string> &path, const m
}
}
if (!found_entry)
- return ERR_NO_SPACE;
+ return error::no_space;
- return ERR_OK;
+ return std::error_condition();
}
-err_t coco_rsdos_impl::file_write(const std::vector<std::string> &path, const std::vector<u8> &data)
+std::error_condition coco_rsdos_impl::file_write(const std::vector<std::string> &path, const std::vector<u8> &data)
{
if (path.size() != 1)
- return ERR_NOT_FOUND;
+ return error::not_found;
const std::string &target = path[0];
std::optional<rsdos_dirent> result;
@@ -415,7 +415,7 @@ err_t coco_rsdos_impl::file_write(const std::vector<std::string> &path, const st
iterate_directory_entries(callback);
if (!result)
- return ERR_NOT_FOUND;
+ return error::not_found;
const size_t data_length = data.size();
const u8 max_granule = maximum_granules();
@@ -446,7 +446,7 @@ err_t coco_rsdos_impl::file_write(const std::vector<std::string> &path, const st
else
{
auto [err, next_granule] = claim_granule();
- if (err != ERR_OK)
+ if (err)
return err;
write_granule_map(granule, next_granule);
granule = next_granule;
@@ -470,7 +470,7 @@ err_t coco_rsdos_impl::file_write(const std::vector<std::string> &path, const st
dir_block.w8(dir_file_index * DIRECTORY_ENTRY_SIZE + OFFSET_ASCII_FLAG, is_ascii(data) ? 0xff : 0x00);
dir_block.w16b(dir_file_index * DIRECTORY_ENTRY_SIZE + OFFSET_LAST_SECTOR_BYTES, bytes_in_last_sector);
- return ERR_OK;
+ return std::error_condition();
}
@@ -510,7 +510,7 @@ u8 coco_rsdos_impl::determine_file_type(const std::vector<u8> &data) const
}
-std::pair<err_t, u8> coco_rsdos_impl::claim_granule()
+std::pair<std::error_condition, u8> coco_rsdos_impl::claim_granule()
{
// Granules are likely not assigned in this order on hardware.
auto granule_block = read_sector(DIRECTORY_TRACK, 2);
@@ -519,10 +519,10 @@ std::pair<err_t, u8> coco_rsdos_impl::claim_granule()
if (granule_block.r8(g) == 0xff)
{
granule_block.w8(g, FILE_LAST_GRANULE_INDICATOR);
- return std::make_pair(ERR_OK, g);
+ return std::make_pair(std::error_condition(), g);
}
}
- return std::make_pair(ERR_NO_SPACE, 0);
+ return std::make_pair(error::no_space, 0);
}