History log of /haiku/src/build/libroot/fs_attr_untyped.cpp
Revision Date Author Comments
# 03544bf0 30-Dec-2017 Augustin Cavalier <waddlesplash@gmail.com>

libroot_build: Full passthrough to system attributes.

As it turns out, using the xattr emulation layer plus "libgnu"
causes some strange mixups at package build time, and so packages
built with it were winding up with no attributes at all.

So I've just bitten the bullet and written a full passthrough layer
to the system attributes. Verified using a full build of haiku.hpkg
this time ... after a lot of painful debugging of symlink mixups.

Hopefully I am finally rid of this plague...


# 699b4bba 29-Dec-2017 Augustin Cavalier <waddlesplash@gmail.com>

libroot_build: *Actually* fix attribute usage on Haiku.

To quote jscipione (from 95e8362c52af35a4012ca4d0facd62fb9856b619),
"Let me tell you a story about a bug" -- though this tale spans a much
lesser time than that one did.

In 5e19679ea35a79a26477c6215c7abba9bb7c4d00, I enabled libroot_build for
Haiku, instead of using the system libroot as we had before. There were
a number of bugs introduced along with this that I hadn't fixed (and there
may be more after this), but most of the obvious ones (crashes on x86_64...)
were fixed shortly enough.

Attribute usage, though, was a different story. Unlike most of the POSIX
calls in libroot, which were aliasing system functions no matter what the
platform, the attribute calls were not, as they are specific to Haiku.

Initially I had completely forgot about them, and it wasn't until a few days
later when I noticed that I had an "attributes" directory in my generated
that I realized that the "generic" attribute layer was being used on Haiku.
I attempted a fix for this in 5e19679ea35a79a26477c6215c7abba9bb7c4d00,
thinking that would clear the problem up, but I didn't actually run a test
beyond seeing that my BuildConfig had been updated properly. In fact,
BuildSetup was hard-wired to not even pass that definition through on
Haiku, and so that commit had in effect caused nothing.

My initial "fix" of just changing BuildSetup then caused a build failure,
as while libroot_build itself compiled, it ran into errors whenever attributes
were used, because in letting the real libroot's attribute calls shine
through, I had bypassed libroot_build's FD emulation/shim layer.

Then I tried and failed at three separate attempts to solve this with code:
- a version of the "fs_attr_...h" interface for Haiku. This proved possible
in theory, but in practice I would need to reimplement a lot of attribute
handling code in it, because all I had access to from there was syscalls.

- a version of "fs_attr_untyped" that bypassed its reimplementations of
the "fs*attr" functions for the libroot ones, only using the FD shim layer.
This proved possibly not even theoretically possible because it would have
caused preprocessor hell in some of the build headers, and also assumptions
about how attributes are read were totally different.

- a completely new "fs_attr_haiku" that was a completely new interface to
the fs*attr functions. This proved practically impossible because of the
need to include structures from the system libroot to call out to readdir,
etc. that attempts to solve would also have caused preprocessor hell.

Then I realized that the Linux xattr emulation library, which I'd used
as a reference when attempting the first solution, was shipped by default
as a system library in all builds of Haiku ... and so I could just tell
fs_attr_untyped to use the Linux xattr handler, and then link against libgnu.

So that is how I arrived at this strange and decidedly unorthodox solution
to a problem of my own creation.


# 5d3de03b 19-May-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

libroot_build: Fix fs_read_attr() in fs_attr_untyped.cpp

* With a specified buffer size smaller than the attribute size the
function would fail with ERANGE on Linux although it should just read
as much as possible. Now we always read into our temporary data buffer
with the full buffer size.
* Fix return value in case pos is > 0. pos must be subtracted from the
bytes actually read.


# 2cce5a0a 19-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

fs_write_attr(): Allow 0-length NULL buffer


# d9516a06 16-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Open/close attribute support for xattrs backend

For the xattr/BSD (untyped) attribute backend implement fs_fopen_attr()
and fs_close_attr(). A new AttributeDescriptor is created. It is
currently used in write_pos() only.


# 55a34b69 19-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

fs_write_attr(): Allow 0-length NULL buffer


# e781b1b5 16-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Open/close attribute support for xattrs backend

For the xattr/BSD (untyped) attribute backend implement fs_fopen_attr()
and fs_close_attr(). A new AttributeDescriptor is created. It is
currently used in write_pos() only.


# 452edf50 23-Nov-2009 Ingo Weinhold <ingo_weinhold@gmx.de>

Fixed warning when building with 64 bit compiler.


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


# b1c06fc6 30-Aug-2009 Ingo Weinhold <ingo_weinhold@gmx.de>

Patch by Vincent Duvert: Added support for BSDish xattrs.


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


# b360cc7f 06-Sep-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

Refactored the BeOS attribute emulation using xattr a bit:
* Renamed fs_attr_xattr.cpp to libroot/fs_attr_untyped.cpp.
* Pulled the xattr specifics into a separate fs_attr_xattr.h.
* Added fs_attr_extattr.h, interfacing with FreeBSD's extattr support.
Totally untested yet. Might not even compile.


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


# 5d3de03be532ae60e82fa3d059683c2e082c7af0 19-May-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

libroot_build: Fix fs_read_attr() in fs_attr_untyped.cpp

* With a specified buffer size smaller than the attribute size the
function would fail with ERANGE on Linux although it should just read
as much as possible. Now we always read into our temporary data buffer
with the full buffer size.
* Fix return value in case pos is > 0. pos must be subtracted from the
bytes actually read.


# 2cce5a0a05a49512bce9ffa82c2e88f42faa1311 19-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

fs_write_attr(): Allow 0-length NULL buffer


# d9516a06cccdc8a5d0d88ccb658b98080b2af5f0 16-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Open/close attribute support for xattrs backend

For the xattr/BSD (untyped) attribute backend implement fs_fopen_attr()
and fs_close_attr(). A new AttributeDescriptor is created. It is
currently used in write_pos() only.


# 55a34b69f3a3c438254657da49205158793e21e3 19-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

fs_write_attr(): Allow 0-length NULL buffer


# e781b1b5a801e6fe2f364a302e3201458b07e58f 16-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Open/close attribute support for xattrs backend

For the xattr/BSD (untyped) attribute backend implement fs_fopen_attr()
and fs_close_attr(). A new AttributeDescriptor is created. It is
currently used in write_pos() only.


# 452edf50c33f06a9c1fde809cda1123be2ff2e86 23-Nov-2009 Ingo Weinhold <ingo_weinhold@gmx.de>

Fixed warning when building with 64 bit compiler.


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


# b1c06fc64af1d3e520b339ab817cf3e820446dc2 30-Aug-2009 Ingo Weinhold <ingo_weinhold@gmx.de>

Patch by Vincent Duvert: Added support for BSDish xattrs.


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


# b360cc7f0003ab716c974ee4bca3113d08054ed5 06-Sep-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

Refactored the BeOS attribute emulation using xattr a bit:
* Renamed fs_attr_xattr.cpp to libroot/fs_attr_untyped.cpp.
* Pulled the xattr specifics into a separate fs_attr_xattr.h.
* Added fs_attr_extattr.h, interfacing with FreeBSD's extattr support.
Totally untested yet. Might not even compile.


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