summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/formats/fs_cbmdos.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/formats/fs_cbmdos.cpp')
-rw-r--r--src/lib/formats/fs_cbmdos.cpp86
1 files changed, 43 insertions, 43 deletions
diff --git a/src/lib/formats/fs_cbmdos.cpp b/src/lib/formats/fs_cbmdos.cpp
index 0654f740685..7a567b19f95 100644
--- a/src/lib/formats/fs_cbmdos.cpp
+++ b/src/lib/formats/fs_cbmdos.cpp
@@ -85,11 +85,11 @@ public:
virtual ~impl() = default;
virtual meta_data volume_metadata() override;
- 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 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 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;
private:
static constexpr u32 BLOCK_SIZE = 256;
@@ -130,9 +130,9 @@ private:
void iterate_all_directory_entries(const std::function<bool(u8 track, u8 sector, u8 file_index, const cbmdos_dirent &dirent)> &callback) const;
meta_data metadata_from_dirent(const cbmdos_dirent &dirent) const;
bool is_valid_filename(const std::string &filename) const;
- std::pair<err_t, u8> claim_track_sector(u8 track) const;
- std::tuple<err_t, u8, u8> claim_sector() const;
- err_t free_sector(u8 track, u8 sector) const;
+ std::pair<std::error_condition, u8> claim_track_sector(u8 track) const;
+ std::tuple<std::error_condition, u8, u8> claim_sector() const;
+ std::error_condition free_sector(u8 track, u8 sector) const;
u8 determine_file_type(const std::vector<u8> &data) const;
};
@@ -317,13 +317,13 @@ meta_data impl::volume_metadata()
// impl::metadata
//-------------------------------------------------
-std::pair<err_t, meta_data> impl::metadata(const std::vector<std::string> &path)
+std::pair<std::error_condition, meta_data> impl::metadata(const std::vector<std::string> &path)
{
std::optional<cbmdos_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, metadata_from_dirent(*dirent));
+ return std::make_pair(std::error_condition(), metadata_from_dirent(*dirent));
}
@@ -331,7 +331,7 @@ std::pair<err_t, meta_data> impl::metadata(const std::vector<std::string> &path)
// impl::directory_contents
//-------------------------------------------------
-std::pair<err_t, std::vector<dir_entry>> impl::directory_contents(const std::vector<std::string> &path)
+std::pair<std::error_condition, std::vector<dir_entry>> impl::directory_contents(const std::vector<std::string> &path)
{
std::vector<dir_entry> results;
auto callback = [this, &results](u8 track, u8 sector, u8 file_index, const cbmdos_dirent &ent)
@@ -340,7 +340,7 @@ std::pair<err_t, std::vector<dir_entry>> impl::directory_contents(const std::vec
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));
}
@@ -348,12 +348,12 @@ std::pair<err_t, std::vector<dir_entry>> impl::directory_contents(const std::vec
// impl::file_read
//-------------------------------------------------
-std::pair<err_t, std::vector<u8>> impl::file_read(const std::vector<std::string> &path)
+std::pair<std::error_condition, std::vector<u8>> impl::file_read(const std::vector<std::string> &path)
{
// find the file
std::optional<cbmdos_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>());
// and get the data
std::vector<u8> result;
@@ -361,15 +361,15 @@ std::pair<err_t, std::vector<u8>> impl::file_read(const std::vector<std::string>
while (iter.next())
result.insert(result.end(), (const u8 *)iter.data(), (const u8 *)iter.data() + iter.size());
- return std::make_pair(ERR_OK, std::move(result));
+ return std::make_pair(std::error_condition(), std::move(result));
}
-err_t impl::file_create(const std::vector<std::string> &path, const meta_data &meta)
+std::error_condition impl::file_create(const std::vector<std::string> &path, const meta_data &meta)
{
std::string filename = meta.get_string(meta_name::name, "");
if (!is_valid_filename(filename))
- return ERR_INVALID;
+ return error::invalid_name;
std::optional<cbmdos_dirent> result;
u8 track = 0;
@@ -393,7 +393,7 @@ err_t impl::file_create(const std::vector<std::string> &path, const meta_data &m
{
// Claim a next directory sector
auto const [err, new_sector] = claim_track_sector(DIRECTORY_TRACK);
- if (err != ERR_OK)
+ if (err)
return err;
auto new_block = read_sector(DIRECTORY_TRACK, new_sector);
for (int i = 2; i < BLOCK_SIZE; i++)
@@ -412,7 +412,7 @@ err_t impl::file_create(const std::vector<std::string> &path, const meta_data &m
}
auto const [err, file_track, file_sector] = claim_sector();
- if (err != ERR_OK)
+ if (err)
return err;
// Create the file
@@ -429,14 +429,14 @@ err_t impl::file_create(const std::vector<std::string> &path, const meta_data &m
// TODO set rel file record length
// sector count will be set while writing the data
- return ERR_OK;
+ return std::error_condition();
}
-err_t impl::file_write(const std::vector<std::string> &path, const std::vector<u8> &data)
+std::error_condition 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;
std::string_view path_part = path[0];
std::optional<cbmdos_dirent> result;
@@ -458,7 +458,7 @@ err_t impl::file_write(const std::vector<std::string> &path, const std::vector<u
iterate_directory_entries(callback);
if (!result)
- return ERR_NOT_FOUND;
+ return error::not_found;
u8 data_track = result->m_file_first_track;
u8 data_sector = result->m_file_first_sector;
@@ -478,7 +478,7 @@ err_t impl::file_write(const std::vector<std::string> &path, const std::vector<u
if (offset < data_length)
{
auto [err, next_track, next_sector] = claim_sector();
- if (err != ERR_OK)
+ if (err)
return err;
datablk.w8(OFFSET_CHAIN_TRACK, next_track);
datablk.w8(OFFSET_CHAIN_SECTOR, next_sector);
@@ -501,8 +501,8 @@ err_t impl::file_write(const std::vector<std::string> &path, const std::vector<u
while (track_to_free != CHAIN_END)
{
- err_t const err = free_sector(track_to_free, sector_to_free);
- if (err != ERR_OK)
+ std::error_condition const err = free_sector(track_to_free, sector_to_free);
+ if (err)
return err;
datablk = read_sector(track_to_free, sector_to_free);
track_to_free = datablk.r8(OFFSET_CHAIN_TRACK);
@@ -525,8 +525,8 @@ err_t impl::file_write(const std::vector<std::string> &path, const std::vector<u
// Free sector, update first file sector to 00
u8 file_track = dirblk.r8(DIRECTORY_ENTRY_SIZE * dir_file_index + OFFSET_FILE_FIRST_TRACK);
u8 file_sector = dirblk.r8(DIRECTORY_ENTRY_SIZE * dir_file_index + OFFSET_FILE_FIRST_SECTOR);
- err_t err = free_sector(file_track, file_sector);
- if (err != ERR_OK)
+ std::error_condition err = free_sector(file_track, file_sector);
+ if (err)
return err;
dirblk.w8(DIRECTORY_ENTRY_SIZE * dir_file_index + OFFSET_FILE_FIRST_TRACK, 0);
dirblk.w8(DIRECTORY_ENTRY_SIZE * dir_file_index + OFFSET_FILE_FIRST_SECTOR, 0);
@@ -535,7 +535,7 @@ err_t impl::file_write(const std::vector<std::string> &path, const std::vector<u
dirblk.w8(DIRECTORY_ENTRY_SIZE * dir_file_index + OFFSET_FILE_TYPE, file_type);
dirblk.w16l(DIRECTORY_ENTRY_SIZE * dir_file_index + OFFSET_SECTOR_COUNT, sector_count);
- return ERR_OK;
+ return std::error_condition();
}
@@ -557,15 +557,15 @@ bool impl::is_valid_filename(const std::string &filename) const
}
-std::pair<err_t, u8> impl::claim_track_sector(u8 track) const
+std::pair<std::error_condition, u8> impl::claim_track_sector(u8 track) const
{
if (track == 0 || track > m_max_track)
- return std::make_pair(ERR_INVALID, 0);
+ return std::make_pair(error::invalid_block, 0);
u8 map_index;
for (map_index = 0; map_index < TRACK_VARIANTS && !(s_track_sector_map[map_index].first_track <= track && track <= s_track_sector_map[map_index].last_track) ; map_index++);
if (map_index >= TRACK_VARIANTS)
- return std::make_pair(ERR_INVALID, 0);
+ return std::make_pair(error::invalid_block, 0);
auto bamblk = read_sector(DIRECTORY_TRACK, BAM_SECTOR);
u8 free_count = bamblk.r8(4 * track);
@@ -584,31 +584,31 @@ std::pair<err_t, u8> impl::claim_track_sector(u8 track) const
auto claimedlk = read_sector(track, sector);
claimedlk.w8(OFFSET_CHAIN_TRACK, CHAIN_END);
claimedlk.w8(OFFSET_CHAIN_SECTOR, 0xff);
- return std::make_pair(ERR_OK, sector);
+ return std::make_pair(std::error_condition(), sector);
}
}
- return std::make_pair(ERR_NO_SPACE, 0);
+ return std::make_pair(error::no_space, 0);
}
-std::tuple<err_t, u8, u8> impl::claim_sector() const
+std::tuple<std::error_condition, u8, u8> impl::claim_sector() const
{
for (int track = 0; track < m_max_track - 1; track++)
{
auto const [err, sector] = claim_track_sector(s_data_track_order[track]);
- if (err == ERR_OK)
- return std::make_tuple(ERR_OK, s_data_track_order[track], sector);
- if (err != ERR_NO_SPACE)
+ if (!err)
+ return std::make_tuple(std::error_condition(), s_data_track_order[track], sector);
+ if (err != error::no_space)
return std::make_tuple(err, 0, 0);
}
- return std::make_tuple(ERR_NO_SPACE, 0, 0);
+ return std::make_tuple(error::no_space, 0, 0);
}
-err_t impl::free_sector(u8 track, u8 sector) const
+std::error_condition impl::free_sector(u8 track, u8 sector) const
{
if (track == 0 || track > m_max_track)
- return ERR_INVALID;
+ return error::invalid_block;
auto bamblk = read_sector(DIRECTORY_TRACK, BAM_SECTOR);
u8 free_count = bamblk.r8(4 * track);
@@ -617,7 +617,7 @@ err_t impl::free_sector(u8 track, u8 sector) const
free_count++;
bamblk.w8(4 * track, free_count);
bamblk.w24l(4 * track + 1, free_bitmap);
- return ERR_OK;
+ return std::error_condition();
}