History log of /haiku/src/add-ons/kernel/file_systems/iso9660/kernel_interface.cpp
Revision Date Author Comments
# 425ac1b6 20-Jun-2023 Alexander von Gluck IV <kallisti5@unixzen.com>

refactor: Swap %Ld for %lld in all format usages

* %Ld is an undocumented alias for %lld in glibc.
* muslc doesn't implement it for this reason.
* While we will likely never drop %Ld support,
lets clean house and set a better example.

Change-Id: Id46dad3104abae483e80cc5c05d1464d3ecd8030
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6636
Reviewed-by: Adrien Destugues <pulkomandy@pulkomandy.tk>
Reviewed-by: Alex von Gluck IV <kallisti5@unixzen.com>
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>


# f9b218aa 26-May-2020 Jérôme Duval <jerome.duval@gmail.com>

file_systems: fs_read_link() doesn't use a user buffer

introduced in hrev26728 and hrev54107.

Change-Id: I3e98d54e829bcce559c43a8ee1abe4d889c0a571
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2819
Reviewed-by: waddlesplash <waddlesplash@gmail.com>


# e1b7c1c7 19-Apr-2020 Kyle Ambroff-Kao <kyle@ambroffkao.com>

storage/SymLink: Fix Be API regression in ReadLink

After this patch, "UnitTester BSymLink" passes.

BSymLink::ReadLink() in BeOS would always return the length of the
link unless an error occurred. Before this patch, Haiku instead seemed
to emulate posix readlink() behavior, returning the number of bytes
copied into the output buffer.

BeOS also did not guarantee that the string written into the output
buffer is NULL terminated if the output buffer cannot contain the
entire link contents, but the Haiku implementation does since it is is
a basic safety issue.

This patch fixes this and updates the Haiku API docs to describe the
behavior explicitly.

Fixing this required changing behavior in bfs_read_link, which
required changes in many more places.

docs/user/storage/SymLink.dox:
src/kits/storage/SymLink.cpp:
* Don't return B_BUFFER_OVERFLOW if the provided buffer is not large
enough to hold the link contents.
* Update documentation to clearly describe behavior.

src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp:
* Change bfs_read_link() to always return the link length. This is
called by common_read_link in the VFS, which is called by
_kern_read_link().

src/add-ons/kernel/file_systems/btrfs/kernel_interface.cpp:
src/add-ons/kernel/file_systems/exfat/kernel_interface.cpp:
src/add-ons/kernel/file_systems/ext2/kernel_interface.cpp:
src/add-ons/kernel/file_systems/iso9660/kernel_interface.cpp:
src/add-ons/kernel/file_systems/netfs/client/netfs.cpp:
src/add-ons/kernel/file_systems/nfs/nfs_add_on.c:
src/add-ons/kernel/file_systems/ramfs/kernel_interface.cpp:
src/add-ons/kernel/file_systems/reiserfs/Iterators.cpp:
src/add-ons/kernel/file_systems/reiserfs/Iterators.h:
src/add-ons/kernel/file_systems/reiserfs/Volume.cpp:
src/add-ons/kernel/file_systems/reiserfs/Volume.h:
* Update the implementation of read_link for these filesystems. Some
of them were incorrect, and some had just copied the posix behavior of
bfs from before this patch.
* Use user_memcpy in ext2_read_link()
* Use user_memcpy in nfs fs_read_link()
* Use user_memcpy in reiserfs StreamReader::_ReadIndirectItem and
StreamReader::_ReadDirectItem
* Remove unused method Volume::ReadObject in reiserfs.

src/add-ons/kernel/file_systems/packagefs/nodes/UnpackingLeafNode.cpp:
src/add-ons/kernel/file_systems/packagefs/package_links/PackageLinkSymlink.cpp:
* Update UnpackingLeafNode::ReadSymlink and
PackageSymLink::ReadSymLink() to set the bufferSize out parameter to
the symlink length. Both of these are called by
packagefs_read_symlink.
* Use user_memcpy

src/add-ons/kernel/file_systems/netfs/client/netfs.cpp:
* netfs seems mostly unimplemented. Added a FIXME note for future
implementers so that they know to implement the correct behavior.

src/system/libroot/posix/unistd/link.c:
* readlinkat() was just wrapping _kern_read_link() because before this
patch it had expected posix behavior. But now it does not, so we
need to return the number of bytes written to the output
buffer.

src/build/libroot/fs.cpp:
* Update _kern_read_link() in the compatibility code to emulate the
Haiku behavior on the host system. This is done by using an
intermediate buffer that is guaranteed to fit the link contents and
returning its length. The intermediate buffer is copied into the
output buffer until there is no more room.

src/tests/kits/storage/SymLinkTest.cpp:
* This patch also resolves some test failures similar to those
resolved in ee8cf35f0 which fixed tests for BNode. The tests were
failing because Haiku's error checking is just better.

BeOS allowed constructing a BSymLink with BSymLink(BDirectory*,
const char*) with the entry name of "". The same is true of the
equivilant SetTo() method. The BSymLink object will appear valid
until you attempt to use it by, for example, calling the ReadLink
method, which will return B_BAD_VALUE.

Haiku does a more appropriate thing and returns B_ENTRY_NOT_FOUND,
for this constructor and the equivilant SetTo(BDirectory*, const
char*) method. This patch fixes these test assertions to match Haiku
behavior.

docs/develop/file_systems/overview.txt:
* Add notes for future filesystem driver implementers to call this
mistake when implementing fs_vnode_ops::read_symlink.

docs/user/drivers/fs_interface.dox:
* Fix documentation for fs_vnode_ops::read_symlink

Change-Id: I8bcb8b2a0c9333059c84ace15844c32d4efeed9d
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2502
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
Reviewed-by: Axel Dörfler <axeld@pinc-software.de>


# 097bbc7f 29-Apr-2019 Augustin Cavalier <waddlesplash@gmail.com>

file_systems: Remove now-redundant bounds checks before file_cache_read().

Change-Id: Iafb7d188c7e7cb4406d924eb3354a7ede40c6641
Reviewed-on: https://review.haiku-os.org/c/1421
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
Reviewed-by: Michael Lotz <mmlr@mlotz.ch>


# 38fa917c 12-Aug-2018 Augustin Cavalier <waddlesplash@gmail.com>

iso9660_shell: Use the fs_shell from src/tools; fix the build.


# c3e68d8d 11-May-2013 Jerome Duval <jerome.duval@gmail.com>

cdda, fat, iso9660: clear tv_nsecs fields in the stat struct

* devfs in fact doesn't provide a zeroed buffer.


# 6ea60bcd 15-Apr-2012 Axel Dörfler <axeld@pinc-software.de>

This must be a 64 bit computation for disks larger than 4GB.

* This closes ticket #8460.
* Patch from jahaiku, thanks!


# d63f4274 18-Oct-2010 Jérôme Duval <korli@users.berlios.de>

added a file system call preallocate() as described in #6285, currently unused


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39006 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 533cba7e 28-Jul-2009 Axel Dörfler <axeld@pinc-software.de>

bonefish + axeld:
* Reverted r31809 as it introduced a race condition; if the I/O request had been
notified, it could already been deleted at that point.
* Instead, we need to notify the request in each file system/driver that uses
it. Added new notify_io_request() function that does that exactly.
* Added a TODO comment to the userlandfs where the request notification needs
a bit more thought.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31903 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 41b19806 28-May-2009 Axel Dörfler <axeld@pinc-software.de>

* Added support for the io() hook. Not yet tested.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30906 a95241bf-73f2-0310-859d-f6bbb57e9c96


# f0c050f6 28-May-2009 Axel Dörfler <axeld@pinc-software.de>

* Cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30905 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 56b2feba 27-May-2009 Michael Lotz <mmlr@mlotz.ch>

Add actual support for relocated directories. In case we hit a placeholder file
pointing to a relocated directory, we now re-initialize the node we are
initializing with the first entry of the pointed at directory. This ought to be
the "." entry containing the proper flags, start block number and data length.
As per the specs we do only keep the file id or alternate name of the
placeholder and take everything else from the relocated directory.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30886 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 99d1bfb5 07-May-2009 Axel Dörfler <axeld@pinc-software.de>

* The code in fs_walk() duplicates the one in ISOReadDir() mostly, and suffered
from the same "associated file" problem as the latter. This now finally fixes
bug #3861. This badly needs some cleanup.
* Fixed a possible problem I introduced in ISOReadDir() (did not read the next
block even if it should have).
* Fixed warnings with debug output turned on.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30663 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 47a214de 07-May-2009 Axel Dörfler <axeld@pinc-software.de>

* We now ignore associated files. This makes the double entries of bug #3861
disappear.
* When parsing rock ridge attributes, we no longer stop when we encounter an
unknown one. Instead, we just parse through until the end. The ISO image as
part of #3861 also made this visible.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30655 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 2a64cb11 05-May-2009 Axel Dörfler <axeld@pinc-software.de>

Fixed two crashing bugs, one of them mentioned in ticket #3861:
* ISOReadDirEnt() did happily read after the 2048 byte block. Now we check after
having processed an entry if the position is on the 2048 block boundary, and
skip to the next block directly.
* fs_walk() assumed a 2 block set (and accessed memory therein), but only has
access to a single block. I haven't looked at the specs, so I'm not really
sure what the old code tried to achieve. In any case, it doesn't crash
anymore.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30640 a95241bf-73f2-0310-859d-f6bbb57e9c96


# f47bff08 05-May-2009 Axel Dörfler <axeld@pinc-software.de>

* Made the iso9660 file system buildable within the fs_shell (iso9660_shell).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30639 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 49004dc7 19-Feb-2009 Michael Lotz <mmlr@mlotz.ch>

Remove the additional fs_vnode_ops arugment from get_vnode() again as it's not
needed at all when used as intended. Thanks Ingo for the explanation on how this
is intended to work. Adjusted the overlay fs accordingly and updated/reverted
the changes to the other filesystems.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29250 a95241bf-73f2-0310-859d-f6bbb57e9c96


# a26c2439 14-Feb-2009 Michael Lotz <mmlr@mlotz.ch>

* Adding volume ops to the overlay filesystem.
* Remove the previous method of applying the overlay by flags. In the future the
overlay can just be mounted as a filesystem layer. This is probably how layers
were intended to work in the first place.
* Move the filesystem module info and filesystem name from the fs_mount to the
fs_volume structure. Filesystem layering is done by having multiple layered
volumes and we want to be able to have a different fs per layer.
* Adapt VFS code to this move.
* Implement mounting layered filesystems. Specifying multiple filesystems
separated by a colon on mount will cause the layers to be set up and the
corresponding filesystems to be mounted at that layer.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29199 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 3e015617 13-Feb-2009 Michael Lotz <mmlr@mlotz.ch>

Request an overlay for the root vnode as well so attributes are available on the fs root as well.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29197 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 00405f22 09-Feb-2009 Michael Lotz <mmlr@mlotz.ch>

* Add an additional argument to get_vnode() that gets the fs_vnode_ops of the
node. That is needed for a layered filesystem to be able to construct a full
fs_vnode out of a volume/inode pair.
* Adapt places where get_vnode is used. Sadly this is a C API and we can't just
use a default NULL for that argument.
* Introduce a flag B_VNODE_WANTS_OVERLAY_SUB_NODE that can be returned in the
flags field of a fs get_vnode call. A filesystem can use this flag to indicate
that it doesn't support the full set of fs features (attributes, write support)
and it'd like to have unsupported calls emulated by an overlay sub node.
* Add a perliminary overlay filesystem that emulates file attributes using files
on a filesystem where attributes aren't supported. It does currently only
support reading attributes/attribute directories though. All other calls are
just passed through to the super filesystem.
* Adjust places where a HAS_FS_CALL() is taken as a guarantee that the operation
is supported. For the overlay filesystem we may later return a B_UNSUPPORTED,
so make sure that in that case proper fallback options are taken.
* Make the iso9660 filesystem request overlay sub nodes. This can be fine tuned
later to only trigger where there are features on a CD that need emulation
at all.

If you happened to know the attribute file format and location you could build
an iso with read-only attribute support now. Note that this won't be enough to
get a bootable iso-only image as the query and index support is yet missing.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29177 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 2c348abb 30-Sep-2008 Axel Dörfler <axeld@pinc-software.de>

* Most of the other file systems now maintain the st_blocks value. It might not
always be correct, but should be at least close.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27793 a95241bf-73f2-0310-859d-f6bbb57e9c96


# eb097431 15-Sep-2008 Axel Dörfler <axeld@pinc-software.de>

* ISOReadDirEnt() did not set the dirent::d_dev field, thus causing bug #2734.
* Moved the rock ridge attribute parsing code to a separate function.
* Removed superfluous malloc() vs. realloc() code.
* Checked allocations in the rock ridge parsing code.
* Cleanup, renamed some variables, structures, functions, etc.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27569 a95241bf-73f2-0310-859d-f6bbb57e9c96


# d02cde30 12-Sep-2008 Michael Lotz <mmlr@mlotz.ch>

CID 877: Fix memory leak in error case.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27467 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 44d0dbc8 10-Sep-2008 Axel Dörfler <axeld@pinc-software.de>

* dirent::d_reclen was set incorrectly, causing bug #2699.
* Removed unneeded "block_out" variable in ISOReadDirEnt().
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27408 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ec598fe4 27-Jul-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

* Added FS interface hooks io() and cancel_io(). The former is supposed
to provide asynchrounous (or only synchronous, if asynchronous is not
supported) I/O request support. It will eventually replace
{read,write}_pages(). None of the FS implementations implement them
yet.
* Implemented some support functions for request-based I/O. File system
implementations can use do_fd_io() which passes an I/O request to the
layer responsible for a given FD, and do_iterative_fd_io(), which
translates a request for a file to subrequests for the underlying
device and passes them on. Both fall back to synchrounous processing
when the io() hook is not supported.
Furthermore added vfs_synchronous_io() which should be handy for the
devfs to perform io_requests synchronously for devices that don't
support the io() hook.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26655 a95241bf-73f2-0310-859d-f6bbb57e9c96


# e6bd90c5 23-Jul-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

* bfs_fsync() was the only place which could cause the
fs_vnode_ops::write_pages() to be called with fsReenter = true. Since
this is no longer the case, the argument has become superfluous. For
read_pages() it always was. Removed the argument from the functions
and all functions that propagated it.
* Some whitespace at the end of lines was removed.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26579 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 1da9f5ce 10-May-2008 Axel Dörfler <axeld@pinc-software.de>

* Added BDiskSystem::ShortName() and everything needed to get it there.
* Added BDiskDeviceRoster::GetDiskSystem() method, that can get a disk system
by short/pretty/module name - since they should all be unique, I put them
in a single namespace, please complain if you don't like that :-)
* Cleaned up DiskSystem.h and DiskDeviceRoster.h according to the updated
header guidelines.
* Renamed ntfs pretty name from "ntfs File System" to "Windows NT File System".


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25414 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0eaadd30 17-Apr-2008 Michael Lotz <mmlr@mlotz.ch>

* Applying patch by Dustin Howett that updates the iso9660 filesystem to the
new filesystem interface.
* Renamed sISO* to gISO* though as they are in fact not static.

Briefly tested and works as expected. Thanks for your work Dustin!
Closes enhancement #2089.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24994 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ff99132e 20-Nov-2007 Axel Dörfler <axeld@pinc-software.de>

* Removed fs_get_file_map(); for a file system that only has contiguous files,
there is no need for the file map service.
* Added and implemented fs_read_pages() - this should fix bug #1633; the file
system had not been ported to the new file cache API yet.
* Cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22970 a95241bf-73f2-0310-859d-f6bbb57e9c96


# dc9a52b9 13-Nov-2007 Axel Dörfler <axeld@pinc-software.de>

Renamed iso.h to iso9660.h.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22921 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 5b2c5d03 13-Nov-2007 Axel Dörfler <axeld@pinc-software.de>

* Fixed a crashing bug in the identification code: it copied a C++ object on
the stack to an allocated one - on destruction of the latter, the resources
were already freed.
* Made the identify code more negligent against bad CDs - ie. it will identify
even broken CDs if they can be mounted.
* Made identification endian aware (it should now also work on big endian
systems).
* Renamed many structures, methods, and fields to be less verbose, and follow
our style guide.
* Renamed iso9660.cpp|h to iso9660_identify.cpp|h.
* Renamed iso.c to iso9660.c, rock.h to rock_ridge.h.
* Removed unnecessary cruft from the Jamfile.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22920 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 3d268eda 10-Nov-2007 Axel Dörfler <axeld@pinc-software.de>

* Extracted file_map API out of the file cache - it's now an optional service
that can be used by file systems.
* Changed the way the file cache works: instead of reading/writing to the
underlying device directly, it can now be used for any data source, ie.
also network file systems.
* As a result, the former pages_io() moved to the VFS layer, and can now be
called by a file system via {read|write}_file_io_vec_pages() (naming
suggestions are always welcomed :-)). It now gets an FD, and uses that to
communicate with the device (via its fs_{read|write}_pages() hooks).
* The file_cache_{read|write}() functions must now be called without holding
an I/O relevant file system lock. That allows the file cache to prepare the
pages without colliding with the page writer, IOW the "mayBlock" flag can
go into the attic again (yay!).
* This also results in a much better performance when the system does I/O and
is low on memory, as the page writer can now finally write back some pages,
and that even without maxing out the CPU :)
* The API changes put slightly more burden on the fs_{read|write}_pages()
hooks, but in combination with the file_map it's still pretty straight
forward. It just will have to dispatch the call to the underlying device
directly, usually it will just call its fs_{read|write}_pages() hooks
via the above mentioned calls.
* Ported BFS and FAT to the new API, the latter has not been tested, though.
* Also ported the API changes to the fs_shell. I also completely removed its
file cache level page handling - the downside is that device access is no
longer cached (ie. depends on the host OS now), the upside is that the code
is greatly simplified.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22886 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 76a8ec23 22-Aug-2007 Ingo Weinhold <ingo_weinhold@gmx.de>

* Added disk system flags for whether a partition name and partition
content name are supported.
* Added file_system_module_info::flags (analogously to
partition_module_info::flags) which indicate which disk device
features the FS supports.
* Replaced the
file_system_module_info/partition_module_info::supports_*()
hooks by a get_supported_operations() hook and for partitioning
systems additionally a get_supported_child_operations() hook.
* Updated file and partitioning systems accordingly.
* Updated fs_shell accordingly.
* Updated the DDM accordingly. The syscall interface remains unchanged,
though.
* _user_supports_initializing_partition() also checks whether the parent
partitioning system is content now.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22043 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 245aecda 21-Jun-2007 Axel Dörfler <axeld@pinc-software.de>

Got rid of vnode_id and mount_id, replaced with ino_t and dev_t.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21485 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 12d359b8 04-Mar-2007 Ingo Weinhold <ingo_weinhold@gmx.de>

* Removed write_link from the FS module interface. Adjusted all FS
add-ons accordingly and removed the syscall.
* Removed send_notification().
* Reimplemented notify_listener(). It used the unimplemented
send_notification(). Now it has a chance to work. Note that
notify_listener() is obsolete. I would already have removed it, if
there weren't lots of FS implementations still using it (Hint!).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20329 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 12e4be29 05-Sep-2006 Jérôme Duval <korli@users.berlios.de>

cleanup


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18746 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 9d254f45 27-Aug-2006 Jérôme Duval <korli@users.berlios.de>

we need to call put_vnode on unmount


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18666 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 44d56753 16-Aug-2006 Jérôme Duval <korli@users.berlios.de>

KernelAddon and KernelStaticLibrary don't include kernel, kernel arch, boot platform headers anymore.
Fixed the build of most of targets using these rules. Though the build can be still broken, feel free to fix.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18521 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 5b4cb109 10-Aug-2006 Jérôme Duval <korli@users.berlios.de>

tentative at using file_cache API in iso9660, untested
minor cleanup in TRACE()


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18474 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 3b723f79 28-Feb-2006 Jérôme Duval <korli@users.berlios.de>

added fs_get_vnode_name
cleanup of Jamfile
clean license


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16549 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 21e1553e 27-Feb-2006 Jérôme Duval <korli@users.berlios.de>

haiku version of iso9660 filesystem
working, except for autodetection


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16539 a95241bf-73f2-0310-859d-f6bbb57e9c96


# c3e68d8d92801ca71472daaa7e3c996d13d11ecf 11-May-2013 Jerome Duval <jerome.duval@gmail.com>

cdda, fat, iso9660: clear tv_nsecs fields in the stat struct

* devfs in fact doesn't provide a zeroed buffer.


# 6ea60bcdbaf07b400adb1de971c3562d15f55668 15-Apr-2012 Axel Dörfler <axeld@pinc-software.de>

This must be a 64 bit computation for disks larger than 4GB.

* This closes ticket #8460.
* Patch from jahaiku, thanks!


# d63f4274b665d32065f24a7a01a025578c8a43c9 18-Oct-2010 Jérôme Duval <korli@users.berlios.de>

added a file system call preallocate() as described in #6285, currently unused


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39006 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 533cba7eff7465e14de98036c8a2a0aeeba2bdf9 28-Jul-2009 Axel Dörfler <axeld@pinc-software.de>

bonefish + axeld:
* Reverted r31809 as it introduced a race condition; if the I/O request had been
notified, it could already been deleted at that point.
* Instead, we need to notify the request in each file system/driver that uses
it. Added new notify_io_request() function that does that exactly.
* Added a TODO comment to the userlandfs where the request notification needs
a bit more thought.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31903 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 41b19806916cc348ced2be49fd2779e6bc55e7c9 28-May-2009 Axel Dörfler <axeld@pinc-software.de>

* Added support for the io() hook. Not yet tested.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30906 a95241bf-73f2-0310-859d-f6bbb57e9c96


# f0c050f60eb1199249158806a7b7ad8f5b90692b 28-May-2009 Axel Dörfler <axeld@pinc-software.de>

* Cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30905 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 56b2febaadfa19cec3918e0018a6fa5f1161a274 27-May-2009 Michael Lotz <mmlr@mlotz.ch>

Add actual support for relocated directories. In case we hit a placeholder file
pointing to a relocated directory, we now re-initialize the node we are
initializing with the first entry of the pointed at directory. This ought to be
the "." entry containing the proper flags, start block number and data length.
As per the specs we do only keep the file id or alternate name of the
placeholder and take everything else from the relocated directory.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30886 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 99d1bfb5de8e2ca3ff2b245a050c09366cca5374 07-May-2009 Axel Dörfler <axeld@pinc-software.de>

* The code in fs_walk() duplicates the one in ISOReadDir() mostly, and suffered
from the same "associated file" problem as the latter. This now finally fixes
bug #3861. This badly needs some cleanup.
* Fixed a possible problem I introduced in ISOReadDir() (did not read the next
block even if it should have).
* Fixed warnings with debug output turned on.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30663 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 47a214def6b09d93674ecb5eef1eef625f936436 07-May-2009 Axel Dörfler <axeld@pinc-software.de>

* We now ignore associated files. This makes the double entries of bug #3861
disappear.
* When parsing rock ridge attributes, we no longer stop when we encounter an
unknown one. Instead, we just parse through until the end. The ISO image as
part of #3861 also made this visible.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30655 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 2a64cb1138cb25680860aedaa89e9e74e462cc81 05-May-2009 Axel Dörfler <axeld@pinc-software.de>

Fixed two crashing bugs, one of them mentioned in ticket #3861:
* ISOReadDirEnt() did happily read after the 2048 byte block. Now we check after
having processed an entry if the position is on the 2048 block boundary, and
skip to the next block directly.
* fs_walk() assumed a 2 block set (and accessed memory therein), but only has
access to a single block. I haven't looked at the specs, so I'm not really
sure what the old code tried to achieve. In any case, it doesn't crash
anymore.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30640 a95241bf-73f2-0310-859d-f6bbb57e9c96


# f47bff088097e3f4c04e95fbdb2383caa65ff996 05-May-2009 Axel Dörfler <axeld@pinc-software.de>

* Made the iso9660 file system buildable within the fs_shell (iso9660_shell).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30639 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 49004dc730f842ea3c162b56dee63696c51d17c7 19-Feb-2009 Michael Lotz <mmlr@mlotz.ch>

Remove the additional fs_vnode_ops arugment from get_vnode() again as it's not
needed at all when used as intended. Thanks Ingo for the explanation on how this
is intended to work. Adjusted the overlay fs accordingly and updated/reverted
the changes to the other filesystems.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29250 a95241bf-73f2-0310-859d-f6bbb57e9c96


# a26c24392042ca7bfad2e78f73a0b75c463c0455 14-Feb-2009 Michael Lotz <mmlr@mlotz.ch>

* Adding volume ops to the overlay filesystem.
* Remove the previous method of applying the overlay by flags. In the future the
overlay can just be mounted as a filesystem layer. This is probably how layers
were intended to work in the first place.
* Move the filesystem module info and filesystem name from the fs_mount to the
fs_volume structure. Filesystem layering is done by having multiple layered
volumes and we want to be able to have a different fs per layer.
* Adapt VFS code to this move.
* Implement mounting layered filesystems. Specifying multiple filesystems
separated by a colon on mount will cause the layers to be set up and the
corresponding filesystems to be mounted at that layer.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29199 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 3e01561729cd577cd821d45f56d6f5457a60756d 13-Feb-2009 Michael Lotz <mmlr@mlotz.ch>

Request an overlay for the root vnode as well so attributes are available on the fs root as well.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29197 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 00405f2286fd370a0bd264d0bbac0cfa120e7646 09-Feb-2009 Michael Lotz <mmlr@mlotz.ch>

* Add an additional argument to get_vnode() that gets the fs_vnode_ops of the
node. That is needed for a layered filesystem to be able to construct a full
fs_vnode out of a volume/inode pair.
* Adapt places where get_vnode is used. Sadly this is a C API and we can't just
use a default NULL for that argument.
* Introduce a flag B_VNODE_WANTS_OVERLAY_SUB_NODE that can be returned in the
flags field of a fs get_vnode call. A filesystem can use this flag to indicate
that it doesn't support the full set of fs features (attributes, write support)
and it'd like to have unsupported calls emulated by an overlay sub node.
* Add a perliminary overlay filesystem that emulates file attributes using files
on a filesystem where attributes aren't supported. It does currently only
support reading attributes/attribute directories though. All other calls are
just passed through to the super filesystem.
* Adjust places where a HAS_FS_CALL() is taken as a guarantee that the operation
is supported. For the overlay filesystem we may later return a B_UNSUPPORTED,
so make sure that in that case proper fallback options are taken.
* Make the iso9660 filesystem request overlay sub nodes. This can be fine tuned
later to only trigger where there are features on a CD that need emulation
at all.

If you happened to know the attribute file format and location you could build
an iso with read-only attribute support now. Note that this won't be enough to
get a bootable iso-only image as the query and index support is yet missing.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29177 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 2c348abbf7aca35c66b88e159bdafa41f2a9743f 30-Sep-2008 Axel Dörfler <axeld@pinc-software.de>

* Most of the other file systems now maintain the st_blocks value. It might not
always be correct, but should be at least close.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27793 a95241bf-73f2-0310-859d-f6bbb57e9c96


# eb0974311f6984a71c24a444b4eebcba5179fa53 15-Sep-2008 Axel Dörfler <axeld@pinc-software.de>

* ISOReadDirEnt() did not set the dirent::d_dev field, thus causing bug #2734.
* Moved the rock ridge attribute parsing code to a separate function.
* Removed superfluous malloc() vs. realloc() code.
* Checked allocations in the rock ridge parsing code.
* Cleanup, renamed some variables, structures, functions, etc.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27569 a95241bf-73f2-0310-859d-f6bbb57e9c96


# d02cde3053be75589a08149100011a9f73e6e966 12-Sep-2008 Michael Lotz <mmlr@mlotz.ch>

CID 877: Fix memory leak in error case.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27467 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 44d0dbc89810d1b76cab08cea586226471e752d8 10-Sep-2008 Axel Dörfler <axeld@pinc-software.de>

* dirent::d_reclen was set incorrectly, causing bug #2699.
* Removed unneeded "block_out" variable in ISOReadDirEnt().
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27408 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ec598fe493579e3d522453cb407ca3c6b57d715a 27-Jul-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

* Added FS interface hooks io() and cancel_io(). The former is supposed
to provide asynchrounous (or only synchronous, if asynchronous is not
supported) I/O request support. It will eventually replace
{read,write}_pages(). None of the FS implementations implement them
yet.
* Implemented some support functions for request-based I/O. File system
implementations can use do_fd_io() which passes an I/O request to the
layer responsible for a given FD, and do_iterative_fd_io(), which
translates a request for a file to subrequests for the underlying
device and passes them on. Both fall back to synchrounous processing
when the io() hook is not supported.
Furthermore added vfs_synchronous_io() which should be handy for the
devfs to perform io_requests synchronously for devices that don't
support the io() hook.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26655 a95241bf-73f2-0310-859d-f6bbb57e9c96


# e6bd90c58dbae64f3b464edcff90dcb06e63a716 23-Jul-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

* bfs_fsync() was the only place which could cause the
fs_vnode_ops::write_pages() to be called with fsReenter = true. Since
this is no longer the case, the argument has become superfluous. For
read_pages() it always was. Removed the argument from the functions
and all functions that propagated it.
* Some whitespace at the end of lines was removed.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26579 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 1da9f5cea5ea4d32c539a01cd94a7b605e941beb 10-May-2008 Axel Dörfler <axeld@pinc-software.de>

* Added BDiskSystem::ShortName() and everything needed to get it there.
* Added BDiskDeviceRoster::GetDiskSystem() method, that can get a disk system
by short/pretty/module name - since they should all be unique, I put them
in a single namespace, please complain if you don't like that :-)
* Cleaned up DiskSystem.h and DiskDeviceRoster.h according to the updated
header guidelines.
* Renamed ntfs pretty name from "ntfs File System" to "Windows NT File System".


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25414 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0eaadd30b2afb07a60f218ec038db7ad80a37d65 17-Apr-2008 Michael Lotz <mmlr@mlotz.ch>

* Applying patch by Dustin Howett that updates the iso9660 filesystem to the
new filesystem interface.
* Renamed sISO* to gISO* though as they are in fact not static.

Briefly tested and works as expected. Thanks for your work Dustin!
Closes enhancement #2089.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24994 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ff99132e67146f179fdabe07ac385e5221ede678 20-Nov-2007 Axel Dörfler <axeld@pinc-software.de>

* Removed fs_get_file_map(); for a file system that only has contiguous files,
there is no need for the file map service.
* Added and implemented fs_read_pages() - this should fix bug #1633; the file
system had not been ported to the new file cache API yet.
* Cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22970 a95241bf-73f2-0310-859d-f6bbb57e9c96


# dc9a52b9175a71865127c6c292e6618d95edbe7a 13-Nov-2007 Axel Dörfler <axeld@pinc-software.de>

Renamed iso.h to iso9660.h.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22921 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 5b2c5d03e874e4861b2e75221e1ee37492682e06 13-Nov-2007 Axel Dörfler <axeld@pinc-software.de>

* Fixed a crashing bug in the identification code: it copied a C++ object on
the stack to an allocated one - on destruction of the latter, the resources
were already freed.
* Made the identify code more negligent against bad CDs - ie. it will identify
even broken CDs if they can be mounted.
* Made identification endian aware (it should now also work on big endian
systems).
* Renamed many structures, methods, and fields to be less verbose, and follow
our style guide.
* Renamed iso9660.cpp|h to iso9660_identify.cpp|h.
* Renamed iso.c to iso9660.c, rock.h to rock_ridge.h.
* Removed unnecessary cruft from the Jamfile.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22920 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 3d268eda3d0ca504c865533347decf27b54025b6 10-Nov-2007 Axel Dörfler <axeld@pinc-software.de>

* Extracted file_map API out of the file cache - it's now an optional service
that can be used by file systems.
* Changed the way the file cache works: instead of reading/writing to the
underlying device directly, it can now be used for any data source, ie.
also network file systems.
* As a result, the former pages_io() moved to the VFS layer, and can now be
called by a file system via {read|write}_file_io_vec_pages() (naming
suggestions are always welcomed :-)). It now gets an FD, and uses that to
communicate with the device (via its fs_{read|write}_pages() hooks).
* The file_cache_{read|write}() functions must now be called without holding
an I/O relevant file system lock. That allows the file cache to prepare the
pages without colliding with the page writer, IOW the "mayBlock" flag can
go into the attic again (yay!).
* This also results in a much better performance when the system does I/O and
is low on memory, as the page writer can now finally write back some pages,
and that even without maxing out the CPU :)
* The API changes put slightly more burden on the fs_{read|write}_pages()
hooks, but in combination with the file_map it's still pretty straight
forward. It just will have to dispatch the call to the underlying device
directly, usually it will just call its fs_{read|write}_pages() hooks
via the above mentioned calls.
* Ported BFS and FAT to the new API, the latter has not been tested, though.
* Also ported the API changes to the fs_shell. I also completely removed its
file cache level page handling - the downside is that device access is no
longer cached (ie. depends on the host OS now), the upside is that the code
is greatly simplified.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22886 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 76a8ec23db391176bac91f33c5f1fc6e8e41866c 22-Aug-2007 Ingo Weinhold <ingo_weinhold@gmx.de>

* Added disk system flags for whether a partition name and partition
content name are supported.
* Added file_system_module_info::flags (analogously to
partition_module_info::flags) which indicate which disk device
features the FS supports.
* Replaced the
file_system_module_info/partition_module_info::supports_*()
hooks by a get_supported_operations() hook and for partitioning
systems additionally a get_supported_child_operations() hook.
* Updated file and partitioning systems accordingly.
* Updated fs_shell accordingly.
* Updated the DDM accordingly. The syscall interface remains unchanged,
though.
* _user_supports_initializing_partition() also checks whether the parent
partitioning system is content now.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22043 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 245aecda8ac43fc2c0c0bac6a7e4016efa9b71e1 21-Jun-2007 Axel Dörfler <axeld@pinc-software.de>

Got rid of vnode_id and mount_id, replaced with ino_t and dev_t.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21485 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 12d359b85a22246a568569b09b6587534e98aacc 04-Mar-2007 Ingo Weinhold <ingo_weinhold@gmx.de>

* Removed write_link from the FS module interface. Adjusted all FS
add-ons accordingly and removed the syscall.
* Removed send_notification().
* Reimplemented notify_listener(). It used the unimplemented
send_notification(). Now it has a chance to work. Note that
notify_listener() is obsolete. I would already have removed it, if
there weren't lots of FS implementations still using it (Hint!).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20329 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 12e4be290d41bdc06599679d61c80d28c3d3cf35 05-Sep-2006 Jérôme Duval <korli@users.berlios.de>

cleanup


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18746 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 9d254f4567c54256dddbe9e02d582d3856967845 27-Aug-2006 Jérôme Duval <korli@users.berlios.de>

we need to call put_vnode on unmount


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18666 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 44d5675324128d940518aaf7f2096efe9965db3a 16-Aug-2006 Jérôme Duval <korli@users.berlios.de>

KernelAddon and KernelStaticLibrary don't include kernel, kernel arch, boot platform headers anymore.
Fixed the build of most of targets using these rules. Though the build can be still broken, feel free to fix.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18521 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 5b4cb1093258d3f87512e1538bf78742871243c3 10-Aug-2006 Jérôme Duval <korli@users.berlios.de>

tentative at using file_cache API in iso9660, untested
minor cleanup in TRACE()


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18474 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 3b723f79140b51ec56913b1d7b8ccaa3a59b26f4 28-Feb-2006 Jérôme Duval <korli@users.berlios.de>

added fs_get_vnode_name
cleanup of Jamfile
clean license


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16549 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 21e1553eb5d00d26c2df2dab004f7a41e667dd09 27-Feb-2006 Jérôme Duval <korli@users.berlios.de>

haiku version of iso9660 filesystem
working, except for autodetection


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16539 a95241bf-73f2-0310-859d-f6bbb57e9c96