Commit Graph

24 Commits

Author SHA1 Message Date
Kyle Ambroff-Kao
e1b7c1c7ac 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>
2020-04-30 10:13:41 +00:00
Niels Sascha Reedijk
ff1ee776fe HaikuBook: fix part of the warnings marked by Doxygen
I spotted some warnings when I upgraded from Doxygen 1.18.13 to 1.18.17.
The new warnings are useful, they point out imbalances in grouping, as
well as unclosed comment blocks. Coincidentally, this fixes #13338
2020-03-01 09:50:49 +00:00
Augustin Cavalier
9d5b0fdaa1 docs/user: Upgrade to Doxygen 1.8.13.
Also tweak the footer CSS a bit, and fix an unclosed comment in the
fs_interface docs (spotted via a warning in Doxygen output.)
2017-10-01 11:19:37 -04:00
John Scipione
9a243c1b2a Fix errors in fs_interface.dox 2016-04-27 11:10:31 -07:00
Ingo Weinhold
a37c845e52 FS interface API doc: More details for unmount() 2013-04-04 12:00:08 +02:00
John Scipione
820dca4df6 Big docs cleanup.
* Fixed headers including:
  - All rights reserved not All Rights Reserved.
  - name, email@domain.com not name <email@domain.com>
  - tabs and spaces
  - Authors: not Documented by:
* Renamed string.dox to String.dox
* Renamed midixxx.dox files to MidiXxx.dox
* Moved images into images subdirectories and updated Doxfile.
* Re-format all files with tabs instead of spaces.
* Fix many spelling mistakes.
* Added all files, classes, structs, and enums to libbe group.
2013-02-07 02:01:19 -05:00
Adrien Destugues
a33f8fbdec Merge work by John Scipione on the Haiku Book.
* Some new classes documented
 * Screenshots for the interface kit controls
 * A lot of typo fixes
 * Some css tweaks

This has some backporting to the current version of Doxygen, since 
there are experiments to get coloring similar to the one in the Be 
Book that will hopefully be upstreamed in Doxygen.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42608 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-08-09 21:46:13 +00:00
Ingo Weinhold
1a38616f35 Fixed fs_vnode_ops::create() documentation: The function shall not fail, if
the file already exists, unless O_EXCL has been specified. At least that's
how our file systems with write support implement it.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37554 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-17 16:00:48 +00:00
Ingo Weinhold
1f23605dd7 Added description for fs_volume_ops::get_vnode()'s _type and _flags
parameters.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37552 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-17 15:39:39 +00:00
Ingo Weinhold
0551e706bf * Updated to current FS interface.
* Fixed and completed several function documentations. There's still quite
  a bit missing.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29787 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-03-29 17:17:55 +00:00
Ingo Weinhold
50c9917f8f Resurrected the FS interface documentation and introduction. It's not in sync
with the current API, but it just needs to be updated rather than rewritten
from the scratch.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29766 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-03-28 21:00:53 +00:00
Niels Sascha Reedijk
25630ec983 Removing the file system interface documentation for now. This needs to be replaced with a completely new version that accounts for all the new features (including the overlay modules)
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29243 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-02-18 11:04:27 +00:00
Ingo Weinhold
67e2e88213 Added a section to the select() hook documentation discussing the FSs
responsibility never to call notify_select_event() after deselect().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25262 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-29 21:52:30 +00:00
Ingo Weinhold
1b32947d3f * Aligned the semantics of the read_symlink() FS module hook with the
readlink() function. It is no longer required to null-terminate the
  string, shall not fail, if the buffer is too small, and shall return
  the length of the string actually written into the buffer.
* Adjusted rootfs, devfs, and bfs accordingly. Also adjusted their
  read_stat() hooks to return the correct symlink length in st_size.
* Our readlink() does now comply to the standard (and BeOS).
  Additionally if the buffer is big enough it is nice to non-conforming
  apps and null-terminates it.
* BSymLink::ReadLink() explicitly null-terminates the string now.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24425 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-17 21:37:40 +00:00
Niels Sascha Reedijk
40ba6c7004 Fix a mistake. \code should always be closed by \endcode, else doxygen will stop parsing (even if a documentation block ends).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21694 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-23 22:41:58 +00:00
Axel Dörfler
ca210f74f1 * Spaces to tabs.
* Carriage returns to simple new lines.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21627 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-16 21:47:13 +00:00
Axel Dörfler
5d92d947c2 * Completed some more missing parts.
* Replaced some more spaces with tabs, though still not complete.
* And I forgot: the last commit also removed some garbage at the beginning of the file.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21617 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-15 18:09:43 +00:00
Axel Dörfler
84f03dd594 * Removed deprecated functions.
* The documented the notify_*() functions - only notify_listener() was deprecated
  among them.
* Replaced spaces with tabs - there is no reason to deviate from the standard we're
  using everywhere else.
* Completed the docs here and there.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21615 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-15 13:31:02 +00:00
Niels Sascha Reedijk
412a49defe Update to the latest prototypes of fs_interface.h
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21584 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-07 08:29:52 +00:00
Niels Sascha Reedijk
b653632762 Wrote as much documentation as I could understand. There are quite a few gaps left (search for TODO). I hope people (Ingo, Axel?) with more knowledge on this subject can check the written docs, make suggestions for improvement, and fill the gaps. After that, it needs a good revision to make the whole more consistent.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21483 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-21 16:29:43 +00:00
Niels Sascha Reedijk
8ace9affed Work in progress. I'm still working on documenting many of the fs hooks, but I just wanted to commit this to quiet down the amount of warnings that are produced.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21257 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-05-28 08:18:43 +00:00
Niels Sascha Reedijk
81071f5e8a Large documentation update:
- Add the beginnings of the documentation for the USB module
- Fix some mistakes here and there
- Almost finished the support kit. Tried to update everything to the standards

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20724 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-16 09:28:29 +00:00
Ingo Weinhold
8338b05a30 More FS interface documentation. All FS hooks required for writing a basic
read-only FS are documented, now. Be encouraged to review and add more. :-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20568 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-04 23:46:05 +00:00
Ingo Weinhold
3458a335ab Started documenting the FS API a bit.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20544 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-04 01:27:50 +00:00