doc: update backend API

- Add doc for the `bookmark_get` function.
- Update doc for the `bookmark_list` function.
This commit is contained in:
CismonX 2025-02-03 18:02:59 +08:00
parent 1d1ff58aa4
commit f92054bdf5
No known key found for this signature in database
GPG key ID: 3094873E29A482FB

View file

@ -2067,6 +2067,8 @@ Value of @code{id} is unspecified.
@item callback @item callback
Function to be called for each object found under the directory. Function to be called for each object found under the directory.
If @code{NULL}, @code{bookmark_list} should return immediately
without changing current position.
Ordering of the objects should follow the ordering of which they appear Ordering of the objects should follow the ordering of which they appear
in the browser. in the browser.
@ -2175,6 +2177,125 @@ If returning a negative value, the position of the current
@code{bookmark_list} operation is unspecified. @code{bookmark_list} operation is unspecified.
@node Get Bookmark Content
@subsection Get Bookmark Content
The @code{bookmark_get} function is called to get the content or
extended attribute value of a bookmark.
The ``content'' of a bookmark is equivalent to the content of a regular file
on a BookmarkFS filesystem that refers to a bookmark.
@xref{Bookmarks}.
Type of the @code{bookmark_get} function is defined as:
@example c
typedef int (bookmarkfs_bookmark_get_func) (
void *backend_ctx,
uint64_t id,
char const *attr_key,
bookmarkfs_bookmark_get_cb *callback,
void *user_data,
void **cookie_ptr
);
@end example
Function arguments:
@table @code
@item backend_ctx
The pointer referring to the backend context.
@item id
ID of the bookmark (could be a bookmark folder if @code{attr_key}
is not @code{NULL}).
@item attr_key
Name of an extended attribute.
If not @code{NULL}, @code{attr_key} is guaranteed to be a NUL-terminated
string, and the function should get the corresponding extended attribute value
instead of the bookmark content.
@item callback
Function to be called for the required bookmark data.
It is guaranteed not to be @code{NULL}.
Type of the @code{callback} function is defined as:
@example c
typedef int (bookmarkfs_bookmark_get_cb) (
void *user_data,
void const *value,
size_t value_len
);
@end example
Function arguments:
@table @code
@item user_data
Must be equal to the @code{user_data} argument value of the current
@code{bookmark_get} call.
@item value
Bookmark content (or extended attribute) data.
Must not be @code{NULL}.
It may contain arbitrary bytes, and only need to be valid until the
@code{callback} function returns.
@item value_len
Length of @code{value} in bytes.
@end table
The function returns @t{0} on success.
Otherwise, the function returns a nagated @code{errno} which should be
used as the return value for the current @code{bookmark_get} call.
@item user_data
An opaque pointer which should be passed as-is to the @code{callback} function.
@item cookie_ptr
Pointer to the ``cookie'' for the current @code{bookmark_get} operation.
@code{NULL} if not used by the caller.
The “cookie” is an opaque pointer which stores internal states
for subsequent operations on the same bookmark (and @code{attr_key})
to determine whether the corresponding data has changed.
If the value pointered to by @code{cookie_ptr} is @code{NULL},
it indicates that this is an initial operation.
If the backend supports watching for changes of bookmark content,
it may set the value to a pointer which is not @code{NULL}.
The backend must not change the cookie value.
@end table
On success, the function should return @t{0}.
Otherwise, it should return a negated @code{errno} indicating the error
encountered.
Notable error codes:
@table @code
@item EAGAIN
Bookmark data has not been changed @emph{externally} since
the last call to @code{bookmark_get} with the same cookie.
If this error code is returned, @code{callback} must not be called.
``Externally'' means that the modification comes from another process
which has access to the bookmark storage.
In exclusive mode, this is not expected to happen, and @code{bookmark_list}
is always called with a @code{cookie_ptr} of @code{NULL} value.
If changes cannot be detected in an efficient way, false positives are
acceptable.
False negatives are also acceptable for a short time duration
(preferably no more than a few seconds).
@end table
@node Create Bookmark Storage @node Create Bookmark Storage
@subsection Create Bookmark Storage @subsection Create Bookmark Storage