Skip to content

Commit 65217dd

Browse files
authored
Merge pull request #1390 from AndreasAakesson/dev
fs: Minor changes to memdisk and Disk
2 parents fe8409f + 7f08a35 commit 65217dd

11 files changed

Lines changed: 30 additions & 16 deletions

File tree

api/fs/disk.hpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include <fs/filesystem.hpp>
2424
#include <fs/dirent.hpp>
2525
#include <hw/block_device.hpp>
26+
#include <common>
2627

2728
#include <deque>
2829
#include <vector>
@@ -129,7 +130,13 @@ namespace fs {
129130
// Returns a reference to a mounted filesystem
130131
// If no filesystem is mounted, the results are undefined
131132
File_system& fs() noexcept
132-
{ return *filesys; }
133+
{
134+
if(UNLIKELY(not fs_ready()))
135+
{
136+
throw Err_not_mounted{"Filesystem not ready - make sure to init_fs before accessing"};
137+
}
138+
return *filesys;
139+
}
133140

134141
private:
135142
void internal_init(partition_t part, on_init_func func);

api/memdisk

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,17 @@ namespace fs
3333
return disk;
3434
}
3535
// new_shared_memdisk() very likely contains FAT
36-
// Note: deprecated!
37-
[[deprecated]] inline Disk_ptr new_shared_memdisk()
36+
inline Disk_ptr shared_memdisk()
3837
{
3938
static MemDisk device;
40-
return std::make_shared<Disk> (device);
39+
static std::weak_ptr<Disk> disk;
40+
41+
if(auto ptr = disk.lock())
42+
return ptr;
43+
44+
auto ptr = std::make_shared<Disk>(device);
45+
disk = ptr;
46+
return ptr;
4147
}
4248
}
4349

examples/acorn/service.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ void Service::start()
5151
logger_->log(entry);
5252
});
5353

54-
disk = fs::new_shared_memdisk();
54+
disk = fs::shared_memdisk();
5555

5656
// init the first legit partition/filesystem
5757
disk->init_fs(

lib/mana/src/middleware/butler.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@ namespace middleware {
2525

2626
Butler::Butler(SharedDisk disk, std::string root, Options opt)
2727
: disk_(disk), root_(root), options_(opt)
28-
{}
28+
{
29+
Expects(disk != nullptr && disk->fs_ready());
30+
}
2931

3032
void Butler::process(mana::Request_ptr req, mana::Response_ptr res, mana::Next next)
3133
{
@@ -46,12 +48,11 @@ void Butler::process(mana::Request_ptr req, mana::Response_ptr res, mana::Next n
4648
// concatenate root with path, example: / => /public/
4749
path = root_ + path;
4850

49-
5051
// no extension found
5152
if(ext.empty() and !options_.index.empty()) {
5253
if(path.back() != '/') path += '/';
5354
// lets try to see if we can serve an index
54-
path += options_.index[0]; // only check first one for now, else we have to use fs().ls
55+
path += options_.index.at(0); // only check first one for now, else we have to use fs().ls
5556
disk_->fs().cstat(
5657
path,
5758
fs::on_stat_func::make_packed(

mod/rapidjson

test/fs/integration/fat16/fat16.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
void Service::start(const std::string&)
2828
{
2929
INFO("FAT16", "Running tests for FAT16");
30-
auto disk = fs::new_shared_memdisk();
30+
auto disk = fs::shared_memdisk();
3131
assert(disk);
3232

3333
// verify that the size is indeed N sectors
@@ -72,7 +72,7 @@ void Service::start(const std::string&)
7272
// try reading banana-file
7373
auto buf = fs.read(ent, 0, ent.size());
7474
CHECKSERT(!buf.error(), "No error reading file");
75-
75+
7676
auto banana = buf.to_string();
7777

7878
CHECKSERT(banana == internal_banana, "Correct banana #1");

test/fs/integration/memdisk/bigdisk.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ const uint64_t SIZE = 256000;
2626
void Service::start(const std::string&)
2727
{
2828
INFO("MemDisk", "Running tests for MemDisk");
29-
auto disk = fs::new_shared_memdisk();
29+
auto disk = fs::shared_memdisk();
3030
CHECKSERT(disk, "Created shared memdisk");
3131

3232
CHECKSERT(not disk->empty(), "Disk is not empty");

test/fs/integration/memdisk/nosector.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
void Service::start(const std::string&)
2525
{
2626
INFO("MemDisk", "Running tests for MemDisk");
27-
auto disk = fs::new_shared_memdisk();
27+
auto disk = fs::shared_memdisk();
2828
CHECKSERT(disk, "Created shared memdisk");
2929

3030
// verify that the size is indeed 0 sectors

test/fs/integration/memdisk/twosector.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
void Service::start(const std::string&)
2626
{
2727
INFO("MemDisk", "Running tests for MemDisk");
28-
auto disk = fs::new_shared_memdisk();
28+
auto disk = fs::shared_memdisk();
2929
CHECKSERT(disk, "Created shared memdisk");
3030

3131
CHECKSERT(not disk->empty(), "Disk is not empty");

test/fs/integration/vfs/service.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ struct Thing2 {
5757

5858

5959
fs::File_system& memdisk() {
60-
static auto disk = fs::new_shared_memdisk();
60+
static auto disk = fs::shared_memdisk();
6161

6262
if (not disk->fs_ready())
6363
{

0 commit comments

Comments
 (0)