Coder Social home page Coder Social logo

jaylogue / retro-fuse Goto Github PK

View Code? Open in Web Editor NEW
55.0 55.0 2.0 12.59 MB

A FUSE module for accessing ancient Unix filesystems.

License: Other

Makefile 0.44% C 90.94% Assembly 2.25% OpenEdge ABL 0.12% Python 6.24%
fuse fuse-filesystem retrocomputing retrofuse unix

retro-fuse's People

Contributors

jaylogue avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

retro-fuse's Issues

Is the Per-File DAX Option in Linux 5.17 useful to this driver in any way?

Hi.

First of all, thanks for sharing this useful project with the world. ๐Ÿ™‚

(I'm creating an issue for this, since GitHub Discussions is currently not enabled for this project. You can turn this issue into a discussion once you enable that feature for this repo, should you so choose.)

So I read an article on Phoronix about a "Per-File DAX" performance improvement being introduced in FUSE in the upcoming Linux kernel version 5.17.

Two things I'm wondering, with my limited understanding of this feature:

  • Would this enhancement benefit the retro-fuse driver in any way?
  • Would this require modifications in the retro-fuse driver code in order to take advantage of it, or do we basically get it for free?

My apologies if these questions come off as completely clueless.

Retro-fuse won't compile on M2 MacBook Pro

Just installed MacFuse on M2 MacBook Pro. Cloned retro-fuse and typed 'make' - and then 'make v6fs' both attempts say:

retro-fuse# make v6fs
cc -std=c11 -g -Wall -O0 -fno-common -DFUSE_USE_VERSION=26 -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -D_XOPEN_SOURCE=700 -D_ATFILE_SOURCE -D_DARWIN_C_SOURCE -MMD -MP -I./src  -c -o src/fusecommon.o src/fusecommon.c
src/fusecommon.c:162:25: error: call to undeclared function 'rindex'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
    retrofuse_cmdname = rindex(argv[0], '/');
                        ^
src/fusecommon.c:162:23: warning: incompatible integer to pointer conversion assigning to 'const char *' from 'int' [-Wint-conversion]
    retrofuse_cmdname = rindex(argv[0], '/');
                      ^ ~~~~~~~~~~~~~~~~~~~~
1 warning and 1 error generated.
make: *** [src/fusecommon.o] Error

Some of the compiler error formatting is lost. Any ideas? I suspect that the current Clang C compiler may not compile old code like gcc used to. However, I am unsure.

`make test` issues with changed Python3 regex behavior

Hi!

As I found the retro-fuse binaries useful, I wanted to add them to my CI builds setup (see http://toolchain.lug-owl.de/). Building was just a breeze, but I see unexpected errors during make test. In my setup, everything is built within a Docker container, but even running make test as root gives me some issues:

root@lili:/var/cache/git/retrofuse [master] # python3 --version
Python 3.11.2

root@lili:/var/cache/git/retrofuse [master] # make test                                                                                                                                        
./test/retro-fuse-test.py v6fs                                                                                                                                                                 
Create File ... PASS                                                                                                                                                                           
Delete File ... PASS
Rename File ... PASS
Create File Link ... PASS
Delete File Link ... PASS
Change File Mode ... PASS
Change File Times ... PASS
Change File Group ... skipped 'Suitable group not found'
Read/Write File ... PASS
Overwrite File ... PASS
Extend File ... PASS
Truncate File ... PASS
Read/Write Sparse File ... PASS
Create Directory ... PASS
Remove Directory ... PASS
Rename Directory ... PASS
Create Nested Directories ... PASS
Move Directory ... PASS
Change Directory Mode ... PASS
Filesystem Check ... ERROR

ERROR: Filesystem Check
Traceback (most recent call last):
  File "/var/cache/git/retrofuse/test/V6Tests.py", line 88, in test_99_FilesystemCheck
    v6FileList = v6.enumFiles('/mnt')
                 ^^^^^^^^^^^^^^^^^^^^
  File "/var/cache/git/retrofuse/test/SimhDrivers.py", line 166, in enumFiles
    return FileList.parse(fileListStr, re.compile(self._fileListPattern))
                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/re/__init__.py", line 227, in compile
    return _compile(pattern, flags)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/re/__init__.py", line 294, in _compile
    p = _compiler.compile(pattern, flags)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/re/_compiler.py", line 743, in compile
    p = _parser.parse(p, flags)
        ^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/re/_parser.py", line 980, in parse
    p = _parse_sub(source, state, flags & SRE_FLAG_VERBOSE, 0)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/re/_parser.py", line 455, in _parse_sub
    itemsappend(_parse(source, state, verbose, nested + 1,
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/re/_parser.py", line 841, in _parse
    raise source.error('global flags not at the start '
re.error: global flags not at the start of the expression at position 25 (line 2, column 25)

Ran 20 tests in 41.817s

FAILED (errors=1, skipped=1)
make: *** [Makefile:219: test-v6fs] Error 1

With this patch, things go further:

diff --git a/test/SimhDrivers.py b/test/SimhDrivers.py
index 7fbcad1..3ee7ba1 100644
--- a/test/SimhDrivers.py
+++ b/test/SimhDrivers.py
@@ -205,8 +205,7 @@ attach rk0 system.dsk
     _fileListCmd = '/usr/bin/find %s -exec /bin/ls -ild {} \\; -o \\( -type -f -a -exec /usr/bin/cksum {} \\; \\) -o \\( \\! -type -f -a -exec echo - \\; \\)'
 
     # Regex pattern to parse output from the above command.
-    _fileListPattern = r'''
-                        (?mx)
+    _fileListPattern = r'''(?mx)
                         ^
                         \s* (?P<inode> \d+)
                         \s+ (?P<type> [bcd-]) (?P<mode> [rwsStTx-]{9}t?)
@@ -344,8 +343,7 @@ attach rp0 system.dsk
     _fileListCmd = '/bin/find %s -exec /bin/ls -ild {} \\; -a \\( -type f -a -exec /bin/cksum {} \\; \\) -o \\( \\! -type f -a -exec echo - \\; \\)'
 
     # Regex pattern to parse output from the above command.
-    _fileListPattern = r'''
-                        (?mx)
+    _fileListPattern = r'''(?mx)
                         ^
                         \s* (?P<inode> \d+)
                         \s+ (?P<type> [bcd-]) (?P<mode> [rwsStTx-]{9}t?)
@@ -492,9 +490,8 @@ attach rl1 swap.dsk
     _fileListCmd = '/bin/find %s -exec /usr/ucb/ls -ildn {} \\; \\( -type f -exec /bin/cksum {} \\; \\) -o -exec echo - \\;'
 
     # Regex pattern to parse output from the above command.
-    _fileListPattern = r'''
+    _fileListPattern = r'''(?mx)
                         ^
-                        (?mx)
                         \s* (?P<inode> \d+)
                         \s+ (?P<type> [bcd-]) (?P<mode> [rwsStTx-]{9})
                         \s* (?P<linkCount> \d+)
@@ -646,9 +643,8 @@ attach rq0 system.dsk
     _fileListCmd = '/usr/bin/find %s -exec /bin/ls -ildg {} \\; \\( -type f -exec /bin/cksum {} \\; \\) -o -exec echo - \\;'
 
     # Regex pattern to parse output from the above command.
-    _fileListPattern = r'''
+    _fileListPattern = r'''(?mx)
                         ^
-                        (?mx)
                         \s* (?P<inode> \d+)
                         \s+ (?P<type> [bcd-]) (?P<mode> [rwsStTx-]{9})
                         \s* (?P<linkCount> \d+)

...and tests pass with current OpenSIMH:

root@lili:/var/cache/git/retrofuse [master] # pdp11

PDP-11 simulator Open SIMH V4.1-0 Current        git commit id: 348f5f29
sim> sh ver
PDP-11 simulator Open SIMH V4.1-0 Current
    Simulator Framework Capabilities:
        32b data
        32b addresses
        Threaded Ethernet Packet transports:PCAP:TAP:VDE:NAT:UDP
        Idle/Throttling support is available
        Virtual Hard Disk (VHD) support
        RAW disk and CD/DVD ROM support
        Asynchronous I/O support (Lock free asynchronous event queue)
        Asynchronous Clock support
        FrontPanel API Version 12
    Host Platform:
        Compiler: GCC 14.0.0 20230711 (experimental)
        Simulator Compiled as C arch: x64 (Release Build) on Aug 13 2023 at 16:19:51
        Build Tool: simh-makefile
        Memory Access: Little Endian
        Memory Pointer Size: 64 bits
        Large File (>2GB) support
        SDL Video support: SDL Version (Compiled: 2.28.0, Runtime: 2.26.2), PNG Version (Compiled: 1.6.40, Runtime: 1.6.39), zlib: (Compiled: 1.2.13, Runtime: 1.2.11)
        PCRE RegEx (Version 8.39 2016-06-14) support for EXPECT commands
        OS clock resolution: 1ms
        Time taken by msleep(1): 1ms
        Ethernet packet info: libpcap version 1.10.3 (with TPACKET_V3)
        OS: Linux lili 5.16.0-4-amd64 #1 SMP PREEMPT Debian 5.16.12-1 (2022-03-08) x86_64 GNU/Linux
        Processor Name: Intel(R) Xeon(R) CPU E5-2450L 0 @ 1.80GHz
        tar tool: tar (GNU tar) 1.34
        curl tool: curl 7.82.0 (x86_64-pc-linux-gnu) libcurl/7.82.0 OpenSSL/1.1.1m zlib/1.2.11 brotli/1.0.9 zstd/1.5.2 libidn2/2.3.3 libpsl/0.21.0 (+libidn2/2.3.0) libssh2/1.10.0 nghttp2/1.52.0 librtmp/2.3 OpenLDAP/2.4.59
        git commit id: 348f5f29
        git commit time: 2023-07-31T10:34:33-0700

build failure on debian bullseye with gcc 11..2.0

here's a transcript of the build, looks like circular references with the automatic dependencies.

Script started on 2021-12-03 19:20:46+11:00 [TERM="tmux-256color" TTY="/dev/pts/10" COLUMNS="173" LINES="47"]
$ make
gcc -std=c11 -g -Wall -O0 -MMD -MP -I./src  -c -o src/fusecommon.o src/fusecommon.c
gcc -std=c11 -g -Wall -O0 -MMD -MP -I./src  -c -o src/v6fuse.o src/v6fuse.c
gcc -std=c11 -g -Wall -O0 -I./ancient-src/v6 -MMD -MP -I./src  -c -o src/v6fs.o src/v6fs.c
gcc -std=c11 -g -Wall -O0 -I./ancient-src/v6 -MMD -MP -I./src  -c -o src/v6adapt.o src/v6adapt.c
gcc -std=c11 -g -Wall -O0 -MMD -MP -I./src  -c -o src/idmap.o src/idmap.c
gcc -std=c11 -g -Wall -O0 -MMD -MP -I./src  -c -o src/dskio.o src/dskio.c
gcc -std=c11 -g -Wall -O0 -I./ancient-src/v6 -MMD -MP -I./src  -c -o ancient-src/v6/ken/alloc.o ancient-src/v6/ken/alloc.c
gcc -std=c11 -g -Wall -O0 -I./ancient-src/v6 -MMD -MP -I./src  -c -o ancient-src/v6/dmr/bio.o ancient-src/v6/dmr/bio.c
gcc -std=c11 -g -Wall -O0 -I./ancient-src/v6 -MMD -MP -I./src  -c -o ancient-src/v6/ken/subr.o ancient-src/v6/ken/subr.c
gcc -std=c11 -g -Wall -O0 -I./ancient-src/v6 -MMD -MP -I./src  -c -o ancient-src/v6/ken/iget.o ancient-src/v6/ken/iget.c
gcc -std=c11 -g -Wall -O0 -I./ancient-src/v6 -MMD -MP -I./src  -c -o ancient-src/v6/ken/rdwri.o ancient-src/v6/ken/rdwri.c
gcc -std=c11 -g -Wall -O0 -I./ancient-src/v6 -MMD -MP -I./src  -c -o ancient-src/v6/ken/nami.o ancient-src/v6/ken/nami.c
gcc -std=c11 -g -Wall -O0 -I./ancient-src/v6 -MMD -MP -I./src  -c -o ancient-src/v6/ken/fio.o ancient-src/v6/ken/fio.c
gcc -std=c11 -g -Wall -O0 -I./ancient-src/v6 -MMD -MP -I./src  -c -o ancient-src/v6/ken/pipe.o ancient-src/v6/ken/pipe.c
gcc -std=c11 -g -Wall -O0 -I./ancient-src/v6 -MMD -MP -I./src  -c -o ancient-src/v6/ken/sys2.o ancient-src/v6/ken/sys2.c
gcc -std=c11 -g -Wall -O0 -I./ancient-src/v6 -MMD -MP -I./src  -c -o ancient-src/v6/ken/sys3.o ancient-src/v6/ken/sys3.c
gcc -std=c11 -g -Wall -O0 -I./ancient-src/v6 -MMD -MP -I./src  -c -o ancient-src/v6/ken/sys4.o ancient-src/v6/ken/sys4.c
gcc -o v6fs -Xlinker src/fusecommon.o src/v6fuse.o src/v6fs.o src/v6adapt.o src/idmap.o src/dskio.o ancient-src/v6/ken/alloc.o ancient-src/v6/dmr/bio.o ancient-src/v6/ken/subr.o ancient-src/v6/ken/iget.o ancient-src/v6/ken/rdwri.o ancient-src/v6/ken/nami.o ancient-src/v6/ken/fio.o ancient-src/v6/ken/pipe.o ancient-src/v6/ken/sys2.o ancient-src/v6/ken/sys3.o ancient-src/v6/ken/sys4.o -lfuse
gcc -std=c11 -g -Wall -O0 -MMD -MP -I./src  -c -o src/v7fuse.o src/v7fuse.c
gcc -std=c11 -g -Wall -O0 -I./ancient-src/v7 -MMD -MP -I./src  -c -o src/v7fs.o src/v7fs.c
gcc -std=c11 -g -Wall -O0 -I./ancient-src/v7 -MMD -MP -I./src  -c -o src/v7adapt.o src/v7adapt.c
gcc -std=c11 -g -Wall -O0 -I./ancient-src/v7 -MMD -MP -I./src  -c -o ancient-src/v7/sys/alloc.o ancient-src/v7/sys/alloc.c
gcc -std=c11 -g -Wall -O0 -I./ancient-src/v7 -MMD -MP -I./src  -c -o ancient-src/v7/dev/bio.o ancient-src/v7/dev/bio.c
gcc -std=c11 -g -Wall -O0 -I./ancient-src/v7 -MMD -MP -I./src  -c -o ancient-src/v7/sys/subr.o ancient-src/v7/sys/subr.c
gcc -std=c11 -g -Wall -O0 -I./ancient-src/v7 -MMD -MP -I./src  -c -o ancient-src/v7/sys/iget.o ancient-src/v7/sys/iget.c
gcc -std=c11 -g -Wall -O0 -I./ancient-src/v7 -MMD -MP -I./src  -c -o ancient-src/v7/sys/rdwri.o ancient-src/v7/sys/rdwri.c
gcc -std=c11 -g -Wall -O0 -I./ancient-src/v7 -MMD -MP -I./src  -c -o ancient-src/v7/sys/nami.o ancient-src/v7/sys/nami.c
gcc -std=c11 -g -Wall -O0 -I./ancient-src/v7 -MMD -MP -I./src  -c -o ancient-src/v7/sys/fio.o ancient-src/v7/sys/fio.c
gcc -std=c11 -g -Wall -O0 -I./ancient-src/v7 -MMD -MP -I./src  -c -o ancient-src/v7/sys/pipe.o ancient-src/v7/sys/pipe.c
gcc -std=c11 -g -Wall -O0 -I./ancient-src/v7 -MMD -MP -I./src  -c -o ancient-src/v7/sys/sys2.o ancient-src/v7/sys/sys2.c
gcc -std=c11 -g -Wall -O0 -I./ancient-src/v7 -MMD -MP -I./src  -c -o ancient-src/v7/sys/sys3.o ancient-src/v7/sys/sys3.c
gcc -std=c11 -g -Wall -O0 -I./ancient-src/v7 -MMD -MP -I./src  -c -o ancient-src/v7/sys/sys4.o ancient-src/v7/sys/sys4.c
gcc -std=c11 -g -Wall -O0 -I./ancient-src/v7 -MMD -MP -I./src  -c -o ancient-src/v7/sys/main.o ancient-src/v7/sys/main.c
gcc -o v7fs -Xlinker src/fusecommon.o src/v7fuse.o src/v7fs.o src/v7adapt.o src/idmap.o src/dskio.o ancient-src/v7/sys/alloc.o ancient-src/v7/dev/bio.o ancient-src/v7/sys/subr.o ancient-src/v7/sys/iget.o ancient-src/v7/sys/rdwri.o ancient-src/v7/sys/nami.o ancient-src/v7/sys/fio.o ancient-src/v7/sys/pipe.o ancient-src/v7/sys/sys2.o ancient-src/v7/sys/sys3.o ancient-src/v7/sys/sys4.o ancient-src/v7/sys/main.o -lfuse
/usr/bin/ld: src/v7adapt.o:/home/ewe2/devel/unix-history/retro-fuse/./ancient-src/v7/h/inode.h:51: multiple definition of `mpxip'; src/v7fs.o:/home/ewe2/devel/unix-history/retro-fuse/./ancient-src/v7/h/inode.h:51: first defined here
/usr/bin/ld: src/v7adapt.o:/home/ewe2/devel/unix-history/retro-fuse/./ancient-src/v7/h/mount.h:11: multiple definition of `v7_mount'; src/v7fs.o:/home/ewe2/devel/unix-history/retro-fuse/./ancient-src/v7/h/mount.h:11: first defined here
/usr/bin/ld: ancient-src/v7/sys/alloc.o:/home/ewe2/devel/unix-history/retro-fuse/ancient-src/v7/sys/../h/mount.h:11: multiple definition of `v7_mount'; src/v7fs.o:/home/ewe2/devel/unix-history/retro-fuse/./ancient-src/v7/h/mount.h:11: first defined here
/usr/bin/ld: ancient-src/v7/sys/alloc.o:/home/ewe2/devel/unix-history/retro-fuse/ancient-src/v7/sys/../h/inode.h:51: multiple definition of `mpxip'; src/v7fs.o:/home/ewe2/devel/unix-history/retro-fuse/./ancient-src/v7/h/inode.h:51: first defined here
/usr/bin/ld: ancient-src/v7/sys/subr.o:/home/ewe2/devel/unix-history/retro-fuse/ancient-src/v7/sys/../h/inode.h:51: multiple definition of `mpxip'; src/v7fs.o:/home/ewe2/devel/unix-history/retro-fuse/./ancient-src/v7/h/inode.h:51: first defined here
/usr/bin/ld: ancient-src/v7/sys/iget.o:/home/ewe2/devel/unix-history/retro-fuse/ancient-src/v7/sys/../h/mount.h:11: multiple definition of `v7_mount'; src/v7fs.o:/home/ewe2/devel/unix-history/retro-fuse/./ancient-src/v7/h/mount.h:11: first defined here
/usr/bin/ld: ancient-src/v7/sys/iget.o:/home/ewe2/devel/unix-history/retro-fuse/ancient-src/v7/sys/../h/inode.h:51: multiple definition of `mpxip'; src/v7fs.o:/home/ewe2/devel/unix-history/retro-fuse/./ancient-src/v7/h/inode.h:51: first defined here
/usr/bin/ld: ancient-src/v7/sys/rdwri.o:/home/ewe2/devel/unix-history/retro-fuse/ancient-src/v7/sys/../h/inode.h:51: multiple definition of `mpxip'; src/v7fs.o:/home/ewe2/devel/unix-history/retro-fuse/./ancient-src/v7/h/inode.h:51: first defined here
/usr/bin/ld: ancient-src/v7/sys/nami.o:/home/ewe2/devel/unix-history/retro-fuse/ancient-src/v7/sys/../h/inode.h:51: multiple definition of `mpxip'; src/v7fs.o:/home/ewe2/devel/unix-history/retro-fuse/./ancient-src/v7/h/inode.h:51: first defined here
/usr/bin/ld: ancient-src/v7/sys/nami.o:/home/ewe2/devel/unix-history/retro-fuse/ancient-src/v7/sys/../h/mount.h:11: multiple definition of `v7_mount'; src/v7fs.o:/home/ewe2/devel/unix-history/retro-fuse/./ancient-src/v7/h/mount.h:11: first defined here
/usr/bin/ld: ancient-src/v7/sys/fio.o:/home/ewe2/devel/unix-history/retro-fuse/ancient-src/v7/sys/../h/inode.h:51: multiple definition of `mpxip'; src/v7fs.o:/home/ewe2/devel/unix-history/retro-fuse/./ancient-src/v7/h/inode.h:51: first defined here
/usr/bin/ld: ancient-src/v7/sys/pipe.o:/home/ewe2/devel/unix-history/retro-fuse/ancient-src/v7/sys/../h/inode.h:51: multiple definition of `mpxip'; src/v7fs.o:/home/ewe2/devel/unix-history/retro-fuse/./ancient-src/v7/h/inode.h:51: first defined here
/usr/bin/ld: ancient-src/v7/sys/sys2.o:/home/ewe2/devel/unix-history/retro-fuse/ancient-src/v7/sys/../h/inode.h:51: multiple definition of `mpxip'; src/v7fs.o:/home/ewe2/devel/unix-history/retro-fuse/./ancient-src/v7/h/inode.h:51: first defined here
/usr/bin/ld: ancient-src/v7/sys/sys3.o:/home/ewe2/devel/unix-history/retro-fuse/ancient-src/v7/sys/../h/mount.h:11: multiple definition of `v7_mount'; src/v7fs.o:/home/ewe2/devel/unix-history/retro-fuse/./ancient-src/v7/h/mount.h:11: first defined here
/usr/bin/ld: ancient-src/v7/sys/sys3.o:/home/ewe2/devel/unix-history/retro-fuse/ancient-src/v7/sys/../h/inode.h:51: multiple definition of `mpxip'; src/v7fs.o:/home/ewe2/devel/unix-history/retro-fuse/./ancient-src/v7/h/inode.h:51: first defined here
/usr/bin/ld: ancient-src/v7/sys/sys4.o:/home/ewe2/devel/unix-history/retro-fuse/ancient-src/v7/sys/../h/inode.h:51: multiple definition of `mpxip'; src/v7fs.o:/home/ewe2/devel/unix-history/retro-fuse/./ancient-src/v7/h/inode.h:51: first defined here
/usr/bin/ld: ancient-src/v7/sys/main.o:/home/ewe2/devel/unix-history/retro-fuse/ancient-src/v7/sys/../h/mount.h:11: multiple definition of `v7_mount'; src/v7fs.o:/home/ewe2/devel/unix-history/retro-fuse/./ancient-src/v7/h/mount.h:11: first defined here
/usr/bin/ld: ancient-src/v7/sys/main.o:/home/ewe2/devel/unix-history/retro-fuse/ancient-src/v7/sys/../h/inode.h:51: multiple definition of `mpxip'; src/v7fs.o:/home/ewe2/devel/unix-history/retro-fuse/./ancient-src/v7/h/inode.h:51: first defined here
/usr/bin/ld: ancient-src/v7/sys/main.o:/home/ewe2/devel/unix-history/retro-fuse/ancient-src/v7/sys/../h/seg.h:18: multiple definition of `ka6'; ancient-src/v7/dev/bio.o:/home/ewe2/devel/unix-history/retro-fuse/ancient-src/v7/dev/../h/seg.h:18: first defined here
collect2: error: ld returned 1 exit status
make: *** [Makefile:101: v7fs] Error 1

Timestamps break "date" command

When adding a file to an RK05 image that's mounted on a modern system (WSL 2, Ubuntu 20.04), modern timestamps are added (or attempt to be added). This adds a minor bug with regards to the "date" command once running back in UNIX V6 where it now shows an incorrect date in an invalid format.

Easily fixed by setting the date again ("date MMddHHmmyy") when back running in UNIX.

This might just be me, but thought it was worth mentioning.

Incorrect Used and Available Disk Space Reported on 2.11 BSD File Systems

When running a df command with a mounted 2.11 BSD file system, the information displayed in the Used and Available space report is very wrong. V6 and V7 file systems seem to work correctly.

The environment is a PiDP-11 (Raspberry Pi) running on

uname -a
Linux pidp-11 4.19.66-v7+ #1253 SMP Thu Aug 15 11:49:46 BST 2019 armv7l GNU/Linux

rank@pidp-11:~$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 30568540 27793076 1470080 95% /
devtmpfs 469544 0 469544 0% /dev
tmpfs 474152 0 474152 0% /dev/shm
tmpfs 474152 24520 449632 6% /run
tmpfs 5120 4 5116 1% /run/lock
tmpfs 474152 0 474152 0% /sys/fs/cgroup
/dev/mmcblk0p1 43539 22856 20683 53% /boot
tmpfs 94828 0 94828 0% /run/user/1000
tmpfs 94828 0 94828 0% /run/user/1002
/dev/fuse 7942 -276881658 276889600 - /home/frank/retro-fuse/211root
/dev/fuse 1044573 -18446744072831438767 -877068276 100% /home/frank/retro-fuse/211bsdhome
/dev/fuse 4800 3239 1561 68% /home/frank/retro-fuse/v7/root
/dev/fuse 2000 1515 486 76% /home/frank/retro-fuse/v6/root
frank@pidp-11:~$

Errors and crashes on 32-bit RPi OS

A couple of bugs have been observed when compiling and running retro-fuse on the 32-bit version of Raspberry Pi OS. (Bug report courtesy of Mark Kampe. Thank you!) Both issues have been reproduced on personal hardware.

Hardware: Raspberry Pi-3B
retro-fuse version: 7
FUSE library version: 2.9
OS Version: Linux raspberrypi 5.15.32-v7+ #1538 SMP Thu Mar 21 19:38:48 BST 2022 armv7l GNU/Linux

A warning during compilation:

cc -std=c11 -g -Wall -O0 -fno-common -MMD -MP -I./src  -c -o src/dskio.o src/dskio.c
src/dskio.c: In function 'dsk_setsize':
src/dskio.c:216:19: warning: overflow in conversion from 'long long int' to 'off_t' {aka 'long int'} changes value from '9223372036854775807' to '-1' [-Woverflow]
  216 |         dsk_end = LLONG_MAX;
      |                   ^~~~~~~~~

A crash while running the unit tests:

Reading symbols from v6fs...
[New LWP 1553]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1".
Core was generated by `/home/git/retro-fuse/v6fs -oinitfs -ofssize=4872,use_ino /tmp/tmptqt1w768/fs.ds'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x000121a4 in retrofuse_write (pathname=0x180f8a8 "/f10-1", buf=0xb6d0c058 "*", size=1,
    offset=74112, fi=0x0) at src/v6fuse.c:327
327    return v6fs_pwrite((int)fi->fh, buf, size, offset);
(gdb) bt
#0  0x000121a4 in retrofuse_write (pathname=0x180f8a8 "/f10-1", buf=0xb6d0c058 "*", size=1,
    offset=74112, fi=0x0) at src/v6fuse.c:327
#1  0xb6ecd150 in fuse_fs_write_buf () from /lib/arm-linux-gnueabihf/libfuse.so.2
#2  0xb6ecd354 in ?? () from /lib/arm-linux-gnueabihf/libfuse.so.2
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
(gdb) 

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.