libfdatetime(3)

πŸ“¦ in opensuse-leap 16.0

πŸ‘‘ libfdatetime(3) β€” Library Functions Manual, but make it make sense

okay so bestie, this is the page for libfdatetime.h β€” like, the whole library. It's filed under Library Functions Manual in the libfdatetime(3) slot, and it is genuinely a LOT, so we're doing this in parts. Grab a strawberry drink πŸ“ and let's go.


🌸 NAME

libfdatetime.h β€” the library that supports a whole bunch of different date and time formats πŸ’–


✨ SYNOPSIS

First things first, you gotta invite the library in:

#include <libfdatetime.h>

🫢 Support functions

The little housekeeping bestie. This is where you ask the library who it is:

const char *
libfdatetime_get_version(void);

πŸ’€ Error functions

Every function in here hands you back an int and takes a libfdatetime_error_t **error β€” so yeah, error handling is a whole thing, and these four are how you actually deal with it. Free it, print it, sprint it into a string, or do the backtrace version of the same thing:

void
libfdatetime_error_free(libfdatetime_error_t **error);

int
libfdatetime_error_fprint(libfdatetime_error_t *error, FILE *stream);

int
libfdatetime_error_sprint(libfdatetime_error_t *error, char *string,
    size_t size);

int
libfdatetime_error_backtrace_fprint(libfdatetime_error_t *error,
    FILE *stream);

int
libfdatetime_error_backtrace_sprint(libfdatetime_error_t *error,
    char *string, size_t size);

πŸŽ€ FAT date and time functions

the FAT era. iconic. each of these takes a libfdatetime_fat_date_time_t and does exactly one (1) thing to it:

int
libfdatetime_fat_date_time_initialize(libfdatetime_fat_date_time_t **fat_date_time,
    libfdatetime_error_t **error);

int
libfdatetime_fat_date_time_free(libfdatetime_fat_date_time_t **fat_date_time,
    libfdatetime_error_t **error);

int
libfdatetime_fat_date_time_copy_from_byte_stream(libfdatetime_fat_date_time_t *fat_date_time,
    const uint8_t *byte_stream, size_t byte_stream_size, int byte_order,
    libfdatetime_error_t **error);

int
libfdatetime_fat_date_time_copy_from_32bit(libfdatetime_fat_date_time_t *fat_date_time,
    uint32_t value_32bit, libfdatetime_error_t **error);

int
libfdatetime_fat_date_time_copy_to_32bit(libfdatetime_fat_date_time_t *fat_date_time,
    uint32_t *value_32bit, libfdatetime_error_t **error);

int
libfdatetime_fat_date_time_get_string_size(libfdatetime_fat_date_time_t *fat_date_time,
    size_t *string_size, uint32_t string_format_flags,
    libfdatetime_error_t **error);

int
libfdatetime_fat_date_time_copy_to_utf8_string(libfdatetime_fat_date_time_t *fat_date_time,
    uint8_t *utf8_string, size_t utf8_string_size,
    uint32_t string_format_flags, libfdatetime_error_t **error);

int
libfdatetime_fat_date_time_copy_to_utf8_string_with_index(libfdatetime_fat_date_time_t *fat_date_time,
    uint8_t *utf8_string, size_t utf8_string_size,
    size_t *utf8_string_index, uint32_t string_format_flags,
    libfdatetime_error_t **error);

int
libfdatetime_fat_date_time_copy_to_utf16_string(libfdatetime_fat_date_time_t *fat_date_time,
    uint16_t *utf16_string, size_t utf16_string_size,
    uint32_t string_format_flags, libfdatetime_error_t **error);

int
libfdatetime_fat_date_time_copy_to_utf16_string_with_index(libfdatetime_fat_date_time_t *fat_date_time,
    uint16_t *utf16_string, size_t utf16_string_size,
    size_t *utf16_string_index, uint32_t string_format_flags,
    libfdatetime_error_t **error);

int
libfdatetime_fat_date_time_copy_to_utf32_string(libfdatetime_fat_date_time_t *fat_date_time,
    uint32_t *utf32_string, size_t utf32_string_size,
    uint32_t string_format_flags, libfdatetime_error_t **error);

int
libfdatetime_fat_date_time_copy_to_utf32_string_with_index(libfdatetime_fat_date_time_t *fat_date_time,
    uint32_t *utf32_string, size_t utf32_string_size,
    size_t *utf32_string_index, uint32_t string_format_flags,
    libfdatetime_error_t **error);

πŸ¦‹ FILETIME functions

same energy, Windows-flavoured. note the _add one β€” yes, you can literally add two filetimes together, she's flexible like that:

int
libfdatetime_filetime_initialize(libfdatetime_filetime_t **filetime,
    libfdatetime_error_t **error);

int
libfdatetime_filetime_free(libfdatetime_filetime_t **filetime,
    libfdatetime_error_t **error);

int
libfdatetime_filetime_add(libfdatetime_filetime_t *filetime,
    libfdatetime_filetime_t *additional_filetime,
    libfdatetime_error_t **error);

int
libfdatetime_filetime_copy_from_byte_stream(libfdatetime_filetime_t *filetime,
    const uint8_t *byte_stream, size_t byte_stream_size, int byte_order,
    libfdatetime_error_t **error);

int
libfdatetime_filetime_copy_from_64bit(libfdatetime_filetime_t *filetime,
    uint64_t value_64bit, libfdatetime_error_t **error);

int
libfdatetime_filetime_copy_to_64bit(libfdatetime_filetime_t *filetime,
    uint64_t *value_64bit, libfdatetime_error_t **error);

int
libfdatetime_filetime_get_string_size(libfdatetime_filetime_t *filetime,
    size_t *string_size, uint32_t string_format_flags,
    libfdatetime_error_t **error);

int
libfdatetime_filetime_copy_to_utf8_string(libfdatetime_filetime_t *filetime,
    uint8_t *utf8_string, size_t utf8_string_size,
    uint32_t string_format_flags, libfdatetime_error_t **error);

int
libfdatetime_filetime_copy_to_utf8_string_with_index(libfdatetime_filetime_t *filetime,
    uint8_t *utf8_string, size_t utf8_string_size,
    size_t *utf8_string_index, uint32_t string_format_flags,
    libfdatetime_error_t **error);

int
libfdatetime_filetime_copy_to_utf16_string(libfdatetime_filetime_t *filetime,
    uint16_t *utf16_string, size_t utf16_string_size,
    uint32_t string_format_flags, libfdatetime_error_t **error);

int
libfdatetime_filetime_copy_to_utf16_string_with_index(libfdatetime_filetime_t *filetime,
    uint16_t *utf16_string, size_t utf16_string_size,
    size_t *utf16_string_index, uint32_t string_format_flags,
    libfdatetime_error_t **error);

int
libfdatetime_filetime_copy_to_utf32_string(libfdatetime_filetime_t *filetime,
    uint32_t *utf32_string, size_t utf32_string_size,
    uint32_t string_format_flags, libfdatetime_error_t **error);

int
libfdatetime_filetime_copy_to_utf32_string_with_index(libfdatetime_filetime_t *filetime,
    uint32_t *utf32_string, size_t utf32_string_size,
    size_t *utf32_string_index, uint32_t string_format_flags,
    libfdatetime_error_t **error);

🌈 Floatingtime functions

floating time πŸ’… no timezone, no fixed anchor, she floats. very main character. same 32/64-bit dance and the whole utf8/utf16/utf32 string set:

int
libfdatetime_floatingtime_initialize(libfdatetime_floatingtime_t **floatingtime,
    libfdatetime_error_t **error);

int
libfdatetime_floatingtime_free(libfdatetime_floatingtime_t **floatingtime,
    libfdatetime_error_t **error);

int
libfdatetime_floatingtime_copy_from_byte_stream(libfdatetime_floatingtime_t *floatingtime,
    const uint8_t *byte_stream, size_t byte_stream_size, int byte_order,
    libfdatetime_error_t **error);

int
libfdatetime_floatingtime_copy_from_64bit(libfdatetime_floatingtime_t *floatingtime,
    uint64_t value_64bit, libfdatetime_error_t **error);

int
libfdatetime_floatingtime_copy_to_64bit(libfdatetime_floatingtime_t *floatingtime,
    uint64_t *value_64bit, libfdatetime_error_t **error);

int
libfdatetime_floatingtime_get_string_size(libfdatetime_floatingtime_t *floatingtime,
    size_t *string_size, uint32_t string_format_flags,
    libfdatetime_error_t **error);

int
libfdatetime_floatingtime_copy_to_utf8_string(libfdatetime_floatingtime_t *floatingtime,
    uint8_t *utf8_string, size_t utf8_string_size,
    uint32_t string_format_flags, libfdatetime_error_t **error);

int
libfdatetime_floatingtime_copy_to_utf8_string_with_index(libfdatetime_floatingtime_t *floatingtime,
    uint8_t *utf8_string, size_t utf8_string_size,
    size_t *utf8_string_index, uint32_t string_format_flags,
    libfdatetime_error_t **error);

int
libfdatetime_floatingtime_copy_to_utf16_string(libfdatetime_floatingtime_t *floatingtime,
    uint16_t *utf16_string, size_t utf16_string_size,
    uint32_t string_format_flags, libfdatetime_error_t **error);

int
libfdatetime_floatingtime_copy_to_utf16_string_with_index(libfdatetime_floatingtime_t *floatingtime,
    uint16_t *utf16_string, size_t utf16_string_size,
    size_t *utf16_string_index, uint32_t string_format_flags,
    libfdatetime_error_t **error);

int
libfdatetime_floatingtime_copy_to_utf32_string(libfdatetime_floatingtime_t *floatingtime,
    uint32_t *utf32_string, size_t utf32_string_size,
    uint32_t string_format_flags, libfdatetime_error_t **error);

int
libfdatetime_floatingtime_copy_to_utf32_string_with_index(libfdatetime_floatingtime_t *floatingtime,
    uint32_t *utf32_string, size_t utf32_string_size,
    size_t *utf32_string_index, uint32_t string_format_flags,
    libfdatetime_error_t **error);

πŸ“ HFS time functions

Apple said "we'll do our own epoch" and honestly? okay. same setup, 32-bit flavoured since that's what HFS gives you:

int
libfdatetime_hfs_time_initialize(libfdatetime_hfs_time_t **hfs_time,
    libfdatetime_error_t **error);

int
libfdatetime_hfs_time_free(libfdatetime_hfs_time_t **hfs_time,
    libfdatetime_error_t **error);

int
libfdatetime_hfs_time_copy_from_byte_stream(libfdatetime_hfs_time_t *hfs_time,
    const uint8_t *byte_stream, size_t byte_stream_size, int byte_order,
    libfdatetime_error_t **error);

int
libfdatetime_hfs_time_copy_from_32bit(libfdatetime_hfs_time_t *hfs_time,
    uint32_t value_32bit, libfdatetime_error_t **error);

int
libfdatetime_hfs_time_copy_to_32bit(libfdatetime_hfs_time_t *hfs_time,
    uint32_t *value_32bit, libfdatetime_error_t **error);

int
libfdatetime_hfs_time_get_string_size(libfdatetime_hfs_time_t *hfs_time,
    size_t *string_size, uint32_t string_format_flags,
    libfdatetime_error_t **error);

int
libfdatetime_hfs_time_copy_to_utf8_string(libfdatetime_hfs_time_t *hfs_time,
    uint8_t *utf8_string, size_t utf8_string_size,
    uint32_t string_format_flags, libfdatetime_error_t **error);

int
libfdatetime_hfs_time_copy_to_utf8_string_with_index(libfdatetime_hfs_time_t *hfs_time,
    uint8_t *utf8_string, size_t utf8_string_size,
    size_t *utf8_string_index, uint32_t string_format_flags,
    libfdatetime_error_t **error);

int
libfdatetime_hfs_time_copy_to_utf16_string(libfdatetime_hfs_time_t *hfs_time,
    uint16_t *utf16_string, size_t utf16_string_size,
    uint32_t string_format_flags, libfdatetime_error_t **error);

int
libfdatetime_hfs_time_copy_to_utf16_string_with_index(libfdatetime_hfs_time_t *hfs_time,
    uint16_t *utf16_string, size_t utf16_string_size,
    size_t *utf16_string_index, uint32_t string_format_flags,
    libfdatetime_error_t **error);

int
libfdatetime_hfs_time_copy_to_utf32_string(libfdatetime_hfs_time_t *hfs_time,
    uint32_t *utf32_string, size_t utf32_string_size,
    uint32_t string_format_flags, libfdatetime_error_t **error);

int
libfdatetime_hfs_time_copy_to_utf32_string_with_index(libfdatetime_hfs_time_t *hfs_time,
    uint32_t *utf32_string, size_t utf32_string_size,
    size_t *utf32_string_index, uint32_t string_format_flags,
    libfdatetime_error_t **error);

🧚 NSF timedate functions

and now the NSF one, which has two halves of one time value (date + time, hence "timedate" β€” she's not like the other girls). we're starting her off here:

int
libfdatetime_nsf_timedate_initialize(libfdatetime_nsf_timedate_t **nsf_timedate,
    libfdatetime_error_t **error);

int
libfdatetime_nsf_timedate_free(libfdatetime_nsf_timedate_t **nsf_timedate,
    libfdatetime_error_t **error);

int
libfdatetime_nsf_timedate_copy_from_byte_stream(libfdatetime_nsf_timedate_t *nsf_timedate,
    const uint8_t *byte_stream, size_t byte_stream_size, int byte_order,
    libfdatetime_error_t **error);

…and the synopsis very much keeps going, so hold that thought, bestie πŸ’œ

…and the <pink>nsf_timedate</pink> crew keeps going, bestie, no days off:

int
libfdatetime_nsf_timedate_copy_from_64bit(libfdatetime_nsf_timedate_t *nsf_timedate,
    uint64_t value_64bit, libfdatetime_error_t **error);

int
libfdatetime_nsf_timedate_copy_to_64bit(libfdatetime_nsf_timedate_t *nsf_timedate,
    uint64_t *value_64bit, libfdatetime_error_t **error);

int
libfdatetime_nsf_timedate_get_string_size(libfdatetime_nsf_timedate_t *nsf_timedate,
    size_t *string_size, uint32_t string_format_flags,
    libfdatetime_error_t **error);

int
libfdatetime_nsf_timedate_copy_to_utf8_string(libfdatetime_nsf_timedate_t *nsf_timedate,
    uint8_t *utf8_string, size_t utf8_string_size,
    uint32_t string_format_flags, libfdatetime_error_t **error);

int
libfdatetime_nsf_timedate_copy_to_utf8_string_with_index(libfdatetime_nsf_timedate_t *nsf_timedate,
    uint8_t *utf8_string, size_t utf8_string_size,
    size_t *utf8_string_index, uint32_t string_format_flags,
    libfdatetime_error_t **error);

int
libfdatetime_nsf_timedate_copy_to_utf16_string(libfdatetime_nsf_timedate_t *nsf_timedate,
    uint16_t *utf16_string, size_t utf16_string_size,
    uint32_t string_format_flags, libfdatetime_error_t **error);

int
libfdatetime_nsf_timedate_copy_to_utf16_string_with_index(libfdatetime_nsf_timedate_t *nsf_timedate,
    uint16_t *utf16_string, size_t utf16_string_size,
    size_t *utf16_string_index, uint32_t string_format_flags,
    libfdatetime_error_t **error);

int
libfdatetime_nsf_timedate_copy_to_utf32_string(libfdatetime_nsf_timedate_t *nsf_timedate,
    uint32_t *utf32_string, size_t utf32_string_size,
    uint32_t string_format_flags, libfdatetime_error_t **error);

int
libfdatetime_nsf_timedate_copy_to_utf32_string_with_index(libfdatetime_nsf_timedate_t *nsf_timedate,
    uint32_t *utf32_string, size_t utf32_string_size,
    size_t *utf32_string_index, uint32_t string_format_flags,
    libfdatetime_error_t **error);

πŸ’œ POSIX time functions

Okay so this is the <cyan>posix_time</cyan> set, and it's giving full glow-up energy β€” initialize, free, byte streams, 32-bit, 64-bit, and the whole utf8/utf16/utf32 text lineup:

int
libfdatetime_posix_time_initialize(libfdatetime_posix_time_t **posix_time,
    libfdatetime_error_t **error);

int
libfdatetime_posix_time_free(libfdatetime_posix_time_t **posix_time,
    libfdatetime_error_t **error);

int
libfdatetime_posix_time_copy_from_byte_stream(libfdatetime_posix_time_t *posix_time,
    const uint8_t *byte_stream, size_t byte_stream_size, int byte_order,
    uint8_t value_type, libfdatetime_error_t **error);

int
libfdatetime_posix_time_copy_from_32bit(libfdatetime_posix_time_t *posix_time,
    uint32_t value_32bit, uint8_t value_type,
    libfdatetime_error_t **error);

int
libfdatetime_posix_time_copy_to_32bit(libfdatetime_posix_time_t *posix_time,
    uint32_t *value_32bit, uint8_t *value_type,
    libfdatetime_error_t **error);

int
libfdatetime_posix_time_copy_from_64bit(libfdatetime_posix_time_t *posix_time,
    uint64_t value_64bit, uint8_t value_type,
    libfdatetime_error_t **error);

int
libfdatetime_posix_time_copy_to_64bit(libfdatetime_posix_time_t *posix_time,
    uint64_t *value_64bit, uint8_t *value_type,
    libfdatetime_error_t **error);

int
libfdatetime_posix_time_get_string_size(libfdatetime_posix_time_t *posix_time,
    size_t *string_size, uint32_t string_format_flags,
    libfdatetime_error_t **error);

int
libfdatetime_posix_time_copy_to_utf8_string(libfdatetime_posix_time_t *posix_time,
    uint8_t *utf8_string, size_t utf8_string_size,
    uint32_t string_format_flags, libfdatetime_error_t **error);

int
libfdatetime_posix_time_copy_to_utf8_string_with_index(libfdatetime_posix_time_t *posix_time,
    uint8_t *utf8_string, size_t utf8_string_size,
    size_t *utf8_string_index, uint32_t string_format_flags,
    libfdatetime_error_t **error);

int
libfdatetime_posix_time_copy_to_utf16_string(libfdatetime_posix_time_t *posix_time,
    uint16_t *utf16_string, size_t utf16_string_size,
    uint32_t string_format_flags, libfdatetime_error_t **error);

int
libfdatetime_posix_time_copy_to_utf16_string_with_index(libfdatetime_posix_time_t *posix_time,
    uint16_t *utf16_string, size_t utf16_string_size,
    size_t *utf16_string_index, uint32_t string_format_flags,
    libfdatetime_error_t **error);

int
libfdatetime_posix_time_copy_to_utf32_string(libfdatetime_posix_time_t *posix_time,
    uint32_t *utf32_string, size_t utf32_string_size,
    uint32_t string_format_flags, libfdatetime_error_t **error);

int
libfdatetime_posix_time_copy_to_utf32_string_with_index(libfdatetime_posix_time_t *posix_time,
    uint32_t *utf32_string, size_t utf32_string_size,
    size_t *utf32_string_index, uint32_t string_format_flags,
    libfdatetime_error_t **error);

πŸ¦‹ Systemtime functions

And last but absolutely not least, <purple>systemtime</purple> β€” the Windows-flavoured one ✨ She's got initialize, free, a byte-stream reader, and the full string squad (size getter + utf8/utf16/utf32, with and without index, iconic behaviour):

int
libfdatetime_systemtime_initialize(libfdatetime_systemtime_t **systemtime,
    libfdatetime_error_t **error);

int
libfdatetime_systemtime_free(libfdatetime_systemtime_t **systemtime,
    libfdatetime_error_t **error);

int
libfdatetime_systemtime_copy_from_byte_stream(libfdatetime_systemtime_t *systemtime,
    const uint8_t *byte_stream, size_t byte_stream_size, int byte_order,
    libfdatetime_error_t **error);

int
libfdatetime_systemtime_get_string_size(libfdatetime_systemtime_t *systemtime,
    size_t *string_size, uint32_t string_format_flags,
    libfdatetime_error_t **error);

int
libfdatetime_systemtime_copy_to_utf8_string(libfdatetime_systemtime_t *systemtime,
    uint8_t *utf8_string, size_t utf8_string_size,
    uint32_t string_format_flags, libfdatetime_error_t **error);

int
libfdatetime_systemtime_copy_to_utf8_string_with_index(libfdatetime_systemtime_t *systemtime,
    uint8_t *utf8_string, size_t utf8_string_size,
    size_t *utf8_string_index, uint32_t string_format_flags,
    libfdatetime_error_t **error);

int
libfdatetime_systemtime_copy_to_utf16_string(libfdatetime_systemtime_t *systemtime,
    uint16_t *utf16_string, size_t utf16_string_size,
    uint32_t string_format_flags, libfdatetime_error_t **error);

int
libfdatetime_systemtime_copy_to_utf16_string_with_index(libfdatetime_systemtime_t *systemtime,
    uint16_t *utf16_string, size_t utf16_string_size,
    size_t *utf16_string_index, uint32_t string_format_flags,
    libfdatetime_error_t **error);

int
libfdatetime_systemtime_copy_to_utf32_string(libfdatetime_systemtime_t *systemtime,
    uint32_t *utf32_string, size_t utf32_string_size,
    uint32_t string_format_flags, libfdatetime_error_t **error);

int
libfdatetime_systemtime_copy_to_utf32_string_with_index(libfdatetime_systemtime_t *systemtime,
    uint32_t *utf32_string, size_t utf32_string_size,
    size_t *utf32_string_index, uint32_t string_format_flags,
    libfdatetime_error_t **error);
Yes, that's a lot of functions. Yes, they're all listed. No, we did not skip a single one, bestie. πŸ’…

🌸 DESCRIPTION

Okay so real talk β€” the whole star of the description show here is libfdatetime_get_version(), and her one job is retrieving the library version. That's it. That's the function. Short and slay. πŸŽ€


⭐ RETURN VALUES

The vibe check here: most of these functions return <red>NULL</red> or <red>-1</red> when something goes wrong β€” which one you get depends on the return type, obviously.

Want the actual, specific return values for each function? Go look at libfdatetime.h. The header is the source of truth, no cap. πŸ‘‘

🧚 ENVIRONMENT

None. Nothing. Zero environment variables. The environment section is chilling at home, respectfully. πŸ™ˆ


πŸ“ FILES

None. Also nothing. No files for you. 🌈


πŸ’€ BUGS

Found a bug? Any kind? Doesn't matter how big or small, she wants to know. Report it on the project issue tracker:

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

Do it. Be a good citizen. The maintainers will thank you for it. 🫢


πŸ‘‘ AUTHOR

These man pages are generated from libfdatetime.h. That's who's responsible for all this text β€” the header file itself. Iconic lol. ✨


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

This is free software; see the source for copying conditions. There is <red>NO</red> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

So like, for real, absolutely no promises that this thing does anything useful. That's the deal. Read the source for the actual fine print. πŸ’–

πŸ”₯ SEE ALSO

  • the libfdatetime.h include file

Alright bestie, that's the whole page β€” every option, every signature, every line, all of it intact πŸ’… We only changed the vibe, never the facts.

This little beauty comes from <bold>libfdatetime</bold>, and it's dated March 24, 2019`. Go forth and parse them timestamps πŸ¦‹βœ¨