libfdatetime(3)
π 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
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.hinclude 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 π¦β¨
π¦ where this page comes from
- opensuse-leap 16.0: libfdatetime-devel 20240415-bp160.1.11 Β· LGPL-3.0-or-later
- opensuse-leap 16.0: libfdatetime-devel 20240415-bp160.1.11 Β· LGPL-3.0-or-later
- opensuse-leap 16.0: libfdatetime-devel 20240415-bp160.1.11 Β· LGPL-3.0-or-later
- opensuse-leap 16.0: libfdatetime-devel 20240415-bp160.1.11 Β· LGPL-3.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms