On Wed, Nov 14, 2001 at 11:01:34PM -0700, Andreas Dilger wrote:
> On Nov 15, 2001 16:08 +1100, Nathan Scott wrote:
> > + int (*create) (struct inode *, char *, void *, size_t);
> > + int (*replace) (struct inode *, char *, void *, size_t);
> > + int (*set) (struct inode *, char *, void *, size_t);
> What is the distinction between "set" and "replace" or "set" and "create"?
+#define EA_CREATE 0x0001 /* Set the value: fail if attr already exists */
+#define EA_REPLACE 0x0002 /* Set the value: fail if attr does not exist */
Whereas "set" is simply set the named attribute value, creating the
attribute if need be, replacing the value if the attribute exists,
and then return success.
The man pages on AndreasG's site go into more detail, but decribe
the original interface which Al didn't like. I haven't created an
updated man page yet, because I'm still not sure if this interface
is quite what Al was looking for either... (Al?)
> ... why are there not just
> flags to distinguish the two, but also separate VFS operations?
A VFS flags parameter could allow an individual filesystem to extend
the semantics of the set operation in new ways by adding new flags -
I think Al wanted to avoid the possibility of that ever happening,
which seems fair enough.