aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Buland <mike@xagasoft.com>2024-10-01 11:45:17 -0700
committerMike Buland <mike@xagasoft.com>2024-10-01 11:45:17 -0700
commit03cafb600101c4bc659521b833a1f3a8c56938be (patch)
treeef8bc84d129e84cd3b5a937ffaa3a66be6a45920
parent00651aeaf50f8481a2c894f9462cd3b8eb6971d6 (diff)
downloadlibbu++-03cafb600101c4bc659521b833a1f3a8c56938be.tar.gz
libbu++-03cafb600101c4bc659521b833a1f3a8c56938be.tar.bz2
libbu++-03cafb600101c4bc659521b833a1f3a8c56938be.tar.xz
libbu++-03cafb600101c4bc659521b833a1f3a8c56938be.zip
More fixes opening files & exclusive mode.
Diffstat (limited to '')
-rw-r--r--src/stable/myriad.cpp2
-rw-r--r--src/stable/myriad.h2
-rw-r--r--src/tests/myriadfs.cpp62
3 files changed, 64 insertions, 2 deletions
diff --git a/src/stable/myriad.cpp b/src/stable/myriad.cpp
index f9fcd3e..03cffa9 100644
--- a/src/stable/myriad.cpp
+++ b/src/stable/myriad.cpp
@@ -84,7 +84,7 @@ Bu::MyriadStream Bu::Myriad::open( Bu::Myriad::StreamId iStream,
84 Bu::MutexLocker l( mhStream ); 84 Bu::MutexLocker l( mhStream );
85 if( (eMode&Create) ) 85 if( (eMode&Create) )
86 { 86 {
87 if( !hStream.has( iStream ) ) 87 if( hStream.has( iStream ) )
88 { 88 {
89 if( (eMode&Exclusive) ) 89 if( (eMode&Exclusive) )
90 { 90 {
diff --git a/src/stable/myriad.h b/src/stable/myriad.h
index 7f84c2a..6168aa2 100644
--- a/src/stable/myriad.h
+++ b/src/stable/myriad.h
@@ -45,7 +45,7 @@ namespace Bu
45 Truncate = 0x08, ///< Truncate file if it does exist 45 Truncate = 0x08, ///< Truncate file if it does exist
46 Append = 0x10, ///< Start writing at end of file 46 Append = 0x10, ///< Start writing at end of file
47 //NonBlock = 0x20, ///< Open file in non-blocking mode 47 //NonBlock = 0x20, ///< Open file in non-blocking mode
48 Exclusive = 0x44, ///< Create file, if it exists then fail 48 Exclusive = 0x40, ///< Create file, if it exists then fail
49 49
50 // Helpful mixes 50 // Helpful mixes
51 ReadWrite = 0x03, ///< Open for reading and writing 51 ReadWrite = 0x03, ///< Open for reading and writing
diff --git a/src/tests/myriadfs.cpp b/src/tests/myriadfs.cpp
new file mode 100644
index 0000000..1266e4b
--- /dev/null
+++ b/src/tests/myriadfs.cpp
@@ -0,0 +1,62 @@
1#include "bu/file.h"
2#include "bu/membuf.h"
3#include "bu/myriadfs.h"
4#include "bu/myriadstream.h"
5#include "bu/sio.h"
6
7using namespace Bu;
8
9int main()
10{
11// Bu::MemBuf mb;
12 Bu::File mb("store.myr", File::Read|File::Write|File::Create );
13 Bu::MyriadFs mfs( mb, 512 );
14
15 sio << "Creating dirs..." << sio.nl;
16 mfs.create("/etc", Bu::MyriadFs::typeDir|0755 );
17 mfs.create("/dev", Bu::MyriadFs::typeDir|0755 );
18 mfs.create("/usr", Bu::MyriadFs::typeDir|0755 );
19
20 mfs.create("/dev/null", Bu::MyriadFs::typeChrDev|0666, 1, 3 );
21 mfs.create("/dev/zero", Bu::MyriadFs::typeChrDev|0666, 1, 5 );
22 mfs.create("/dev/sda", Bu::MyriadFs::typeBlkDev|0660, 8, 0 );
23
24 sio << "Creating files..." << sio.nl;
25 {
26 Bu::MyriadStream ms = mfs.open("/hello", Bu::MyriadFs::Read );
27 ms.write("world!");
28 }
29 {
30 Bu::MyriadStream ms = mfs.open("/etc/hello", Bu::MyriadFs::Read );
31 ms.write("world, again!");
32 }
33 {
34 Bu::MyriadStream ms = mfs.open("/etc/trunc", Bu::MyriadFs::Write );
35 ms.write("[longer text shouldn't be seen]");
36 }
37 {
38 Bu::MyriadStream ms = mfs.open("/etc/trunc", Bu::MyriadFs::Write|Bu::MyriadFs::Create|Bu::MyriadFs::Truncate );
39 ms.write("[short text]");
40 }
41
42 sio << "Reading files..." << sio.nl;
43 {
44 Bu::MyriadStream ms = mfs.open("/hello", Bu::MyriadFs::Read );
45 char buf[512];
46 buf[ms.read( buf, 512 )] = '\0';
47 sio << "read: '" << buf << "'" << sio.nl;
48 }
49 {
50 Bu::MyriadStream ms = mfs.open("/etc/hello", Bu::MyriadFs::Read );
51 char buf[512];
52 buf[ms.read( buf, 512 )] = '\0';
53 sio << "read: '" << buf << "'" << sio.nl;
54 }
55 {
56 Bu::MyriadStream ms = mfs.open("/etc/trunc", Bu::MyriadFs::Read );
57 char buf[512];
58 buf[ms.read( buf, 512 )] = '\0';
59 sio << "read: '" << buf << "'" << sio.nl;
60 }
61}
62