summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/formats/fs_hp98x5.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/formats/fs_hp98x5.cpp')
-rw-r--r--src/lib/formats/fs_hp98x5.cpp92
1 files changed, 48 insertions, 44 deletions
diff --git a/src/lib/formats/fs_hp98x5.cpp b/src/lib/formats/fs_hp98x5.cpp
index a8eb139ef7a..1b47fbbb459 100644
--- a/src/lib/formats/fs_hp98x5.cpp
+++ b/src/lib/formats/fs_hp98x5.cpp
@@ -107,17 +107,17 @@ namespace {
virtual meta_data volume_metadata() override;
- virtual std::pair<err_t, meta_data> metadata(const std::vector<std::string> &path) override;
+ virtual std::pair<std::error_condition, 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<std::error_condition, std::vector<dir_entry>> directory_contents(const std::vector<std::string> &path) override;
- virtual err_t file_create(const std::vector<std::string> &path, const meta_data &meta) override;
+ virtual std::error_condition file_create(const std::vector<std::string> &path, const meta_data &meta) override;
- virtual std::pair<err_t, std::vector<u8>> file_read(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 err_t file_write(const std::vector<std::string> &path, const std::vector<u8> &data) override;
+ virtual std::error_condition file_write(const std::vector<std::string> &path, const std::vector<u8> &data) override;
- virtual err_t format(const meta_data &meta) override;
+ virtual std::error_condition format(const meta_data &meta) override;
private:
// Map of used/free sectors
@@ -202,7 +202,7 @@ namespace {
using dir_t = std::vector<entry>;
- err_t parse_filename(const std::string& name, std::string& basename, int& bpr, u8& file_type) const;
+ std::error_condition parse_filename(const std::string& name, std::string& basename, int& bpr, u8& file_type) const;
bool validate_filename(const std::string& s) const;
void ensure_dir_loaded();
std::pair<dir_t, sect_map> decode_dir() const;
@@ -323,10 +323,10 @@ meta_data hp98x5_impl::volume_metadata()
return res;
}
-std::pair<err_t, meta_data> hp98x5_impl::metadata(const std::vector<std::string> &path)
+std::pair<std::error_condition, meta_data> hp98x5_impl::metadata(const std::vector<std::string> &path)
{
if (path.size() != 1) {
- return std::make_pair(ERR_NOT_FOUND, meta_data{});
+ return std::make_pair(error::not_found, meta_data{});
}
std::string basename;
@@ -334,21 +334,21 @@ std::pair<err_t, meta_data> hp98x5_impl::metadata(const std::vector<std::string>
u8 file_type;
auto err = parse_filename(path.front(), basename, bpr, file_type);
- if (err != ERR_OK) {
- return std::make_pair(ERR_NOT_FOUND, meta_data{});
+ if (err) {
+ return std::make_pair(error::not_found, meta_data{});
}
ensure_dir_loaded();
auto it = scan_dir(m_dir, basename);
if (it == m_dir.end()) {
- return std::make_pair(ERR_NOT_FOUND, meta_data{});
+ return std::make_pair(error::not_found, meta_data{});
}
auto meta = get_metadata(*it);
- return std::make_pair(ERR_OK, std::move(meta));
+ return std::make_pair(std::error_condition(), std::move(meta));
}
-std::pair<err_t, std::vector<dir_entry>> hp98x5_impl::directory_contents(const std::vector<std::string> &path)
+std::pair<std::error_condition, std::vector<dir_entry>> hp98x5_impl::directory_contents(const std::vector<std::string> &path)
{
if (path.empty()) {
ensure_dir_loaded();
@@ -360,16 +360,16 @@ std::pair<err_t, std::vector<dir_entry>> hp98x5_impl::directory_contents(const s
dir_entries.emplace_back(dir_entry_type::file, std::move(meta));
}
}
- return std::make_pair(ERR_OK, dir_entries);
+ return std::make_pair(std::error_condition(), dir_entries);
} else {
- return std::make_pair(ERR_NOT_FOUND, std::vector<dir_entry>{});
+ return std::make_pair(error::not_found, std::vector<dir_entry>{});
}
}
-err_t hp98x5_impl::file_create(const std::vector<std::string> &path, const meta_data &meta)
+std::error_condition hp98x5_impl::file_create(const std::vector<std::string> &path, const meta_data &meta)
{
if (!path.empty()) {
- return ERR_INVALID;
+ return error::invalid_name;
}
auto name = meta.get_string(meta_name::name);
@@ -381,9 +381,13 @@ err_t hp98x5_impl::file_create(const std::vector<std::string> &path, const meta_
// Parse & validate filename
// Extension must be specified
auto err = parse_filename(name, basename, bpr, file_type);
- if (err != ERR_OK || file_type == NO_FILE_TYPE) {
- return ERR_INVALID;
+ if (err) {
+ return err;
+ }
+ if (file_type == NO_FILE_TYPE) {
+ return error::invalid_name;
}
+
if (bpr < 0) {
// Use default bpr when not specified
bpr = DEF_BPR;
@@ -393,7 +397,7 @@ err_t hp98x5_impl::file_create(const std::vector<std::string> &path, const meta_
ensure_dir_loaded();
auto it = scan_dir(m_dir, basename);
if (it != m_dir.end()) {
- return ERR_INVALID;
+ return error::already_exists;
}
// Find a free entry in directory
@@ -404,7 +408,7 @@ err_t hp98x5_impl::file_create(const std::vector<std::string> &path, const meta_
m_dir.emplace_back(entry());
it2 = m_dir.end() - 1;
} else {
- return ERR_NO_SPACE;
+ return error::no_space;
}
}
@@ -421,13 +425,13 @@ err_t hp98x5_impl::file_create(const std::vector<std::string> &path, const meta_
store_dir_map();
- return ERR_OK;
+ return std::error_condition();
}
-std::pair<err_t, std::vector<u8>> hp98x5_impl::file_read(const std::vector<std::string> &path)
+std::pair<std::error_condition, std::vector<u8>> hp98x5_impl::file_read(const std::vector<std::string> &path)
{
if (path.size() != 1) {
- return std::make_pair(ERR_NOT_FOUND, std::vector<u8>{});
+ return std::make_pair(error::not_found, std::vector<u8>{});
}
std::string basename;
int bpr;
@@ -435,10 +439,10 @@ std::pair<err_t, std::vector<u8>> hp98x5_impl::file_read(const std::vector<std::
auto err = parse_filename(path.front(), basename, bpr, file_type);
- if (err == ERR_OK) {
+ if (!err) {
auto it = find_file(basename, bpr, file_type);
if (it == m_dir.end()) {
- err = ERR_NOT_FOUND;
+ err = error::not_found;
} else {
auto file_data = get_sector_range(it->m_1st_sect, it->m_sectors);
if (file_type == TEXT_TYPE) {
@@ -446,16 +450,16 @@ std::pair<err_t, std::vector<u8>> hp98x5_impl::file_read(const std::vector<std::
} else {
file_data.resize(it->m_size);
}
- return std::make_pair(ERR_OK, std::move(file_data));
+ return std::make_pair(std::error_condition(), std::move(file_data));
}
}
return std::make_pair(err, std::vector<u8>{});
}
-err_t hp98x5_impl::file_write(const std::vector<std::string> &path, const std::vector<u8> &data)
+std::error_condition hp98x5_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 basename;
@@ -463,13 +467,13 @@ err_t hp98x5_impl::file_write(const std::vector<std::string> &path, const std::v
u8 file_type;
auto err = parse_filename(path.front(), basename, bpr, file_type);
- if (err != ERR_OK) {
+ if (err) {
return err;
}
// Check that file already exists
auto it = find_file(basename, bpr, file_type);
if (it == m_dir.end()) {
- return ERR_NOT_FOUND;
+ return error::not_found;
}
// De-allocate current blocks
@@ -488,7 +492,7 @@ err_t hp98x5_impl::file_write(const std::vector<std::string> &path, const std::v
// Allocate space
it->m_sectors = (data_ptr->size() + SECTOR_SIZE - 1) / SECTOR_SIZE;
if (!allocate(it->m_sectors, it->m_1st_sect)) {
- return ERR_NO_SPACE;
+ return error::no_space;
}
// Store file content
@@ -498,10 +502,10 @@ err_t hp98x5_impl::file_write(const std::vector<std::string> &path, const std::v
// Update directory & map
store_dir_map();
- return ERR_OK;
+ return std::error_condition();
}
-err_t hp98x5_impl::format(const meta_data &meta)
+std::error_condition hp98x5_impl::format(const meta_data &meta)
{
bool is_ds = m_blockdev.block_count() == DS_SECTORS;
@@ -553,10 +557,10 @@ err_t hp98x5_impl::format(const meta_data &meta)
store_dir_map();
- return ERR_OK;
+ return std::error_condition();
}
-err_t hp98x5_impl::parse_filename(const std::string& name, std::string& basename, int& bpr, u8& file_type) const
+std::error_condition hp98x5_impl::parse_filename(const std::string& name, std::string& basename, int& bpr, u8& file_type) const
{
// General form of filenames:
// basename[[.&bpr].ext]
@@ -579,18 +583,18 @@ err_t hp98x5_impl::parse_filename(const std::string& name, std::string& basename
if (p2 != std::string::npos) {
// [p1+1 p2) should have "&bpr"
if (name[ p1 + 1 ] != '&') {
- return ERR_INVALID;
+ return error::invalid_name;
}
if (!std::all_of(name.cbegin() + p1 + 2, name.cbegin() + p2, [](char c) { return c >= '0' && c <= '9'; })) {
- return ERR_INVALID;
+ return error::invalid_name;
}
try {
bpr = std::stoul(std::string{name, p1 + 2, p2 - p1 - 2});
} catch (...) {
- return ERR_INVALID;
+ return error::invalid_name;
}
if (bpr < 4 || bpr > 32767 || (bpr & 1) != 0) {
- return ERR_INVALID;
+ return error::invalid_name;
}
} else {
p2 = p1;
@@ -607,7 +611,7 @@ err_t hp98x5_impl::parse_filename(const std::string& name, std::string& basename
}
}
if (file_type == NO_FILE_TYPE) {
- return ERR_INVALID;
+ return error::invalid_name;
}
}
}
@@ -615,9 +619,9 @@ err_t hp98x5_impl::parse_filename(const std::string& name, std::string& basename
// [0 p1) has "basename"
basename = std::string(name, 0, p1);
if (validate_filename(basename)) {
- return ERR_OK;
+ return std::error_condition();
} else {
- return ERR_INVALID;
+ return error::invalid_name;
}
}