libfsext(3)

πŸ“¦
this version Β· 2 versions
, in debian trixie, opensuse-leap 16.0, ubuntu questing, ubuntu resolute, ubuntu stonking

πŸ¦‹ libfsext(3) β€” Library Functions Manual πŸ¦‹

okay so bestie, gather round, because this is the manual for libfsext β€” the library that knows everything about the Extended File System (ext) format, and I'm gonna walk you through it like we're texting at 2am πŸ’–


✨ NAME ✨

libfsext.h β€” bestie, it's literally the library that supports the Extended File System (ext) format. that's it. that's the vibe. πŸ’…


🌸 SYNOPSIS 🌸

first things first, you gotta pull it in:

#include <libfsext.h>

then, buckle up, there's a whole roster of functions below. group-chat incoming 🫢

πŸ’– Support functions

const char *
libfsext_get_version(void);

int
libfsext_get_access_flags_read(void);

int
libfsext_get_codepage(int *codepage, libfsext_error_t **error);

int
libfsext_set_codepage(int codepage, libfsext_error_t **error);

int
libfsext_check_volume_signature(const char *filename,
    libfsext_error_t **error);

Available when compiled with wide character string support:

int
libfsext_check_volume_signature_wide(const wchar_t *filename,
    libfsext_error_t **error);

Available when compiled with libbfio support:

int
libfsext_check_volume_signature_file_io_handle(libbfio_handle_t *file_io_handle,
    libfsext_error_t **error);

πŸ’– Notify functions

void
libfsext_notify_set_verbose(int verbose);

int
libfsext_notify_set_stream(FILE *stream, libfsext_error_t **error);

int
libfsext_notify_stream_open(const char *filename,
    libfsext_error_t **error);

int
libfsext_notify_stream_close(libfsext_error_t **error);

πŸ’– Error functions

void
libfsext_error_free(libfsext_error_t **error);

int
libfsext_error_fprint(libfsext_error_t *error, FILE *stream);

int
libfsext_error_sprint(libfsext_error_t *error, char *string,
    size_t size);

int
libfsext_error_backtrace_fprint(libfsext_error_t *error, FILE *stream);

int
libfsext_error_backtrace_sprint(libfsext_error_t *error, char *string,
    size_t size);

πŸ’– Volume functions

int
libfsext_volume_initialize(libfsext_volume_t **volume,
    libfsext_error_t **error);

int
libfsext_volume_free(libfsext_volume_t **volume,
    libfsext_error_t **error);

int
libfsext_volume_signal_abort(libfsext_volume_t *volume,
    libfsext_error_t **error);

int
libfsext_volume_open(libfsext_volume_t *volume, const char *filename,
    int access_flags, libfsext_error_t **error);

int
libfsext_volume_close(libfsext_volume_t *volume,
    libfsext_error_t **error);

int
libfsext_volume_get_format_version(libfsext_volume_t *volume,
    uint8_t *format_version, libfsext_error_t **error);

int
libfsext_volume_get_features_flags(libfsext_volume_t *volume,
    uint32_t *compatible_features_flags,
    uint32_t *incompatible_features_flags,
    uint32_t *read_only_compatible_features_flags,
    libfsext_error_t **error);

int
libfsext_volume_get_identifier(libfsext_volume_t *volume,
    uint8_t *uuid_data, size_t uuid_data_size,
    libfsext_error_t **error);

int
libfsext_volume_get_utf8_label_size(libfsext_volume_t *volume,
    size_t *utf8_string_size, libfsext_error_t **error);

int
libfsext_volume_get_utf8_label(libfsext_volume_t *volume,
    uint8_t *utf8_string, size_t utf8_string_size,
    libfsext_error_t **error);

int
libfsext_volume_get_utf16_label_size(libfsext_volume_t *volume,
    size_t *utf16_string_size, libfsext_error_t **error);

int
libfsext_volume_get_utf16_label(libfsext_volume_t *volume,
    uint16_t *utf16_string, size_t utf16_string_size,
    libfsext_error_t **error);

int
libfsext_volume_get_utf8_last_mount_path_size(libfsext_volume_t *volume,
    size_t *utf8_string_size, libfsext_error_t **error);

int
libfsext_volume_get_utf8_last_mount_path(libfsext_volume_t *volume,
    uint8_t *utf8_string, size_t utf8_string_size,
    libfsext_error_t **error);

int
libfsext_volume_get_utf16_last_mount_path_size(libfsext_volume_t *volume,
    size_t *utf16_string_size, libfsext_error_t **error);

int
libfsext_volume_get_utf16_last_mount_path(libfsext_volume_t *volume,
    uint16_t *utf16_string, size_t utf16_string_size,
    libfsext_error_t **error);

int
libfsext_volume_get_last_mount_time(libfsext_volume_t *volume,
    int32_t *posix_time, libfsext_error_t **error);

int
libfsext_volume_get_last_written_time(libfsext_volume_t *volume,
    int32_t *posix_time, libfsext_error_t **error);

int
libfsext_volume_get_root_directory(libfsext_volume_t *volume,
    libfsext_file_entry_t **file_entry, libfsext_error_t **error);

int
libfsext_volume_get_number_of_file_entries(libfsext_volume_t *volume,
    uint32_t *number_of_file_entries, libfsext_error_t **error);

int
libfsext_volume_get_file_entry_by_inode(libfsext_volume_t *volume,
    uint32_t inode_number, libfsext_file_entry_t **file_entry,
    libfsext_error_t **error);

int
libfsext_volume_get_file_entry_by_utf8_path(libfsext_volume_t *volume,
    const uint8_t *utf8_string, size_t utf8_string_length,
    libfsext_file_entry_t **file_entry, libfsext_error_t **error);

int
libfsext_volume_get_file_entry_by_utf16_path(libfsext_volume_t *volume,
    const uint16_t *utf16_string, size_t utf16_string_length,
    libfsext_file_entry_t **file_entry, libfsext_error_t **error);

Available when compiled with wide character string support:

int
libfsext_volume_open_wide(libfsext_volume_t *volume,
    const wchar_t *filename, int access_flags,
    libfsext_error_t **error);

Available when compiled with libbfio support:

int
libfsext_volume_open_file_io_handle(libfsext_volume_t *volume,
    libbfio_handle_t *file_io_handle, int access_flags,
    libfsext_error_t **error);

πŸ’– File entry functions

int
libfsext_file_entry_free(libfsext_file_entry_t **file_entry,
    libfsext_error_t **error);

int
libfsext_file_entry_is_empty(libfsext_file_entry_t *file_entry,
    libfsext_error_t **error);

int
libfsext_file_entry_get_inode_number(libfsext_file_entry_t *file_entry,
    uint32_t *inode_number, libfsext_error_t **error);

int
libfsext_file_entry_get_access_time(libfsext_file_entry_t *file_entry,
    int64_t *posix_time, libfsext_error_t **error);

int
libfsext_file_entry_get_creation_time(libfsext_file_entry_t *file_entry,
    int64_t *posix_time, libfsext_error_t **error);

int
libfsext_file_entry_get_inode_change_time(libfsext_file_entry_t *file_entry,
    int64_t *posix_time, libfsext_error_t **error);

int
libfsext_file_entry_get_modification_time(libfsext_file_entry_t *file_entry,
    int64_t *posix_time, libfsext_error_t **error);

int
libfsext_file_entry_get_deletion_time(libfsext_file_entry_t *file_entry,
    int32_t *posix_time, libfsext_error_t **error);

int
libfsext_file_entry_get_file_mode(libfsext_file_entry_t *file_entry,
    uint16_t *file_mode, libfsext_error_t **error);

int
libfsext_file_entry_get_number_of_links(libfsext_file_entry_t *file_entry,
    uint16_t *number_of_links, libfsext_error_t **error);

int
libfsext_file_entry_get_owner_identifier(libfsext_file_entry_t *file_entry,
    uint32_t *owner_identifier, libfsext_error_t **error);

int
libfsext_file_entry_get_group_identifier(libfsext_file_entry_t *file_entry,
    uint32_t *group_identifier, libfsext_error_t **error);

int
libfsext_file_entry_get_device_identifier(libfsext_file_entry_t *file_entry,
    uint32_t *device_identifier, libfsext_error_t **error);

int
libfsext_file_entry_get_device_number(libfsext_file_entry_t *file_entry,
    uint8_t *major_device_number, uint8_t *minor_device_number,
    libfsext_error_t **error);

int
libfsext_file_entry_get_utf8_name_size(libfsext_file_entry_t *file_entry,
    size_t *utf8_string_size, libfsext_error_t **error);

int
libfsext_file_entry_get_utf8_name(libfsext_file_entry_t *file_entry,
    uint8_t *utf8_string, size_t utf8_string_size,
    libfsext_error_t **error);

int
libfsext_file_entry_get_utf16_name_size(libfsext_file_entry_t *file_entry,
    size_t *utf16_string_size, libfsext_error_t **error);

int
libfsext_file_entry_get_utf16_name(libfsext_file_entry_t *file_entry,
    uint16_t *utf16_string, size_t utf16_string_size,
    libfsext_error_t **error);

int
libfsext_file_entry_get_utf8_symbolic_link_target_size(libfsext_file_entry_t *file_entry,
    size_t *utf8_string_size, libfsext_error_t **error);

int
libfsext_file_entry_get_utf8_symbolic_link_target(libfsext_file_entry_t *file_entry,
    uint8_t *utf8_string, size_t utf8_string_size,
    libfsext_error_t **error);

int
libfsext_file_entry_get_utf16_symbolic_link_target_size(libfsext_file_entry_t *file_entry,
    size_t *utf16_string_size, libfsext_error_t **error);

int
libfsext_file_entry_get_utf16_symbolic_link_target(libfsext_file_entry_t *file_entry,
    uint16_t *utf16_string, size_t utf16_string_size,
    libfsext_error_t **error);

int
libfsext_file_entry_get_number_of_extended_attributes(libfsext_file_entry_t *file_entry,
    int *number_of_extended_attributes, libfsext_error_t **error);

int
libfsext_file_entry_get_extended_attribute_by_index(libfsext_file_entry_t *file_entry,
    int extended_attribute_index,
    libfsext_extended_attribute_t **extended_attribute,
    libfsext_error_t **error);

int
libfsext_file_entry_has_extended_attribute_by_utf8_name(libfsext_file_entry_t *file_entry,
    const uint8_t *utf8_string, size_t utf8_string_length,
    libfsext_error_t **error);

int
libfsext_file_entry_has_extended_attribute_by_utf16_name(libfsext_file_entry_t *file_entry,
    const uint16_t *utf16_string, size_t utf16_string_length,
    libfsext_error_t **error);

int
libfsext_file_entry_get_extended_attribute_by_utf8_name(libfsext_file_entry_t *file_entry,
    const uint8_t *utf8_string, size_t utf8_string_length,
    libfsext_extended_attribute_t **extended_attribute,
    libfsext_error_t **error);

int
libfsext_file_entry_get_extended_attribute_by_utf16_name(libfsext_file_entry_t *file_entry,
    const uint16_t *utf16_string, size_t utf16_string_length,
    libfsext_extended_attribute_t **extended_attribute,
    libfsext_error_t **error);

int
libfsext_file_entry_get_number_of_sub_file_entries(libfsext_file_entry_t *file_entry,
    int *number_of_sub_entries, libfsext_error_t **error);

int
libfsext_file_entry_get_sub_file_entry_by_index(libfsext_file_entry_t *file_entry,
    int sub_file_entry_index, libfsext_file_entry_t **sub_file_entry,
    libfsext_error_t **error);

int
libfsext_file_entry_get_sub_file_entry_by_utf8_name(libfsext_file_entry_t *file_entry,
    const uint8_t *utf8_string, size_t utf8_string_length,
    libfsext_file_entry_t **sub_file_entry, libfsext_error_t **error);

okay bestie that's the roster so far πŸ‘‘ and no, we are not done β€” there's literally more coming, so don't close the tab, stay perched, the rest of this manual is on the way πŸ¦‹βœ¨

…and here's the rest of the lineup, bestie, still all in libfsext.h πŸ’…

int
libfsext_file_entry_get_sub_file_entry_by_utf16_name(libfsext_file_entry_t *file_entry,
    const uint16_t *utf16_string, size_t utf16_string_length,
    libfsext_file_entry_t **sub_file_entry, libfsext_error_t **error);

ssize_t
libfsext_file_entry_read_buffer(libfsext_file_entry_t *file_entry,
    void *buffer, size_t buffer_size, libfsext_error_t **error);

ssize_t
libfsext_file_entry_read_buffer_at_offset(libfsext_file_entry_t *file_entry,
    void *buffer, size_t buffer_size, off64_t offset,
    libfsext_error_t **error);

off64_t
libfsext_file_entry_seek_offset(libfsext_file_entry_t *file_entry,
    off64_t offset, int whence, libfsext_error_t **error);

int
libfsext_file_entry_get_offset(libfsext_file_entry_t *file_entry,
    off64_t *offset, libfsext_error_t **error);

int
libfsext_file_entry_get_size(libfsext_file_entry_t *file_entry,
    size64_t *size, libfsext_error_t **error);

int
libfsext_file_entry_get_number_of_extents(libfsext_file_entry_t *file_entry,
    int *number_of_extents, libfsext_error_t **error);

int
libfsext_file_entry_get_extent_by_index(libfsext_file_entry_t *file_entry,
    int extent_index, off64_t *extent_offset, size64_t *extent_size,
    uint32_t *extent_flags, libfsext_error_t **error);

✨ Extended attribute functions πŸŽ€

okay so extended attributes get their own little clique and honestly? they ate. every single one of them takes a libfsext_extended_attribute_t *extended_attribute and a libfsext_error_t **error, no cap:

int
libfsext_extended_attribute_free(libfsext_extended_attribute_t **extended_attribute,
    libfsext_error_t **error);

int
libfsext_extended_attribute_get_utf8_name_size(libfsext_extended_attribute_t *extended_attribute,
    size_t *utf8_string_size, libfsext_error_t **error);

int
libfsext_extended_attribute_get_utf8_name(libfsext_extended_attribute_t *extended_attribute,
    uint8_t *utf8_string, size_t utf8_string_size,
    libfsext_error_t **error);

int
libfsext_extended_attribute_get_utf16_name_size(libfsext_extended_attribute_t *extended_attribute,
    size_t *utf16_string_size, libfsext_error_t **error);

int
libfsext_extended_attribute_get_utf16_name(libfsext_extended_attribute_t *extended_attribute,
    uint16_t *utf16_string, size_t utf16_string_size,
    libfsext_error_t **error);

ssize_t
libfsext_extended_attribute_read_buffer(libfsext_extended_attribute_t *extended_attribute,
    void *buffer, size_t buffer_size, libfsext_error_t **error);

ssize_t
libfsext_extended_attribute_read_buffer_at_offset(libfsext_extended_attribute_t *extended_attribute,
    void *buffer, size_t buffer_size, off64_t offset,
    libfsext_error_t **error);

off64_t
libfsext_extended_attribute_seek_offset(libfsext_extended_attribute_t *extended_attribute,
    off64_t offset, int whence, libfsext_error_t **error);

int
libfsext_extended_attribute_get_offset(libfsext_extended_attribute_t *extended_attribute,
    off64_t *offset, libfsext_error_t **error);

int
libfsext_extended_attribute_get_size(libfsext_extended_attribute_t *extended_attribute,
    size64_t *size, libfsext_error_t **error);

int
libfsext_extended_attribute_get_number_of_extents(libfsext_extended_attribute_t *extended_attribute,
    int *number_of_extents, libfsext_error_t **error);

int
libfsext_extended_attribute_get_extent_by_index(libfsext_extended_attribute_t *extended_attribute,
    int extent_index, off64_t *extent_offset, size64_t *extent_size,
    uint32_t *extent_flags, libfsext_error_t **error);

🌸 DESCRIPTION 🌸

so like, the one job of libfsext_get_version() is to hand you back the library version. that's it. that's the whole paragraph. lowkey iconic for being so unbothered πŸ’…


πŸ’– RETURN VALUES πŸ’–

okay bestie this is the part where it gets a liiiiittle chaotic: most of the functions return NULL or -1 when things go wrong, and which one you get depends on the return type. πŸ™ˆ

and if you want the actual, real, no-vibes-just-facts return values? go read libfsext.h. it's all in there, iykyk.


πŸ¦‹ ENVIRONMENT πŸ¦‹

None πŸ’€

like literally none. nothing to set up, nothing to export. flawless behaviour honestly.


πŸŽ€ FILES πŸŽ€

None ✨

no files. none. a clean slate, a blank canvas, main character energy.


πŸ‘‘ NOTES πŸ‘‘

okay so here's the tea 🍡 β€” libfsext can be compiled with wide character support (wchar_t). fancy!

if you wanna build it that way, you have options (picky queen):

  • use ./configure --enable-wide-character-type=yes
  • or define _UNICODE
  • or define UNICODE

…during compilation, obviously. pick your fighter 🫢

and then, once it's built, LIBSEXT... wait no β€” LIBFSEXT_WIDE_CHARACTER_TYPE πŸ’… β€” which lives in libfsext/features.h β€” is the thing you check to figure out whether libfsext was compiled with wide character support or not. it's giving "she'll tell you if you ask nicely" ⭐


πŸ’€ BUGS πŸ’€

found a bug? a glitch? something cursed? please please please report bugs of any kind on the project issue tracker, we're begging πŸ™

https://github.com/libyal/libfsext/issues

no bug too small, fr fr. we want them all πŸ“


🌈 AUTHOR 🌈

these man pages are generated from libfsext.h. so if the prose feels a lil machine-made... that's because it literally is 🧚


Copyright (C) 2010-2024, Joachim Metz <joachim.metz@gmail.com>.

this is free software; see the source for copying conditions. and bestie, listen: there is NO warranty β€” not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. none. zero. zilch. it's giving "you're on your own, good luck, mwah" πŸ˜­πŸ’–


πŸ”₯ SEE ALSO πŸ”₯

  • the libfsext.h include file β€” the source of truth, the blueprint, the moment πŸ‘‘

that's a wrap, bestie πŸŽ€ this page is stamped August 28, 2022 and it rides under the name libfsext(3) β€” go forth and read some ext filesystems, you absolute icon πŸ’…βœ¨πŸ¦‹

πŸ“¦ where this page comes from