aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMattias Andrée <maandree@operamail.com>2015-11-25 11:46:10 +0100
committerMattias Andrée <maandree@operamail.com>2015-11-25 11:46:10 +0100
commit9537d8e087731fc6d6de22d29b2dccda572d7f06 (patch)
tree138e08037c8dad2b455a04bd5f972c03ddc2cff2
parentslibc-print does not define NULL (diff)
downloadslibc-9537d8e087731fc6d6de22d29b2dccda572d7f06.tar.gz
slibc-9537d8e087731fc6d6de22d29b2dccda572d7f06.tar.bz2
slibc-9537d8e087731fc6d6de22d29b2dccda572d7f06.tar.xz
tell in doc in which version things were introduced
Signed-off-by: Mattias Andrée <maandree@operamail.com>
-rw-r--r--include/alloca.h2
-rw-r--r--include/assert.h8
-rw-r--r--include/bits/types.h68
-rw-r--r--include/ctype.h68
-rw-r--r--include/err.h24
-rw-r--r--include/errno.h6
-rw-r--r--include/error.h14
-rw-r--r--include/inttypes.h314
-rw-r--r--include/iso646.h22
-rw-r--r--include/libgen.h6
-rw-r--r--include/malloc.h26
-rw-r--r--include/slibc-alloc.h50
-rw-r--r--include/slibc-error.h12
-rw-r--r--include/slibc-human.h54
-rw-r--r--include/slibc-print.h24
-rw-r--r--include/slibc/version.h16
-rw-r--r--include/stdalign.h4
-rw-r--r--include/stdarg.h10
-rw-r--r--include/stdbool.h8
-rw-r--r--include/stddef.h4
-rw-r--r--include/stdint.h122
-rw-r--r--include/stdio.h152
-rw-r--r--include/stdlib.h30
-rw-r--r--include/stdnoreturn.h2
-rw-r--r--include/string.h138
-rw-r--r--include/strings.h26
-rw-r--r--include/sys/stat.h12
-rw-r--r--include/unistd.h50
-rw-r--r--include/wchar.h128
-rw-r--r--src/ctype.c36
-rw-r--r--src/err/err.c2
-rw-r--r--src/err/errx.c2
-rw-r--r--src/err/verr.c2
-rw-r--r--src/err/verrx.c2
-rw-r--r--src/err/vwarn.c2
-rw-r--r--src/err/vwarnx.c2
-rw-r--r--src/err/warn.c2
-rw-r--r--src/err/warnx.c2
-rw-r--r--src/errno/variables.c4
-rw-r--r--src/error/error.c2
-rw-r--r--src/error/error_at_line.c2
-rw-r--r--src/error/variables.c6
-rw-r--r--src/error/verror.c2
-rw-r--r--src/error/verror_at_line.c2
-rw-r--r--src/inttypes/imaxabs.c2
-rw-r--r--src/inttypes/imaxdiv.c2
-rw-r--r--src/libgen/basename_xpg.c2
-rw-r--r--src/libgen/cleanname.c2
-rw-r--r--src/libgen/dirname.c2
-rw-r--r--src/malloc.c26
-rw-r--r--src/slibc-alloc.c26
-rw-r--r--src/slibc-error.c2
-rw-r--r--src/slibc-human/escape.c2
-rw-r--r--src/slibc-human/humanmode.c2
-rw-r--r--src/slibc-human/humansize.c2
-rw-r--r--src/slibc-human/machinemode.c2
-rw-r--r--src/slibc-human/unescape.c2
-rw-r--r--src/slibc-print.c8
-rw-r--r--src/stdio/printf.c72
-rw-r--r--src/stdio/scanf.c74
-rw-r--r--src/stdlib/abs/abs.c2
-rw-r--r--src/stdlib/abs/labs.c2
-rw-r--r--src/stdlib/abs/llabs.c2
-rw-r--r--src/stdlib/abspath.c2
-rw-r--r--src/stdlib/atof.c2
-rw-r--r--src/stdlib/atoi.c2
-rw-r--r--src/stdlib/atol.c2
-rw-r--r--src/stdlib/atoll.c2
-rw-r--r--src/stdlib/atoq.c2
-rw-r--r--src/stdlib/div/div.c2
-rw-r--r--src/stdlib/div/ldiv.c2
-rw-r--r--src/stdlib/div/lldiv.c2
-rw-r--r--src/stdlib/relpath.c2
-rw-r--r--src/string/basename_gnu.c2
-rw-r--r--src/string/mem/memcasecmp.c2
-rw-r--r--src/string/mem/memcasemem.c2
-rw-r--r--src/string/mem/memccpy.c2
-rw-r--r--src/string/mem/memchr.c2
-rw-r--r--src/string/mem/memcmove.c2
-rw-r--r--src/string/mem/memcmp.c2
-rw-r--r--src/string/mem/memcpy.c2
-rw-r--r--src/string/mem/memdup.c2
-rw-r--r--src/string/mem/memmem.c2
-rw-r--r--src/string/mem/memmove.c2
-rw-r--r--src/string/mem/mempcpy.c2
-rw-r--r--src/string/mem/mempmove.c2
-rw-r--r--src/string/mem/memrchr.c2
-rw-r--r--src/string/mem/memset.c2
-rw-r--r--src/string/mem/rawmemchr.c2
-rw-r--r--src/string/memfrob.c2
-rw-r--r--src/string/new.c12
-rw-r--r--src/string/str/rawstrcasestr.c2
-rw-r--r--src/string/str/rawstrstr.c2
-rw-r--r--src/string/str/stpcpy.c2
-rw-r--r--src/string/str/stpmove.c2
-rw-r--r--src/string/str/strcasecmp.c2
-rw-r--r--src/string/str/strcaseends.c2
-rw-r--r--src/string/str/strcasestarts.c2
-rw-r--r--src/string/str/strcasestr.c2
-rw-r--r--src/string/str/strcat.c2
-rw-r--r--src/string/str/strccpy.c2
-rw-r--r--src/string/str/strchr.c2
-rw-r--r--src/string/str/strchrnul.c2
-rw-r--r--src/string/str/strcmove.c2
-rw-r--r--src/string/str/strcmp.c2
-rw-r--r--src/string/str/strcpy.c2
-rw-r--r--src/string/str/strcspn.c2
-rw-r--r--src/string/str/strdup.c2
-rw-r--r--src/string/str/strends.c2
-rw-r--r--src/string/str/strlen.c2
-rw-r--r--src/string/str/strmove.c2
-rw-r--r--src/string/str/strpbrk.c2
-rw-r--r--src/string/str/strrchr.c2
-rw-r--r--src/string/str/strsep.c2
-rw-r--r--src/string/str/strset.c2
-rw-r--r--src/string/str/strspn.c2
-rw-r--r--src/string/str/strstarts.c2
-rw-r--r--src/string/str/strstr.c2
-rw-r--r--src/string/str/strstrcpy.c2
-rw-r--r--src/string/str/strstrmove.c2
-rw-r--r--src/string/str/strtok.c2
-rw-r--r--src/string/str/strtok_r.c2
-rw-r--r--src/string/strerror/strerror.c2
-rw-r--r--src/string/strerror/strerror_l.c2
-rw-r--r--src/string/strerror/strerror_r_gnu.c2
-rw-r--r--src/string/strerror/strerror_r_xsi.c2
-rw-r--r--src/string/strfry.c2
-rw-r--r--src/string/strn/stpncpy.c2
-rw-r--r--src/string/strn/stpnmove.c2
-rw-r--r--src/string/strn/strcncpy.c2
-rw-r--r--src/string/strn/strcnmove.c2
-rw-r--r--src/string/strn/strncasecmp.c2
-rw-r--r--src/string/strn/strncasestr.c2
-rw-r--r--src/string/strn/strncat.c2
-rw-r--r--src/string/strn/strncmp.c2
-rw-r--r--src/string/strn/strncpy.c2
-rw-r--r--src/string/strn/strndup.c2
-rw-r--r--src/string/strn/strnlen.c2
-rw-r--r--src/string/strn/strnmove.c2
-rw-r--r--src/string/strn/strnstr.c2
-rw-r--r--src/string/strn/strstrncpy.c2
-rw-r--r--src/string/strn/strstrnmove.c2
-rw-r--r--src/strings/bcmp.c2
-rw-r--r--src/strings/bcopy.c2
-rw-r--r--src/strings/bzero.c2
-rw-r--r--src/strings/explicit_bzero.c2
-rw-r--r--src/strings/ffs.c2
-rw-r--r--src/strings/ffsl.c2
-rw-r--r--src/strings/ffsll.c2
-rw-r--r--src/strings/index.c2
-rw-r--r--src/strings/rindex.c2
-rw-r--r--src/unistd/exec.c20
-rw-r--r--src/unistd/execat.c20
-rw-r--r--src/unistd/fexec.c12
-rw-r--r--src/wchar/rawwcscasestr.c2
-rw-r--r--src/wchar/rawwcsstr.c2
-rw-r--r--src/wchar/rawwmemchr.c2
-rw-r--r--src/wchar/wcpcpy.c2
-rw-r--r--src/wchar/wcpmove.c2
-rw-r--r--src/wchar/wcpncpy.c2
-rw-r--r--src/wchar/wcpnmove.c2
-rw-r--r--src/wchar/wcscasecmp.c2
-rw-r--r--src/wchar/wcscaseends.c2
-rw-r--r--src/wchar/wcscasestarts.c2
-rw-r--r--src/wchar/wcscasestr.c2
-rw-r--r--src/wchar/wcscat.c2
-rw-r--r--src/wchar/wcsccpy.c2
-rw-r--r--src/wchar/wcschr.c2
-rw-r--r--src/wchar/wcschrnul.c2
-rw-r--r--src/wchar/wcscmove.c2
-rw-r--r--src/wchar/wcscmp.c2
-rw-r--r--src/wchar/wcscncpy.c2
-rw-r--r--src/wchar/wcscnmove.c2
-rw-r--r--src/wchar/wcscpy.c2
-rw-r--r--src/wchar/wcscspn.c2
-rw-r--r--src/wchar/wcsdup.c2
-rw-r--r--src/wchar/wcsends.c2
-rw-r--r--src/wchar/wcslen.c2
-rw-r--r--src/wchar/wcsmove.c2
-rw-r--r--src/wchar/wcsncasecmp.c2
-rw-r--r--src/wchar/wcsncasestr.c2
-rw-r--r--src/wchar/wcsncat.c2
-rw-r--r--src/wchar/wcsncmp.c2
-rw-r--r--src/wchar/wcsncpy.c2
-rw-r--r--src/wchar/wcsndup.c2
-rw-r--r--src/wchar/wcsnlen.c2
-rw-r--r--src/wchar/wcsnmove.c2
-rw-r--r--src/wchar/wcsnstr.c2
-rw-r--r--src/wchar/wcspbrk.c2
-rw-r--r--src/wchar/wcsrchr.c2
-rw-r--r--src/wchar/wcssep.c2
-rw-r--r--src/wchar/wcsset.c2
-rw-r--r--src/wchar/wcsspn.c2
-rw-r--r--src/wchar/wcsstarts.c2
-rw-r--r--src/wchar/wcsstr.c2
-rw-r--r--src/wchar/wcsstrcpy.c2
-rw-r--r--src/wchar/wcsstrmove.c2
-rw-r--r--src/wchar/wcsstrncpy.c2
-rw-r--r--src/wchar/wcsstrnmove.c2
-rw-r--r--src/wchar/wcstok.c2
-rw-r--r--src/wchar/wcswcs.c2
-rw-r--r--src/wchar/wmemcasecmp.c2
-rw-r--r--src/wchar/wmemcasemem.c2
-rw-r--r--src/wchar/wmemccpy.c2
-rw-r--r--src/wchar/wmemchr.c2
-rw-r--r--src/wchar/wmemcmove.c2
-rw-r--r--src/wchar/wmemcmp.c2
-rw-r--r--src/wchar/wmemcpy.c2
-rw-r--r--src/wchar/wmemdup.c2
-rw-r--r--src/wchar/wmemmem.c2
-rw-r--r--src/wchar/wmemmove.c2
-rw-r--r--src/wchar/wmempcpy.c2
-rw-r--r--src/wchar/wmempmove.c2
-rw-r--r--src/wchar/wmemrchr.c2
-rw-r--r--src/wchar/wmemset.c2
215 files changed, 2053 insertions, 11 deletions
diff --git a/include/alloca.h b/include/alloca.h
index a800cf0..a660f1e 100644
--- a/include/alloca.h
+++ b/include/alloca.h
@@ -43,6 +43,8 @@
* @return Pointer to the beginning of the allocated
* space. Do not free it, it will be freed
* automatically when the function returns.
+ *
+ * @since Always.
*/
void* alloca(size_t);
#if defined(__GNUC__)
diff --git a/include/assert.h b/include/assert.h
index 4523860..5330df9 100644
--- a/include/assert.h
+++ b/include/assert.h
@@ -37,6 +37,8 @@
* to save CPU-cycles.
*
* @etymology (Assert)ion.
+ *
+ * @since Always.
*/
#ifdef NDEBUG
# define assert(expression) ((void)0)
@@ -59,6 +61,8 @@
* @etymology (`assert`) version of (`perror`).
*
* @param errnum:int The error code, describing the error that occurred.
+ *
+ * @since Always.
*/
# ifdef assert_perror
# undef assert_perror
@@ -92,6 +96,8 @@
*
* @param expression:scalar The expression to evaluate.
* @param message:const char* The message to print on error.
+ *
+ * @since Always.
*/
# define static_assert _Static_assert
#endif
@@ -106,6 +112,8 @@
* @param line The line in the source code whence the assertion was made.
* @param func The function in the source code whence the assertion was made,
* `NULL` if unknown (C99 is required.)
+ *
+ * @since Always.
*/
__noreturn void __assert_fail(const char*, int, const char*, int, const char*)
__GCC_ONLY(__attribute__((__nonnull__(3, 5))));
diff --git a/include/bits/types.h b/include/bits/types.h
index 0cb83a4..8a91846 100644
--- a/include/bits/types.h
+++ b/include/bits/types.h
@@ -63,6 +63,8 @@
/**
* Signed integer type of the result of subtracting two pointers.
* May not be greater than the width of type `long int`.
+ *
+ * @since Always.
*/
#if defined(__NEED_ptrdiff_t) && !defined(__DEFINED_ptrdiff_t)
# define __DEFINED_ptrdiff_t
@@ -72,6 +74,8 @@ typedef signed __LIMITED_PTR_INT ptrdiff_t;
/**
* Unsigned version of `ptrdiff_t`
+ *
+ * @since Always.
*/
#if defined(__NEED_uptrdiff_t) && !defined(__DEFINED_uptrdiff_t)
# define __DEFINED_uptrdiff_t
@@ -95,6 +99,8 @@ typedef unsigned __LIMITED_PTR_INT uptrdiff_t;
* it is implementation specific and may depend on the
* libc implementation, the version of the libc implementation,
* and the microarchitecture.
+ *
+ * @since Always.
*/
# if defined(__NEED_wchar_t) && !defined(__DEFINED_wchar_t)
# define __DEFINED_wchar_t
@@ -129,6 +135,8 @@ typedef __WCHAR_SIGNNESS __INT64 wchar_t
* it is implementation specific and may depend on the
* libc implementation, the version of the libc implementation,
* and the microarchitecture.
+ *
+ * @since Always.
*/
# if defined(__NEED_wint_t) && !defined(__DEFINED_wint_t)
# define __DEFINED_wint_t
@@ -142,6 +150,8 @@ typedef wchar_t wint_t
* Unsigned integer type of the result of the
* `sizeof` operator. May not be greater than the
* width of type `long int`.
+ *
+ * @since Always.
*/
#if defined(__NEED_size_t) && !defined(__DEFINED_size_t)
# define __DEFINED_size_t
@@ -151,6 +161,8 @@ typedef unsigned __LIMITED_PTR_INT size_t;
/**
* Signed version of `size_t`
+ *
+ * @since Always.
*/
#if defined(__NEED_ssize_t) && !defined(__DEFINED_ssize_t)
# define __DEFINED_ssize_t
@@ -161,6 +173,8 @@ typedef signed __LIMITED_PTR_INT ssize_t;
/**
* A type, of unspecified construct, whose alignment requirement
* is at least as strict as that of every scalar type.
+ *
+ * @since Always.
*/
#if defined(__NEED_max_align_t) && !defined(__DEFINED_max_align_t)
# define __DEFINED_max_align_t
@@ -176,6 +190,8 @@ typedef struct
* Signed exact-width integer types.
*
* These types are guaranteed to use two's complement.
+ *
+ * @since Always.
*/
#if defined(__NEED_intN_t) && !defined(__DEFINED_intN_t)
# define __DEFINED_intN_t
@@ -188,6 +204,8 @@ typedef signed __INT64 int64_t;
/**
* Unsigned exact-width integer types.
+ *
+ * @since Always.
*/
#if defined(__NEED_uintN_t) && !defined(__DEFINED_uintN_t)
# define __DEFINED_uintN_t
@@ -204,6 +222,8 @@ typedef unsigned __INT64 uint64_t;
*
* `int_least8_t`, `int_least16_t`, `int_least32_t`, and
* `int_least64_t` are guaranteed to be defined.
+ *
+ * @since Always.
*/
#if defined(__NEED_int_leastN_t) && !defined(__DEFINED_int_leastN_t)
# define __DEFINED_int_leastN_t
@@ -220,6 +240,8 @@ typedef signed __INT64 int_least64_t;
*
* `uint_least8_t`, `uint_least16_t`, `uint_least32_t`, and
* `uint_least64_t` are guaranteed to be defined.
+ *
+ * @since Always.
*/
#if defined(__NEED_uint_leastN_t) && !defined(__DEFINED_uint_leastN_t)
# define __DEFINED_uint_leastN_t
@@ -240,6 +262,8 @@ typedef unsigned __INT64 uint_least64_t;
* in serialised/marshalled data, as they may depend
* on the C library the program is compiled against
* and the version of that library.
+ *
+ * @since Always.
*/
#if defined(__NEED_int_fastN_t) && !defined(__DEFINED_int_fastN_t)
# define __DEFINED_int_fastN_t
@@ -260,6 +284,8 @@ typedef signed __INT_FAST64 int_fast64_t;
* in serialised/marshalled data, as they may depend
* on the C library the program is compiled against
* and the version of that library.
+ *
+ * @since Always.
*/
#if defined(__NEED_uint_fastN_t) && !defined(__DEFINED_uint_fastN_t)
# define __DEFINED_uint_fastN_t
@@ -272,6 +298,8 @@ typedef unsigned __INT_FAST64 uint_fast64_t;
/**
* The widest signed integer type available.
+ *
+ * @since Always.
*/
#if defined(__NEED_intmax_t) && !defined(__DEFINED_intmax_t)
# define __DEFINED_intmax_t
@@ -284,6 +312,8 @@ typedef signed __INT64 intmax_t;
/**
* The widest unsigned integer type available.
+ *
+ * @since Always.
*/
#if defined(__NEED_uintmax_t) && !defined(__DEFINED_uintmax_t)
# define __DEFINED_uintmax_t
@@ -299,6 +329,8 @@ typedef unsigned __INT64 uintmax_t;
* It may be defined as volatile, slibc does not do
* this however because it is good practice to do
* so explcitily when using the `sig_atomic_t` type.
+ *
+ * @since Always.
*/
#if defined(__NEED_sig_atomic_t) && !defined(__DEFINED_sig_atomic_t)
# define __DEFINED_sig_atomic_t
@@ -313,6 +345,8 @@ typedef int sig_atomic_t;
* A structure than holds both the quotient and
* the remainer in an integer division, of
* `int` type.
+ *
+ * @since Always.
*/
#if defined(__NEED_div_t) && !defined(__DEFINED_div_t)
# define __DEFINED_div_t
@@ -335,6 +369,8 @@ typedef struct {
* A structure than holds both the quotient and
* the remainer in an integer division, of
* `long int` type.
+ *
+ * @since Always.
*/
#if defined(__NEED_ldiv_t) && !defined(__DEFINED_ldiv_t)
# define __DEFINED_ldiv_t
@@ -357,6 +393,8 @@ typedef struct {
* A structure than holds both the quotient and
* the remainer in an integer division, of
* `long long int` type.
+ *
+ * @since Always.
*/
#if defined(__NEED_lldiv_t) && !defined(__DEFINED_lldiv_t)
# define __DEFINED_lldiv_t
@@ -379,6 +417,8 @@ typedef struct {
* A structure than holds both the quotient and
* the remainer in an integer division, of
* `intmax_t` type.
+ *
+ * @since Always.
*/
#if defined(__NEED_imaxdiv_t) && !defined(__DEFINED_imaxdiv_t)
# define __DEFINED_imaxdiv_t
@@ -399,6 +439,8 @@ typedef struct {
/**
* Locale datatype.
+ *
+ * @since Always.
*/
#if defined(__NEED_locale_t) && !defined(__DEFINED_locale_t)
# define __DEFINED_locale_t
@@ -411,6 +453,8 @@ typedef int locale_t; /* TODO not implemented */
/**
* State of variadic argument-reading.
+ *
+ * @since Always.
*/
#define __ONLY_va_list
# include <stdarg.h>
@@ -419,6 +463,8 @@ typedef int locale_t; /* TODO not implemented */
/**
* Datatype for file permissions and file type.
+ *
+ * @since Always.
*/
#if defined(__NEED_mode_t) && !defined(__DEFINED_mode_t)
# define __DEFINED_mode_t
@@ -428,6 +474,8 @@ typedef unsigned int mode_t;
/**
* Datatype for process identifiers.
+ *
+ * @since Always.
*/
#if defined(__NEED_pid_t) && !defined(__DEFINED_pid_t)
# define __DEFINED_pid_t
@@ -437,6 +485,8 @@ typedef signed int pid_t;
/**
* Datatype for user identifiers.
+ *
+ * @since Always.
*/
#if defined(__NEED_uid_t) && !defined(__DEFINED_uid_t)
# define __DEFINED_uid_t
@@ -446,6 +496,8 @@ typedef unsigned int uid_t;
/**
* Datatype for group identifiers.
+ *
+ * @since Always.
*/
#if defined(__NEED_gid_t) && !defined(__DEFINED_gid_t)
# define __DEFINED_gid_t
@@ -457,6 +509,8 @@ typedef unsigned int gid_t;
* Datatype for microseconds.
* (The name should be 'µseconds', but we are limited
* to ASCII and 'u' looks similar to 'µ'.)
+ *
+ * @since Always.
*/
#if defined(__NEED_useconds_t) && !defined(__DEFINED_useconds_t)
# define __DEFINED_useconds_t
@@ -466,6 +520,8 @@ typedef signed long useconds_t;
/**
* Datatype for file offsets.
+ *
+ * @since Always.
*/
#if defined(__NEED_off_t) && !defined(__DEFINED_off_t)
# define __DEFINED_off_t
@@ -477,6 +533,8 @@ typedef signed __INT64 off_t;
* Datatype for inode identifiers, the number identifying
* a file on a filesystem.
* ('inode' is probably a contraction of 'index node'.)
+ *
+ * @since Always.
*/
#if defined(__NEED_ino_t) && !defined(__DEFINED_ino_t)
# define __DEFINED_ino_t
@@ -486,6 +544,8 @@ typedef unsigned __INT64 ino_t;
/**
* Datatype for device identifiers.
+ *
+ * @since Always.
*/
#if defined(__NEED_dev_t) && !defined(__DEFINED_dev_t)
# define __DEFINED_dev_t
@@ -495,6 +555,8 @@ typedef unsigned __INT64 dev_t;
/**
* Datatype for filesystem block counts.
+ *
+ * @since Always.
*/
#if defined(__NEED_fsblkcnt_t) && !defined(__DEFINED_fsblkcnt_t)
# define __DEFINED_fsblkcnt_t
@@ -504,6 +566,8 @@ typedef unsigned __INT64 fsblkcnt_t;
/**
* Datatype for filesystem file counts.
+ *
+ * @since Always.
*/
#if defined(__NEED_fsfilcnt_t) && !defined(__DEFINED_fsfilcnt_t)
# define __DEFINED_fsfilcnt_t
@@ -513,6 +577,8 @@ typedef unsigned __INT64 fsfilcnt_t;
/**
* Datatype for block sizes.
+ *
+ * @since Always.
*/
#if defined(__NEED_blksize_t) && !defined(__DEFINED_blksize_t)
# define __DEFINED_blksize_t
@@ -522,6 +588,8 @@ typedef signed __LIMITED_PTR_INT blksize_t;
/**
* Datatype for block counts.
+ *
+ * @since Always.
*/
#if defined(__NEED_blkcnt_t) && !defined(__DEFINED_blkcnt_t)
# define __DEFINED_blkcnt_t
diff --git a/include/ctype.h b/include/ctype.h
index 9b6508c..ec715d8 100644
--- a/include/ctype.h
+++ b/include/ctype.h
@@ -41,6 +41,8 @@
* @param c The character.
* @return Whether the character is in
* ['0', '9'], ['A', 'Z'], or ['a', 'z'].
+ *
+ * @since Always.
*/
int (isalnum)(int) /* [0x30, 0x39], [0x41, 0x5A], [0x61, 0x7A] */
__GCC_ONLY(__attribute__((__const__)));
@@ -58,6 +60,8 @@ int (isalnum)(int) /* [0x30, 0x39], [0x41, 0x5A], [0x61, 0x7A] */
* @param c The character.
* @return Whether the character is in
* ['A', 'Z'] or ['a', 'z'].
+ *
+ * @since Always.
*/
int (isalpha)(int) /* [0x41, 0x5A], [0x61, 0x7A] */
__GCC_ONLY(__attribute__((__const__)));
@@ -75,6 +79,8 @@ int (isalpha)(int) /* [0x41, 0x5A], [0x61, 0x7A] */
*
* @param c The character.
* @return Whether the character is a ' ' or a '\t'.
+ *
+ * @since Always.
*/
int (isblank)(int) /* ' ', '\t' */
__GCC_ONLY(__attribute__((__const__)));
@@ -94,6 +100,8 @@ int (isblank)(int) /* ' ', '\t' */
* @param c The character.
* @return Whether the character is lower than ' ',
* or is 0x7F.
+ *
+ * @since Always.
*/
int (iscntrl)(int) /* [0x00, 0x1F], 0x7F */
__GCC_ONLY(__attribute__((__const__)));
@@ -110,6 +118,8 @@ int (iscntrl)(int) /* [0x00, 0x1F], 0x7F */
*
* @param c The character.
* @return Whether the character is in ['0', '9'].
+ *
+ * @since Always.
*/
int (isdigit)(int) /* [0x30, 0x39] */
__GCC_ONLY(__attribute__((__const__)));
@@ -124,6 +134,8 @@ int (isdigit)(int) /* [0x30, 0x39] */
* @param c The character.
* @return Whether the character is greater
* than ' ', but is not 0x7F.
+ *
+ * @since Always.
*/
int (isgraph)(int) /* [0x21, 0x7E] */
__GCC_ONLY(__attribute__((__const__)));
@@ -138,6 +150,8 @@ int (isgraph)(int) /* [0x21, 0x7E] */
*
* @param c The character.
* @return Whether the character is in ['a', 'z'].
+ *
+ * @since Always.
*/
int (islower)(int) /* [0x61, 0x7A] */
__GCC_ONLY(__attribute__((__const__)));
@@ -153,6 +167,8 @@ int (islower)(int) /* [0x61, 0x7A] */
* @param c The character.
* @return Whether the character is at least
* as great as ' ', but is not 0x7F.
+ *
+ * @since Always.
*/
int (isprint)(int) /* [0x20, 0x7E] */
__GCC_ONLY(__attribute__((__const__)));
@@ -168,6 +184,8 @@ int (isprint)(int) /* [0x20, 0x7E] */
*
* @param c The character.
* @return Whether the character is a punctuation.
+ *
+ * @since Always.
*/
int (ispunct)(int) /* isprint && !isalnum && !isspace */
__GCC_ONLY(__attribute__((__const__)));
@@ -185,6 +203,8 @@ int (ispunct)(int) /* isprint && !isalnum && !isspace */
* @param c The character.
* @return Whether the character is a ' ', '\f',
* '\n', '\r', '\t', or '\v'.
+ *
+ * @since Always.
*/
int (isspace)(int) /* 0x20, [0x09, 0x0D] */
__GCC_ONLY(__attribute__((__const__)));
@@ -202,6 +222,8 @@ int (isspace)(int) /* 0x20, [0x09, 0x0D] */
*
* @param c The character.
* @return Whether the character is in ['A', 'Z'].
+ *
+ * @since Always.
*/
int (isupper)(int) /* [0x41, 0x5A] */
__GCC_ONLY(__attribute__((__const__)));
@@ -218,6 +240,8 @@ int (isupper)(int) /* [0x41, 0x5A] */
* @param c The character.
* @return Whether the character is in
* ['0', '9'], ['A', 'Z'], or ['a', 'z'].
+ *
+ * @since Always.
*/
int (isxdigit)(int) /* [0x30, 0x39], [0x41, 0x46], [0x61, 0x66] */
__GCC_ONLY(__attribute__((__const__)));
@@ -243,6 +267,8 @@ int (isxdigit)(int) /* [0x30, 0x39], [0x41, 0x46], [0x61, 0x66] */
* @return The character in lowercase.
* Guaranteed to be unchanged if the
* character already is in lowercase.
+ *
+ * @since Always.
*/
int (tolower)(int) /* [0x41, 0x5A] -> [0x61, 0x7A] */
__GCC_ONLY(__attribute__((__const__)));
@@ -263,6 +289,8 @@ int (tolower)(int) /* [0x41, 0x5A] -> [0x61, 0x7A] */
* @return The character in uppercase.
* Guaranteed to be unchanged if the
* character already is in lowercase.
+ *
+ * @since Always.
*/
int (toupper)(int) /* [0x61, 0x7A] -> [0x41, 0x5A] */
__GCC_ONLY(__attribute__((__const__)));
@@ -277,6 +305,8 @@ int (toupper)(int) /* [0x61, 0x7A] -> [0x41, 0x5A] */
*
* @param c The character
* @return Whether the character is an ASCII character.
+ *
+ * @since Always.
*/
int (isascii)(int) /* [0x00, 0x7E] */
__GCC_ONLY(__attribute__((__const__)));
@@ -296,6 +326,8 @@ int (isascii)(int) /* [0x00, 0x7E] */
*
* @param c The character.
* @return The character with the 8:th bit cleared.
+ *
+ * @since Always.
*/
int (toascii)(int)
__warning("Using 'toascii' is, generally, unwise.")
@@ -307,6 +339,8 @@ int (toascii)(int)
/**
* This function is identical to `tolower`.
* It is provided for backwards-compatibility with SVID.
+ *
+ * @since Always.
*/
int _tolower(int)
__deprecated("Use 'tolower' instead.")
@@ -315,6 +349,8 @@ int _tolower(int)
/**
* This function is identical to `tolower`.
* It is provided for backwards-compatibility with SVID.
+ *
+ * @since Always.
*/
int _toupper(int)
__deprecated("Use 'toupper' instead.")
@@ -332,6 +368,8 @@ int _toupper(int)
* @param locale The locale.
* @return Whether the character is
* alphabetical or numerical.
+ *
+ * @since Always.
*/
int isalnum_l(int, locale_t)
__warning("This function is dangerous, use 'iswalnum_l' instead.")
@@ -345,6 +383,8 @@ int isalnum_l(int, locale_t)
* @param c The character.
* @param locale The locale.
* @return Whether the character is alphabetical.
+ *
+ * @since Always.
*/
int isalpha_l(int, locale_t)
__warning("This function is dangerous, use 'iswalpha_l' instead.")
@@ -362,6 +402,8 @@ int isalpha_l(int, locale_t)
* @param c The character.
* @param locale The locale.
* @return Whether the character is a ' ' or a '\t'.
+ *
+ * @since Always.
*/
int isblank_l(int, locale_t)
__warning("This function is dangerous, use 'iswblank_l' instead.")
@@ -377,6 +419,8 @@ int isblank_l(int, locale_t)
* @param c The character.
* @param locale The locale.
* @return Whether the character is non-printable.
+ *
+ * @since Always.
*/
int iscntrl_l(int, locale_t)
__warning("This function is dangerous, use 'iswcntrl_l' instead.")
@@ -390,6 +434,8 @@ int iscntrl_l(int, locale_t)
* @param c The character.
* @param locale The locale.
* @return Whether the character is numerical.
+ *
+ * @since Always.
*/
int isdigit_l(int, locale_t)
__warning("This function is dangerous, use 'iswdigit_l' instead.")
@@ -403,6 +449,8 @@ int isdigit_l(int, locale_t)
* @param c The character.
* @param locale The locale.
* @return Whether the character has a glyph.
+ *
+ * @since Always.
*/
int isgraph_l(int, locale_t)
__warning("This function is dangerous, use 'iswgraph_l' instead.")
@@ -417,6 +465,8 @@ int isgraph_l(int, locale_t)
* @param c The character.
* @param locale The locale.
* @return Whether the character is a lowercase letter.
+ *
+ * @since Always.
*/
int islower_l(int, locale_t)
__warning("This function is dangerous, use 'iswlower_l' instead.")
@@ -432,6 +482,8 @@ int islower_l(int, locale_t)
* @param locale The locale.
* @return Whether the character has a printable
* glyph or is a blank space.
+ *
+ * @since Always.
*/
int isprint_l(int, locale_t)
__warning("This function is dangerous, use 'iswprint_l' instead.")
@@ -447,6 +499,8 @@ int isprint_l(int, locale_t)
* @param c The character.
* @param locale The locale.
* @return Whether the character is a punctuation.
+ *
+ * @since Always.
*/
int ispunct_l(int, locale_t)
__warning("This function is dangerous, use 'iswpunct_l' instead.")
@@ -461,6 +515,8 @@ int ispunct_l(int, locale_t)
* @param locale The locale.
* @return Whether the character is a
* whitespace character.
+ *
+ * @since Always.
*/
int isspace_l(int, locale_t)
__warning("This function is dangerous, use 'iswspace_l' instead.")
@@ -475,6 +531,8 @@ int isspace_l(int, locale_t)
* @param c The character.
* @param locale The locale.
* @return Whether the character is a uppercase letter.
+ *
+ * @since Always.
*/
int isupper_l(int, locale_t)
__warning("This function is dangerous, use 'iswupper_l' instead.")
@@ -491,6 +549,8 @@ int isupper_l(int, locale_t)
* @param locale The locale.
* @return Whether the character is in
* ['0', '9'], ['A', 'Z'], or ['a', 'z'].
+ *
+ * @since Always.
*/
int isxdigit_l(int, locale_t)
__warning("This function is dangerous, use 'iswxdigit_l' instead.")
@@ -504,6 +564,8 @@ int isxdigit_l(int, locale_t)
* @param c The character
* @param locale The locale.
* @return Whether the character is an ASCII character.
+ *
+ * @since Always.
*/
int isascii_l(int, locale_t)
__warning("This function is dangerous, use 'iswascii_l' instead.")
@@ -520,6 +582,8 @@ int isascii_l(int, locale_t)
* @param c The character.
* @param locale The locale.
* @return The character with the 8:th bit cleared.
+ *
+ * @since Always.
*/
int toascii_l(int, locale_t)
__warning("This function is dangerous, use 'towascii_l' instead.")
@@ -542,6 +606,8 @@ int toascii_l(int, locale_t)
* @return The character in lowercase.
* Guaranteed to be unchanged if the
* character already is in lowercase.
+ *
+ * @since Always.
*/
int tolower_l(int, locale_t)
__warning("This function is dangerous, use 'iswlower_l' instead.")
@@ -564,6 +630,8 @@ int tolower_l(int, locale_t)
* @return The character in uppercase.
* Guaranteed to be unchanged if the
* character already is in lowercase.
+ *
+ * @since Always.
*/
int toupper_l(int, locale_t)
__warning("This function is dangerous, use 'iswupper_l' instead.")
diff --git a/include/err.h b/include/err.h
index 63dcdda..91f5b84 100644
--- a/include/err.h
+++ b/include/err.h
@@ -41,6 +41,8 @@
*
* @param format Formatting-string for the warning.
* @param ... Formatting-arguments.
+ *
+ * @since Always.
*/
void warn(const char*, ...)
__GCC_ONLY(__attribute__((__format__(__slibc_printf__, 1, 2))));
@@ -55,6 +57,8 @@ void warn(const char*, ...)
*
* @param format Formatting-string for the warning.
* @param args Formatting-arguments.
+ *
+ * @since Always.
*/
void vwarn(const char*, va_list);
@@ -68,6 +72,8 @@ void vwarn(const char*, va_list);
*
* @param format Formatting-string for the warning.
* @param ... Formatting-arguments.
+ *
+ * @since Always.
*/
void warnx(const char*, ...)
__GCC_ONLY(__attribute__((__format__(__slibc_printf__, 1, 2))));
@@ -82,6 +88,8 @@ void warnx(const char*, ...)
*
* @param format Formatting-string for the warning.
* @param args Formatting-arguments.
+ *
+ * @since Always.
*/
void vwarnx(const char*, va_list);
@@ -93,9 +101,11 @@ void vwarnx(const char*, va_list);
*
* @etymology Report (err)or!
*
- * @parma status The exit status the process should have.
+ * @param status The exit status the process should have.
* @param format Formatting-string for the warning.
* @param ... Formatting-arguments.
+ *
+ * @since Always.
*/
__noreturn void err(int, const char*, ...)
__GCC_ONLY(__attribute__((__format__(__slibc_printf__, 2, 3))));
@@ -108,9 +118,11 @@ __noreturn void err(int, const char*, ...)
*
* @etymology (V)ariadic version of (`err`).
*
- * @parma status The exit status the process should have.
+ * @param status The exit status the process should have.
* @param format Formatting-string for the warning.
* @param args Formatting-arguments.
+ *
+ * @since Always.
*/
__noreturn void verr(int, const char*, va_list);
@@ -122,9 +134,11 @@ __noreturn void verr(int, const char*, va_list);
*
* @etymology (`err`), [x=](lesser variant).
*
- * @parma status The exit status the process should have.
+ * @param status The exit status the process should have.
* @param format Formatting-string for the warning.
* @param ... Formatting-arguments.
+ *
+ * @since Always.
*/
__noreturn void errx(int, const char*, ...)
__GCC_ONLY(__attribute__((__format__(__slibc_printf__, 2, 3))));
@@ -137,9 +151,11 @@ __noreturn void errx(int, const char*, ...)
*
* @etymology (V)ariadic version of (`errx`).
*
- * @parma status The exit status the process should have.
+ * @param status The exit status the process should have.
* @param format Formatting-string for the warning.
* @param args Formatting-arguments.
+ *
+ * @since Always.
*/
__noreturn void verrx(int, const char*, va_list);
#endif
diff --git a/include/errno.h b/include/errno.h
index 293c0d0..749524c 100644
--- a/include/errno.h
+++ b/include/errno.h
@@ -41,6 +41,8 @@
* that has occurred in the thread.
*
* @etymology (Err)or (number).
+ *
+ * @since Always.
*/
#define errno (*__errno())
@@ -70,6 +72,8 @@ volatile int* __errno(void) /* TODO not implemented */
* or `argv[0]` is edited.
*
* This is a GNU and slibc extension.
+ *
+ * @since Always.
*/
#if defined(__GNU_SOURCE) || defined(__SLIBC_SOURCE)
extern char* program_invocation_name; /* TODO not implemented */
@@ -83,6 +87,8 @@ extern char* program_invocation_name; /* TODO not implemented */
* or `argv[0]` is edited.
*
* This is a GNU extension.
+ *
+ * @since Always.
*/
#if defined(__GNU_SOURCE)
extern char* program_invocation_short_name; /* TODO not implemented */
diff --git a/include/error.h b/include/error.h
index 5d0e24f..f2cf9f6 100644
--- a/include/error.h
+++ b/include/error.h
@@ -45,6 +45,8 @@
* be printed.
* @param format Formatting-string for a detailed description of what happend.
* @param args Formatting-arguments for `format`.
+ *
+ * @since Always.
*/
void error(int, int, const char*, ...)
__GCC_ONLY(__attribute__((__format__(__slibc_printf__, 3, 4))));
@@ -63,6 +65,8 @@ void error(int, int, const char*, ...)
* be printed.
* @param format Formatting-string for a detailed description of what happend.
* @param args Formatting-arguments for `format`.
+ *
+ * @since Always.
*/
# if defined(__SLIBC_SOURCE)
void verror(int, int, const char*, va_list);
@@ -86,6 +90,8 @@ void verror(int, int, const char*, va_list);
* @param linenum The line number of in the source code file where the error occurred.
* @param format Formatting-string for a detailed description of what happend.
* @param args Formatting-arguments for `format`.
+ *
+ * @since Always.
*/
void error_at_line(int, int, const char*, unsigned int, const char*, ...)
__GCC_ONLY(__attribute__((__format__(__slibc_printf__, 5, 6))));
@@ -107,6 +113,8 @@ void error_at_line(int, int, const char*, unsigned int, const char*, ...)
* @param linenum The line number of in the source code file where the error occurred.
* @param format Formatting-string for a detailed description of what happend.
* @param args Formatting-arguments for `format`.
+ *
+ * @since Always.
*/
# if defined(__SLIBC_SOURCE)
void verror_at_line(int, int, const char*, unsigned int, const char*, va_list);
@@ -121,6 +129,8 @@ void verror_at_line(int, int, const char*, unsigned int, const char*, va_list);
* This is a GNU extension.
*
* @etymology (`error`)-subsystem: (message count).
+ *
+ * @since Always.
*/
extern volatile unsigned int error_message_count;
@@ -141,6 +151,8 @@ extern volatile unsigned int error_message_count;
* This is a GNU extension.
*
* @etymology (`error`)-subsystem: print (one) time (per line).
+ *
+ * @since Always.
*/
extern volatile int error_one_per_line;
@@ -154,6 +166,8 @@ extern volatile int error_one_per_line;
* This is a GNU extension.
*
* @etymology (`error`)-subsystem function: (print) the (prog)ram's (name).
+ *
+ * @since Always.
*/
extern void (*volatile error_print_progname)(void);
#endif
diff --git a/include/inttypes.h b/include/inttypes.h
index 5602e97..4a02d5a 100644
--- a/include/inttypes.h
+++ b/include/inttypes.h
@@ -44,6 +44,8 @@
* the process will be killed by SIGFPE.
* @return The quotient in `.quot`, and
* the remainder in `.rem`.
+ *
+ * @since Always.
*/
imaxdiv_t imaxdiv(intmax_t, intmax_t)
__GCC_ONLY(__attribute__((__const__)));
@@ -60,6 +62,8 @@ imaxdiv_t imaxdiv(intmax_t, intmax_t)
*
* @param value The integer.
* @return The absolute value of the integer.
+ *
+ * @since Always.
*/
intmax_t (imaxabs)(intmax_t)
__GCC_ONLY(__attribute__((__const__)));
@@ -67,7 +71,7 @@ intmax_t (imaxabs)(intmax_t)
-/* Printing and scanning code affixes. */
+/* Printing and scanning code affixes. FOR INTERNAL USE. */
/**
* Length modifier affix for printing an `int8_t` or an `uint8_t`.
@@ -179,6 +183,8 @@ intmax_t (imaxabs)(intmax_t)
* an int8_t in decimal form.
*
* @etymology `(pri)ntf` `%(d)` for `int(8)_t`.
+ *
+ * @since Always.
*/
#define PRId8 __PRI8 "d"
@@ -187,6 +193,8 @@ intmax_t (imaxabs)(intmax_t)
* an int16_t in decimal form.
*
* @etymology `(pri)ntf` `%(d)` for `int(16)_t`.
+ *
+ * @since Always.
*/
#define PRId16 __PRI16 "d"
@@ -195,6 +203,8 @@ intmax_t (imaxabs)(intmax_t)
* an int32_t in decimal form.
*
* @etymology `(pri)ntf` `%(d)` for `int(32)_t`.
+ *
+ * @since Always.
*/
#define PRId32 __PRI32 "d"
@@ -203,6 +213,8 @@ intmax_t (imaxabs)(intmax_t)
* an int64_t in decimal form.
*
* @etymology `(pri)ntf` `%(d)` for `int(64)_t`.
+ *
+ * @since Always.
*/
#define PRId64 __PRI64 "d"
@@ -212,6 +224,8 @@ intmax_t (imaxabs)(intmax_t)
* an int_least8_t in decimal form.
*
* @etymology `(pri)ntf` `%(d)` for `int_(least8)_t`.
+ *
+ * @since Always.
*/
#define PRIdLEAST8 PRId8
@@ -220,6 +234,8 @@ intmax_t (imaxabs)(intmax_t)
* an int_least16_t in decimal form.
*
* @etymology `(pri)ntf` `%(d)` for `int_(least16)_t`.
+ *
+ * @since Always.
*/
#define PRIdLEAST16 PRId16
@@ -228,6 +244,8 @@ intmax_t (imaxabs)(intmax_t)
* an int_least32_t in decimal form.
*
* @etymology `(pri)ntf` `%(d)` for `int_(least32)_t`.
+ *
+ * @since Always.
*/
#define PRIdLEAST32 PRId32
@@ -236,6 +254,8 @@ intmax_t (imaxabs)(intmax_t)
* an int_least64_t in decimal form.
*
* @etymology `(pri)ntf` `%(d)` for `int_(least64)_t`.
+ *
+ * @since Always.
*/
#define PRIdLEAST64 PRId64
@@ -245,6 +265,8 @@ intmax_t (imaxabs)(intmax_t)
* an int_fast8_t in decimal form.
*
* @etymology `(pri)ntf` `%(d)` for `int_(fast8)_t`.
+ *
+ * @since Always.
*/
#define PRIdFAST8 __PRIFAST8 "d"
@@ -253,6 +275,8 @@ intmax_t (imaxabs)(intmax_t)
* an int_fast16_t in decimal form.
*
* @etymology `(pri)ntf` `%(d)` for `int_(fast16)_t`.
+ *
+ * @since Always.
*/
#define PRIdFAST16 __PRIFAST16 "d"
@@ -261,6 +285,8 @@ intmax_t (imaxabs)(intmax_t)
* an int_fast32_t in decimal form.
*
* @etymology `(pri)ntf` `%(d)` for `int_(fast32)_t`.
+ *
+ * @since Always.
*/
#define PRIdFAST32 __PRIFAST32 "d"
@@ -269,6 +295,8 @@ intmax_t (imaxabs)(intmax_t)
* an int_fast64_t in decimal form.
*
* @etymology `(pri)ntf` `%(d)` for `int_(fast64)_t`.
+ *
+ * @since Always.
*/
#define PRIdFAST64 __PRIFAST64 "d"
@@ -279,6 +307,8 @@ intmax_t (imaxabs)(intmax_t)
* an int8_t in decimal form.
*
* @etymology `(pri)ntf` `%(i)` for `int(8)_t`.
+ *
+ * @since Always.
*/
#define PRIi8 __PRI8 "i"
@@ -287,6 +317,8 @@ intmax_t (imaxabs)(intmax_t)
* an int16_t in decimal form.
*
* @etymology `(pri)ntf` `%(i)` for `int(16)_t`.
+ *
+ * @since Always.
*/
#define PRIi16 __PRI16 "i"
@@ -295,6 +327,8 @@ intmax_t (imaxabs)(intmax_t)
* an int32_t in decimal form.
*
* @etymology `(pri)ntf` `%(i)` for `int(32)_t`.
+ *
+ * @since Always.
*/
#define PRIi32 __PRI32 "i"
@@ -303,6 +337,8 @@ intmax_t (imaxabs)(intmax_t)
* an int64_t in decimal form.
*
* @etymology `(pri)ntf` `%(i)` for `int(64)_t`.
+ *
+ * @since Always.
*/
#define PRIi64 __PRI64 "i"
@@ -312,6 +348,8 @@ intmax_t (imaxabs)(intmax_t)
* an int_least8_t in decimal form.
*
* @etymology `(pri)ntf` `%(i)` for `int_(least8)_t`.
+ *
+ * @since Always.
*/
#define PRIiLEAST8 PRIi8
@@ -320,6 +358,8 @@ intmax_t (imaxabs)(intmax_t)
* an int_least16_t in decimal form.
*
* @etymology `(pri)ntf` `%(i)` for `int_(least16)_t`.
+ *
+ * @since Always.
*/
#define PRIiLEAST16 PRIi16
@@ -328,6 +368,8 @@ intmax_t (imaxabs)(intmax_t)
* an int_least32_t in decimal form.
*
* @etymology `(pri)ntf` `%(i)` for `int_(least32)_t`.
+ *
+ * @since Always.
*/
#define PRIiLEAST32 PRIi32
@@ -336,6 +378,8 @@ intmax_t (imaxabs)(intmax_t)
* an int_least64_t in decimal form.
*
* @etymology `(pri)ntf` `%(i)` for `int_(least64)_t`.
+ *
+ * @since Always.
*/
#define PRIiLEAST64 PRIi64
@@ -345,6 +389,8 @@ intmax_t (imaxabs)(intmax_t)
* an int_fast8_t in decimal form.
*
* @etymology `(pri)ntf` `%(i)` for `int_(fast8)_t`.
+ *
+ * @since Always.
*/
#define PRIiFAST8 __PRIFAST8 "i"
@@ -353,6 +399,8 @@ intmax_t (imaxabs)(intmax_t)
* an int_fast16_t in decimal form.
*
* @etymology `(pri)ntf` `%(i)` for `int_(fast16)_t`.
+ *
+ * @since Always.
*/
#define PRIiFAST16 __PRIFAST16 "i"
@@ -361,6 +409,8 @@ intmax_t (imaxabs)(intmax_t)
* an int_fast32_t in decimal form.
*
* @etymology `(pri)ntf` `%(i)` for `int_(fast32)_t`.
+ *
+ * @since Always.
*/
#define PRIiFAST32 __PRIFAST32 "i"
@@ -369,6 +419,8 @@ intmax_t (imaxabs)(intmax_t)
* an int_fast64_t in decimal form.
*
* @etymology `(pri)ntf` `%(i)` for `int_(fast64)_t`.
+ *
+ * @since Always.
*/
#define PRIiFAST64 __PRIFAST64 "i"
@@ -379,6 +431,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint8_t in octal form.
*
* @etymology `(pri)ntf` `%(o)` for `int(8)_t`.
+ *
+ * @since Always.
*/
#define PRIo8 __PRI8 "o"
@@ -387,6 +441,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint16_t in octal form.
*
* @etymology `(pri)ntf` `%(o)` for `int(16)_t`.
+ *
+ * @since Always.
*/
#define PRIo16 __PRI16 "o"
@@ -395,6 +451,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint32_t in octal form.
*
* @etymology `(pri)ntf` `%(o)` for `int(32)_t`.
+ *
+ * @since Always.
*/
#define PRIo32 __PRI32 "o"
@@ -403,6 +461,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint64_t in octal form.
*
* @etymology `(pri)ntf` `%(o)` for `int(64)_t`.
+ *
+ * @since Always.
*/
#define PRIo64 __PRI64 "o"
@@ -412,6 +472,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint_least8_t in octal form.
*
* @etymology `(pri)ntf` `%(o)` for `uint_(least8)_t`.
+ *
+ * @since Always.
*/
#define PRIoLEAST8 PRIo8
@@ -420,6 +482,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint_least16_t in octal form.
*
* @etymology `(pri)ntf` `%(o)` for `uint_(least16)_t`.
+ *
+ * @since Always.
*/
#define PRIoLEAST16 PRIo16
@@ -428,6 +492,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint_least32_t in octal form.
*
* @etymology `(pri)ntf` `%(o)` for `uint_(least32)_t`.
+ *
+ * @since Always.
*/
#define PRIoLEAST32 PRIo32
@@ -436,6 +502,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint_least64_t in octal form.
*
* @etymology `(pri)ntf` `%(o)` for `uint_(least64)_t`.
+ *
+ * @since Always.
*/
#define PRIoLEAST64 PRIo64
@@ -445,6 +513,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint_fast8_t in octal form.
*
* @etymology `(pri)ntf` `%(o)` for `uint_(fast8)_t`.
+ *
+ * @since Always.
*/
#define PRIoFAST8 __PRIFAST8 "o"
@@ -453,6 +523,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint_fast16_t in octal form.
*
* @etymology `(pri)ntf` `%(o)` for `uint_(fast16)_t`.
+ *
+ * @since Always.
*/
#define PRIoFAST16 __PRIFAST16 "o"
@@ -461,6 +533,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint_fast32_t in octal form.
*
* @etymology `(pri)ntf` `%(o)` for `uint_(fast32)_t`.
+ *
+ * @since Always.
*/
#define PRIoFAST32 __PRIFAST32 "o"
@@ -469,6 +543,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint_fast64_t in octal form.
*
* @etymology `(pri)ntf` `%(o)` for `uint_(fast64)_t`.
+ *
+ * @since Always.
*/
#define PRIoFAST64 __PRIFAST64 "o"
@@ -479,6 +555,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint8_t in decimal form.
*
* @etymology `(pri)ntf` `%(u)` for `uint(8)_t`.
+ *
+ * @since Always.
*/
#define PRIu8 __PRI8 "u"
@@ -487,6 +565,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint16_t in decimal form.
*
* @etymology `(pri)ntf` `%(u)` for `uint(16)_t`.
+ *
+ * @since Always.
*/
#define PRIu16 __PRI16 "u"
@@ -495,6 +575,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint32_t in decimal form.
*
* @etymology `(pri)ntf` `%(u)` for `uint(32)_t`.
+ *
+ * @since Always.
*/
#define PRIu32 __PRI32 "u"
@@ -503,6 +585,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint64_t in decimal form.
*
* @etymology `(pri)ntf` `%(u)` for `uint(64)_t`.
+ *
+ * @since Always.
*/
#define PRIu64 __PRI64 "u"
@@ -512,6 +596,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint_least8_t in decimal form.
*
* @etymology `(pri)ntf` `%(u)` for `uint_(least8)_t`.
+ *
+ * @since Always.
*/
#define PRIuLEAST8 PRIu8
@@ -520,6 +606,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint_least16_t in decimal form.
*
* @etymology `(pri)ntf` `%(u)` for `uint_(least16)_t`.
+ *
+ * @since Always.
*/
#define PRIuLEAST16 PRIu16
@@ -528,6 +616,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint_least32_t in decimal form.
*
* @etymology `(pri)ntf` `%(u)` for `uint_(least32)_t`.
+ *
+ * @since Always.
*/
#define PRIuLEAST32 PRIu32
@@ -536,6 +626,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint_least64_t in decimal form.
*
* @etymology `(pri)ntf` `%(u)` for `uint_(least64)_t`.
+ *
+ * @since Always.
*/
#define PRIuLEAST64 PRIu64
@@ -545,6 +637,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint_fast8_t in decimal form.
*
* @etymology `(pri)ntf` `%(u)` for `uint_(fast8)_t`.
+ *
+ * @since Always.
*/
#define PRIuFAST8 __PRIFAST8 "u"
@@ -553,6 +647,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint_fast16_t in decimal form.
*
* @etymology `(pri)ntf` `%(u)` for `uint_(fast16)_t`.
+ *
+ * @since Always.
*/
#define PRIuFAST16 __PRIFAST16 "u"
@@ -561,6 +657,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint_fast32_t in decimal form.
*
* @etymology `(pri)ntf` `%(u)` for `uint_(fast32)_t`.
+ *
+ * @since Always.
*/
#define PRIuFAST32 __PRIFAST32 "u"
@@ -569,6 +667,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint_fast64_t in decimal form.
*
* @etymology `(pri)ntf` `%(u)` for `uint_(fast64)_t`.
+ *
+ * @since Always.
*/
#define PRIuFAST64 __PRIFAST64 "u"
@@ -579,6 +679,8 @@ intmax_t (imaxabs)(intmax_t)
* uint8_t in lowercase hexadecimal form.
*
* @etymology `(pri)ntf` `%(x)` for `uint(8)_t`.
+ *
+ * @since Always.
*/
#define PRIx8 __PRI8 "x"
@@ -587,6 +689,8 @@ intmax_t (imaxabs)(intmax_t)
* uint16_t in lowercase hexadecimal form.
*
* @etymology `(pri)ntf` `%(x)` for `uint(16)_t`.
+ *
+ * @since Always.
*/
#define PRIx16 __PRI16 "x"
@@ -595,6 +699,8 @@ intmax_t (imaxabs)(intmax_t)
* uint32_t in lowercase hexadecimal form.
*
* @etymology `(pri)ntf` `%(x)` for `uint(32)_t`.
+ *
+ * @since Always.
*/
#define PRIx32 __PRI32 "x"
@@ -603,6 +709,8 @@ intmax_t (imaxabs)(intmax_t)
* uint64_t in lowercase hexadecimal form.
*
* @etymology `(pri)ntf` `%(x)` for `uint(64)_t`.
+ *
+ * @since Always.
*/
#define PRIx64 __PRI64 "x"
@@ -612,6 +720,8 @@ intmax_t (imaxabs)(intmax_t)
* uint_least8_t in lowercase hexadecimal form.
*
* @etymology `(pri)ntf` `%(x)` for `uint_(least8)_t`.
+ *
+ * @since Always.
*/
#define PRIxLEAST8 PRIx8
@@ -620,6 +730,8 @@ intmax_t (imaxabs)(intmax_t)
* uint_least16_t in lowercase hexadecimal form.
*
* @etymology `(pri)ntf` `%(x)` for `uint_(least16)_t`.
+ *
+ * @since Always.
*/
#define PRIxLEAST16 PRIx16
@@ -628,6 +740,8 @@ intmax_t (imaxabs)(intmax_t)
* uint_least32_t in lowercase hexadecimal form.
*
* @etymology `(pri)ntf` `%(x)` for `uint_(least32)_t`.
+ *
+ * @since Always.
*/
#define PRIxLEAST32 PRIx32
@@ -636,6 +750,8 @@ intmax_t (imaxabs)(intmax_t)
* uint_least64_t in lowercase hexadecimal form.
*
* @etymology `(pri)ntf` `%(x)` for `uint_(least64)_t`.
+ *
+ * @since Always.
*/
#define PRIxLEAST64 PRIx64
@@ -645,6 +761,8 @@ intmax_t (imaxabs)(intmax_t)
* uint_fast8_t in lowercase hexadecimal form.
*
* @etymology `(pri)ntf` `%(x)` for `uint_(fast8)_t`.
+ *
+ * @since Always.
*/
#define PRIxFAST8 __PRIFAST8 "x"
@@ -653,6 +771,8 @@ intmax_t (imaxabs)(intmax_t)
* uint_fast16_t in lowercase hexadecimal form.
*
* @etymology `(pri)ntf` `%(x)` for `uint_(fast16)_t`.
+ *
+ * @since Always.
*/
#define PRIxFAST16 __PRIFAST16 "x"
@@ -661,6 +781,8 @@ intmax_t (imaxabs)(intmax_t)
* uint_fast32_t in lowercase hexadecimal form.
*
* @etymology `(pri)ntf` `%(x)` for `uint_(fast32)_t`.
+ *
+ * @since Always.
*/
#define PRIxFAST32 __PRIFAST32 "x"
@@ -669,6 +791,8 @@ intmax_t (imaxabs)(intmax_t)
* uint_fast64_t in lowercase hexadecimal form.
*
* @etymology `(pri)ntf` `%(x)` for `uint_(fast64)_t`.
+ *
+ * @since Always.
*/
#define PRIxFAST64 __PRIFAST64 "x"
@@ -679,6 +803,8 @@ intmax_t (imaxabs)(intmax_t)
* uint8_t in uppercase hexadecimal form.
*
* @etymology `(pri)ntf` `%(X)` for `uint(8)_t`.
+ *
+ * @since Always.
*/
#define PRIX8 __PRI8 "X"
@@ -687,6 +813,8 @@ intmax_t (imaxabs)(intmax_t)
* uint16_t in uppercase hexadecimal form.
*
* @etymology `(pri)ntf` `%(X)` for `uint(16)_t`.
+ *
+ * @since Always.
*/
#define PRIX16 __PRI16 "X"
@@ -695,6 +823,8 @@ intmax_t (imaxabs)(intmax_t)
* uint32_t in uppercase hexadecimal form.
*
* @etymology `(pri)ntf` `%(X)` for `uint(32)_t`.
+ *
+ * @since Always.
*/
#define PRIX32 __PRI32 "X"
@@ -703,6 +833,8 @@ intmax_t (imaxabs)(intmax_t)
* uint64_t in uppercase hexadecimal form.
*
* @etymology `(pri)ntf` `%(X)` for `uint(64)_t`.
+ *
+ * @since Always.
*/
#define PRIX64 __PRI64 "X"
@@ -712,6 +844,8 @@ intmax_t (imaxabs)(intmax_t)
* uint_least8_t in uppercase hexadecimal form.
*
* @etymology `(pri)ntf` `%(X)` for `uint_(least8)_t`.
+ *
+ * @since Always.
*/
#define PRIXLEAST8 PRIX8
@@ -720,6 +854,8 @@ intmax_t (imaxabs)(intmax_t)
* uint_least16_t in uppercase hexadecimal form.
*
* @etymology `(pri)ntf` `%(X)` for `uint_(least16)_t`.
+ *
+ * @since Always.
*/
#define PRIXLEAST16 PRIX16
@@ -728,6 +864,8 @@ intmax_t (imaxabs)(intmax_t)
* uint_least32_t in uppercase hexadecimal form.
*
* @etymology `(pri)ntf` `%(X)` for `uint_(least32)_t`.
+ *
+ * @since Always.
*/
#define PRIXLEAST32 PRIX32
@@ -736,6 +874,8 @@ intmax_t (imaxabs)(intmax_t)
* uint_least64_t in uppercase hexadecimal form.
*
* @etymology `(pri)ntf` `%(X)` for `uint_(least64)_t`.
+ *
+ * @since Always.
*/
#define PRIXLEAST64 PRIX64
@@ -745,6 +885,8 @@ intmax_t (imaxabs)(intmax_t)
* uint_fast8_t in uppercase hexadecimal form.
*
* @etymology `(pri)ntf` `%(X)` for `uint_(fast8)_t`.
+ *
+ * @since Always.
*/
#define PRIXFAST8 __PRIFAST8 "X"
@@ -753,6 +895,8 @@ intmax_t (imaxabs)(intmax_t)
* uint_fast16_t in uppercase hexadecimal form.
*
* @etymology `(pri)ntf` `%(X)` for `uint_(fast16)_t`.
+ *
+ * @since Always.
*/
#define PRIXFAST16 __PRIFAST16 "X"
@@ -761,6 +905,8 @@ intmax_t (imaxabs)(intmax_t)
* uint_fast32_t in uppercase hexadecimal form.
*
* @etymology `(pri)ntf` `%(X)` for `uint_(fast32)_t`.
+ *
+ * @since Always.
*/
#define PRIXFAST32 __PRIFAST32 "X"
@@ -769,6 +915,8 @@ intmax_t (imaxabs)(intmax_t)
* uint_fast64_t in uppercase hexadecimal form.
*
* @etymology `(pri)ntf` `%(X)` for `uint_(fast64)_t`.
+ *
+ * @since Always.
*/
#define PRIXFAST64 __PRIFAST64 "X"
@@ -779,6 +927,8 @@ intmax_t (imaxabs)(intmax_t)
* intmax_t in decimal form.
*
* @etymology `(pri)ntf` `%(d)` for `int(max)_t`.
+ *
+ * @since Always.
*/
#define PRIdMAX __PRIMAX "d"
@@ -787,6 +937,8 @@ intmax_t (imaxabs)(intmax_t)
* intmax_t in decimal form.
*
* @etymology `(pri)ntf` `%(i)` for `int(max)_t`.
+ *
+ * @since Always.
*/
#define PRIiMAX __PRIMAX "i"
@@ -795,6 +947,8 @@ intmax_t (imaxabs)(intmax_t)
* uintmax_t in octal form.
*
* @etymology `(pri)ntf` `%(o)` for `uint(max)_t`.
+ *
+ * @since Always.
*/
#define PRIoMAX __PRIMAX "o"
@@ -803,6 +957,8 @@ intmax_t (imaxabs)(intmax_t)
* uintmax_t in decimal form.
*
* @etymology `(pri)ntf` `%(u)` for `uint(max)_t`.
+ *
+ * @since Always.
*/
#define PRIuMAX __PRIMAX "u"
@@ -811,6 +967,8 @@ intmax_t (imaxabs)(intmax_t)
* uintmax_t in lowercase hexadecimal form.
*
* @etymology `(pri)ntf` `%(x)` for `uint(max)_t`.
+ *
+ * @since Always.
*/
#define PRIxMAX __PRIMAX "x"
@@ -819,6 +977,8 @@ intmax_t (imaxabs)(intmax_t)
* uintmax_t in uppercase hexadecimal form.
*
* @etymology `(pri)ntf` `%(X)` for `uint(max)_t`.
+ *
+ * @since Always.
*/
#define PRIXMAX __PRIMAX "X"
@@ -830,6 +990,8 @@ intmax_t (imaxabs)(intmax_t)
* in decimal form.
*
* @etymology `(pri)ntf` `%(d)` for `int(ptr)_t` and alike.
+ *
+ * @since Always.
*/
#define PRIdPTR __PRIPTR "d"
@@ -839,6 +1001,8 @@ intmax_t (imaxabs)(intmax_t)
* in decimal form.
*
* @etymology `(pri)ntf` `%(i)` for `int(ptr)_t` and alike.
+ *
+ * @since Always.
*/
#define PRIiPTR __PRIPTR "i"
@@ -848,6 +1012,8 @@ intmax_t (imaxabs)(intmax_t)
* in octal form.
*
* @etymology `(pri)ntf` `%(o)` for `uint(ptr)_t` and alike.
+ *
+ * @since Always.
*/
#define PRIoPTR __PRIPTR "o"
@@ -857,6 +1023,8 @@ intmax_t (imaxabs)(intmax_t)
* in decimal form.
*
* @etymology `(pri)ntf` `%(u)` for `uint(ptr)_t` and alike.
+ *
+ * @since Always.
*/
#define PRIuPTR __PRIPTR "u"
@@ -866,6 +1034,8 @@ intmax_t (imaxabs)(intmax_t)
* in lowercase hexadecimal form.
*
* @etymology `(pri)ntf` `%(x)` for `uint(ptr)_t` and alike.
+ *
+ * @since Always.
*/
#define PRIxPTR __PRIPTR "x"
@@ -875,6 +1045,8 @@ intmax_t (imaxabs)(intmax_t)
* in uppercase hexadecimal form.
*
* @etymology `(pri)ntf` `%(X)` for `uint(ptr)_t` and alike.
+ *
+ * @since Always.
*/
#define PRIXPTR __PRIPTR "X"
@@ -888,6 +1060,8 @@ intmax_t (imaxabs)(intmax_t)
* an int8_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(d)` for `int(8)_t`.
+ *
+ * @since Always.
*/
#define SCNd8 __SCN8 "d"
@@ -896,6 +1070,8 @@ intmax_t (imaxabs)(intmax_t)
* an int16_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(d)` for `int(16)_t`.
+ *
+ * @since Always.
*/
#define SCNd16 __SCN16 "d"
@@ -904,6 +1080,8 @@ intmax_t (imaxabs)(intmax_t)
* an int32_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(d)` for `int(32)_t`.
+ *
+ * @since Always.
*/
#define SCNd32 __SCN32 "d"
@@ -912,6 +1090,8 @@ intmax_t (imaxabs)(intmax_t)
* an int64_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(d)` for `int(64)_t`.
+ *
+ * @since Always.
*/
#define SCNd64 __SCN64 "d"
@@ -921,6 +1101,8 @@ intmax_t (imaxabs)(intmax_t)
* an int_least8_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(d)` for `int_(least8)_t`.
+ *
+ * @since Always.
*/
#define SCNdLEAST8 SCNd8
@@ -929,6 +1111,8 @@ intmax_t (imaxabs)(intmax_t)
* an int_least16_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(d)` for `int_(least16)_t`.
+ *
+ * @since Always.
*/
#define SCNdLEAST16 SCNd16
@@ -937,6 +1121,8 @@ intmax_t (imaxabs)(intmax_t)
* an int_least32_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(d)` for `int_(least32)_t`.
+ *
+ * @since Always.
*/
#define SCNdLEAST32 SCNd32
@@ -945,6 +1131,8 @@ intmax_t (imaxabs)(intmax_t)
* an int_least64_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(d)` for `int_(least64)_t`.
+ *
+ * @since Always.
*/
#define SCNdLEAST64 SCNd64
@@ -954,6 +1142,8 @@ intmax_t (imaxabs)(intmax_t)
* an int_fast8_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(d)` for `int_(fast8)_t`.
+ *
+ * @since Always.
*/
#define SCNdFAST8 __SCNFAST8 "d"
@@ -962,6 +1152,8 @@ intmax_t (imaxabs)(intmax_t)
* an int_fast16_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(d)` for `int_(fast16)_t`.
+ *
+ * @since Always.
*/
#define SCNdFAST16 __SCNFAST16 "d"
@@ -970,6 +1162,8 @@ intmax_t (imaxabs)(intmax_t)
* an int_fast32_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(d)` for `int_(fast32)_t`.
+ *
+ * @since Always.
*/
#define SCNdFAST32 __SCNFAST32 "d"
@@ -978,6 +1172,8 @@ intmax_t (imaxabs)(intmax_t)
* an int_fast64_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(d)` for `int_(fast64)_t`.
+ *
+ * @since Always.
*/
#define SCNdFAST64 __SCNFAST64 "d"
@@ -988,6 +1184,8 @@ intmax_t (imaxabs)(intmax_t)
* an int8_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(i)` for `int(8)_t`.
+ *
+ * @since Always.
*/
#define SCNi8 __SCN8 "i"
@@ -996,6 +1194,8 @@ intmax_t (imaxabs)(intmax_t)
* an int16_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(i)` for `int(16)_t`.
+ *
+ * @since Always.
*/
#define SCNi16 __SCN16 "i"
@@ -1004,6 +1204,8 @@ intmax_t (imaxabs)(intmax_t)
* an int32_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(i)` for `int(32)_t`.
+ *
+ * @since Always.
*/
#define SCNi32 __SCN32 "i"
@@ -1012,6 +1214,8 @@ intmax_t (imaxabs)(intmax_t)
* an int64_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(i)` for `int(64)_t`.
+ *
+ * @since Always.
*/
#define SCNi64 __SCN64 "i"
@@ -1021,6 +1225,8 @@ intmax_t (imaxabs)(intmax_t)
* an int_least8_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(i)` for `int_(least8)_t`.
+ *
+ * @since Always.
*/
#define SCNiLEAST8 SCNi8
@@ -1029,6 +1235,8 @@ intmax_t (imaxabs)(intmax_t)
* an int_least16_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(i)` for `int_(least16)_t`.
+ *
+ * @since Always.
*/
#define SCNiLEAST16 SCNi16
@@ -1037,6 +1245,8 @@ intmax_t (imaxabs)(intmax_t)
* an int_least32_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(i)` for `int_(least32)_t`.
+ *
+ * @since Always.
*/
#define SCNiLEAST32 SCNi32
@@ -1045,6 +1255,8 @@ intmax_t (imaxabs)(intmax_t)
* an int_least64_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(i)` for `int_(least64)_t`.
+ *
+ * @since Always.
*/
#define SCNiLEAST64 SCNi64
@@ -1054,6 +1266,8 @@ intmax_t (imaxabs)(intmax_t)
* an int_fast8_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(i)` for `int_(fast8)_t`.
+ *
+ * @since Always.
*/
#define SCNiFAST8 __SCNFAST8 "i"
@@ -1062,6 +1276,8 @@ intmax_t (imaxabs)(intmax_t)
* an int_fast16_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(i)` for `int_(fast16)_t`.
+ *
+ * @since Always.
*/
#define SCNiFAST16 __SCNFAST16 "i"
@@ -1070,6 +1286,8 @@ intmax_t (imaxabs)(intmax_t)
* an int_fast32_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(i)` for `int_(fast32)_t`.
+ *
+ * @since Always.
*/
#define SCNiFAST32 __SCNFAST32 "i"
@@ -1078,6 +1296,8 @@ intmax_t (imaxabs)(intmax_t)
* an int_fast64_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(i)` for `int_(fast64)_t`.
+ *
+ * @since Always.
*/
#define SCNiFAST64 __SCNFAST64 "i"
@@ -1088,6 +1308,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint8_t from octal form.
*
* @etymology `(sc)a(n)f` `%(o)` for `uint(8)_t`.
+ *
+ * @since Always.
*/
#define SCNo8 __SCN8 "o"
@@ -1096,6 +1318,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint16_t from octal form.
*
* @etymology `(sc)a(n)f` `%(o)` for `uint(16)_t`.
+ *
+ * @since Always.
*/
#define SCNo16 __SCN16 "o"
@@ -1104,6 +1328,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint32_t from octal form.
*
* @etymology `(sc)a(n)f` `%(o)` for `uint(32)_t`.
+ *
+ * @since Always.
*/
#define SCNo32 __SCN32 "o"
@@ -1112,6 +1338,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint64_t from octal form.
*
* @etymology `(sc)a(n)f` `%(o)` for `uint(64)_t`.
+ *
+ * @since Always.
*/
#define SCNo64 __SCN64 "o"
@@ -1121,6 +1349,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint_least8_t from octal form.
*
* @etymology `(sc)a(n)f` `%(o)` for `uint_(least8)_t`.
+ *
+ * @since Always.
*/
#define SCNoLEAST8 SCNo8
@@ -1129,6 +1359,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint_least16_t from octal form.
*
* @etymology `(sc)a(n)f` `%(o)` for `uint_(least16)_t`.
+ *
+ * @since Always.
*/
#define SCNoLEAST16 SCNo16
@@ -1137,6 +1369,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint_least32_t from octal form.
*
* @etymology `(sc)a(n)f` `%(o)` for `uint_(least32)_t`.
+ *
+ * @since Always.
*/
#define SCNoLEAST32 SCNo32
@@ -1145,6 +1379,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint_least64_t from octal form.
*
* @etymology `(sc)a(n)f` `%(o)` for `uint_(least64)_t`.
+ *
+ * @since Always.
*/
#define SCNoLEAST64 SCNo64
@@ -1154,6 +1390,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint_fast8_t from octal form.
*
* @etymology `(sc)a(n)f` `%(o)` for `uint_(fast8)_t`.
+ *
+ * @since Always.
*/
#define SCNoFAST8 __SCNFAST8 "o"
@@ -1162,6 +1400,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint_fast16_t from octal form.
*
* @etymology `(sc)a(n)f` `%(o)` for `uint_(fast16)_t`.
+ *
+ * @since Always.
*/
#define SCNoFAST16 __SCNFAST16 "o"
@@ -1170,6 +1410,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint_fast32_t from octal form.
*
* @etymology `(sc)a(n)f` `%(o)` for `uint_(fast32)_t`.
+ *
+ * @since Always.
*/
#define SCNoFAST32 __SCNFAST32 "o"
@@ -1178,6 +1420,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint_fast64_t from octal form.
*
* @etymology `(sc)a(n)f` `%(o)` for `uint_(fast64)_t`.
+ *
+ * @since Always.
*/
#define SCNoFAST64 __SCNFAST64 "o"
@@ -1188,6 +1432,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint8_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(u)` for `uint(8)_t`.
+ *
+ * @since Always.
*/
#define SCNu8 __SCN8 "u"
@@ -1196,6 +1442,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint16_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(u)` for `uint(16)_t`.
+ *
+ * @since Always.
*/
#define SCNu16 __SCN16 "u"
@@ -1204,6 +1452,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint32_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(u)` for `uint(32)_t`.
+ *
+ * @since Always.
*/
#define SCNu32 __SCN32 "u"
@@ -1212,6 +1462,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint64_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(u)` for `uint(64)_t`.
+ *
+ * @since Always.
*/
#define SCNu64 __SCN64 "u"
@@ -1221,6 +1473,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint_least8_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(u)` for `uint_(least8)_t`.
+ *
+ * @since Always.
*/
#define SCNuLEAST8 SCNu8
@@ -1229,6 +1483,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint_least16_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(u)` for `uint_(least16)_t`.
+ *
+ * @since Always.
*/
#define SCNuLEAST16 SCNu16
@@ -1237,6 +1493,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint_least32_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(u)` for `uint_(least32)_t`.
+ *
+ * @since Always.
*/
#define SCNuLEAST32 SCNu32
@@ -1245,6 +1503,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint_least64_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(u)` for `uint_(least64)_t`.
+ *
+ * @since Always.
*/
#define SCNuLEAST64 SCNu64
@@ -1254,6 +1514,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint_fast8_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(u)` for `uint_(fast8)_t`.
+ *
+ * @since Always.
*/
#define SCNuFAST8 __SCNFAST8 "u"
@@ -1262,6 +1524,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint_fast16_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(u)` for `uint_(fast16)_t`.
+ *
+ * @since Always.
*/
#define SCNuFAST16 __SCNFAST16 "u"
@@ -1270,6 +1534,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint_fast32_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(u)` for `uint_(fast32)_t`.
+ *
+ * @since Always.
*/
#define SCNuFAST32 __SCNFAST32 "u"
@@ -1278,6 +1544,8 @@ intmax_t (imaxabs)(intmax_t)
* an uint_fast64_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(u)` for `uint_(fast64)_t`.
+ *
+ * @since Always.
*/
#define SCNuFAST64 __SCNFAST64 "u"
@@ -1288,6 +1556,8 @@ intmax_t (imaxabs)(intmax_t)
* uint8_t from hexadecimal form.
*
* @etymology `(sc)a(n)f` `%(x)` for `uint(8)_t`.
+ *
+ * @since Always.
*/
#define SCNx8 __SCN8 "x"
@@ -1296,6 +1566,8 @@ intmax_t (imaxabs)(intmax_t)
* uint16_t from hexadecimal form.
*
* @etymology `(sc)a(n)f` `%(x)` for `uint(16)_t`.
+ *
+ * @since Always.
*/
#define SCNx16 __SCN16 "x"
@@ -1304,6 +1576,8 @@ intmax_t (imaxabs)(intmax_t)
* uint32_t from hexadecimal form.
*
* @etymology `(sc)a(n)f` `%(x)` for `uint(32)_t`.
+ *
+ * @since Always.
*/
#define SCNx32 __SCN32 "x"
@@ -1312,6 +1586,8 @@ intmax_t (imaxabs)(intmax_t)
* uint64_t from hexadecimal form.
*
* @etymology `(sc)a(n)f` `%(x)` for `uint(64)_t`.
+ *
+ * @since Always.
*/
#define SCNx64 __SCN64 "x"
@@ -1321,6 +1597,8 @@ intmax_t (imaxabs)(intmax_t)
* uint_least8_t from hexadecimal form.
*
* @etymology `(sc)a(n)f` `%(x)` for `uint_(least8)_t`.
+ *
+ * @since Always.
*/
#define SCNxLEAST8 SCNx8
@@ -1329,6 +1607,8 @@ intmax_t (imaxabs)(intmax_t)
* uint_least16_t from hexadecimal form.
*
* @etymology `(sc)a(n)f` `%(x)` for `uint_(least16)_t`.
+ *
+ * @since Always.
*/
#define SCNxLEAST16 SCNx16
@@ -1337,6 +1617,8 @@ intmax_t (imaxabs)(intmax_t)
* uint_least32_t from hexadecimal form.
*
* @etymology `(sc)a(n)f` `%(x)` for `uint_(least32)_t`.
+ *
+ * @since Always.
*/
#define SCNxLEAST32 SCNx32
@@ -1345,6 +1627,8 @@ intmax_t (imaxabs)(intmax_t)
* uint_least64_t from hexadecimal form.
*
* @etymology `(sc)a(n)f` `%(x)` for `uint_(least64)_t`.
+ *
+ * @since Always.
*/
#define SCNxLEAST64 SCNx64
@@ -1354,6 +1638,8 @@ intmax_t (imaxabs)(intmax_t)
* uint_fast8_t from hexadecimal form.
*
* @etymology `(sc)a(n)f` `%(x)` for `uint_(fast8)_t`.
+ *
+ * @since Always.
*/
#define SCNxFAST8 __SCNFAST8 "x"
@@ -1362,6 +1648,8 @@ intmax_t (imaxabs)(intmax_t)
* uint_fast16_t from hexadecimal form.
*
* @etymology `(sc)a(n)f` `%(x)` for `uint_(fast16)_t`.
+ *
+ * @since Always.
*/
#define SCNxFAST16 __SCNFAST16 "x"
@@ -1370,6 +1658,8 @@ intmax_t (imaxabs)(intmax_t)
* uint_fast32_t from hexadecimal form.
*
* @etymology `(sc)a(n)f` `%(x)` for `uint_(fast32)_t`.
+ *
+ * @since Always.
*/
#define SCNxFAST32 __SCNFAST32 "x"
@@ -1378,6 +1668,8 @@ intmax_t (imaxabs)(intmax_t)
* uint_fast64_t from hexadecimal form.
*
* @etymology `(sc)a(n)f` `%(x)` for `uint_(fast64)_t`.
+ *
+ * @since Always.
*/
#define SCNxFAST64 __SCNFAST64 "x"
@@ -1388,6 +1680,8 @@ intmax_t (imaxabs)(intmax_t)
* intmax_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(d)` for `int(max)_t`.
+ *
+ * @since Always.
*/
#define SCNdMAX __SCNMAX "d"
@@ -1396,6 +1690,8 @@ intmax_t (imaxabs)(intmax_t)
* intmax_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(i)` for `int(max)_t`.
+ *
+ * @since Always.
*/
#define SCNiMAX __SCNMAX "i"
@@ -1404,6 +1700,8 @@ intmax_t (imaxabs)(intmax_t)
* uintmax_t from octal form.
*
* @etymology `(sc)a(n)f` `%(o)` for `uint(max)_t`.
+ *
+ * @since Always.
*/
#define SCNoMAX __SCNMAX "o"
@@ -1412,6 +1710,8 @@ intmax_t (imaxabs)(intmax_t)
* uintmax_t from decimal form.
*
* @etymology `(sc)a(n)f` `%(u)` for `uint(max)_t`.
+ *
+ * @since Always.
*/
#define SCNuMAX __SCNMAX "u"
@@ -1420,6 +1720,8 @@ intmax_t (imaxabs)(intmax_t)
* uintmax_t from hexadecimal form.
*
* @etymology `(sc)a(n)f` `%(x)` for `uint(max)_t`.
+ *
+ * @since Always.
*/
#define SCNxMAX __SCNMAX "x"
@@ -1431,6 +1733,8 @@ intmax_t (imaxabs)(intmax_t)
* from decimal form.
*
* @etymology `(sc)a(n)f` `%(d)` for `int(ptr)_t` and alike.
+ *
+ * @since Always.
*/
#define SCNdPTR __SCNPTR "d"
@@ -1440,6 +1744,8 @@ intmax_t (imaxabs)(intmax_t)
* from decimal form.
*
* @etymology `(sc)a(n)f` `%(i)` for `int(ptr)_t` and alike.
+ *
+ * @since Always.
*/
#define SCNiPTR __SCNPTR "i"
@@ -1449,6 +1755,8 @@ intmax_t (imaxabs)(intmax_t)
* from octal form.
*
* @etymology `(sc)a(n)f` `%(o)` for `uint(ptr)_t` and alike.
+ *
+ * @since Always.
*/
#define SCNoPTR __SCNPTR "o"
@@ -1458,6 +1766,8 @@ intmax_t (imaxabs)(intmax_t)
* from decimal form.
*
* @etymology `(sc)a(n)f` `%(u)` for `uint(ptr)_t` and alike.
+ *
+ * @since Always.
*/
#define SCNuPTR __SCNPTR "u"
@@ -1467,6 +1777,8 @@ intmax_t (imaxabs)(intmax_t)
* from hexadecimal form.
*
* @etymology `(sc)a(n)f` `%(x)` for `uint(ptr)_t` and alike.
+ *
+ * @since Always.
*/
#define SCNxPTR __SCNPTR "x"
diff --git a/include/iso646.h b/include/iso646.h
index 51edb6a..67ea99b 100644
--- a/include/iso646.h
+++ b/include/iso646.h
@@ -35,56 +35,78 @@
/**
* Alias for logical and (&&).
+ *
+ * @since Always.
*/
#define and &&
/**
* Alias for bitwise and assignement (&=).
+ *
+ * @since Always.
*/
#define and_eq &=
/**
* Alias for bitwise and (&).
+ *
+ * @since Always.
*/
#define bitand &
/**
* Alias for bitwise inclusive or (|).
+ *
+ * @since Always.
*/
#define bitor |
/**
* Alias for bitwise complement (~).
+ *
+ * @since Always.
*/
#define compl ~
/**
* Alias for logical complement (!).
+ *
+ * @since Always.
*/
#define not !
/**
* Alias for inequality comparer (!=).
+ *
+ * @since Always.
*/
#define not_eq !=
/**
* Alias for logical inclusive (||).
+ *
+ * @since Always.
*/
#define or ||
/**
* Alias for bitwise inclusive or assignment (|=).
+ *
+ * @since Always.
*/
#define or_eq |=
/**
* Alias for bitwise exclusive or (^).
+ *
+ * @since Always.
*/
#define xor ^
/**
* Alias for bitwise exclusive or assignment (^=).
+ *
+ * @since Always.
*/
#define xor_eq ^=
diff --git a/include/libgen.h b/include/libgen.h
index 8f6b884..a62bd41 100644
--- a/include/libgen.h
+++ b/include/libgen.h
@@ -39,6 +39,8 @@
* of `filename` or, if `filename` is `NULL`
* or is empty, a statically allocationed string,
* so it must not freed or edited.
+ *
+ * @since Always.
*/
char* __xpg_basename(char*)
__GCC_ONLY(__attribute__((__warn_unused_result__)));
@@ -55,6 +57,8 @@ char* __xpg_basename(char*)
* or does no contain a non-trailing slash,
* a statically allocationed string, so it
* must not freed or edited.
+ *
+ * @since Always.
*/
char* dirname(char*)
__GCC_ONLY(__attribute__((__warn_unused_result__)));
@@ -82,6 +86,8 @@ char* dirname(char*)
* if `filename` is `NULL` or does no contain a
* non-trailing slash, a statically allocationed
* string, so it must not freed or edited.
+ *
+ * @since Always.
*/
char* cleanname(char*)
#endif
diff --git a/include/malloc.h b/include/malloc.h
index 6410ad0..578a765 100644
--- a/include/malloc.h
+++ b/include/malloc.h
@@ -51,6 +51,8 @@
* indicate the error.
*
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
void* malloc(size_t)
__GCC_ONLY(__attribute__((__malloc__, __warn_unused_result__)));
@@ -73,6 +75,8 @@ void* malloc(size_t)
* `errno` is set to indicate the error.
*
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
void* calloc(size_t, size_t)
__GCC_ONLY(__attribute__((__malloc__, __warn_unused_result__)));
@@ -99,6 +103,8 @@ void* calloc(size_t, size_t)
* indicate the error.
*
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
void* mallocz(size_t, int)
__GCC_ONLY(__attribute__((__malloc__, __warn_unused_result__)));
@@ -125,6 +131,8 @@ void* mallocz(size_t, int)
* indicate the error.
*
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
void* zalloc(size_t)
__warning("'zalloc' is klibc extension, use 'calloc(1, n)' instead of 'zalloc(n)'.")
@@ -154,6 +162,8 @@ void* zalloc(size_t)
* is returned and `errno` is set to indicate the error.
*
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
void* realloc(void*, size_t)
__GCC_ONLY(__attribute__((__warn_unused_result__)))
@@ -168,6 +178,8 @@ void* realloc(void*, size_t)
* The process may crash if it does not point to the
* beginning of a memory allocation on the heap.
* However, if it is `NULL`, nothing will happen.
+ *
+ * @since Always.
*/
void free(void*)
__slibc_warning("Use 'fast_free' or 'secure_free' instead.");
@@ -183,6 +195,8 @@ void free(void*)
* The process may crash if it does not point to the
* beginning of a memory allocation on the heap.
* However, if it is `NULL`, nothing will happen.
+ *
+ * @since Always.
*/
#if !defined(__PORTABLE)
void cfree(void*, ...)
@@ -214,6 +228,8 @@ void cfree(void*, ...)
*
* @throws ENOMEM The process cannot allocate more memory.
* @throws EINVAL If `boundary` is not a power of two.
+ *
+ * @since Always.
*/
void* memalign(size_t, size_t)
#ifdef __C11__
@@ -240,6 +256,8 @@ void* memalign(size_t, size_t)
*
* @throws ENOMEM The process cannot allocate more memory.
* @throws EINVAL If `boundary` is not a power-of-two multiple of `sizeof(void*)`.
+ *
+ * @since Always.
*/
int posix_memalign(void**, size_t, size_t)
__GCC_ONLY(__attribute__((__nonnull__)));
@@ -263,6 +281,8 @@ int posix_memalign(void**, size_t, size_t)
* indicate the error.
*
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
void* valloc(size_t)
__GCC_ONLY(__attribute__((__malloc__, __warn_unused_result__)))
@@ -285,6 +305,8 @@ void* valloc(size_t)
* indicate the error.
*
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
void* pvalloc(size_t)
__GCC_ONLY(__attribute__((__malloc__, __warn_unused_result__)))
@@ -315,6 +337,8 @@ void* pvalloc(size_t)
*
* @throws ENOMEM The process cannot allocate more memory.
* @throws EINVAL If `boundary` is not a power of two.
+ *
+ * @since Always.
*/
void* aligned_alloc(size_t, size_t)
__GCC_ONLY(__attribute__((__malloc__, __warn_unused_result__)));
@@ -332,6 +356,8 @@ void* aligned_alloc(size_t, size_t)
*
* @param segment The memory segment.
* @return The size of the memory segment, 0 if `segment` is `NULL`.
+ *
+ * @since Always.
*/
size_t malloc_usable_size(void*)
__GCC_ONLY(__attribute__((__warn_unused_result__)));
diff --git a/include/slibc-alloc.h b/include/slibc-alloc.h
index 7a697d1..043616a 100644
--- a/include/slibc-alloc.h
+++ b/include/slibc-alloc.h
@@ -32,16 +32,22 @@
* They are independent of each other, and
* multiple can be selected by using bitwise or
* between them.
+ *
+ * @since Always.
*/
enum extalloc_mode
{
/**
* Clear disowned memory.
+ *
+ * @since Always.
*/
EXTALLOC_CLEAR = 1,
/**
* Create new allocation with `malloc` if necessary.
+ *
+ * @since Always.
*/
EXTALLOC_MALLOC = 2,
@@ -53,22 +59,30 @@ enum extalloc_mode
* They are independent of each other, and
* multiple can be selected by using bitwise or
* between them.
+ *
+ * @since Always.
*/
enum rememalign_mode
{
/**
* Clear disowned memory.
+ *
+ * @since Always.
*/
REMEMALIGN_CLEAR = 1,
/**
* Initialise new memory.
+ *
+ * @since Always.
*/
REMEMALIGN_INIT = 2,
/**
* If a new allocation is created, copy the data
* from the old allocation over to the new allocation.
+ *
+ * @since Always.
*/
REMEMALIGN_MEMCPY = 4,
@@ -80,22 +94,30 @@ enum rememalign_mode
* They are independent of each other, and
* multiple can be selected by using bitwise or
* between them.
+ *
+ * @since Always.
*/
enum falloc_mode
{
/**
* Clear disowned memory.
+ *
+ * @since Always.
*/
FALLOC_CLEAR = 1,
/**
* Initialise new memory.
+ *
+ * @since Always.
*/
FALLOC_INIT = 2,
/**
* If a new allocation is created, copy the data
* from the old allocation over to the new allocation.
+ *
+ * @since Always.
*/
FALLOC_MEMCPY = 4,
@@ -109,6 +131,8 @@ enum falloc_mode
* @etymology (Fast) variant of (`free`).
*
* @param segment The memory segment to free.
+ *
+ * @since Always.
*/
void fast_free(void*);
@@ -119,6 +143,8 @@ void fast_free(void*);
* @etymology (Secure) variant of (`free`).
*
* @param segment The memory segment to free.
+ *
+ * @since Always.
*/
void secure_free(void*);
@@ -144,6 +170,8 @@ void secure_free(void*);
* implemented in slibc. It is however not guaranteed
* that this will happen, undefined behaviour may be
* invoked instead.
+ *
+ * @since Always.
*/
size_t allocsize(void*)
__GCC_ONLY(__attribute__((__warn_unused_result__)));
@@ -161,6 +189,8 @@ size_t allocsize(void*)
* @return The new allocation, see `realloc` for more details.
*
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
void* crealloc(void*, size_t)
__GCC_ONLY(__attribute__((__warn_unused_result__)));
@@ -176,6 +206,8 @@ void* crealloc(void*, size_t)
* @return The new allocation, see `realloc` for more details.
*
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
void* fast_realloc(void*, size_t)
__GCC_ONLY(__attribute__((__warn_unused_result__)));
@@ -191,6 +223,8 @@ void* fast_realloc(void*, size_t)
* @return The new allocation, see `realloc` for more details.
*
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
void* secure_realloc(void*, size_t)
__GCC_ONLY(__attribute__((__warn_unused_result__)));
@@ -218,6 +252,8 @@ void* secure_realloc(void*, size_t)
* @return The new allocation, see `realloc` for more details.
*
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
void* custom_realloc(void*, size_t, int, int, int)
__GCC_ONLY(__attribute__((__warn_unused_result__)));
@@ -246,6 +282,8 @@ void* custom_realloc(void*, size_t, int, int, int)
*
* @throws 0 `errno` is set to zero success if `NULL` is returned.
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
void* extalloc(void*, size_t, enum extalloc_mode)
__GCC_ONLY(__attribute__((__nonnull__, __warn_unused_result__)));
@@ -266,6 +304,8 @@ void* extalloc(void*, size_t, enum extalloc_mode)
* @throws 0 `errno` is set to zero success if `NULL` is returned.
* @throws EINVAL `mode` is invalid, or `boundary` is not a power of two.
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
void* rememalign(void*, size_t, size_t, enum rememalign_mode)
__GCC_ONLY(__attribute__((__warn_unused_result__)));
@@ -290,6 +330,8 @@ void* rememalign(void*, size_t, size_t, enum rememalign_mode)
* @return The new allocation, see `realloc` for more details.
*
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
void* naive_realloc(void*, size_t, size_t) /* sic! we limit ourself to ASCII */
__GCC_ONLY(__attribute__((__nonnull__, __warn_unused_result__)));
@@ -308,6 +350,8 @@ void* naive_realloc(void*, size_t, size_t) /* sic! we limit ourself to ASCII */
*
* @throws 0 `malloc` is require to perform the action.
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
void* naive_extalloc(void*, size_t) /* sic! we limit ourself to ASCII */
__GCC_ONLY(__attribute__((__nonnull__, __warn_unused_result__)));
@@ -366,6 +410,8 @@ void* naive_extalloc(void*, size_t) /* sic! we limit ourself to ASCII */
* @throws 0 `new_size` is zero.
* @throws EINVAL The arguments are invalid.
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
void* falloc(void*, size_t*, size_t, size_t, size_t, enum falloc_mode);
@@ -375,6 +421,8 @@ void* falloc(void*, size_t*, size_t, size_t, size_t, enum falloc_mode);
* so that another attempt to free the segment will not crash the process.
*
* @etymology Macro version of (`fast_free`).
+ *
+ * @since Always.
*/
#define FAST_FREE(segment) (fast_free(segment), (void)((segment) = NULL));
@@ -383,6 +431,8 @@ void* falloc(void*, size_t*, size_t, size_t, size_t, enum falloc_mode);
* so that another attempt to free the segment will not crash the process.
*
* @etymology Macro version of (`secure_free`).
+ *
+ * @since Always.
*/
#define SECURE_FREE(segment) (secure_free(segment), (void)((segment) = NULL));
diff --git a/include/slibc-error.h b/include/slibc-error.h
index 66d1e50..7e1bca2 100644
--- a/include/slibc-error.h
+++ b/include/slibc-error.h
@@ -77,6 +77,8 @@
* ```
*
* This is a slibc extension.
+ *
+ * @since Always.
*/
#define FAILABLE_CALL(expression) \
({ typeof(expression) __slibc_r = (expression); *__slibc_error_line() = __LINE__; __slibc_r; })
@@ -123,6 +125,8 @@
* that was the line that failed, if `condition`
* evaluates to non-zero.
* @return 1 if `condition` evaluates to non-zero, 0 otherwise.
+ *
+ * @since Always.
*/
#define FAILURE_CHECK(condition, offset) \
((condition) ? (*__slibc_error_line() = (__LINE__ - (offset)), 1) : 0)
@@ -168,6 +172,8 @@
* to describe what action failed. If the first argument is
* `NULL`, this is not printed and only the location of the
* error and `errno` is used to describe the error.
+ *
+ * @since Always.
*/
#define PRINT_FAILURE(...) \
(PRINT_CUSTOM_FAILURE(errno, NULL, __VA_ARGS__))
@@ -191,6 +197,8 @@
* to describe what action failed. If the first argument is
* `NULL`, this is not printed and only the location of the
* error and `error_string` is used to describe the error.
+ *
+ * @since Always.
*/
#define PRINT_CUSTOM_FAILURE(error_code, error_string, ...) \
(slibc_perror(NULL, __FILE__, *__slibc_error_line(), __func__, &(error_code), error_string, __VA_ARGS__))
@@ -198,6 +206,8 @@
/**
* Helper function to keep track of the line of origin, in a
* thread-safe manner, without requiring new revisions of C.
+ *
+ * @since Always.
*/
int* __slibc_error_line(void) __GCC_ONLY(__attribute__((__const__))); /* TODO not implemented */
@@ -222,6 +232,8 @@ int* __slibc_error_line(void) __GCC_ONLY(__attribute__((__const__))); /* TODO no
* @param format Formatting-string for a description of the action that failed. `NULL` if
* no description other than the location and `error_string` should be printed.
* @param ... Formatting-arguments for `format`.
+ *
+ * @since Always.
*/
void slibc_perror(const char*, const char*, int, const char*, int*, const char*, const char*, ...)
__GCC_ONLY(__attribute__((__nonnull__(2, 4), __format__(__slibc_printf__, 7, 8))));
diff --git a/include/slibc-human.h b/include/slibc-human.h
index 9a4e5dc..de505a1 100644
--- a/include/slibc-human.h
+++ b/include/slibc-human.h
@@ -35,6 +35,8 @@
/**
* Representation settings for file permissions.
+ *
+ * @since Always.
*/
enum humanmode_mode
{
@@ -44,6 +46,8 @@ enum humanmode_mode
*
* If used in combination with `HUMANMODE_MASK`,
* 0750 resolves to 'u=rwx,g=r-x,o=---'.
+ *
+ * @since Always.
*/
HUMANMODE_STAT = 1,
@@ -53,6 +57,8 @@ enum humanmode_mode
*
* If used in combination with `HUMANMODE_STAT`,
* 0750 resolves to 'u=rwx,g=r-x,o=---'.
+ *
+ * @since Always.
*/
HUMANMODE_MASK = 2,
};
@@ -61,6 +67,8 @@ enum humanmode_mode
/**
* Representation settings for converting
* sizes to human-readable format.
+ *
+ * @since Always.
*/
enum humansize_mode
{
@@ -69,6 +77,8 @@ enum humansize_mode
*
* Cannot be combined with `HUMANSIZE_IEC`
* or `HUMANSIZE_IEC_EXPLICIT`.
+ *
+ * @since Always.
*/
HUMANSIZE_SI = 1,
@@ -77,6 +87,8 @@ enum humansize_mode
*
* Cannot be combined with `HUMANSIZE_SI`
* or `HUMANSIZE_IEC_EXPLICIT`.
+ *
+ * @since Always.
*/
HUMANSIZE_IEC = 2,
@@ -85,12 +97,16 @@ enum humansize_mode
*
* Cannot be combined with `HUMANSIZE_SI`
* or `HUMANSIZE_IEC`.
+ *
+ * @since Always.
*/
HUMANSIZE_IEC_EXPLICIT = 4,
/**
* 'B' is only included if there is no prefix.
+ *
+ * @since Always.
*/
HUMANSIZE_PREFIX_ONLY = 8,
@@ -103,6 +119,8 @@ enum humansize_mode
* and `detail == 3` may yeild '3TB 2MB' for the same size.
*
* Cannot be combined with `HUMANSIZE_ROUND`.
+ *
+ * @since Always.
*/
HUMANSIZE_EXACT = 16,
@@ -112,6 +130,8 @@ enum humansize_mode
* `detail` < 0 is allowed,
*
* Cannot be combined with `HUMANSIZE_EXACT`.
+ *
+ * @since Always.
*/
HUMANSIZE_ROUND = 32,
};
@@ -120,6 +140,8 @@ enum humansize_mode
/**
* Settings for treating ambiguous file size
* and file offset representations when parsing.
+ *
+ * @since Always.
*/
enum machinesize_mode
{
@@ -129,6 +151,8 @@ enum machinesize_mode
* If `MACHINESIZE_IEC` is also used,
* 1000-base is used if 'B' is explicitly
* included, otherwise 1024-base is used.
+ *
+ * @since Always.
*/
MACHINESIZE_SI = 1,
@@ -138,6 +162,8 @@ enum machinesize_mode
* If `MACHINESIZE_SI` is also used,
* 1000-base is used if 'B' is explicitly
* included, otherwise 1024-base is used.
+ *
+ * @since Always.
*/
MACHINESIZE_IEC = 2,
};
@@ -146,6 +172,8 @@ enum machinesize_mode
/**
* Ways to handled unrecognised escapes,
* and other configurations.
+ *
+ * @since Always.
*/
enum unescape_mode
{
@@ -155,6 +183,8 @@ enum unescape_mode
*
* Cannot be used together with
* `UNESCAPE_VERBATIM` or `UNESCAPE_IGNORE`.
+ *
+ * @since Always.
*/
UNESCAPE_EINVAL = 1,
@@ -164,6 +194,8 @@ enum unescape_mode
*
* Cannot be used together with
* `UNESCAPE_EINVAL` or `UNESCAPE_IGNORE`.
+ *
+ * @since Always.
*/
UNESCAPE_VERBATIM = 2,
@@ -173,6 +205,8 @@ enum unescape_mode
*
* Cannot be used together with
* `UNESCAPE_EINVAL` or `UNESCAPE_VERBATIM`.
+ *
+ * @since Always.
*/
UNESCAPE_IGNORE = 4,
@@ -182,6 +216,8 @@ enum unescape_mode
*
* If not used, '\&' is handled as an
* unsupported escape.
+ *
+ * @since Always.
*/
UNESCAPE_AMPERSAND = 8,
@@ -191,6 +227,8 @@ enum unescape_mode
*
* If not used, '\0' resolves to a
* 0 byte (termination).
+ *
+ * @since Always.
*/
UNESCAPE_MOD_UTF8 = 16,
};
@@ -212,6 +250,8 @@ enum unescape_mode
*
* @throws EINVAL If `mode` is invalid.
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
char* humanmode(char* restrict, mode_t, enum humanmode_mode);
@@ -231,6 +271,8 @@ char* humanmode(char* restrict, mode_t, enum humanmode_mode);
* @return Zero on success, -1 on error.
*
* @throws EINVAL If `str` is not parseable.
+ *
+ * @since Always.
*/
int machinemode(mode_t* restrict, mode_t* restrict, const char* restrict)
__GCC_ONLY(__attributes__((__nonnull__(3))));
@@ -262,6 +304,8 @@ int machinemode(mode_t* restrict, mode_t* restrict, const char* restrict)
* @throws EINVAL If `mode` is invalid.
* @throws EINVAL If `mode & HUMANSIZE_EXACT` and `detail < 0`.
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
char* humansize(char*, size_t, size_t, enum humansize_mode, int, const char* restrict,
const char* restrict, const char* restrict)
@@ -269,6 +313,7 @@ char* humansize(char*, size_t, size_t, enum humansize_mode, int, const char* res
/* TODO machinesize */
/* @etymology Convert to (machine)-representation: `(size)_t`. */
+/* @since Always. */
int machinesize(size_t* restrict size, const char* restrict str, enum machinesize_mode mode,
const char* restrict space, const char* restrict point);
@@ -276,17 +321,20 @@ int machinesize(size_t* restrict size, const char* restrict str, enum machinesiz
#ifdef __C99__
/* TODO humandur */
/* @etymology Convert to (human)-representation: (dur)ation. */
+/* @since Always. */
int humandur(intmax_t sec, long int nsec, const char* restrict point, const char* restrict format,
const char* restrict intraspacing, const char* restrict interspacing);
/* TODO machinedur */
/* @etymology Convert to (machine)-representation: (dur)ation. */
+/* @since Always. */
int machinedur(intmax_t* restrict sec, long int* nsec, const char* restrict str,
const char* restrict space, const char* restrict point);
/* TODO machineint */
/* @etymology Convert to (machine)-representation: signed (int)eger. */
+/* @since Always. */
char* machineint(intmax_t* restrict r, const char* restrict str)
__GCC_ONLY(__attribute__((__warn_unused_result__)));
# ifdef __CONST_CORRECT
@@ -295,6 +343,7 @@ char* machineint(intmax_t* restrict r, const char* restrict str)
/* TODO machineuint */
/* @etymology Convert to (machine)-representation: (u)nsigned (int)eger. */
+/* @since Always. */
char* machineuint(uintmax_t* restrict r, const char* restrict str)
__GCC_ONLY(__attribute__((__warn_unused_result__)));
# ifdef __CONST_CORRECT
@@ -304,6 +353,7 @@ char* machineuint(uintmax_t* restrict r, const char* restrict str)
/* TODO machinefloat */
/* @etymology Convert to (machine)-representation: (float)ing-point number. */
+/* @since Always. */
int machinefloat(long double* restrict r, const char* restrict str,
const char* restrict space, const char* restrict comma);
#ifdef __CONST_CORRECT
@@ -338,6 +388,8 @@ int machinefloat(long double* restrict r, const char* restrict str,
* @throws 0 `str` is `NULL`.
* @throws EINVAL If `mode` is invalid.
* @throws EINVAL If `str` is invalid and `mode & UNESCAPE_EINVAL`.
+ *
+ * @since Always.
*/
char* unescape(char*, enum unescape_mode);
@@ -357,6 +409,8 @@ char* unescape(char*, enum unescape_mode);
* @throws 0 `str` is `NULL`.
* @throws EINVAL If `quote` is invalid.
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
char* escape(const char* restrict)
__GCC_ONLY(__attribute__((__malloc__, __warn_unused_result__)));
diff --git a/include/slibc-print.h b/include/slibc-print.h
index dc3b90c..194e9cb 100644
--- a/include/slibc-print.h
+++ b/include/slibc-print.h
@@ -38,17 +38,23 @@
* function is called again.
*
* @etymology (`generic_printf`)-subsystem: (ext)ension (queue).
+ *
+ * @since Always.
*/
struct generic_printf_ext_queue
{
/**
* Sizes, in bytes, of the missing arguments.
* Only 1, 2, 4 and 8 are allowed.
+ *
+ * @since Always.
*/
char sizes[4];
/**
* The indices of the missing arguments.
+ *
+ * @since Always.
*/
size_t indices[4];
@@ -60,6 +66,8 @@ struct generic_printf_ext_queue
* omitted arguments. To avoid a deadlock,
* add arguments in the order of their index
* if there are more than 4 missing arguments.
+ *
+ * @since Always.
*/
size_t count;
};
@@ -78,6 +86,8 @@ struct generic_printf_ext_queue
* `vgeneric_wprintf` via the parameter `data`.
* @return Zero on success, -1 on error. `errno` shall
* be set on error.
+ *
+ * @since Always.
*/
typedef int (* generic_printf_write_func_t)(const char*, size_t, void*);
@@ -86,6 +96,8 @@ typedef int (* generic_printf_write_func_t)(const char*, size_t, void*);
* `generic_wprintf` and `vgeneric_wprintf`.
*
* @etymology (`generic_wprintf`)-subsystem: (write-func)tion, `(t)ypedef`.
+ *
+ * @since Always.
*/
typedef int (* generic_wprintf_write_func_t)(const wchar_t*, size_t, void*);
@@ -109,6 +121,8 @@ typedef int (* generic_wprintf_write_func_t)(const wchar_t*, size_t, void*);
* value of `argn`, if `queue_data` must be set.
*
* @throws EINVAL If `code` could not be recognised.
+ *
+ * @since Always.
*/
typedef ssize_t (* generic_printf_ext_func_t)(const char*, intmax_t*, size_t, int, void*,
struct generic_printf_ext_queue*);
@@ -118,6 +132,8 @@ typedef ssize_t (* generic_printf_ext_func_t)(const char*, intmax_t*, size_t, in
* `generic_wprintf` and `vgeneric_wprintf`.
*
* @etymology (`generic_wprintf`)-subsystem: (ext)ension(-func)tion, `(t)ypedef`.
+ *
+ * @since Always.
*/
typedef ssize_t (* generic_wprintf_ext_func_t)(const wchar_t*, intmax_t*, size_t, int, void*,
struct generic_printf_ext_queue*);
@@ -150,6 +166,8 @@ typedef ssize_t (* generic_wprintf_ext_func_t)(const wchar_t*, intmax_t*, size_t
*
* @throws Any error thrown by `write_function` or `extension_function`.
* @throws EINVAL `format` contained unsupported formatting codes.
+ *
+ * @since Always.
*/
int generic_printf(generic_printf_write_func_t, generic_printf_ext_func_t,
size_t, int, size_t* restrict, int, void*, const char*, ...)
@@ -183,6 +201,8 @@ int generic_printf(generic_printf_write_func_t, generic_printf_ext_func_t,
*
* @throws Any error thrown by `write_function` or `extension_function`.
* @throws EINVAL `format` contained unsupported formatting codes.
+ *
+ * @since Always.
*/
int vgeneric_printf(generic_printf_write_func_t, generic_printf_ext_func_t,
size_t, int, size_t* restrict, int, void*, const char*, va_list)
@@ -216,6 +236,8 @@ int vgeneric_printf(generic_printf_write_func_t, generic_printf_ext_func_t,
*
* @throws Any error thrown by `write_function` or `extension_function`.
* @throws EINVAL `format` contained unsupported formatting codes.
+ *
+ * @since Always.
*/
int generic_wprintf(generic_wprintf_write_func_t, generic_wprintf_ext_func_t,
size_t, int, size_t* restrict, int, void*, const wchar_t*, ...)
@@ -250,6 +272,8 @@ int generic_wprintf(generic_wprintf_write_func_t, generic_wprintf_ext_func_t,
*
* @throws Any error thrown by `write_function` or `extension_function`.
* @throws EINVAL `format` contained unsupported formatting codes.
+ *
+ * @since Always.
*/
int vgeneric_wprintf(generic_wprintf_write_func_t, generic_wprintf_ext_func_t,
size_t, int, size_t* restrict, int, void*, const wchar_t*, va_list)
diff --git a/include/slibc/version.h b/include/slibc/version.h
index 00eebba..73f0395 100644
--- a/include/slibc/version.h
+++ b/include/slibc/version.h
@@ -34,24 +34,32 @@
* however `.<patch>` is omitted if the patch-number is nought,
* `.<micro>` is omitted if the both the patch- and micro-number
* are nought.
+ *
+ * @since Always.
*/
#define __SLIBC_MAJOR__ 0
/**
* The minor-number in the version of slibc that
* you are compiling against.
+ *
+ * @since Always.
*/
#define __SLIBC_MINOR__ 1
/**
* The micro-number in the version of slibc that
* you are compiling against.
+ *
+ * @since Always.
*/
#define __SLIBC_MICRO__ 0
/**
* The patch-number in the version of slibc that
* you are compiling against.
+ *
+ * @since Always.
*/
#define __SLIBC_PATCH__ 0
@@ -80,6 +88,8 @@
*
* You can check if this header is defined to
* check whether you are using slibc at all.
+ *
+ * @since Always.
*/
#define __SLIBC__ \
__SLIBC_CONSTRUCT_VERSION(__SLIBC_MAJOR__, __SLIBC_MINOR__, \
@@ -95,6 +105,8 @@
* @param minor The minor-number of the least required version of slibc.
* @param micro The micro-number of the least required version of slibc.
* @param patch The patch-number of the least required version of slibc.
+ *
+ * @since Always.
*/
#define __SLIBC_REQ_4__(major, minor, micro, patch) \
(__SLIBC__ >= __SLIBC_CONSTRUCT_VERSION(major, minor, micro, patch))
@@ -107,6 +119,8 @@
* @param major The major-number of the least required version of slibc.
* @param minor The minor-number of the least required version of slibc.
* @param micro The micro-number of the least required version of slibc.
+ *
+ * @since Always.
*/
#define __SLIBC_REQ_3__(major, minor, micro) \
__SLIBC_REQ_4__(major, minor, micro, patch)
@@ -118,6 +132,8 @@
*
* @param major The major-number of the least required version of slibc.
* @param minor The minor-number of the least required version of slibc.
+ *
+ * @since Always.
*/
#define __SLIBC_REQ__(major, minor) \
__SLIBC_REQ_4__(major, minor, 0, 0)
diff --git a/include/stdalign.h b/include/stdalign.h
index e322a50..9d7d8e9 100644
--- a/include/stdalign.h
+++ b/include/stdalign.h
@@ -32,6 +32,8 @@
* @etymology (Align as) type.
*
* @param type The type whose alignment shall be used.
+ *
+ * @since Always.
*/
#if !defined(__C11__) && defined(__GNUC__)
# define _Alignas(type) __attribute__((__aligned__(type)))
@@ -46,6 +48,8 @@
*
* @param type The type.
* @return The alignment of the type.
+ *
+ * @since Always.
*/
#if !defined(__C11__) && defined(__GNUC__)
# define _Alignof(type) __alignof__(type)
diff --git a/include/stdarg.h b/include/stdarg.h
index 9012fb6..0f6306d 100644
--- a/include/stdarg.h
+++ b/include/stdarg.h
@@ -43,6 +43,8 @@
* State of variadic argument-reading.
*
* @etymology (V)ariadic (a)rguments-subsystem: argument-(list).
+ *
+ * @since Always.
*/
#ifndef __DEFINED_va_list
# define __DEFINED_va_list
@@ -62,6 +64,8 @@ typedef __builtin_va_list va_list;
*
* @param state:va_list The state of the variadic argument-reading.
* @param last:identifier The the last non-variadic argument.
+ *
+ * @since Always.
*/
#ifndef va_start
# ifndef __PORTABLE
@@ -77,6 +81,8 @@ typedef __builtin_va_list va_list;
* @etymology (V)ariadic (a)rguments-subsystem: (end) of use.
*
* @param state:va_list The state of the variadic argument-reading.
+ *
+ * @since Always.
*/
#ifndef va_end
# ifndef __PORTABLE
@@ -97,6 +103,8 @@ typedef __builtin_va_list va_list;
* are promoted in the cal, thus you must not use a
* type smaller than `int`, lest bad things will happen.
* @return :`type` The next argument.
+ *
+ * @since Always.
*/
#ifndef va_arg
# define va_arg(state, type) __builtin_va_arg(state, type)
@@ -109,6 +117,8 @@ typedef __builtin_va_list va_list;
*
* @param destination:va_list The copy if `source`.
* @param source:va_list The state of the variadic argument-reading.
+ *
+ * @since Always.
*/
#ifndef va_copy
# define va_copy(destination, source) __builtin_va_copy(destination, source)
diff --git a/include/stdbool.h b/include/stdbool.h
index 95f6f2c..531f583 100644
--- a/include/stdbool.h
+++ b/include/stdbool.h
@@ -36,16 +36,22 @@
* value to be converted to zero.
*
* @etymology (Bool)ean.
+ *
+ * @since Always.
*/
#define bool _Bool
/**
* A true value.
+ *
+ * @since Always.
*/
#define true 1
/**
* An untrue value.
+ *
+ * @since Always.
*/
#define false 0
@@ -53,6 +59,8 @@
* This macro can be relied on being defined and set to 1 if
* <stdbool.h> has defined the type `bool` (as a macro) and
* the constants (macros) `true` and `false`.
+ *
+ * @since Always.
*/
#define __bool_true_false_are_defined 1
diff --git a/include/stddef.h b/include/stddef.h
index 0f45c6a..c2a806b 100644
--- a/include/stddef.h
+++ b/include/stddef.h
@@ -43,6 +43,8 @@
* features, is harmful too.
*
* @etymology Pointer with numerical value (0).
+ *
+ * @since Always.
*/
#ifndef NULL
# define NULL ((void*)0)
@@ -72,6 +74,8 @@
* @param member:identifier The identifier for a member, direct or indirect,
* of the structure.
* @return :size_t The offset of the member.
+ *
+ * @since Always.
*/
#define offsetof(type, member) \
((size_t)((char*)&(((type*)NULL)->member) - (char*)NULL))
diff --git a/include/stdint.h b/include/stdint.h
index 038521f..ab3cd85 100644
--- a/include/stdint.h
+++ b/include/stdint.h
@@ -42,12 +42,16 @@
/**
* Macro that ensure that a signed numeral literal
* of at most 8 encoding bits does not overflow.
+ *
+ * @since Always.
*/
# define INT8_C(value) value
/**
* Macro that ensure that an unsigned numeral literal
* of at most 8 encoding bits does not overflow.
+ *
+ * @since Always.
*/
# define UINT8_C(value) value
@@ -55,12 +59,16 @@
/**
* Macro that ensure that a signed numeral literal
* of at most 16 encoding bits does not overflow.
+ *
+ * @since Always.
*/
# define INT16_C(value) value
/**
* Macro that ensure that an unsigned numeral literal
* of at most 16 encoding bits does not overflow.
+ *
+ * @since Always.
*/
# define UINT16_C(value) value ## U
@@ -68,6 +76,8 @@
/**
* Macro that ensure that a signed numeral literal
* of at most 32 encoding bits does not overflow.
+ *
+ * @since Always.
*/
# if __INT_BIT == 16
# define INT32_C(value) value ## L
@@ -78,6 +88,8 @@
/**
* Macro that ensure that an unsigned numeral literal
* of at most 32 encoding bits does not overflow.
+ *
+ * @since Always.
*/
# if __INT_BIT == 16
# define UINT32_C(value) value ## UL
@@ -89,6 +101,8 @@
/**
* Macro that ensure that a signed numeral literal
* of at most 64 encoding bits does not overflow.
+ *
+ * @since Always.
*/
# if __LONG_BIT == 32
# define INT64_C(value) value ## LL
@@ -99,6 +113,8 @@
/**
* Macro that ensure that an unsigned numeral literal
* of at most 64 encoding bits does not overflow.
+ *
+ * @since Always.
*/
# if __LONG_BIT == 32
# define UINT64_C(value) value ## ULL
@@ -111,6 +127,8 @@
* Macro that ensure that any signed numeral literal
* does not overflow, unless there is no scalar integer
* type that can hold it.
+ *
+ * @since Always.
*/
# if __LONG_BIT == __LONG_LONG_BIT
# define INTMAX_C(value) value ## L
@@ -122,6 +140,8 @@
* Macro that ensure that any unsigned numeral literal
* does not overflow, unless there is no scalar integer
* type that can hold it.
+ *
+ * @since Always.
*/
# if __LONG_BIT == __LONG_LONG_BIT
# define UINTMAX_C(value) value ## UL
@@ -133,214 +153,294 @@
/**
* Maximum value of `uint8_t`.
+ *
+ * @since Always.
*/
# define UINT8_MAX (UINT8_C(0xFF))
/**
* Maximum value of `int8_t`.
+ *
+ * @since Always.
*/
# define INT8_MAX (INT8_C(0x7F))
/**
* Minimum value of `int8_t`.
+ *
+ * @since Always.
*/
# define INT8_MIN (-(INT8_MAX) - 1)
/**
* Maximum value of `uint16_t`.
+ *
+ * @since Always.
*/
# define UINT16_MAX (UINT16_C(0xFFFF))
/**
* Maximum value of `int16_t`.
+ *
+ * @since Always.
*/
# define INT16_MAX (INT16_C(0x7FFF))
/**
* Minimum value of `int16_t`.
+ *
+ * @since Always.
*/
# define INT16_MIN (-(INT16_MAX) - 1)
/**
* Maximum value of `uint32_t`.
+ *
+ * @since Always.
*/
# define UINT32_MAX (UINT32_C(0xFFFFFFFF))
/**
* Maximum value of `int32_t`.
+ *
+ * @since Always.
*/
# define INT32_MAX (INT32_C(0x7FFFFFFF))
/**
* Minimum value of `int32_t`.
+ *
+ * @since Always.
*/
# define INT32_MIN (-(INT32_MAX) - 1)
/**
* Maximum value of `uint64_t`.
+ *
+ * @since Always.
*/
# define UINT64_MAX (UINT64_C(0xFFFFFFFFFFFFFFFF))
/**
* Maximum value of `int64_t`.
+ *
+ * @since Always.
*/
# define INT64_MAX (INT64_C(0x7FFFFFFFFFFFFFFF))
/**
* Minimum value of `int64_t`.
+ *
+ * @since Always.
*/
# define INT64_MIN (-(INT64_MAX) - 1)
/**
* Maximum value of `uint_least8_t`.
+ *
+ * @since Always.
*/
# define UINT_LEAST8_MAX UINT8_MAX
/**
* Maximum value of `int_least8_t`.
+ *
+ * @since Always.
*/
# define INT_LEAST8_MAX INT8_MAX
/**
* Minimum value of `int_least8_t`.
+ *
+ * @since Always.
*/
# define INT_LEAST8_MIN (__MAX_TO_MIN(INT_LEAST8_MAX))
/**
* Maximum value of `uint_least16_t`.
+ *
+ * @since Always.
*/
# define UINT_LEAST16_MAX UINT16_MAX
/**
* Maximum value of `int_least16_t`.
+ *
+ * @since Always.
*/
# define INT_LEAST16_MAX INT16_MAX
/**
* Minimum value of `int_least16_t`.
+ *
+ * @since Always.
*/
# define INT_LEAST16_MIN (__MAX_TO_MIN(INT_LEAST16_MAX))
/**
* Maximum value of `uint_least32_t`.
+ *
+ * @since Always.
*/
# define UINT_LEAST32_MAX UINT32_MAX
/**
* Maximum value of `int_least32_t`.
+ *
+ * @since Always.
*/
# define INT_LEAST32_MAX INT32_MAX
/**
* Minimum value of `int_least32_t`.
+ *
+ * @since Always.
*/
# define INT_LEAST32_MIN (__MAX_TO_MIN(INT_LEAST32_MAX))
/**
* Maximum value of `uint_least64_t`.
+ *
+ * @since Always.
*/
# define UINT_LEAST64_MAX UINT64_MAX
/**
* Maximum value of `int_least64_t`.
+ *
+ * @since Always.
*/
# define INT_LEAST64_MAX INT64_MAX
/**
* Minimum value of `int_least64_t`.
+ *
+ * @since Always.
*/
# define INT_LEAST64_MIN (__MAX_TO_MIN(INT_LEAST64_MAX))
/**
* Maximum value of `uint_fast8_t`.
+ *
+ * @since Always.
*/
# define UINT_FAST8_MAX __UINT_FAST8_MAX
/**
* Maximum value of `int_fast8_t`.
+ *
+ * @since Always.
*/
# define INT_FAST8_MAX __INT_FAST8_MAX
/**
* Minimum value of `int_fast8_t`.
+ *
+ * @since Always.
*/
# define INT_FAST8_MIN (__MAX_TO_MIN(INT_FAST8_MAX))
/**
* Maximum value of `uint_fast16_t`.
+ *
+ * @since Always.
*/
# define UINT_FAST16_MAX __UINT_FAST16_MAX
/**
* Maximum value of `int_fast16_t`.
+ *
+ * @since Always.
*/
# define INT_FAST16_MAX __INT_FAST16_MAX
/**
* Minimum value of `int_fast16_t`.
+ *
+ * @since Always.
*/
# define INT_FAST16_MIN (__MAX_TO_MIN(INT_FAST16_MAX))
/**
* Maximum value of `uint_fast32_t`.
+ *
+ * @since Always.
*/
# define UINT_FAST32_MAX __UINT_FAST32_MAX
/**
* Maximum value of `int_fast32_t`.
+ *
+ * @since Always.
*/
# define INT_FAST32_MAX __INT_FAST32_MAX
/**
* Minimum value of `int_fast32_t`.
+ *
+ * @since Always.
*/
# define INT_FAST32_MIN (__MAX_TO_MIN(INT_FAST32_MAX))
/**
* Maximum value of `uint_fast64_t`.
+ *
+ * @since Always.
*/
# define UINT_FAST64_MAX __UINT_FAST64_MAX
/**
* Maximum value of `int_fast64_t`.
+ *
+ * @since Always.
*/
# define INT_FAST64_MAX __INT_FAST64_MAX
/**
* Minimum value of `int_fast64_t`.
+ *
+ * @since Always.
*/
# define INT_FAST64_MIN (__MAX_TO_MIN(INT_FAST64_MAX))
/**
* Maximum value of `uintmax_t`.
+ *
+ * @since Always.
*/
# define UINTMAX_MAX __UINTMAX_MAX
/**
* Maximum value of `intmax_t`.
+ *
+ * @since Always.
*/
# define INTMAX_MAX __INTMAX_MAX
/**
* Minimum value of `intmax_t`.
+ *
+ * @since Always.
*/
# define INTMAX_MIN (__MAX_TO_MIN(INTMAX_MIN))
/**
* Maximum value of `uintptr_t`.
+ *
+ * @since Always.
*/
# if __PTR_BIT == 8
# define UINTPTR_MAX UINT8_MAX
@@ -354,6 +454,8 @@
/**
* Maximum value of `intptr_t`.
+ *
+ * @since Always.
*/
# if __PTR_BIT == 8
# define INTPTR_MAX INT8_MAX
@@ -367,6 +469,8 @@
/**
* Minimum value of `intptr_t`.
+ *
+ * @since Always.
*/
# define INTPTR_MIN (__MAX_TO_MIN(INTPTR_MAX))
#endif
@@ -374,16 +478,22 @@
/**
* Maximum value of `size_t`.
+ *
+ * @since Always.
*/
#define SIZE_MAX UINTPTR_MAX
/**
* Maximum value of `ssize_t`.
+ *
+ * @since Always.
*/
#define SSIZE_MAX INTPTR_MAX
/**
* Minimum value of `ssize_t`.
+ *
+ * @since Always.
*/
#define SSIZE_MIN INTPTR_MIN
@@ -391,22 +501,30 @@
#ifndef __PORTABLE
/**
* Maximum value of `wchar_t`.
+ *
+ * @since Always.
*/
# define WCHAR_MAX __WCHAR_MAX
/**
* Minimum value of `wchar_t`.
+ *
+ * @since Always.
*/
# define WCHAR_MIN (__MAX_TO_MIN(WCHAR_MAX))
/**
* Maximum value of `wint_t`.
+ *
+ * @since Always.
*/
# define WINT_MAX WCHAR_MAX
/**
* Minimum value of `wint_t`.
+ *
+ * @since Always.
*/
# define WINT_MIN WCHAR_MIN
#endif
@@ -414,6 +532,8 @@
/**
* Maximum value of `sig_atomic_t`.
+ *
+ * @since Always.
*/
#if __SIG_ATOMIC_BIT == 8
# define SIG_ATOMIC_MAX INT8_MAX
@@ -427,6 +547,8 @@
/**
* Minimum value of `sig_atomic_t`.
+ *
+ * @since Always.
*/
#define SIG_ATOMIC_MIN (__MAX_TO_MIN(__SIG_ATOMIC_MAX))
diff --git a/include/stdio.h b/include/stdio.h
index 0f78e6e..c1b4a09 100644
--- a/include/stdio.h
+++ b/include/stdio.h
@@ -61,6 +61,8 @@ int fflush(FILE*);
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `fwrite`.
+ *
+ * @since Always.
*/
int printf(const char* restrict, ...)
__GCC_ONLY(__attribute__((__nonnull__(1), __format__(__slibc_printf__, 1, 2))));
@@ -84,6 +86,8 @@ int printf(const char* restrict, ...)
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `fwrite`.
+ *
+ * @since Always.
*/
int fprintf(FILE* restrict, const char* restrict, ...)
__GCC_ONLY(__attribute__((__nonnull__(1, 2), __format__(__slibc_printf__, 2, 3))));
@@ -109,6 +113,8 @@ int fprintf(FILE* restrict, const char* restrict, ...)
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `fwrite_unlocked`.
+ *
+ * @since Always.
*/
int fprintf_unlocked(FILE* restrict, const char* restrict, ...)
__GCC_ONLY(__attribute__((__nonnull__(1, 2), __format__(__slibc_printf__, 2, 3))));
@@ -134,6 +140,8 @@ int fprintf_unlocked(FILE* restrict, const char* restrict, ...)
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `write`.
+ *
+ * @since Always.
*/
int dprintf(int, const char* restrict, ...)
__GCC_ONLY(__attribute__((__nonnull__(2), __format__(__slibc_printf__, 2, 3))));
@@ -147,7 +155,7 @@ int dprintf(int, const char* restrict, ...)
* This is a slibc extension added for completeness.
*
* @param fd The file descriptor.
- * @parma flags Flags to pass to `send`, see `send`
+ * @param flags Flags to pass to `send`, see `send`
* for more information.
* @param format The formatting-string.
* @param ... The formatting-arguments.
@@ -162,6 +170,8 @@ int dprintf(int, const char* restrict, ...)
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `write`.
+ *
+ * @since Always.
*/
int sockprintf(int, int, const char* restrict, ...)
__GCC_ONLY(__attribute__((__nonnull__(3), __format__(__slibc_printf__, 3, 4))));
@@ -187,6 +197,8 @@ int sockprintf(int, int, const char* restrict, ...)
* use "%zn" to find the actual length.
*
* @throws EINVAL `format` contained unsupported formatting codes.
+ *
+ * @since Always.
*/
int sprintf(char* restrict, const char* restrict, ...)
__GCC_ONLY(__attribute__((__nonnull__(1, 2), __format__(__slibc_printf__, 2, 3))));
@@ -211,6 +223,8 @@ int sprintf(char* restrict, const char* restrict, ...)
* actual length.
*
* @throws EINVAL `format` contained unsupported formatting codes.
+ *
+ * @since Always.
*/
int snprintf(char* restrict, size_t, const char* restrict, ...)
__GCC_ONLY(__attribute__((__nonnull__(3), __format__(__slibc_printf__, 3, 4))));
@@ -245,6 +259,8 @@ int snprintf(char* restrict, size_t, const char* restrict, ...)
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws ENOMEM The process cannot allocation the
* sufficient amount of memory.
+ *
+ * @since Always.
*/
int asprintf(char** restrict, const char* restrict, ...)
__GCC_ONLY(__attribute__((__nonnull__(1, 2), __format__(__slibc_printf__, 2, 3), __warn_unused_result__)));
@@ -280,6 +296,8 @@ int asprintf(char** restrict, const char* restrict, ...)
* use "%zn" to find the actual length.
*
* @throws EINVAL `format` contained unsupported formatting codes.
+ *
+ * @since Always.
*/
#define asprintfa(buffer, format, ...) \
({ \
@@ -333,6 +351,8 @@ int asprintf(char** restrict, const char* restrict, ...)
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws ENOMEM The process cannot allocation the
* sufficient amount of memory.
+ *
+ * @since Always.
*/
int bprintf(char** restrict, size_t* restrict, size_t, int, const char* restrict, ...)
__GCC_ONLY(__attribute__((__nonnull__(1, 2, 5), __format__(__slibc_printf__, 5, 6), __warn_unused_result__)));
@@ -356,6 +376,8 @@ int bprintf(char** restrict, size_t* restrict, size_t, int, const char* restrict
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `fwrite`.
+ *
+ * @since Always.
*/
int vprintf(const char* restrict, va_list)
__GCC_ONLY(__attribute__((__nonnull__(1))));
@@ -378,6 +400,8 @@ int vprintf(const char* restrict, va_list)
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `fwrite`.
+ *
+ * @since Always.
*/
int vfprintf(FILE* restrict, const char* restrict, va_list)
__GCC_ONLY(__attribute__((__nonnull__(1, 2))));
@@ -403,6 +427,8 @@ int vfprintf(FILE* restrict, const char* restrict, va_list)
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `fwrite_unlocked`.
+ *
+ * @since Always.
*/
int vfprintf_unlocked(FILE* restrict, const char* restrict, va_list)
__GCC_ONLY(__attribute__((__nonnull__(1, 2))));
@@ -426,6 +452,8 @@ int vfprintf_unlocked(FILE* restrict, const char* restrict, va_list)
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `write`.
+ *
+ * @since Always.
*/
int vdprintf(int, const char* restrict, va_list)
__GCC_ONLY(__attribute__((__nonnull__(2))));
@@ -438,7 +466,7 @@ int vdprintf(int, const char* restrict, va_list)
* This is a slibc extension added for completeness.
*
* @param fd The file descriptor.
- * @parma flags Flags to pass to `send`, see `send`
+ * @param flags Flags to pass to `send`, see `send`
* for more information.
* @param format The formatting-string.
* @param args The formatting-arguments.
@@ -453,6 +481,8 @@ int vdprintf(int, const char* restrict, va_list)
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `write`.
+ *
+ * @since Always.
*/
int vsockprintf(int, int, const char* restrict, va_list)
__GCC_ONLY(__attribute__((__nonnull__(3), __format__(__slibc_printf__, 3, 4))));
@@ -475,6 +505,8 @@ int vsockprintf(int, int, const char* restrict, va_list)
* use "%zn" to find the actual length.
*
* @throws EINVAL `format` contained unsupported formatting codes.
+ *
+ * @since Always.
*/
int vsprintf(char* restrict, const char* restrict, va_list)
__GCC_ONLY(__attribute__((__nonnull__(1, 2))));
@@ -499,6 +531,8 @@ int vsprintf(char* restrict, const char* restrict, va_list)
* actual length.
*
* @throws EINVAL `format` contained unsupported formatting codes.
+ *
+ * @since Always.
*/
int vsnprintf(char* restrict, size_t, const char* restrict, va_list)
__GCC_ONLY(__attribute__((__nonnull__(3))));
@@ -532,6 +566,8 @@ int vsnprintf(char* restrict, size_t, const char* restrict, va_list)
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws ENOMEM The process cannot allocation the
* sufficient amount of memory.
+ *
+ * @since Always.
*/
int vasprintf(char** restrict, const char* restrict, va_list)
__GCC_ONLY(__attribute__((__nonnull__(1, 2), __warn_unused_result__)));
@@ -578,6 +614,8 @@ int vasprintf(char** restrict, const char* restrict, va_list)
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws ENOMEM The process cannot allocation the
* sufficient amount of memory.
+ *
+ * @since Always.
*/
int vbprintf(char** restrict, size_t* restrict, size_t, int, const char* restrict, va_list)
__GCC_ONLY(__attribute__((__nonnull__(1, 2, 5), __warn_unused_result__)));
@@ -602,6 +640,8 @@ int vbprintf(char** restrict, size_t* restrict, size_t, int, const char* restric
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `fwrite`.
+ *
+ * @since Always.
*/
int wprintf(const wchar_t* restrict, ...)
__GCC_ONLY(__attribute__((__nonnull__(1))));
@@ -624,6 +664,8 @@ int wprintf(const wchar_t* restrict, ...)
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `fwrite`.
+ *
+ * @since Always.
*/
int fwprintf(FILE* restrict, const wchar_t* restrict, ...)
__GCC_ONLY(__attribute__((__nonnull__(1, 2))));
@@ -649,6 +691,8 @@ int fwprintf(FILE* restrict, const wchar_t* restrict, ...)
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `fwrite_unlocked`.
+ *
+ * @since Always.
*/
int fwprintf_unlocked(FILE* restrict, const wchar_t* restrict, ...)
__GCC_ONLY(__attribute__((__nonnull__(1, 2))));
@@ -673,6 +717,8 @@ int fwprintf_unlocked(FILE* restrict, const wchar_t* restrict, ...)
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `write`.
+ *
+ * @since Always.
*/
int dwprintf(int, const wchar_t* restrict, ...)
__GCC_ONLY(__attribute__((__nonnull__(2))));
@@ -684,7 +730,7 @@ int dwprintf(int, const wchar_t* restrict, ...)
* This is a slibc extension added for completeness.
*
* @param fd The file descriptor.
- * @parma flags Flags to pass to `send`, see `send`
+ * @param flags Flags to pass to `send`, see `send`
* for more information.
* @param format The formatting-string.
* @param ... The formatting-arguments.
@@ -699,6 +745,8 @@ int dwprintf(int, const wchar_t* restrict, ...)
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `write`.
+ *
+ * @since Always.
*/
int sockwprintf(int, int, const wchar_t* restrict, ...)
__GCC_ONLY(__attribute__((__nonnull__(3))));
@@ -724,6 +772,8 @@ int sockwprintf(int, int, const wchar_t* restrict, ...)
* actual length.
*
* @throws EINVAL `format` contained unsupported formatting codes.
+ *
+ * @since Always.
*/
int swprintf(wchar_t* restrict, size_t, const wchar_t* restrict, ...)
__GCC_ONLY(__attribute__((__nonnull__(3))));
@@ -758,6 +808,8 @@ int swprintf(wchar_t* restrict, size_t, const wchar_t* restrict, ...)
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws ENOMEM The process cannot allocation the
* sufficient amount of memory.
+ *
+ * @since Always.
*/
int aswprintf(wchar_t** restrict, const wchar_t* restrict, ...)
__GCC_ONLY(__attribute__((__nonnull__(1, 2), __warn_unused_result__)));
@@ -793,6 +845,8 @@ int aswprintf(wchar_t** restrict, const wchar_t* restrict, ...)
* use "%zn" to find the actual length.
*
* @throws EINVAL `format` contained unsupported formatting codes.
+ *
+ * @since Always.
*/
#define aswprintfa(buffer, format, ...) \
({ \
@@ -847,6 +901,8 @@ int aswprintf(wchar_t** restrict, const wchar_t* restrict, ...)
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws ENOMEM The process cannot allocation the
* sufficient amount of memory.
+ *
+ * @since Always.
*/
int bwprintf(wchar_t** restrict, size_t* restrict, size_t, int, const wchar_t* restrict, ...)
__GCC_ONLY(__attribute__((__nonnull__(1, 2, 5), __warn_unused_result__)));
@@ -870,6 +926,8 @@ int bwprintf(wchar_t** restrict, size_t* restrict, size_t, int, const wchar_t* r
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `fwrite`.
+ *
+ * @since Always.
*/
int vwprintf(const wchar_t* restrict, va_list)
__GCC_ONLY(__attribute__((__nonnull__(1))));
@@ -892,6 +950,8 @@ int vwprintf(const wchar_t* restrict, va_list)
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `fwrite`.
+ *
+ * @since Always.
*/
int vfwprintf(FILE* restrict, const wchar_t* restrict, va_list)
__GCC_ONLY(__attribute__((__nonnull__(1, 2))));
@@ -917,6 +977,8 @@ int vfwprintf(FILE* restrict, const wchar_t* restrict, va_list)
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `fwrite_unlocked`.
+ *
+ * @since Always.
*/
int vfwprintf_unlocked(FILE* restrict, const wchar_t* restrict, va_list)
__GCC_ONLY(__attribute__((__nonnull__(1, 2))));
@@ -941,6 +1003,8 @@ int vfwprintf_unlocked(FILE* restrict, const wchar_t* restrict, va_list)
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `write`.
+ *
+ * @since Always.
*/
int vdwprintf(int, const wchar_t* restrict, va_list)
__GCC_ONLY(__attribute__((__nonnull__(2))));
@@ -952,7 +1016,7 @@ int vdwprintf(int, const wchar_t* restrict, va_list)
* This is a slibc extension added for completeness.
*
* @param fd The file descriptor.
- * @parma flags Flags to pass to `send`, see `send`
+ * @param flags Flags to pass to `send`, see `send`
* for more information.
* @param format The formatting-string.
* @param args The formatting-arguments.
@@ -967,6 +1031,8 @@ int vdwprintf(int, const wchar_t* restrict, va_list)
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `write`.
+ *
+ * @since Always.
*/
int vsockwprintf(int, int, const wchar_t* restrict, va_list)
__GCC_ONLY(__attribute__((__nonnull__(3))));
@@ -992,6 +1058,8 @@ int vsockwprintf(int, int, const wchar_t* restrict, va_list)
* actual length.
*
* @throws EINVAL `format` contained unsupported formatting codes.
+ *
+ * @since Always.
*/
int vswprintf(wchar_t* restrict, size_t, const wchar_t* restrict, va_list)
__GCC_ONLY(__attribute__((__nonnull__(3))));
@@ -1026,6 +1094,8 @@ int vswprintf(wchar_t* restrict, size_t, const wchar_t* restrict, va_list)
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws ENOMEM The process cannot allocation the
* sufficient amount of memory.
+ *
+ * @since Always.
*/
int vaswprintf(wchar_t** restrict, const wchar_t* restrict, va_list)
__GCC_ONLY(__attribute__((__nonnull__(1, 2), __warn_unused_result__)));
@@ -1073,6 +1143,8 @@ int vaswprintf(wchar_t** restrict, const wchar_t* restrict, va_list)
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws ENOMEM The process cannot allocation the
* sufficient amount of memory.
+ *
+ * @since Always.
*/
int vbwprintf(wchar_t** restrict, size_t* restrict, size_t, int, const wchar_t* restrict, va_list)
__GCC_ONLY(__attribute__((__nonnull__(1, 2, 5), __warn_unused_result__)));
@@ -1092,6 +1164,8 @@ int vbwprintf(wchar_t** restrict, size_t* restrict, size_t, int, const wchar_t*
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int scanf(const char* restrict, ...)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__(1), __format__(__slibc_scanf__, 1, 2))));
@@ -1109,6 +1183,8 @@ int scanf(const char* restrict, ...)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int fscanf(FILE* restrict, const char* restrict, ...)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__(1, 2), __format__(__slibc_scanf__, 2, 3))));
@@ -1126,6 +1202,8 @@ int fscanf(FILE* restrict, const char* restrict, ...)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int sscanf(const char* restrict, const char* restrict, ...)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__(1, 2), __format__(__slibc_scanf__, 2, 3))));
@@ -1145,6 +1223,8 @@ int sscanf(const char* restrict, const char* restrict, ...)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int fscanf_unlocked(FILE* restrict, const char* restrict, ...)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__(1, 2), __format__(__slibc_scanf__, 2, 3))));
@@ -1166,6 +1246,8 @@ int fscanf_unlocked(FILE* restrict, const char* restrict, ...)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int snscanf(const char* restrict, size_t, const char* restrict, ...)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__(3), __format__(__slibc_scanf__, 3, 4))));
@@ -1186,6 +1268,8 @@ int snscanf(const char* restrict, size_t, const char* restrict, ...)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int dscanf(int, const char* restrict, ...)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__(2), __format__(__slibc_scanf__, 2, 3))));
@@ -1203,6 +1287,8 @@ int dscanf(int, const char* restrict, ...)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int vscanf(const char* restrict, va_list)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__(1))));
@@ -1219,6 +1305,8 @@ int vscanf(const char* restrict, va_list)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int vfscanf(FILE* restrict, const char* restrict, va_list)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__(1, 2))));
@@ -1235,6 +1323,8 @@ int vfscanf(FILE* restrict, const char* restrict, va_list)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int vsscanf(const char* restrict, const char* restrict, va_list)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__(1, 2))));
@@ -1254,6 +1344,8 @@ int vsscanf(const char* restrict, const char* restrict, va_list)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int vfscanf_unlocked(FILE* restrict, const char* restrict, va_list)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__(1, 2))));
@@ -1273,6 +1365,8 @@ int vfscanf_unlocked(FILE* restrict, const char* restrict, va_list)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int vsnscanf(const char* restrict, size_t, const char* restrict, va_list)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__(3))));
@@ -1291,6 +1385,8 @@ int vsnscanf(const char* restrict, size_t, const char* restrict, va_list)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int vdscanf(int, const char* restrict, va_list)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__(2))));
@@ -1308,6 +1404,8 @@ int vdscanf(int, const char* restrict, va_list)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int wscanf(const wchar_t* restrict, ...)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__(1))));
@@ -1324,6 +1422,8 @@ int wscanf(const wchar_t* restrict, ...)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int fwscanf(FILE* restrict, const wchar_t* restrict, ...)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__(1, 2))));
@@ -1340,6 +1440,8 @@ int fwscanf(FILE* restrict, const wchar_t* restrict, ...)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int swscanf(const wchar_t* restrict, const wchar_t* restrict, ...)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__(1, 2))));
@@ -1359,6 +1461,8 @@ int swscanf(const wchar_t* restrict, const wchar_t* restrict, ...)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int fwscanf_unlocked(FILE* restrict, const wchar_t* restrict, ...)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__(1, 2))));
@@ -1378,6 +1482,8 @@ int fwscanf_unlocked(FILE* restrict, const wchar_t* restrict, ...)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int snwscanf(const wchar_t* restrict, size_t, const wchar_t* restrict, ...)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__(3))));
@@ -1396,6 +1502,8 @@ int snwscanf(const wchar_t* restrict, size_t, const wchar_t* restrict, ...)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int dwscanf(int, const wchar_t* restrict, ...)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__(2))));
@@ -1413,6 +1521,8 @@ int dwscanf(int, const wchar_t* restrict, ...)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int vwscanf(const wchar_t* restrict, va_list)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__(1))));
@@ -1429,6 +1539,8 @@ int vwscanf(const wchar_t* restrict, va_list)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int vfwscanf(FILE* restrict, const wchar_t* restrict, va_list)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__(1, 2))));
@@ -1445,6 +1557,8 @@ int vfwscanf(FILE* restrict, const wchar_t* restrict, va_list)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int vswscanf(const wchar_t* restrict, const wchar_t* restrict, va_list)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__(1, 2))));
@@ -1464,6 +1578,8 @@ int vswscanf(const wchar_t* restrict, const wchar_t* restrict, va_list)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int vfwscanf_unlocked(FILE* restrict, const wchar_t* restrict, va_list)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__(1, 2))));
@@ -1483,6 +1599,8 @@ int vfwscanf_unlocked(FILE* restrict, const wchar_t* restrict, va_list)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int vsnwscanf(const wchar_t* restrict, size_t, const wchar_t* restrict, va_list)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__(3))));
@@ -1501,6 +1619,8 @@ int vsnwscanf(const wchar_t* restrict, size_t, const wchar_t* restrict, va_list)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int vdwscanf(int, const wchar_t* restrict, va_list)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__(2))));
@@ -1511,6 +1631,8 @@ int vdwscanf(int, const wchar_t* restrict, va_list)
#if !defined(__PORTABLE)
/**
* This function is identical to `scanf`.
+ *
+ * @since Always.
*/
int __isoc99_scanf(const char* restrict, ...)
__deprecated("Use 'scanf' instead.")
@@ -1518,6 +1640,8 @@ int __isoc99_scanf(const char* restrict, ...)
/**
* This function is identical to `fscanf`.
+ *
+ * @since Always.
*/
int __isoc99_fscanf(FILE* restrict, const char* restrict, ...)
__deprecated("Use 'fscanf' instead.")
@@ -1525,6 +1649,8 @@ int __isoc99_fscanf(FILE* restrict, const char* restrict, ...)
/**
* This function is identical to `sscanf`.
+ *
+ * @since Always.
*/
int __isoc99_sscanf(const char* restrict, const char* restrict, ...)
__deprecated("Use 'sscanf' instead.")
@@ -1533,6 +1659,8 @@ int __isoc99_sscanf(const char* restrict, const char* restrict, ...)
/**
* This function is identical to `vscanf`.
+ *
+ * @since Always.
*/
int __isoc99_vscanf(const char* restrict, va_list)
__deprecated("Use 'vscanf' instead.")
@@ -1540,6 +1668,8 @@ int __isoc99_vscanf(const char* restrict, va_list)
/**
* This function is identical to `vfscanf`.
+ *
+ * @since Always.
*/
int __isoc99_vfscanf(FILE* restrict, const char* restrict, va_list)
__deprecated("Use 'vfscanf' instead.")
@@ -1547,6 +1677,8 @@ int __isoc99_vfscanf(FILE* restrict, const char* restrict, va_list)
/**
* This function is identical to `vsscanf`.
+ *
+ * @since Always.
*/
int __isoc99_vsscanf(const char* restrict, const char* restrict, va_list)
__deprecated("Use 'vsscanf' instead.")
@@ -1555,6 +1687,8 @@ int __isoc99_vsscanf(const char* restrict, const char* restrict, va_list)
/**
* This function is identical to `wscanf`.
+ *
+ * @since Always.
*/
int __isoc99_wscanf(const wchar_t* restrict, ...)
__deprecated("Use 'wscanf' instead.")
@@ -1562,6 +1696,8 @@ int __isoc99_wscanf(const wchar_t* restrict, ...)
/**
* This function is identical to `fwscanf`.
+ *
+ * @since Always.
*/
int __isoc99_fwscanf(FILE* restrict, const wchar_t* restrict, ...)
__deprecated("Use 'fwscanf' instead.")
@@ -1569,6 +1705,8 @@ int __isoc99_fwscanf(FILE* restrict, const wchar_t* restrict, ...)
/**
* This function is identical to `swscanf`.
+ *
+ * @since Always.
*/
int __isoc99_swscanf(const wchar_t* restrict, const wchar_t* restrict, ...)
__deprecated("Use 'swscanf' instead.")
@@ -1577,6 +1715,8 @@ int __isoc99_swscanf(const wchar_t* restrict, const wchar_t* restrict, ...)
/**
* This function is identical to `vwscanf`.
+ *
+ * @since Always.
*/
int __isoc99_vwscanf(const wchar_t* restrict, va_list)
__deprecated("Use 'vwscanf' instead.")
@@ -1584,6 +1724,8 @@ int __isoc99_vwscanf(const wchar_t* restrict, va_list)
/**
* This function is identical to `vfwscanf`.
+ *
+ * @since Always.
*/
int __isoc99_vfwscanf(FILE* restrict, const wchar_t* restrict, va_list)
__deprecated("Use 'vfwscanf' instead.")
@@ -1591,6 +1733,8 @@ int __isoc99_vfwscanf(FILE* restrict, const wchar_t* restrict, va_list)
/**
* This function is identical to `vswscanf`.
+ *
+ * @since Always.
*/
int __isoc99_vswscanf(const wchar_t* restrict, const wchar_t* restrict, va_list)
__deprecated("Use 'vswscanf' instead.")
diff --git a/include/stdlib.h b/include/stdlib.h
index 075d3a4..3229384 100644
--- a/include/stdlib.h
+++ b/include/stdlib.h
@@ -45,12 +45,16 @@
/**
* The value a process shall exit with upon
* success completion.
+ *
+ * @since Always.
*/
#define EXIT_SUCCESS 0
/**
* A standard value a process can exit with
* if it terminates because of failure.
+ *
+ * @since Always.
*/
#define EXIT_FAILURE 1
@@ -65,6 +69,8 @@
* the process will be killed by SIGFPE.
* @return The quotient in `.quot`, and
* the remainder in `.rem`.
+ *
+ * @since Always.
*/
div_t div(int, int)
__GCC_ONLY(__attribute__((__const__)));
@@ -78,6 +84,8 @@ div_t div(int, int)
* the process will be killed by SIGFPE.
* @return The quotient in `.quot`, and
* the remainder in `.rem`.
+ *
+ * @since Always.
*/
ldiv_t ldiv(long, long)
__GCC_ONLY(__attribute__((__const__)));
@@ -91,6 +99,8 @@ ldiv_t ldiv(long, long)
* the process will be killed by SIGFPE.
* @return The quotient in `.quot`, and
* the remainder in `.rem`.
+ *
+ * @since Always.
*/
lldiv_t lldiv(long long, long long)
__GCC_ONLY(__attribute__((__const__)));
@@ -106,6 +116,8 @@ lldiv_t lldiv(long long, long long)
*
* @param value The integer.
* @return The absolute value of the integer.
+ *
+ * @since Always.
*/
int (abs)(int)
__GCC_ONLY(__attribute__((__const__)));
@@ -121,6 +133,8 @@ int (abs)(int)
*
* @param value The integer.
* @return The absolute value of the integer.
+ *
+ * @since Always.
*/
long int (labs)(long int)
__GCC_ONLY(__attribute__((__const__)));
@@ -136,6 +150,8 @@ long int (labs)(long int)
*
* @param value The integer.
* @return The absolute value of the integer.
+ *
+ * @since Always.
*/
long long int (llabs)(long long int)
__GCC_ONLY(__attribute__((__const__)));
@@ -157,6 +173,8 @@ long long int (llabs)(long long int)
* if `file` does. (Or if `ref` does but file is empty.)
*
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
char* abspath(const char*, const char*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__(1), __malloc__)));
@@ -176,6 +194,8 @@ char* abspath(const char*, const char*)
* point to `file`.
*
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
char* relpath(const char*, const char*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__(1), __malloc__)));
@@ -194,6 +214,8 @@ char* relpath(const char*, const char*)
*
* @param string The string to convert.
* @return The number encoded by the string.
+ *
+ * @since Always.
*/
double atof(const char*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -210,6 +232,8 @@ double atof(const char*)
*
* @param string The string to convert.
* @return The integer encoded by the string.
+ *
+ * @since Always.
*/
int atoi(const char*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -226,6 +250,8 @@ int atoi(const char*)
*
* @param string The string to convert.
* @return The integer encoded by the string.
+ *
+ * @since Always.
*/
long int atol(const char*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -242,6 +268,8 @@ long int atol(const char*)
*
* @param string The string to convert.
* @return The integer encoded by the string.
+ *
+ * @since Always.
*/
long long int atoll(const char*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -251,6 +279,8 @@ long long int atoll(const char*)
* This function is identical to `atoll`.
*
* This is a Linux libc extension.
+ *
+ * @since Always.
*/
long long int atoq(const char*)
__deprecated("'atoq' is obsolete and not portable, use 'atoll' instead.")
diff --git a/include/stdnoreturn.h b/include/stdnoreturn.h
index 2aad0c4..1a88f1a 100644
--- a/include/stdnoreturn.h
+++ b/include/stdnoreturn.h
@@ -34,6 +34,8 @@
* Specifies that a function never returns, that is,
* the process exits or changes process image before
* the function returns.
+ *
+ * @since Always.
*/
# if !defined(__C11__) && defined(__GNUC__)
# define _Noreturn __attribute__((__noreturn__))
diff --git a/include/string.h b/include/string.h
index ea3a4de..8369f30 100644
--- a/include/string.h
+++ b/include/string.h
@@ -59,6 +59,8 @@
*
* @param errnum The error code.
* @return A description of the error.
+ *
+ * @since Always.
*/
char* strerror(int)
__GCC_ONLY(__attribute__((__returns_nonnull__, __warn_unused_result__)));
@@ -80,6 +82,8 @@ char* strerror(int)
* @param locale The locale, must be a valid locale and not
* `LC_GLOBAL_LOCALE`, lest the behaviour is undefined.
* @return A description of the error.
+ *
+ * @since Always.
*/
char* strerror_l(int, locale_t)
__GCC_ONLY(__attribute__((__warn_unused_result__))); /* TODO attributes */
@@ -102,6 +106,8 @@ char* strerror_l(int, locale_t)
* @return Zero on success, value for `errno` on error
*
* @throws ERANGE `buf` was too small to store the description.
+ *
+ * @since Always.
*/
int __xsi_strerror_r(int, char*, size_t); /* XSI-compliant strerror_r */
@@ -121,6 +127,8 @@ int __xsi_strerror_r(int, char*, size_t); /* XSI-compliant strerror_r */
* is set to indicate the error.
*
* @throws ERANGE `buf` was too small to store the description.
+ *
+ * @since Always.
*/
char* __gnu_strerror_r(int, char*, size_t); /* GNU-specific strerror_r */
@@ -139,6 +147,8 @@ char* __gnu_strerror_r(int, char*, size_t); /* GNU-specific strerror_r */
*
* @param str The string.
* @return The number of bytes before the first NUL byte.
+ *
+ * @since Always.
*/
size_t strlen(const char*)
__GCC_ONLY(__attribute__((__nonnull__, __warn_unused_result__, __pure__)));
@@ -154,6 +164,8 @@ size_t strlen(const char*)
* @param maxlen The number of bytes to inspect, at most.
* @return The number of bytes before, the first NUL byte.
* `maxlen` if no NUL byte was found.
+ *
+ * @since Always.
*/
size_t strnlen(const char*, size_t)
__GCC_ONLY(__attribute__((__warn_unused_result__, __pure__)));
@@ -168,6 +180,8 @@ size_t strnlen(const char*, size_t)
* @param c The character (8 bits wide.)
* @param size The size of the memory segment.
* @return `segment` is returned.
+ *
+ * @since Always.
*/
void* memset(void*, int, size_t);
@@ -178,6 +192,8 @@ void* memset(void*, int, size_t);
* @param whence The source memory segment.
* @param size The number of bytes to copy.
* @return `whither` is returned.
+ *
+ * @since Always.
*/
void* memcpy(void* restrict, const void* restrict, size_t);
@@ -191,6 +207,8 @@ void* memcpy(void* restrict, const void* restrict, size_t);
* @param whence The source memory segment.
* @param size The number of bytes to copy.
* @return `whither + size` is returned.
+ *
+ * @since Always.
*/
void* mempcpy(void* restrict, const void* restrict, size_t);
#endif
@@ -202,6 +220,8 @@ void* mempcpy(void* restrict, const void* restrict, size_t);
* @param whence The source memory segment.
* @param size The number of bytes to copy.
* @return `whither` is returned.
+ *
+ * @since Always.
*/
void* memmove(void*, const void*, size_t);
@@ -216,6 +236,8 @@ void* memmove(void*, const void*, size_t);
* @param whence The source memory segment.
* @param size The number of bytes to copy.
* @return `whither + size` is returned.
+ *
+ * @since Always.
*/
void* mempmove(void*, const void*, size_t);
#endif
@@ -233,6 +255,8 @@ void* mempmove(void*, const void*, size_t);
* that is, the address of `whither` plus the
* number of copied characters; the address of
* one character passed the last written character.
+ *
+ * @since Always.
*/
void* memccpy(void* restrict, const void* restrict, int, size_t);
@@ -252,6 +276,8 @@ void* memccpy(void* restrict, const void* restrict, int, size_t);
* that is, the address of `whither` plus the
* number of copied characters; the address of
* one character passed the last written character.
+ *
+ * @since Always.
*/
void* memcmove(void*, const void*, int, size_t);
@@ -264,6 +290,8 @@ void* memcmove(void*, const void*, int, size_t);
* @param str The beginning of the memory segment.
* @param c The character (8 bits wide.)
* @return `str` is returned.
+ *
+ * @since Always.
*/
char* strset(char* str, int c);
__GCC_ONLY(__attribute__((__returns_nonnull__, __nonnull__)));
@@ -276,6 +304,8 @@ char* strset(char* str, int c);
* @param whither The destination memory segment.
* @param whence The source memory segment.
* @return `whither` is returned.
+ *
+ * @since Always.
*/
char* strcpy(char* restrict, const char* restrict)
__GCC_ONLY(__attribute__((__returns_nonnull__, __nonnull__)));
@@ -287,6 +317,8 @@ char* strcpy(char* restrict, const char* restrict)
* @param whither The destination memory segment.
* @param whence The source memory segment.
* @return `whither + strlen(whence)` is returned.
+ *
+ * @since Always.
*/
char* stpcpy(char* restrict, const char* restrict)
__GCC_ONLY(__attribute__((__returns_nonnull__, __nonnull__)));
@@ -307,6 +339,8 @@ char* stpcpy(char* restrict, const char* restrict)
* number of copied characters; the address of
* one character passed the last written non-NUL
* character.
+ *
+ * @since Always.
*/
char* strccpy(char* restrict, const char* restrict, int)
__GCC_ONLY(__attribute__((__nonnull__)));
@@ -326,6 +360,8 @@ char* strccpy(char* restrict, const char* restrict, int)
* number of copied characters; the address of
* one character passed the last written non-NUL
* character.
+ *
+ * @since Always.
*/
char* strstrcpy(char* restrict, const char* restrict, const char* restrict)
__GCC_ONLY(__attribute__((__nonnull__(1, 2))));
@@ -344,6 +380,8 @@ char* strstrcpy(char* restrict, const char* restrict, const char* restrict)
* shorter, `whither` will be filled with NUL bytes
* until this amount of bytes have been written.
* @return `whither` is returned.
+ *
+ * @since Always.
*/
char* strncpy(char* restrict, const char* restrict, size_t)
__GCC_ONLY(__attribute__((__returns_nonnull__, __nonnull__)));
@@ -365,6 +403,8 @@ char* strncpy(char* restrict, const char* restrict, size_t)
* until this amount of bytes have been written.
* @return `whither` plus the number of written bytes,
* excluding NUL bytes, is returned.
+ *
+ * @since Always.
*/
char* stpncpy(char* restrict, const char* restrict, size_t)
__GCC_ONLY(__attribute__((__returns_nonnull__, __nonnull__)));
@@ -392,6 +432,8 @@ char* stpncpy(char* restrict, const char* restrict, size_t)
* number of copied characters; the address of
* one character passed the last written non-NUL
* character.
+ *
+ * @since Always.
*/
char* strcncpy(char* restrict, const char* restrict, int, size_t)
__GCC_ONLY(__attribute__((__nonnull__)));
@@ -418,6 +460,8 @@ char* strcncpy(char* restrict, const char* restrict, int, size_t)
* number of copied characters; the address of
* one character passed the last written non-NUL
* character.
+ *
+ * @since Always.
*/
char* strstrncpy(char* restrict, const char* restrict, const char* restrict, size_t)
__GCC_ONLY(__attribute__((__nonnull__(1, 2))));
@@ -434,6 +478,8 @@ char* strstrncpy(char* restrict, const char* restrict, const char* restrict, siz
* @param whither The destination memory segment.
* @param whence The source memory segment.
* @return `whither` is returned.
+ *
+ * @since Always.
*/
char* strmove(char*, const char*)
__GCC_ONLY(__attribute__((__returns_nonnull__, __nonnull__)));
@@ -447,6 +493,8 @@ char* strmove(char*, const char*)
* @param whither The destination memory segment.
* @param whence The source memory segment.
* @return `whither + strlen(whence)` is returned.
+ *
+ * @since Always.
*/
char* stpmove(char*, const char*)
__GCC_ONLY(__attribute__((__returns_nonnull__, __nonnull__)));
@@ -466,6 +514,8 @@ char* stpmove(char*, const char*)
* number of copied characters; the address of
* one character passed the last written non-NUL
* character.
+ *
+ * @since Always.
*/
char* strcmove(char*, const char*, int)
__GCC_ONLY(__attribute__((__nonnull__)));
@@ -485,6 +535,8 @@ char* strcmove(char*, const char*, int)
* number of copied characters; the address of
* one character passed the last written non-NUL
* character.
+ *
+ * @since Always.
*/
char* strstrmove(char*, const char*, const char* restrict)
__GCC_ONLY(__attribute__((__nonnull__(1, 2))));
@@ -504,6 +556,8 @@ char* strstrmove(char*, const char*, const char* restrict)
* shorter, `whither` will be filled with NUL bytes
* until this amount of bytes have been written.
* @return `whither` is returned.
+ *
+ * @since Always.
*/
char* strnmove(char*, const char*, size_t)
__GCC_ONLY(__attribute__((__returns_nonnull__, __nonnull__)));
@@ -526,6 +580,8 @@ char* strnmove(char*, const char*, size_t)
* until this amount of bytes have been written.
* @return `whither` plus the number of written bytes,
* excluding NUL bytes, is returned.
+ *
+ * @since Always.
*/
char* stpnmove(char*, const char*, size_t)
__GCC_ONLY(__attribute__((__returns_nonnull__, __nonnull__)));
@@ -552,6 +608,8 @@ char* stpnmove(char*, const char*, size_t)
* number of copied characters; the address of
* one character passed the last written non-NUL
* character.
+ *
+ * @since Always.
*/
char* strcnmove(char*, const char*, int, size_t)
__GCC_ONLY(__attribute__((__nonnull__)));
@@ -578,6 +636,8 @@ char* strcnmove(char*, const char*, int, size_t)
* number of copied characters; the address of
* one character passed the last written non-NUL
* character.
+ *
+ * @since Always.
*/
char* strstrnmove(char*, const char*, const char* restrict, size_t)
__GCC_ONLY(__attribute__((__nonnull__(1, 2))));
@@ -593,6 +653,8 @@ char* strstrnmove(char*, const char*, const char* restrict, size_t)
* @param whither The string to extend.
* @param whence The string to append.
* @return `whither` is returned.
+ *
+ * @since Always.
*/
char* strcat(char* restrict, const char* restrict)
__GCC_ONLY(__attribute__((__nonnull__)));
@@ -614,6 +676,8 @@ char* strcat(char* restrict, const char* restrict)
* shorter, `whither` will be filled with NUL bytes
* until this amount of bytes have been written.
* @return `whither` is returned.
+ *
+ * @since Always.
*/
char* strncat(char* restrict, const char* restrict, size_t)
__GCC_ONLY(__attribute__((__nonnull__)));
@@ -629,6 +693,8 @@ char* strncat(char* restrict, const char* restrict, size_t)
* and `errno` is set to indicate the error.
*
* @throws ENOMEM The process could not allocate sufficient amount of memory.
+ *
+ * @since Always.
*/
char* strdup(const char*)
__GCC_ONLY(__attribute__((__malloc__, __nonnull__, __warn_unused_result__)));
@@ -647,6 +713,8 @@ char* strdup(const char*)
* and `errno` is set to indicate the error.
*
* @throws ENOMEM The process could not allocate sufficient amount of memory.
+ *
+ * @since Always.
*/
char* strndup(const char*, size_t)
__GCC_ONLY(__attribute__((__malloc__, __nonnull__, __warn_unused_result__)));
@@ -664,6 +732,8 @@ char* strndup(const char*, size_t)
* and `errno` is set to indicate the error.
*
* @throws ENOMEM The process could not allocate sufficient amount of memory.
+ *
+ * @since Always.
*/
void* memdup(const void*, size_t)
__GCC_ONLY(__attribute__((__malloc__, __nonnull__, __warn_unused_result__)));
@@ -680,6 +750,8 @@ void* memdup(const void*, size_t)
* @param string:const char* The string to duplicate.
* @return :size_t The new string. There is no way to
* detect whether the allocation failed.
+ *
+ * @since Always.
*/
# define strdupa(string) \
({ \
@@ -702,6 +774,8 @@ void* memdup(const void*, size_t)
* A NUL byte is guaranteed to always be written.
* @return :size_t The new string. There is no way to
* detect whether the allocation failed.
+ *
+ * @since Always.
*/
# define strndupa(string, maxlen) \
({ \
@@ -723,6 +797,8 @@ void* memdup(const void*, size_t)
* @param size:size_t The size of the memory segment.
* @return :size_t The new segment. There is no way to
* detect whether the allocation failed.
+ *
+ * @since Always.
*/
# define memdupa(segment, size) \
({ \
@@ -743,6 +819,8 @@ void* memdup(const void*, size_t)
* @param size The size of the segments.
* @return Zero is returned if `a` and `b` are equal, otherwise,
* see the specifications for `a` and `b`.
+ *
+ * @since Always.
*/
int memcmp(const void*, const void*, size_t)
__GCC_ONLY(__attribute__((__warn_unused_result__, __pure__)));
@@ -759,6 +837,8 @@ int memcmp(const void*, const void*, size_t)
* @param size The size of the segments.
* @return Zero is returned if `a` and `b` are equal, otherwise,
* see the specifications for `a` and `b`.
+ *
+ * @since Always.
*/
int memcasecmp(const void*, const void*, size_t)
__GCC_ONLY(__attribute__((__warn_unused_result__, __pure__)));
@@ -771,6 +851,8 @@ int memcasecmp(const void*, const void*, size_t)
* @param b A positive value is returned if this is the lesser.
* @return Zero is returned if `a` and `b` are equal, otherwise,
* see the specifications for `a` and `b`.
+ *
+ * @since Always.
*/
int strcmp(const char*, const char*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -783,6 +865,8 @@ int strcmp(const char*, const char*)
* @param length The maximum number of characters to compare.
* @return Zero is returned if `a` and `b` are equal, otherwise,
* see the specifications for `a` and `b`.
+ *
+ * @since Always.
*/
int strncmp(const char*, const char*, size_t)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -803,6 +887,8 @@ int strverscmp(const char*, const char*)
* @param size The size of the memory segment.
* @return Pointer to the first occurrence of `c`,
* `NULL` if none were found.
+ *
+ * @since Always.
*/
void* memchr(const void*, int, size_t)
__GCC_ONLY(__attribute__((__warn_unused_result__, __pure__)));
@@ -821,6 +907,8 @@ void* memchr(const void*, int, size_t)
* @param segment The memory segment to search.
* @param c The sought after character.
* @return Pointer to the first occurrence of `c`.
+ *
+ * @since Always.
*/
void* rawmemchr(const void*, int)
__GCC_ONLY(__attribute__((__warn_unused_result__, __returns_nonnull__, __nonnull__, __pure__)));
@@ -841,6 +929,8 @@ void* rawmemchr(const void*, int)
* @param size The size of the memory segment.
* @return Pointer to the last occurrence of `c`,
* `NULL` if none were found.
+ *
+ * @since Always.
*/
void* memrchr(const void*, int, size_t)
__GCC_ONLY(__attribute__((__warn_unused_result__, __pure__)));
@@ -860,6 +950,8 @@ void* memrchr(const void*, int, size_t)
* @param c The sought after character.
* @return Pointer to the first occurrence of `c`,
* `NULL` if none were found.
+ *
+ * @since Always.
*/
char* strchr(const char*, int)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -881,6 +973,8 @@ char* strchr(const char*, int)
* @return Pointer to the first occurrence of `c`,
* Pointer to the terminating NUL character
* if none were found.
+ *
+ * @since Always.
*/
char* strchrnul(const char*, int)
__GCC_ONLY(__attribute__((__warn_unused_result__, __returns_nonnull__, __nonnull__, __pure__)));
@@ -902,6 +996,8 @@ char* strchrnul(const char*, int)
* @param c The sought after character.
* @return Pointer to the last occurrence of `c`,
* `NULL` if none were found.
+ *
+ * @since Always.
*/
char* strrchr(const char*, int)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -918,6 +1014,8 @@ char* strrchr(const char*, int)
* @param needle The sought after substring.
* @return Pointer to the first occurrence of the
* substring, `NULL` if not found.
+ *
+ * @since Always.
*/
char* strstr(const char*, const char*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -933,6 +1031,8 @@ char* strstr(const char*, const char*)
* @param needle The sought after substring.
* @return Pointer to the first occurrence of the
* substring, `NULL` if not found.
+ *
+ * @since Always.
*/
char* strcasestr(const char*, const char*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -953,6 +1053,8 @@ char* strcasestr(const char*, const char*)
* @param maxlen The maximum number of character to search.
* @return Pointer to the first occurrence of the
* substring, `NULL` if not found.
+ *
+ * @since Always.
*/
char* strnstr(const char*, const char*, size_t)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -971,6 +1073,8 @@ char* strnstr(const char*, const char*, size_t)
* @param maxlen The maximum number of character to search.
* @return Pointer to the first occurrence of the
* substring, `NULL` if not found.
+ *
+ * @since Always.
*/
char* strncasestr(const char*, const char*, size_t)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -988,6 +1092,8 @@ char* strncasestr(const char*, const char*, size_t)
* @param haystack The string to search.
* @param needle The sought after substring.
* @return Pointer to the first occurrence of the substring.
+ *
+ * @since Always.
*/
char* rawstrstr(const char*, const char*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __returns_nonnull__, __pure__)));
@@ -1005,6 +1111,8 @@ char* rawstrstr(const char*, const char*)
* @param haystack The string to search.
* @param needle The sought after substring.
* @return Pointer to the first occurrence of the substring.
+ *
+ * @since Always.
*/
char* rawstrcasestr(const char*, const char*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __returns_nonnull__, __pure__)));
@@ -1025,6 +1133,8 @@ char* rawstrcasestr(const char*, const char*)
* @param needle_length The length of `needle`.
* @return Pointer to the first occurrence of
* the substring, `NULL` if not found.
+ *
+ * @since Always.
*/
void* memcasemem(const void*, size_t, const void*, size_t)
__GCC_ONLY(__attribute__((__warn_unused_result__, __pure__)));
@@ -1042,6 +1152,8 @@ void* memcasemem(const void*, size_t, const void*, size_t)
* @param desired The desired beginning of the string.
* @return `string` if `string` begins with
* `desired`, `NULL` otherwise.
+ *
+ * @since Always.
*/
char* strstarts(const char*, const char*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -1059,6 +1171,8 @@ char* strstarts(const char*, const char*)
* @param desired The desired ending of the string.
* @return The `string`, where `desired` beings if
* `string` ends with `desired`, `NULL` otherwise.
+ *
+ * @since Always.
*/
char* strends(const char*, const char*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -1076,6 +1190,8 @@ char* strends(const char*, const char*)
* @param desired The desired beginning of the string.
* @return `string` if `string` begins with
* `desired`, `NULL` otherwise.
+ *
+ * @since Always.
*/
char* strcasestarts(const char*, const char*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -1093,6 +1209,8 @@ char* strcasestarts(const char*, const char*)
* @param desired The desired ending of the string.
* @return The `string`, where `desired` beings if
* `string` ends with `desired`, `NULL` otherwise.
+ *
+ * @since Always.
*/
char* strcaseends(const char*, const char*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -1115,6 +1233,8 @@ char* strcaseends(const char*, const char*)
* @param needle_length The length of `needle`.
* @return Pointer to the first occurrence of
* the substring, `NULL` if not found.
+ *
+ * @since Always.
*/
void* memmem(const void*, size_t, const void*, size_t)
__GCC_ONLY(__attribute__((__warn_unused_result__, __pure__)));
@@ -1135,6 +1255,8 @@ void* memmem(const void*, size_t, const void*, size_t)
* @param string The string.
* @param skipset Bytes allowed in the substring.
* @return The length of the substring.
+ *
+ * @since Always.
*/
size_t strspn(const char*, const char*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -1147,6 +1269,8 @@ size_t strspn(const char*, const char*)
* @param string The string.
* @param stopset Bytes disallowed in the substring.
* @return The length of the substring.
+ *
+ * @since Always.
*/
size_t strcspn(const char*, const char*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -1162,6 +1286,8 @@ size_t strcspn(const char*, const char*)
* @return A pointer to the first occurrence in
* `string` of a byte found in `stopset`.
* `NULL` is returned if none is found.
+ *
+ * @since Always.
*/
char* strpbrk(const char*, const char*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -1184,6 +1310,8 @@ char* strpbrk(const char*, const char*)
* `NULL` is returned the search as reached
* the end of the string, and there therefore
* are no more tokens.
+ *
+ * @since Always.
*/
char* strtok(char* restrict, const char* restrict)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__(2))));
@@ -1206,6 +1334,8 @@ char* strtok(char* restrict, const char* restrict)
* `NULL` is returned the search as reached
* the end of the string, and there therefore
* are no more tokens.
+ *
+ * @since Always.
*/
char* strtok_r(char* restrict, const char* restrict, char** restrict)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__(2, 3))));
@@ -1224,6 +1354,8 @@ char* strtok_r(char* restrict, const char* restrict, char** restrict)
* `NULL` is returned the search as reached
* the end of the string, and there therefore
* are no more tokens.
+ *
+ * @since Always.
*/
char* strsep(char** restrict, const char* restrict)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__)));
@@ -1241,6 +1373,8 @@ char* strsep(char** restrict, const char* restrict)
* of `filename` or, if `filename` is `NULL`
* or is empty, a statically allocationed string,
* so it must not freed or edited.
+ *
+ * @since Always.
*/
char* __gnu_basename(const char*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __pure__)));
@@ -1257,6 +1391,8 @@ char* __gnu_basename(const char*)
*
* @param anagram An anagram of the output, will be modified.
* @retrun The string, which will `== anagram`.
+ *
+ * @since Always.
*/
char* strfry(char*);
@@ -1269,6 +1405,8 @@ char* strfry(char*);
* @param segment The memory segment.
* @param size The size of the memory segment.
* @return `segment` is returned
+ *
+ * @since Always.
*/
char* memfrob(char*, size_t);
#endif
diff --git a/include/strings.h b/include/strings.h
index adb8e97..31bb5a7 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -35,6 +35,8 @@
*
* @param segment The memory segment to override.
* @param size The size of the memory segment.
+ *
+ * @since Always.
*/
void bzero(void*, size_t)
__deprecated("Use 'memset', 'explicit_bzero' or 'secure_free' instead.");
@@ -50,6 +52,8 @@ void bzero(void*, size_t)
*
* @param segment The memory segment to override.
* @param size The size of the memory segment.
+ *
+ * @since Always.
*/
void explicit_bzero(void*, size_t);
#endif
@@ -62,6 +66,8 @@ void explicit_bzero(void*, size_t);
* @param whence The source memory segment.
* @param whither The destination memory segment.
* @param size The number of bytes to copy.
+ *
+ * @since Always.
*/
void bcopy(const void*, void*, size_t)
__deprecated("Use 'memmove', or similar function, instead, but be aware of reordered parameters.");
@@ -70,6 +76,8 @@ void bcopy(const void*, void*, size_t)
* This function is identical to `memcmp`.
*
* @etymology (B)uffer: (c)o(mp)are.
+ *
+ * @since Always.
*/
int bcmp(const void*, const void*, size_t)
__deprecated("Use 'memcmp' instead.")
@@ -87,6 +95,8 @@ int bcmp(const void*, const void*, size_t)
* @param b A positive value is returned if this is the lesser.
* @return Zero is returned if `a` and `b` are equal, otherwise,
* see the specifications for `a` and `b`.
+ *
+ * @since Always.
*/
int strcasecmp(const char*, const char*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -103,6 +113,8 @@ int strcasecmp(const char*, const char*)
* @param length The maximum number of characters to compare.
* @return Zero is returned if `a` and `b` are equal, otherwise,
* see the specifications for `a` and `b`.
+ *
+ * @since Always.
*/
int strncasecmp(const char*, const char*, size_t)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -120,6 +132,8 @@ int strncasecmp(const char*, const char*, size_t)
* @param locale The locale.
* @return Zero is returned if `a` and `b` are equal, otherwise,
* see the specifications for `a` and `b`.
+ *
+ * @since Always.
*/
int strcasecmp_l(const char*, const char*, locale_t) /* TODO */
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -137,6 +151,8 @@ int strcasecmp_l(const char*, const char*, locale_t) /* TODO */
* @param locale The locale.
* @return Zero is returned if `a` and `b` are equal, otherwise,
* see the specifications for `a` and `b`.
+ *
+ * @since Always.
*/
int strncasecmp_l(const char*, const char*, size_t, locale_t) /* TODO */
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -148,6 +164,8 @@ int strncasecmp_l(const char*, const char*, size_t, locale_t) /* TODO */
* This is a deprecated BSD extension.
*
* @etymology (Index) of character.
+ *
+ * @since Always.
*/
char* index(const char*, int)
__deprecated("Use 'strchr' instead.")
@@ -162,6 +180,8 @@ char* index(const char*, int)
* This is a deprecated BSD extension.
*
* @etymology (R)ight-most (index) of character.
+ *
+ * @since Always.
*/
char* rindex(const char*, int)
__deprecated("Use 'strrchr' instead.")
@@ -178,6 +198,8 @@ char* rindex(const char*, int)
*
* @param i The integer.
* @return The value of the least significant set bit, zero if none.
+ *
+ * @since Always.
*/
int ffs(int)
__GCC_ONLY(__attribute__((__warn_unused_result__, __const__)));
@@ -189,6 +211,8 @@ int ffs(int)
*
* @param i The integer.
* @return The value of the least significant set bit, zero if none.
+ *
+ * @since Always.
*/
int ffsl(long)
__GCC_ONLY(__attribute__((__warn_unused_result__, __const__)));
@@ -200,6 +224,8 @@ int ffsl(long)
*
* @param i The integer.
* @return The value of the least significant set bit, zero if none.
+ *
+ * @since Always.
*/
int ffsll(long long)
__GCC_ONLY(__attribute__((__warn_unused_result__, __const__)));
diff --git a/include/sys/stat.h b/include/sys/stat.h
index da67678..58b0514 100644
--- a/include/sys/stat.h
+++ b/include/sys/stat.h
@@ -23,9 +23,21 @@
#if defined(__SLIBC_SOURCE)
+/**
+ * @since Always.
+ */
# define S_IRALL (S_IRUSR | S_IRGRP | S_IROTH)
+/**
+ * @since Always.
+ */
# define S_IWALL (S_IWUSR | S_IWGRP | S_IWOTH)
+/**
+ * @since Always.
+ */
# define S_IXALL (S_IXUSR | S_IXGRP | S_IXOTH)
+/**
+ * @since Always.
+ */
# define S_ISALL (S_ISUID | S_ISGID | S_ISVTX)
#endif
diff --git a/include/unistd.h b/include/unistd.h
index 87f2c64..47db049 100644
--- a/include/unistd.h
+++ b/include/unistd.h
@@ -47,6 +47,8 @@
* The file with input.
*
* @etymology (St)andar(d) (in)put (file)descriptor (number).
+ *
+ * @since Always.
*/
#define STDIN_FILENO 0
@@ -55,6 +57,8 @@
* The file for output.
*
* @etymology (St)andar(d) (out)put (file)descriptor (number).
+ *
+ * @since Always.
*/
#define STDOUT_FILENO 1
@@ -63,6 +67,8 @@
* The file for error messages and warnings.
*
* @etymology (St)andar(d) (err)or output (file)descriptor (number).
+ *
+ * @since Always.
*/
#define STDERR_FILENO 2
@@ -108,6 +114,8 @@
* have been exceeded, RAM and swap memory would
* have been exhausted, or the request would cause
* the data segment to overlap another segment.
+ *
+ * @since Always.
*/
int brk(void*) /* TODO implement brk */
__GCC_ONLY(__attribute__((__warn_unused_result__)));
@@ -145,6 +153,8 @@ int brk(void*) /* TODO implement brk */
* have been exceeded, RAM and swap memory would
* have been exhausted, or the request would cause
* the data segment to overlap another segment.
+ *
+ * @since Always.
*/
void* sbrk(ptrdiff_t) /* TODO implement sbrk */
__GCC_ONLY(__attribute__((__warn_unused_result__)));
@@ -173,6 +183,8 @@ int isatty(int);
* set to describe the error.
*
* @throws Any error specified for execve(2).
+ *
+ * @since Always.
*/
int execl(const char*, ... /*, NULL */)
__GCC_ONLY(__attribute__((__sentinel__(0), __nonnull__(1))));
@@ -194,6 +206,8 @@ int execl(const char*, ... /*, NULL */)
* set to describe the error.
*
* @throws Any error specified for execve(2).
+ *
+ * @since Always.
*/
int execlp(const char*, ... /*, NULL */)
__GCC_ONLY(__attribute__((__sentinel__(0), __nonnull__(1))));
@@ -215,6 +229,8 @@ int execlp(const char*, ... /*, NULL */)
* set to describe the error.
*
* @throws Any error specified for execve(2).
+ *
+ * @since Always.
*/
int execle(const char*, ... /*, NULL, char* const[] */)
__GCC_ONLY(__attribute__((__sentinel__(1), __nonnull__(1))));
@@ -243,6 +259,8 @@ int execle(const char*, ... /*, NULL, char* const[] */)
* set to describe the error.
*
* @throws Any error specified for execve(2).
+ *
+ * @since Always.
*/
int execlpe(const char*, ... /*, NULL, char* const[] */)
__GCC_ONLY(__attribute__((__sentinel__(1), __nonnull__(1))));
@@ -265,6 +283,8 @@ int execlpe(const char*, ... /*, NULL, char* const[] */)
* set to describe the error.
*
* @throws Any error specified for execve(2).
+ *
+ * @since Always.
*/
int execv(const char*, char* const[])
__GCC_ONLY(__attribute__((__nonnull__(1))));
@@ -290,6 +310,8 @@ int execv(const char*, char* const[])
* set to describe the error.
*
* @throws Any error specified for execve(2).
+ *
+ * @since Always.
*/
int execvp(const char*, char* const[])
__GCC_ONLY(__attribute__((__nonnull__(1))));
@@ -315,6 +337,8 @@ int execvp(const char*, char* const[])
* set to describe the error.
*
* @throws Any error specified for execve(2).
+ *
+ * @since Always.
*/
int execve(const char*, char* const[], char* const[])
__GCC_ONLY(__attribute__((__nonnull__(1))));
@@ -347,6 +371,8 @@ int execve(const char*, char* const[], char* const[])
* set to describe the error.
*
* @throws Any error specified for execve(2).
+ *
+ * @since Always.
*/
int execvpe(const char*, char* const[], char* const[])
__GCC_ONLY(__attribute__((__nonnull__(1))));
@@ -382,6 +408,8 @@ int execvpe(const char*, char* const[], char* const[])
* set to describe the error.
*
* @throws Any error specified for execveat(2).
+ *
+ * @since Always.
*/
int execlat(int, const char*, ... /*, NULL, int */)
__GCC_ONLY(__attribute__((__sentinel__(1), __nonnull__(2))));
@@ -418,6 +446,8 @@ int execlat(int, const char*, ... /*, NULL, int */)
* set to describe the error.
*
* @throws Any error specified for execveat(2).
+ *
+ * @since Always.
*/
int execlpat(int, const char*, ... /*, NULL, int */)
__GCC_ONLY(__attribute__((__sentinel__(1), __nonnull__(2))));
@@ -454,6 +484,8 @@ int execlpat(int, const char*, ... /*, NULL, int */)
* set to describe the error.
*
* @throws Any error specified for execveat(2).
+ *
+ * @since Always.
*/
int execleat(int, const char*, ... /*, NULL, char* const[], int */)
__GCC_ONLY(__attribute__((__sentinel__(2), __nonnull__(2))));
@@ -494,6 +526,8 @@ int execleat(int, const char*, ... /*, NULL, char* const[], int */)
* set to describe the error.
*
* @throws Any error specified for execveat(2).
+ *
+ * @since Always.
*/
int execlpeat(int, const char*, ... /*, NULL, char* const[], int */)
__GCC_ONLY(__attribute__((__sentinel__(2), __nonnull__(2))));
@@ -530,6 +564,8 @@ int execlpeat(int, const char*, ... /*, NULL, char* const[], int */)
* set to describe the error.
*
* @throws Any error specified for execveat(2).
+ *
+ * @since Always.
*/
int execvat(int, const char*, char* const[], int)
__GCC_ONLY(__attribute__((__nonnull__(2))));
@@ -570,6 +606,8 @@ int execvat(int, const char*, char* const[], int)
* set to describe the error.
*
* @throws Any error specified for execveat(2).
+ *
+ * @since Always.
*/
int execvpat(int, const char*, char* const[], int)
__GCC_ONLY(__attribute__((__nonnull__(2))));
@@ -609,6 +647,8 @@ int execvpat(int, const char*, char* const[], int)
* set to describe the error.
*
* @throws Any error specified for execveat(2).
+ *
+ * @since Always.
*/
int execveat(int, const char*, char* const[], char* const[], int)
__GCC_ONLY(__attribute__((__nonnull__(2))));
@@ -654,6 +694,8 @@ int execveat(int, const char*, char* const[], char* const[], int)
* set to describe the error.
*
* @throws Any error specified for execveat(2).
+ *
+ * @since Always.
*/
int execvpeat(int, const char*, char* const[], char* const[], int)
__GCC_ONLY(__attribute__((__nonnull__(2))));
@@ -676,6 +718,8 @@ int execvpeat(int, const char*, char* const[], char* const[], int)
* set to describe the error.
*
* @throws Any error specified for execve(2).
+ *
+ * @since Always.
*/
int fexecl(int, ... /*, NULL */)
__GCC_ONLY(__attribute__((__sentinel__(0))));
@@ -699,6 +743,8 @@ int fexecl(int, ... /*, NULL */)
* set to describe the error.
*
* @throws Any error specified for execve(2).
+ *
+ * @since Always.
*/
int fexecle(int, ... /*, NULL, char* const[] */)
__GCC_ONLY(__attribute__((__sentinel__(1))));
@@ -722,6 +768,8 @@ int fexecle(int, ... /*, NULL, char* const[] */)
* set to describe the error.
*
* @throws Any error specified for execve(2).
+ *
+ * @since Always.
*/
int fexecv(int, char* const[]);
#endif
@@ -747,6 +795,8 @@ int fexecv(int, char* const[]);
* set to describe the error.
*
* @throws Any error specified for execve(2).
+ *
+ * @since Always.
*/
int fexecve(int, char* const[], char* const[]);
diff --git a/include/wchar.h b/include/wchar.h
index b705510..5f5d734 100644
--- a/include/wchar.h
+++ b/include/wchar.h
@@ -62,6 +62,8 @@
* @param str The string.
* @return The number of `wchar_t`:s before the
* first NUL character.
+ *
+ * @since Always.
*/
size_t wcslen(const wchar_t*)
__GCC_ONLY(__attribute__((__nonnull__, __warn_unused_result__, __pure__)));
@@ -74,6 +76,8 @@ size_t wcslen(const wchar_t*)
* @return The number of `wchar_t`:s before the
* first NUL character. `maxlen` if no
* NUL character was found.
+ *
+ * @since Always.
*/
size_t wcsnlen(const wchar_t*, size_t)
__GCC_ONLY(__attribute__((__warn_unused_result__, __pure__)));
@@ -87,6 +91,8 @@ size_t wcsnlen(const wchar_t*, size_t)
* @param c The wide character.
* @param size The number of wide characters in the memory segment.
* @return `segment` is returned.
+ *
+ * @since Always.
*/
wchar_t* wmemset(wchar_t*, wchar_t, size_t);
@@ -97,6 +103,8 @@ wchar_t* wmemset(wchar_t*, wchar_t, size_t);
* @param whence The source memory segment.
* @param size The number of wide characters to copy.
* @return `whither` is returned.
+ *
+ * @since Always.
*/
wchar_t* wmemcpy(wchar_t* restrict, const wchar_t* restrict, size_t);
@@ -110,6 +118,8 @@ wchar_t* wmemcpy(wchar_t* restrict, const wchar_t* restrict, size_t);
* @param whence The source memory segment.
* @param size The number of wide characters to copy.
* @return `whither + size` is returned.
+ *
+ * @since Always.
*/
wchar_t* wmempcpy(wchar_t* restrict, const wchar_t* restrict, size_t);
@@ -122,6 +132,8 @@ wchar_t* wmempcpy(wchar_t* restrict, const wchar_t* restrict, size_t);
* @param whence The source memory segment.
* @param size The number of wide characters to copy.
* @return `whither` is returned.
+ *
+ * @since Always.
*/
wchar_t* wmemmove(wchar_t*, const wchar_t*, size_t);
@@ -136,6 +148,8 @@ wchar_t* wmemmove(wchar_t*, const wchar_t*, size_t);
* @param whence The source memory segment.
* @param size The number of wide characters to copy.
* @return `whither + size` is returned.
+ *
+ * @since Always.
*/
wchar_t* wmempmove(wchar_t*, const wchar_t*, size_t);
# endif
@@ -157,6 +171,8 @@ wchar_t* wmempmove(wchar_t*, const wchar_t*, size_t);
* that is, the address of `whither` plus the
* number of copied characters; the address of
* one character passed the last written character.
+ *
+ * @since Always.
*/
wchar_t* wmemccpy(wchar_t* restrict, const wchar_t* restrict, wchar_t, size_t);
@@ -175,6 +191,8 @@ wchar_t* wmemccpy(wchar_t* restrict, const wchar_t* restrict, wchar_t, size_t);
* that is, the address of `whither` plus the
* number of copied characters; the address of
* one character passed the last written character.
+ *
+ * @since Always.
*/
wchar_t* wmemcmove(wchar_t*, const wchar_t*, wchar_t, size_t);
@@ -187,6 +205,8 @@ wchar_t* wmemcmove(wchar_t*, const wchar_t*, wchar_t, size_t);
* @param str The beginning of the memory segment.
* @param c The wide character.
* @return `str` is returned.
+ *
+ * @since Always.
*/
wchar_t* wcsset(wchar_t*, wchar_t)
__GCC_ONLY(__attribute__((__returns_nonnull__, __nonnull__)));
@@ -199,6 +219,8 @@ wchar_t* wcsset(wchar_t*, wchar_t)
* @param whither The destination memory segment.
* @param whence The source memory segment.
* @return `whither` is returned.
+ *
+ * @since Always.
*/
wchar_t* wcscpy(wchar_t* restrict, const wchar_t* restrict)
__GCC_ONLY(__attribute__((__returns_nonnull__, __nonnull__)));
@@ -213,6 +235,8 @@ wchar_t* wcscpy(wchar_t* restrict, const wchar_t* restrict)
* @param whither The destination memory segment.
* @param whence The source memory segment.
* @return `whither + wcslen(whence)` is returned.
+ *
+ * @since Always.
*/
wchar_t* wcpcpy(wchar_t* restrict, const wchar_t* restrict)
__GCC_ONLY(__attribute__((__returns_nonnull__, __nonnull__)));
@@ -235,6 +259,8 @@ wchar_t* wcpcpy(wchar_t* restrict, const wchar_t* restrict)
* number of copied characters; the address of
* one character passed the last written non-NUL
* character.
+ *
+ * @since Always.
*/
wchar_t* wcsccpy(wchar_t* restrict, const wchar_t* restrict, wchar_t)
__GCC_ONLY(__attribute__((__nonnull__)));
@@ -254,6 +280,8 @@ wchar_t* wcsccpy(wchar_t* restrict, const wchar_t* restrict, wchar_t)
* number of copied characters; the address of
* one character passed the last written non-NUL
* character.
+ *
+ * @since Always.
*/
wchar_t* wcsstrcpy(wchar_t* restrict, const wchar_t* restrict, const wchar_t* restrict)
__GCC_ONLY(__attribute__((__nonnull__(1, 2))));
@@ -272,6 +300,8 @@ wchar_t* wcsstrcpy(wchar_t* restrict, const wchar_t* restrict, const wchar_t* re
* shorter, `whither` will be filled with NUL characters
* until this amount of characters have been written.
* @return `whither` is returned.
+ *
+ * @since Always.
*/
wchar_t* wcsncpy(wchar_t* restrict, const wchar_t* restrict, size_t)
__GCC_ONLY(__attribute__((__returns_nonnull__, __nonnull__)));
@@ -293,6 +323,8 @@ wchar_t* wcsncpy(wchar_t* restrict, const wchar_t* restrict, size_t)
* until this amount of characters have been written.
* @return `whither` plus the number of written characters,
* excluding NUL characters, is returned.
+ *
+ * @since Always.
*/
wchar_t* wcpncpy(wchar_t* restrict, const wchar_t* restrict, size_t)
__GCC_ONLY(__attribute__((__returns_nonnull__, __nonnull__)));
@@ -321,6 +353,8 @@ wchar_t* wcpncpy(wchar_t* restrict, const wchar_t* restrict, size_t)
* number of copied characters; the address of
* one character passed the last written non-NUL
* character.
+ *
+ * @since Always.
*/
wchar_t* wcscncpy(wchar_t* restrict, const wchar_t* restrict, wchar_t, size_t)
__GCC_ONLY(__attribute__((__nonnull__)));
@@ -347,6 +381,8 @@ wchar_t* wcscncpy(wchar_t* restrict, const wchar_t* restrict, wchar_t, size_t)
* number of copied chartacters; the address of
* one character passed the last written non-NUL
* character.
+ *
+ * @since Always.
*/
wchar_t* wcsstrncpy(wchar_t* restrict, const wchar_t* restrict, const wchar_t* restrict, size_t)
__GCC_ONLY(__attribute__((__nonnull__(1, 2))));
@@ -363,6 +399,8 @@ wchar_t* wcsstrncpy(wchar_t* restrict, const wchar_t* restrict, const wchar_t* r
* @param whither The destination memory segment.
* @param whence The source memory segment.
* @return `whither` is returned.
+ *
+ * @since Always.
*/
wchar_t* wcsmove(wchar_t*, const wchar_t*)
__GCC_ONLY(__attribute__((__returns_nonnull__, __nonnull__)));
@@ -376,6 +414,8 @@ wchar_t* wcsmove(wchar_t*, const wchar_t*)
* @param whither The destination memory segment.
* @param whence The source memory segment.
* @return `whither + wcslen(whence)` is returned.
+ *
+ * @since Always.
*/
wchar_t* wcpmove(wchar_t*, const wchar_t*)
__GCC_ONLY(__attribute__((__returns_nonnull__, __nonnull__)));
@@ -396,6 +436,8 @@ wchar_t* wcpmove(wchar_t*, const wchar_t*)
* number of copied characters; the address of
* one character passed the last written non-NUL
* character.
+ *
+ * @since Always.
*/
wchar_t* wcscmove(wchar_t*, const wchar_t*, wchar_t)
__GCC_ONLY(__attribute__((__nonnull__)));
@@ -415,6 +457,8 @@ wchar_t* wcscmove(wchar_t*, const wchar_t*, wchar_t)
* number of copied characters; the address of
* one character passed the last written non-NUL
* character.
+ *
+ * @since Always.
*/
wchar_t* wcsstrmove(wchar_t*, const wchar_t*, const wchar_t* restrict)
__GCC_ONLY(__attribute__((__nonnull__(1, 2))));
@@ -434,6 +478,8 @@ wchar_t* wcsstrmove(wchar_t*, const wchar_t*, const wchar_t* restrict)
* shorter, `whither` will be filled with NUL characters
* until this amount of characters have been written.
* @return `whither` is returned.
+ *
+ * @since Always.
*/
wchar_t* wcsnmove(wchar_t*, const wchar_t*, size_t)
__GCC_ONLY(__attribute__((__returns_nonnull__, __nonnull__)));
@@ -456,6 +502,8 @@ wchar_t* wcsnmove(wchar_t*, const wchar_t*, size_t)
* until this amount of characters have been written.
* @return `whither` plus the number of written characters,
* excluding NUL characters, is returned.
+ *
+ * @since Always.
*/
wchar_t* wcpnmove(wchar_t*, const wchar_t*, size_t)
__GCC_ONLY(__attribute__((__returns_nonnull__, __nonnull__)));
@@ -483,6 +531,8 @@ wchar_t* wcpnmove(wchar_t*, const wchar_t*, size_t)
* number of copied characters; the address of
* one character passed the last written non-NUL
* character.
+ *
+ * @since Always.
*/
wchar_t* wcscnmove(wchar_t*, const wchar_t*, wchar_t, size_t)
__GCC_ONLY(__attribute__((__nonnull__)));
@@ -509,6 +559,8 @@ wchar_t* wcscnmove(wchar_t*, const wchar_t*, wchar_t, size_t)
* number of copied chartacters; the address of
* one character passed the last written non-NUL
* character.
+ *
+ * @since Always.
*/
wchar_t* wcsstrnmove(wchar_t*, const wchar_t*, const wchar_t* restrict, size_t)
__GCC_ONLY(__attribute__((__nonnull__(1, 2))));
@@ -524,6 +576,8 @@ wchar_t* wcsstrnmove(wchar_t*, const wchar_t*, const wchar_t* restrict, size_t)
* @param whither The string to extend.
* @param whence The string to append.
* @return `whither` is returned.
+ *
+ * @since Always.
*/
wchar_t* wcscat(wchar_t* restrict whither, const wchar_t* restrict whence)
__GCC_ONLY(__attribute__((__nonnull__)));
@@ -545,6 +599,8 @@ wchar_t* wcscat(wchar_t* restrict whither, const wchar_t* restrict whence)
* shorter, `whither` will be filled with NUL characters
* until this amount of characters have been written.
* @return `whither` is returned.
+ *
+ * @since Always.
*/
wchar_t* wcsncat(wchar_t* restrict whither, const wchar_t* restrict whence, size_t maxlen)
__GCC_ONLY(__attribute__((__nonnull__)));
@@ -563,6 +619,8 @@ wchar_t* wcsncat(wchar_t* restrict whither, const wchar_t* restrict whence, size
* and `errno` is set to indicate the error.
*
* @throws ENOMEM The process could not allocate sufficient amount of memory.
+ *
+ * @since Always.
*/
wchar_t* wcsdup(const wchar_t*)
__GCC_ONLY(__attribute__((__malloc__, __nonnull__, __warn_unused_result__)));
@@ -584,6 +642,8 @@ wchar_t* wcsdup(const wchar_t*)
* and `errno` is set to indicate the error.
*
* @throws ENOMEM The process could not allocate sufficient amount of memory.
+ *
+ * @since Always.
*/
wchar_t* wcsndup(const wchar_t*, size_t)
__GCC_ONLY(__attribute__((__malloc__, __nonnull__, __warn_unused_result__)));
@@ -600,6 +660,8 @@ wchar_t* wcsndup(const wchar_t*, size_t)
* and `errno` is set to indicate the error.
*
* @throws ENOMEM The process could not allocate sufficient amount of memory.
+ *
+ * @since Always.
*/
wchar_t* wmemdup(const wchar_t*, size_t)
__GCC_ONLY(__attribute__((__malloc__, __nonnull__, __warn_unused_result__)));
@@ -616,6 +678,8 @@ wchar_t* wmemdup(const wchar_t*, size_t)
* @param string:const wchar_t* The string to duplicate.
* @return :size_t The new string. There is no way to
* detect whether the allocation failed.
+ *
+ * @since Always.
*/
# define wcsdupa(string) \
({ \
@@ -637,6 +701,8 @@ wchar_t* wmemdup(const wchar_t*, size_t)
* A NUL byte is guaranteed to always be written.
* @return :size_t The new string. There is no way to
* detect whether the allocation failed.
+ *
+ * @since Always.
*/
# define wstrndupa(string, maxlen) \
({ \
@@ -657,6 +723,8 @@ wchar_t* wmemdup(const wchar_t*, size_t)
* @param size:size_t The size of the memory segment.
* @return :size_t The new segment. There is no way to
* detect whether the allocation failed.
+ *
+ * @since Always.
*/
# define wmemdupa(segment, size) \
({ \
@@ -677,6 +745,8 @@ wchar_t* wmemdup(const wchar_t*, size_t)
* @param size The size of the segments.
* @return Zero is returned if `a` and `b` are equal, otherwise,
* see the specifications for `a` and `b`.
+ *
+ * @since Always.
*/
int wmemcmp(const wchar_t*, const wchar_t*, size_t)
__GCC_ONLY(__attribute__((__warn_unused_result__, __pure__)));
@@ -693,6 +763,8 @@ int wmemcmp(const wchar_t*, const wchar_t*, size_t)
* @param size The size of the segments.
* @return Zero is returned if `a` and `b` are equal, otherwise,
* see the specifications for `a` and `b`.
+ *
+ * @since Always.
*/
int wmemcasecmp(const wchar_t*, const wchar_t*, size_t)
__GCC_ONLY(__attribute__((__warn_unused_result__, __pure__)));
@@ -705,6 +777,8 @@ int wmemcasecmp(const wchar_t*, const wchar_t*, size_t)
* @param b A positive value is returned if this is the lesser.
* @return Zero is returned if `a` and `b` are equal, otherwise,
* see the specifications for `a` and `b`.
+ *
+ * @since Always.
*/
int wcscmp(const wchar_t*, const wchar_t*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -721,6 +795,8 @@ int wcscmp(const wchar_t*, const wchar_t*)
* @param b A positive value is returned if this is the lesser.
* @return Zero is returned if `a` and `b` are equal, otherwise,
* see the specifications for `a` and `b`.
+ *
+ * @since Always.
*/
int wcscasecmp(const wchar_t*, const wchar_t*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -735,6 +811,8 @@ int wcscasecmp(const wchar_t*, const wchar_t*)
* @param length The maximum number of characters to compare.
* @return Zero is returned if `a` and `b` are equal, otherwise,
* see the specifications for `a` and `b`.
+ *
+ * @since Always.
*/
int wcsncmp(const wchar_t*, const wchar_t*, size_t)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -751,6 +829,8 @@ int wcsncmp(const wchar_t*, const wchar_t*, size_t)
* @param length The maximum number of characters to compare.
* @return Zero is returned if `a` and `b` are equal, otherwise,
* see the specifications for `a` and `b`.
+ *
+ * @since Always.
*/
int wcsncasecmp(const wchar_t*, const wchar_t*, size_t)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -766,6 +846,8 @@ int wcsncasecmp(const wchar_t*, const wchar_t*, size_t)
* @param size The size of the memory segment.
* @return Pointer to the first occurrence of `c`,
* `NULL` if none were found.
+ *
+ * @since Always.
*/
wchar_t* wmemchr(const wchar_t*, wchar_t, size_t)
__GCC_ONLY(__attribute__((__warn_unused_result__, __pure__)));
@@ -784,6 +866,8 @@ wchar_t* wmemchr(const wchar_t*, wchar_t, size_t)
* @param segment The memory segment to search.
* @param c The sought after character.
* @return Pointer to the first occurrence of `c`.
+ *
+ * @since Always.
*/
wchar_t* rawwmemchr(const wchar_t*, wchar_t)
__GCC_ONLY(__attribute__((__warn_unused_result__, __returns_nonnull__, __nonnull__, __pure__)));
@@ -806,6 +890,8 @@ wchar_t* rawwmemchr(const wchar_t*, wchar_t)
* @param size The size of the memory segment.
* @return Pointer to the last occurrence of `c`,
* `NULL` if none were found.
+ *
+ * @since Always.
*/
wchar_t* wmemrchr(const wchar_t*, wchar_t, size_t)
__GCC_ONLY(__attribute__((__warn_unused_result__, __pure__)));
@@ -823,6 +909,8 @@ wchar_t* wmemrchr(const wchar_t*, wchar_t, size_t)
* @param c The sought after character.
* @return Pointer to the first occurrence of `c`,
* `NULL` if none were found.
+ *
+ * @since Always.
*/
wchar_t* wcschr(const wchar_t*, wchar_t)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -845,6 +933,8 @@ wchar_t* wcschr(const wchar_t*, wchar_t)
* @return Pointer to the first occurrence of `c`,
* Pointer to the terminating NUL character
* if none were found.
+ *
+ * @since Always.
*/
wchar_t* wcschrnul(const wchar_t*, wchar_t)
__GCC_ONLY(__attribute__((__warn_unused_result__, __returns_nonnull__, __nonnull__, __pure__)));
@@ -866,6 +956,8 @@ wchar_t* wcschrnul(const wchar_t*, wchar_t)
* @param c The sought after character.
* @return Pointer to the last occurrence of `c`,
* `NULL` if none were found.
+ *
+ * @since Always.
*/
wchar_t* wcsrchr(const wchar_t*, wchar_t)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -876,6 +968,8 @@ wchar_t* wcsrchr(const wchar_t*, wchar_t)
/**
* This function is identical to `wcsstr`.
+ *
+ * @since Always.
*/
wchar_t* wcswcs(const wchar_t*, const wchar_t*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)))
@@ -892,6 +986,8 @@ wchar_t* wcswcs(const wchar_t*, const wchar_t*)
* @param needle The sought after substring.
* @return Pointer to the first occurrence of the
* substring, `NULL` if not found.
+ *
+ * @since Always.
*/
wchar_t* wcsstr(const wchar_t*, const wchar_t*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -910,6 +1006,8 @@ wchar_t* wcsstr(const wchar_t*, const wchar_t*)
* @param needle The sought after substring.
* @return Pointer to the first occurrence of the
* substring, `NULL` if not found.
+ *
+ * @since Always.
*/
wchar_t* wcscasestr(const wchar_t*, const wchar_t*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -929,6 +1027,8 @@ wchar_t* wcscasestr(const wchar_t*, const wchar_t*)
* @param maxlen The maximum number of character to search.
* @return Pointer to the first occurrence of the
* substring, `NULL` if not found.
+ *
+ * @since Always.
*/
wchar_t* wcsnstr(const wchar_t*, const wchar_t*, size_t)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -947,6 +1047,8 @@ wchar_t* wcsnstr(const wchar_t*, const wchar_t*, size_t)
* @param maxlen The maximum number of character to search.
* @return Pointer to the first occurrence of the
* substring, `NULL` if not found.
+ *
+ * @since Always.
*/
wchar_t* wcsncasestr(const wchar_t*, const wchar_t*, size_t)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -964,6 +1066,8 @@ wchar_t* wcsncasestr(const wchar_t*, const wchar_t*, size_t)
* @param haystack The string to search.
* @param needle The sought after substring.
* @return Pointer to the first occurrence of the substring.
+ *
+ * @since Always.
*/
wchar_t* rawwcsstr(const wchar_t*, const wchar_t*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __returns_nonnull__, __pure__)));
@@ -981,6 +1085,8 @@ wchar_t* rawwcsstr(const wchar_t*, const wchar_t*)
* @param haystack The string to search.
* @param needle The sought after substring.
* @return Pointer to the first occurrence of the substring.
+ *
+ * @since Always.
*/
wchar_t* rawwcscasestr(const wchar_t*, const wchar_t*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __returns_nonnull__, __pure__)));
@@ -1001,6 +1107,8 @@ wchar_t* rawwcscasestr(const wchar_t*, const wchar_t*)
* @param needle_length The length of `needle`.
* @return Pointer to the first occurrence of
* the substring, `NULL` if not found.
+ *
+ * @since Always.
*/
wchar_t* wmemcasemem(const wchar_t*, size_t, const wchar_t*, size_t)
__GCC_ONLY(__attribute__((__warn_unused_result__, __pure__)));
@@ -1018,6 +1126,8 @@ wchar_t* wmemcasemem(const wchar_t*, size_t, const wchar_t*, size_t)
* @param desired The desired beginning of the string.
* @return `string` if `string` begins with
* `desired`, `NULL` otherwise.
+ *
+ * @since Always.
*/
wchar_t* wcsstarts(const wchar_t*, const wchar_t*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -1035,6 +1145,8 @@ wchar_t* wcsstarts(const wchar_t*, const wchar_t*)
* @param desired The desired ending of the string.
* @return The `string`, where `desired` beings if
* `string` ends with `desired`, `NULL` otherwise.
+ *
+ * @since Always.
*/
wchar_t* wcsends(const wchar_t*, const wchar_t*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -1052,6 +1164,8 @@ wchar_t* wcsends(const wchar_t*, const wchar_t*)
* @param desired The desired beginning of the string.
* @return `string` if `string` begins with
* `desired`, `NULL` otherwise.
+ *
+ * @since Always.
*/
wchar_t* wcscasestarts(const wchar_t*, const wchar_t*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -1069,6 +1183,8 @@ wchar_t* wcscasestarts(const wchar_t*, const wchar_t*)
* @param desired The desired ending of the string.
* @return The `string`, where `desired` beings if
* `string` ends with `desired`, `NULL` otherwise.
+ *
+ * @since Always.
*/
wchar_t* wcscaseends(const wchar_t*, const wchar_t*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -1092,6 +1208,8 @@ wchar_t* wcscaseends(const wchar_t*, const wchar_t*)
* @param needle_length The length of `needle`.
* @return Pointer to the first occurrence of
* the substring, `NULL` if not found.
+ *
+ * @since Always.
*/
wchar_t* wmemmem(const wchar_t*, size_t, const wchar_t*, size_t)
__GCC_ONLY(__attribute__((__warn_unused_result__, __pure__)));
@@ -1112,6 +1230,8 @@ wchar_t* wmemmem(const wchar_t*, size_t, const wchar_t*, size_t)
* @param string The string.
* @param skipset Characters allowed in the substring.
* @return The length of the substring.
+ *
+ * @since Always.
*/
size_t wcsspn(const wchar_t*, const wchar_t*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -1124,6 +1244,8 @@ size_t wcsspn(const wchar_t*, const wchar_t*)
* @param string The string.
* @param stopset Characters disallowed in the substring.
* @return The length of the substring.
+ *
+ * @since Always.
*/
size_t wcscspn(const wchar_t*, const wchar_t*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -1139,6 +1261,8 @@ size_t wcscspn(const wchar_t*, const wchar_t*)
* @return A pointer to the first occurrence in
* `string` of a character found in `stopset`.
* `NULL` is returned if none is found.
+ *
+ * @since Always.
*/
wchar_t* wcspbrk(const wchar_t*, const wchar_t*)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__, __pure__)));
@@ -1165,6 +1289,8 @@ wchar_t* wcspbrk(const wchar_t*, const wchar_t*)
* `NULL` is returned the search as reached
* the end of the string, and there therefore
* are no more tokens.
+ *
+ * @since Always.
*/
wchar_t* wcstok(wchar_t* restrict, const wchar_t* restrict, wchar_t** restrict)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__(2, 3))));
@@ -1186,6 +1312,8 @@ wchar_t* wcstok(wchar_t* restrict, const wchar_t* restrict, wchar_t** restrict)
* `NULL` is returned the search as reached
* the end of the string, and there therefore
* are no more tokens.
+ *
+ * @since Always.
*/
wchar_t* wcssep(wchar_t** restrict, const wchar_t* restrict)
__GCC_ONLY(__attribute__((__warn_unused_result__, __nonnull__)));
diff --git a/src/ctype.c b/src/ctype.c
index a5eb75c..c97016e 100644
--- a/src/ctype.c
+++ b/src/ctype.c
@@ -28,6 +28,8 @@
* @param c The character.
* @return Whether the character is in
* ['0', '9'], ['A', 'Z'], or ['a', 'z'].
+ *
+ * @since Always.
*/
int (isalnum)(int c)
{
@@ -43,6 +45,8 @@ int (isalnum)(int c)
* @param c The character.
* @return Whether the character is in
* ['A', 'Z'] or ['a', 'z'].
+ *
+ * @since Always.
*/
int (isalpha)(int c)
{
@@ -58,6 +62,8 @@ int (isalpha)(int c)
*
* @param c The character.
* @return Whether the character is a ' ' or a '\t'.
+ *
+ * @since Always.
*/
int (isblank)(int c)
{
@@ -73,6 +79,8 @@ int (isblank)(int c)
*
* @param c The character.
* @return Whether the character is lower than ' '.
+ *
+ * @since Always.
*/
int (iscntrl)(int c)
{
@@ -87,6 +95,8 @@ int (iscntrl)(int c)
*
* @param c The character.
* @return Whether the character is in ['0', '9'].
+ *
+ * @since Always.
*/
int (isdigit)(int c)
{
@@ -101,6 +111,8 @@ int (isdigit)(int c)
*
* @param c The character.
* @return Whether the character is greater than ' '.
+ *
+ * @since Always.
*/
int (isgraph)(int c)
{
@@ -116,6 +128,8 @@ int (isgraph)(int c)
*
* @param c The character.
* @return Whether the character is in ['a', 'z'].
+ *
+ * @since Always.
*/
int (islower)(int c)
{
@@ -132,6 +146,8 @@ int (islower)(int c)
* @param c The character.
* @return Whether the character is at least
* as great as ' '.
+ *
+ * @since Always.
*/
int (isprint)(int c)
{
@@ -148,6 +164,8 @@ int (isprint)(int c)
*
* @param c The character.
* @return Whether the character is a punctuation.
+ *
+ * @since Always.
*/
int (ispunct)(int c)
{
@@ -163,6 +181,8 @@ int (ispunct)(int c)
* @param c The character.
* @return Whether the character is a ' ', '\f',
* '\n', '\r', '\t', or '\v'.
+ *
+ * @since Always.
*/
int (isspace)(int c)
{
@@ -178,6 +198,8 @@ int (isspace)(int c)
*
* @param c The character.
* @return Whether the character is in ['A', 'Z'].
+ *
+ * @since Always.
*/
int (isupper)(int c)
{
@@ -195,6 +217,8 @@ int (isupper)(int c)
* @param c The character.
* @return Whether the character is in
* ['0', '9'], ['A', 'Z'], or ['a', 'z'].
+ *
+ * @since Always.
*/
int (isxdigit)(int c)
{
@@ -218,6 +242,8 @@ int (isxdigit)(int c)
* @return The character in lowercase.
* Guaranteed to be unchanged if the
* character already is in lowercase.
+ *
+ * @since Always.
*/
int (tolower)(int c)
{
@@ -240,6 +266,8 @@ int (tolower)(int c)
* @return The character in uppercase.
* Guaranteed to be unchanged if the
* character already is in lowercase.
+ *
+ * @since Always.
*/
int (toupper)(int c)
{
@@ -255,6 +283,8 @@ int (toupper)(int c)
*
* @param c The character
* @return Whether the character is an ASCII character.
+ *
+ * @since Always.
*/
int (isascii)(int c)
{
@@ -276,6 +306,8 @@ int (isascii)(int c)
*
* @param c The character.
* @return The character with the 8:th bit cleared.
+ *
+ * @since Always.
*/
int (toascii)(int c)
{
@@ -286,6 +318,8 @@ int (toascii)(int c)
/**
* This function is identical to `tolower`.
* It is provided for backwards-compatibility with SVID.
+ *
+ * @since Always.
*/
int _tolower(int c)
{
@@ -296,6 +330,8 @@ int _tolower(int c)
/**
* This function is identical to `tolower`.
* It is provided for backwards-compatibility with SVID.
+ *
+ * @since Always.
*/
int _toupper(int c)
{
diff --git a/src/err/err.c b/src/err/err.c
index f63d2a4..99b43e5 100644
--- a/src/err/err.c
+++ b/src/err/err.c
@@ -31,6 +31,8 @@
* @param status The exit status the process should have.
* @param format Formatting-string for the warning.
* @param ... Formatting-arguments.
+ *
+ * @since Always.
*/
void err(int status, const char* format, ...)
{
diff --git a/src/err/errx.c b/src/err/errx.c
index d29f849..50f63b7 100644
--- a/src/err/errx.c
+++ b/src/err/errx.c
@@ -31,6 +31,8 @@
* @param status The exit status the process should have.
* @param format Formatting-string for the warning.
* @param ... Formatting-arguments.
+ *
+ * @since Always.
*/
void errx(int status, const char* format, ...)
{
diff --git a/src/err/verr.c b/src/err/verr.c
index 2857c16..475efdb 100644
--- a/src/err/verr.c
+++ b/src/err/verr.c
@@ -33,6 +33,8 @@
* @param status The exit status the process should have.
* @param format Formatting-string for the warning.
* @param args Formatting-arguments.
+ *
+ * @since Always.
*/
void verr(int status, const char* format, va_list args)
{
diff --git a/src/err/verrx.c b/src/err/verrx.c
index 4708264..12b4c72 100644
--- a/src/err/verrx.c
+++ b/src/err/verrx.c
@@ -32,6 +32,8 @@
* @param status The exit status the process should have.
* @param format Formatting-string for the warning.
* @param args Formatting-arguments.
+ *
+ * @since Always.
*/
void verrx(int status, const char* format, va_list args)
{
diff --git a/src/err/vwarn.c b/src/err/vwarn.c
index 78676d4..782f2f1 100644
--- a/src/err/vwarn.c
+++ b/src/err/vwarn.c
@@ -30,6 +30,8 @@
*
* @param format Formatting-string for the warning.
* @param args Formatting-arguments.
+ *
+ * @since Always.
*/
void vwarn(const char* format, va_list args)
{
diff --git a/src/err/vwarnx.c b/src/err/vwarnx.c
index c44e57a..7c29fa1 100644
--- a/src/err/vwarnx.c
+++ b/src/err/vwarnx.c
@@ -29,6 +29,8 @@
*
* @param format Formatting-string for the warning.
* @param args Formatting-arguments.
+ *
+ * @since Always.
*/
void vwarnx(const char* format, va_list args)
{
diff --git a/src/err/warn.c b/src/err/warn.c
index de5c793..82bda4e 100644
--- a/src/err/warn.c
+++ b/src/err/warn.c
@@ -30,6 +30,8 @@
*
* @param format Formatting-string for the warning.
* @param ... Formatting-arguments.
+ *
+ * @since Always.
*/
void warn(const char* format, ...)
{
diff --git a/src/err/warnx.c b/src/err/warnx.c
index d80dfd8..adc136f 100644
--- a/src/err/warnx.c
+++ b/src/err/warnx.c
@@ -30,6 +30,8 @@
*
* @param format Formatting-string for the warning.
* @param ... Formatting-arguments.
+ *
+ * @since Always.
*/
void warnx(const char* format, ...)
{
diff --git a/src/errno/variables.c b/src/errno/variables.c
index e204a2c..9523b37 100644
--- a/src/errno/variables.c
+++ b/src/errno/variables.c
@@ -35,6 +35,8 @@
* or `argv[0]` is edited.
*
* This is a GNU and slibc extension.
+ *
+ * @since Always.
*/
char* program_invocation_name = NULL;
@@ -46,6 +48,8 @@ char* program_invocation_name = NULL;
* or `argv[0]` is edited.
*
* This is a GNU extension.
+ *
+ * @since Always.
*/
char* program_invocation_short_name = NULL;
diff --git a/src/error/error.c b/src/error/error.c
index 6b15c4c..496ce3c 100644
--- a/src/error/error.c
+++ b/src/error/error.c
@@ -35,6 +35,8 @@
* be printed.
* @param format Formatting-string for a detailed description of what happend.
* @param args Formatting-arguments for `format`.
+ *
+ * @since Always.
*/
void error(int status, int errnum, const char* format, ...)
{
diff --git a/src/error/error_at_line.c b/src/error/error_at_line.c
index 9e9a79c..8b88df3 100644
--- a/src/error/error_at_line.c
+++ b/src/error/error_at_line.c
@@ -37,6 +37,8 @@
* @param linenum The line number of in the source code file where the error occurred.
* @param format Formatting-string for a detailed description of what happend.
* @param args Formatting-arguments for `format`.
+ *
+ * @since Always.
*/
void error_at_line(int status, int errnum, const char* filename,
unsigned int linenum, const char* format, ...)
diff --git a/src/error/variables.c b/src/error/variables.c
index a31c970..b012921 100644
--- a/src/error/variables.c
+++ b/src/error/variables.c
@@ -27,6 +27,8 @@
* This is a GNU extension.
*
* @etymology (`error`)-subsystem: (message count).
+ *
+ * @since Always.
*/
volatile unsigned int error_message_count = 0;
@@ -48,6 +50,8 @@ volatile unsigned int error_message_count = 0;
* This is a GNU extension.
*
* @etymology (`error`)-subsystem: print (one) time (per line).
+ *
+ * @since Always.
*/
volatile int error_one_per_line = 1;
@@ -62,6 +66,8 @@ volatile int error_one_per_line = 1;
* This is a GNU extension.
*
* @etymology (`error`)-subsystem function: (print) the (prog)ram's (name).
+ *
+ * @since Always.
*/
void (*volatile error_print_progname)(void) = NULL;
diff --git a/src/error/verror.c b/src/error/verror.c
index a5a4551..3632f7c 100644
--- a/src/error/verror.c
+++ b/src/error/verror.c
@@ -34,6 +34,8 @@
* be printed.
* @param format Formatting-string for a detailed description of what happend.
* @param args Formatting-arguments for `format`.
+ *
+ * @since Always.
*/
void verror(int status, int errnum, const char* format, va_list args)
{
diff --git a/src/error/verror_at_line.c b/src/error/verror_at_line.c
index dd51f30..ae6c566 100644
--- a/src/error/verror_at_line.c
+++ b/src/error/verror_at_line.c
@@ -42,6 +42,8 @@
* @param linenum The line number of in the source code file where the error occurred.
* @param format Formatting-string for a detailed description of what happend.
* @param args Formatting-arguments for `format`.
+ *
+ * @since Always.
*/
void verror_at_line(int status, int errnum, const char* filename,
unsigned int linenum, const char* format, va_list args)
diff --git a/src/inttypes/imaxabs.c b/src/inttypes/imaxabs.c
index 25ed7b7..649cd47 100644
--- a/src/inttypes/imaxabs.c
+++ b/src/inttypes/imaxabs.c
@@ -31,6 +31,8 @@
*
* @param value The integer.
* @return The absolute value of the integer.
+ *
+ * @since Always.
*/
intmax_t (imaxabs)(intmax_t value)
{
diff --git a/src/inttypes/imaxdiv.c b/src/inttypes/imaxdiv.c
index e4d0caa..978ace6 100644
--- a/src/inttypes/imaxdiv.c
+++ b/src/inttypes/imaxdiv.c
@@ -33,6 +33,8 @@
* the process will be killed by SIGFPE.
* @return The quotient in `.quot`, and
* the remainder in `.rem`.
+ *
+ * @since Always.
*/
imaxdiv_t imaxdiv(intmax_t numerator, intmax_t denominator)
{
diff --git a/src/libgen/basename_xpg.c b/src/libgen/basename_xpg.c
index 267f3e2..d1bd49e 100644
--- a/src/libgen/basename_xpg.c
+++ b/src/libgen/basename_xpg.c
@@ -29,6 +29,8 @@
* of `filename` or, if `filename` is `NULL`
* or is empty, a statically allocationed string,
* so it must not freed or edited.
+ *
+ * @since Always.
*/
char* __xpg_basename(char* filename)
{
diff --git a/src/libgen/cleanname.c b/src/libgen/cleanname.c
index db542cc..d3b884b 100644
--- a/src/libgen/cleanname.c
+++ b/src/libgen/cleanname.c
@@ -42,6 +42,8 @@
* if `filename` is `NULL` or does no contain a
* non-trailing slash, a statically allocationed
* string, so it must not freed or edited.
+ *
+ * @since Always.
*/
char* cleanname(char* filename)
{
diff --git a/src/libgen/dirname.c b/src/libgen/dirname.c
index 3200b07..1b0a3d6 100644
--- a/src/libgen/dirname.c
+++ b/src/libgen/dirname.c
@@ -29,6 +29,8 @@
* or does no contain a non-trailing slash,
* a statically allocationed string, so it
* must not freed or edited.
+ *
+ * @since Always.
*/
char* dirname(char* filename)
{
diff --git a/src/malloc.c b/src/malloc.c
index a66c062..c6c1629 100644
--- a/src/malloc.c
+++ b/src/malloc.c
@@ -91,6 +91,8 @@ static void* unaligned_malloc(size_t size)
* indicate the error.
*
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
void* malloc(size_t size)
{
@@ -116,6 +118,8 @@ void* malloc(size_t size)
* `errno` is set to indicate the error.
*
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
void* calloc(size_t elem_count, size_t elem_size)
{
@@ -152,6 +156,8 @@ void* calloc(size_t elem_count, size_t elem_size)
* indicate the error.
*
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
void* mallocz(size_t size, int clear)
{
@@ -182,6 +188,8 @@ void* mallocz(size_t size, int clear)
* indicate the error.
*
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
void* zalloc(size_t size)
{
@@ -215,6 +223,8 @@ void* zalloc(size_t size)
* is returned and `errno` is set to indicate the error.
*
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
void* realloc(void* ptr, size_t size)
{
@@ -231,6 +241,8 @@ void* realloc(void* ptr, size_t size)
* The process may crash if it does not point to the
* beginning of a memory allocation on the heap.
* However, if it is `NULL`, nothing will happen.
+ *
+ * @since Always.
*/
void free(void* ptr)
{
@@ -249,6 +261,8 @@ void free(void* ptr)
* The process may crash if it does not point to the
* beginning of a memory allocation on the heap.
* However, if it is `NULL`, nothing will happen.
+ *
+ * @since Always.
*/
void cfree(void* ptr, ...)
{
@@ -280,6 +294,8 @@ void cfree(void* ptr, ...)
*
* @throws ENOMEM The process cannot allocate more memory.
* @throws EINVAL If `boundary` is not a power of two.
+ *
+ * @since Always.
*/
void* memalign(size_t boundary, size_t size)
{
@@ -327,6 +343,8 @@ void* memalign(size_t boundary, size_t size)
*
* @throws ENOMEM The process cannot allocate more memory.
* @throws EINVAL If `boundary` is not a power-of-two multiple of `sizeof(void*)`.
+ *
+ * @since Always.
*/
int posix_memalign(void** ptrptr, size_t boundary, size_t size)
{
@@ -354,6 +372,8 @@ int posix_memalign(void** ptrptr, size_t boundary, size_t size)
* indicate the error.
*
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
void* valloc(size_t size)
{
@@ -377,6 +397,8 @@ void* valloc(size_t size)
* indicate the error.
*
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
void* pvalloc(size_t size)
{
@@ -416,6 +438,8 @@ void* pvalloc(size_t size)
*
* @throws ENOMEM The process cannot allocate more memory.
* @throws EINVAL If `boundary` is not a power of two.
+ *
+ * @since Always.
*/
void* aligned_alloc(size_t boundary, size_t size)
{
@@ -433,6 +457,8 @@ void* aligned_alloc(size_t boundary, size_t size)
*
* @param segment The memory segment.
* @return The size of the memory segment, 0 if `segment` is `NULL`.
+ *
+ * @since Always.
*/
size_t malloc_usable_size(void* segment)
{
diff --git a/src/slibc-alloc.c b/src/slibc-alloc.c
index 5ae9cbd..9438b15 100644
--- a/src/slibc-alloc.c
+++ b/src/slibc-alloc.c
@@ -59,6 +59,8 @@
* override the memory segment with zeroes before freeing the allocation.
*
* @param segment The memory segment to free.
+ *
+ * @since Always.
*/
void fast_free(void* segment)
{
@@ -73,6 +75,8 @@ void fast_free(void* segment)
* override the memory segment with zeroes before freeing the allocation.
*
* @param segment The memory segment to free.
+ *
+ * @since Always.
*/
void secure_free(void* segment)
{
@@ -103,6 +107,8 @@ void secure_free(void* segment)
* implemented in slibc. It is however not guaranteed
* that this will happen, undefined behaviour may be
* invoked instead.
+ *
+ * @since Always.
*/
size_t allocsize(void* segment)
{
@@ -169,6 +175,8 @@ size_t allocsize(void* segment)
* @return The new allocation, see `realloc` for more details.
*
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
void* crealloc(void* ptr, size_t size)
{
@@ -185,6 +193,8 @@ void* crealloc(void* ptr, size_t size)
* @return The new allocation, see `realloc` for more details.
*
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
void* fast_realloc(void* ptr, size_t size)
{
@@ -201,6 +211,8 @@ void* fast_realloc(void* ptr, size_t size)
* @return The new allocation, see `realloc` for more details.
*
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
void* secure_realloc(void* ptr, size_t size)
{
@@ -229,6 +241,8 @@ void* secure_realloc(void* ptr, size_t size)
* @return The new allocation, see `realloc` for more details.
*
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
void* custom_realloc(void* ptr, size_t size, int clear_old, int clear_new, int clear_free)
{
@@ -258,6 +272,8 @@ void* custom_realloc(void* ptr, size_t size, int clear_old, int clear_new, int c
*
* @throws 0 `errno` is set to zero success if `NULL` is returned.
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
void* extalloc(void* ptr, size_t size, enum extalloc_mode mode)
{
@@ -300,6 +316,8 @@ void* extalloc(void* ptr, size_t size, enum extalloc_mode mode)
* @throws 0 `errno` is set to zero success if `NULL` is returned.
* @throws EINVAL `mode` is invalid, or `boundary` is not a power of two.
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
void* rememalign(void* ptr, size_t boundary, size_t size, enum rememalign_mode mode)
{
@@ -373,6 +391,8 @@ void* rememalign(void* ptr, size_t boundary, size_t size, enum rememalign_mode m
*
* @throws EINVAL `boundary` is not a power of two.
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
void* naive_realloc(void* ptr, size_t boundary, size_t size)
{
@@ -394,6 +414,8 @@ void* naive_realloc(void* ptr, size_t boundary, size_t size)
*
* @throws 0 `malloc` is require to perform the action.
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
void* naive_extalloc(void* ptr, size_t size)
{
@@ -419,6 +441,8 @@ void* naive_extalloc(void* ptr, size_t size)
* on error (errno is set to describe the error.)
*
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
__GCC_ONLY(__attribute__((nonnull)))
static inline void* falloc_realloc(void* ptr, size_t* ptrshift, size_t alignment,
@@ -501,6 +525,8 @@ static inline void* falloc_realloc(void* ptr, size_t* ptrshift, size_t alignment
* @throws 0 `new_size` is zero.
* @throws EINVAL The arguments are invalid.
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
void* falloc(void* ptr, size_t* ptrshift, size_t alignment,
size_t old_size, size_t new_size, enum falloc_mode mode)
diff --git a/src/slibc-error.c b/src/slibc-error.c
index 26724f9..70a4e3c 100644
--- a/src/slibc-error.c
+++ b/src/slibc-error.c
@@ -44,6 +44,8 @@
* @param format Formatting-string for a description of the action that failed. `NULL` if
* no description other than the location and `error_string` should be printed.
* @param ... Formatting-arguments for `format`.
+ *
+ * @since Always.
*/
void slibc_perror(const char* progname, const char* filename, int linenum, const char* function,
int* error_code, const char* error_string, const char* format, ...)
diff --git a/src/slibc-human/escape.c b/src/slibc-human/escape.c
index 9579f73..4296715 100644
--- a/src/slibc-human/escape.c
+++ b/src/slibc-human/escape.c
@@ -38,6 +38,8 @@
* @throws 0 `str` is `NULL`.
* @throws EINVAL If `quote` is invalid.
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
char* escape(const char* restrict str, char quote)
{
diff --git a/src/slibc-human/humanmode.c b/src/slibc-human/humanmode.c
index 5dca887..6288433 100644
--- a/src/slibc-human/humanmode.c
+++ b/src/slibc-human/humanmode.c
@@ -35,6 +35,8 @@
*
* @throws EINVAL If `mode` is invalid.
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
char* humanmode(char* restrict buffer, mode_t perm, enum humanmode_mode mode)
{
diff --git a/src/slibc-human/humansize.c b/src/slibc-human/humansize.c
index cabd9ab..ecebd26 100644
--- a/src/slibc-human/humansize.c
+++ b/src/slibc-human/humansize.c
@@ -244,6 +244,8 @@ static char* humansize_round(char* buffer, size_t bufsize, enum humansize_mode m
*
* @throws EINVAL If `mode` is invalid.
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
char* humansize(char* buffer, size_t bufsize, size_t size, enum humansize_mode mode, int detail,
const char* restrict point, const char* restrict intraspacing, const char* restrict interspacing)
diff --git a/src/slibc-human/machinemode.c b/src/slibc-human/machinemode.c
index af8c4bb..13d123a 100644
--- a/src/slibc-human/machinemode.c
+++ b/src/slibc-human/machinemode.c
@@ -204,6 +204,8 @@ static inline int exact_numeric(mode_t* restrict mode, mode_t* restrict mask, co
* @return Zero on success, -1 on error.
*
* @throws EINVAL If `str` is not parseable.
+ *
+ * @since Always.
*/
int machinemode(mode_t* restrict mode, mode_t* restrict mask, const char* restrict str)
{
diff --git a/src/slibc-human/unescape.c b/src/slibc-human/unescape.c
index 90bf61c..da08b9a 100644
--- a/src/slibc-human/unescape.c
+++ b/src/slibc-human/unescape.c
@@ -48,6 +48,8 @@
* @throws 0 `str` is `NULL`.
* @throws EINVAL If `mode` is invalid.
* @throws EINVAL If `str` is invalid and `mode & UNESCAPE_EINVAL`.
+ *
+ * @since Always.
*/
char* unescape(char* str, enum unescape_mode mode)
{
diff --git a/src/slibc-print.c b/src/slibc-print.c
index f1ed817..1a26a15 100644
--- a/src/slibc-print.c
+++ b/src/slibc-print.c
@@ -45,6 +45,8 @@
*
* @throws Any error thrown by `write_function` or `extension_function`.
* @throws EINVAL `format` contained unsupported formatting codes.
+ *
+ * @since Always.
*/
int generic_printf(generic_printf_write_func_t write_function, generic_printf_ext_func_t extension_function,
size_t maximum_length, int limited_length, size_t* restrict actual_length, int terminate,
@@ -86,6 +88,8 @@ int generic_printf(generic_printf_write_func_t write_function, generic_printf_ex
*
* @throws Any error thrown by `write_function` or `extension_function`.
* @throws EINVAL `format` contained unsupported formatting codes.
+ *
+ * @since Always.
*/
int vgeneric_printf(generic_printf_write_func_t write_function, generic_printf_ext_func_t extension_function,
size_t maximum_length, int limited_length, size_t* restrict actual_length, int terminate,
@@ -131,6 +135,8 @@ int vgeneric_printf(generic_printf_write_func_t write_function, generic_printf_e
*
* @throws Any error thrown by `write_function` or `extension_function`.
* @throws EINVAL `format` contained unsupported formatting codes.
+ *
+ * @since Always.
*/
int generic_wprintf(generic_wprintf_write_func_t write_function, generic_wprintf_ext_func_t extension_function,
size_t maximum_length, int limited_length, size_t* restrict actual_length, int terminate,
@@ -173,6 +179,8 @@ int generic_wprintf(generic_wprintf_write_func_t write_function, generic_wprintf
*
* @throws Any error thrown by `write_function` or `extension_function`.
* @throws EINVAL `format` contained unsupported formatting codes.
+ *
+ * @since Always.
*/
int vgeneric_wprintf(generic_wprintf_write_func_t write_function, generic_wprintf_ext_func_t extension_function,
size_t maximum_length, int limited_length, size_t* restrict actual_length, int terminate,
diff --git a/src/stdio/printf.c b/src/stdio/printf.c
index fa5dce9..4c5bae9 100644
--- a/src/stdio/printf.c
+++ b/src/stdio/printf.c
@@ -184,7 +184,7 @@ static int wwrite_fd(const wchar_t* text, size_t length, int* fdp)
/**
- * Write a string segment to a file.
+ * Write a string segment to a socket with `send`.
*
* @param text The text to write, not NUL terminated.
* @param length The length of `text`.
@@ -204,7 +204,7 @@ static int send_fd(const char* text, size_t length, int* input)
/**
- * Write a string segment to a file.
+ * Write a string segment to a socket with `send`.
*
* @param text The text to write, not NUL terminated.
* @param length The length of `text`.
@@ -361,6 +361,8 @@ static int wwrite_buffer(const wchar_t* text, size_t length, struct buffer* buff
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `fwrite`.
+ *
+ * @since Always.
*/
int printf(const char* restrict format, ...)
{
@@ -387,6 +389,8 @@ int printf(const char* restrict format, ...)
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `fwrite`.
+ *
+ * @since Always.
*/
int fprintf(FILE* restrict stream, const char* restrict format, ...)
{
@@ -414,6 +418,8 @@ int fprintf(FILE* restrict stream, const char* restrict format, ...)
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `fwrite_unlocked`.
+ *
+ * @since Always.
*/
int fprintf_unlocked(FILE* restrict stream, const char* restrict format, ...)
{
@@ -441,6 +447,8 @@ int fprintf_unlocked(FILE* restrict stream, const char* restrict format, ...)
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `write`.
+ *
+ * @since Always.
*/
int dprintf(int fd, const char* restrict format, ...)
{
@@ -471,6 +479,8 @@ int dprintf(int fd, const char* restrict format, ...)
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `write`.
+ *
+ * @since Always.
*/
int sockprintf(int fd, int flags, const char* format restrict, ...)
{
@@ -498,6 +508,8 @@ int sockprintf(int fd, int flags, const char* format restrict, ...)
* use "%zn" to find the actual length.
*
* @throws EINVAL `format` contained unsupported formatting codes.
+ *
+ * @since Always.
*/
int sprintf(char* restrict buffer, const char* restrict format, ...)
{
@@ -525,6 +537,8 @@ int sprintf(char* restrict buffer, const char* restrict format, ...)
* actual length.
*
* @throws EINVAL `format` contained unsupported formatting codes.
+ *
+ * @since Always.
*/
int snprintf(char* restrict buffer, size_t size, const char* restrict format, ...)
{
@@ -555,6 +569,8 @@ int snprintf(char* restrict buffer, size_t size, const char* restrict format, ..
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws ENOMEM The process cannot allocation the
* sufficient amount of memory.
+ *
+ * @since Always.
*/
int asprintf(char** restrict buffer, const char* restrict format, ...)
{
@@ -602,6 +618,8 @@ int asprintf(char** restrict buffer, const char* restrict format, ...)
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws ENOMEM The process cannot allocation the
* sufficient amount of memory.
+ *
+ * @since Always.
*/
int bprintf(char** restrict buffer, size_t* restrict size, size_t offset,
int secure, const char* restrict format, ...)
@@ -627,6 +645,8 @@ int bprintf(char** restrict buffer, size_t* restrict size, size_t offset,
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `fwrite`.
+ *
+ * @since Always.
*/
int vprintf(const char* restrict format, va_list args)
{
@@ -652,6 +672,8 @@ int vprintf(const char* restrict format, va_list args)
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `fwrite`.
+ *
+ * @since Always.
*/
int vfprintf(FILE* restrict stream, const char* restrict format, va_list args)
{
@@ -684,6 +706,8 @@ int vfprintf(FILE* restrict stream, const char* restrict format, va_list args)
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `fwrite_unlocked`.
+ *
+ * @since Always.
*/
int vfprintf_unlocked(FILE* restrict stream, const char* restrict format, va_list args)
{
@@ -709,6 +733,8 @@ int vfprintf_unlocked(FILE* restrict stream, const char* restrict format, va_lis
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `write`.
+ *
+ * @since Always.
*/
int vdprintf(int fd, const char* restrict format, va_list args)
{
@@ -738,6 +764,8 @@ int vdprintf(int fd, const char* restrict format, va_list args)
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `write`.
+ *
+ * @since Always.
*/
int vsockprintf(int fd, int flags, const char* restrict format, va_list args)
{
@@ -763,6 +791,8 @@ int vsockprintf(int fd, int flags, const char* restrict format, va_list args)
* use "%zn" to find the actual length.
*
* @throws EINVAL `format` contained unsupported formatting codes.
+ *
+ * @since Always.
*/
int vsprintf(char* restrict buffer, const char* restrict format, va_list args)
{
@@ -791,6 +821,8 @@ int vsprintf(char* restrict buffer, const char* restrict format, va_list args)
* actual length.
*
* @throws EINVAL `format` contained unsupported formatting codes.
+ *
+ * @since Always.
*/
int vsnprintf(char* restrict buffer, size_t size, const char* restrict format, va_list args)
{
@@ -821,6 +853,8 @@ int vsnprintf(char* restrict buffer, size_t size, const char* restrict format, v
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws ENOMEM The process cannot allocation the
* sufficient amount of memory.
+ *
+ * @since Always.
*/
int vasprintf(char** restrict buffer, const char* restrict format, va_list args)
{
@@ -871,6 +905,8 @@ int vasprintf(char** restrict buffer, const char* restrict format, va_list args)
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws ENOMEM The process cannot allocation the
* sufficient amount of memory.
+ *
+ * @since Always.
*/
int vbprintf(char** restrict buffer, size_t* restrict size, size_t offset,
int secure, const char* restrict format, va_list args)
@@ -904,6 +940,8 @@ int vbprintf(char** restrict buffer, size_t* restrict size, size_t offset,
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `fwrite`.
+ *
+ * @since Always.
*/
int wprintf(const wchar_t* restrict format, ...)
{
@@ -929,6 +967,8 @@ int wprintf(const wchar_t* restrict format, ...)
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `fwrite`.
+ *
+ * @since Always.
*/
int fwprintf(FILE* restrict stream, const wchar_t* restrict format, ...)
{
@@ -956,6 +996,8 @@ int fwprintf(FILE* restrict stream, const wchar_t* restrict format, ...)
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `fwrite_unlocked`.
+ *
+ * @since Always.
*/
int fwprintf_unlocked(FILE* restrict stream, const wchar_t* restrict format, ...)
{
@@ -983,6 +1025,8 @@ int fwprintf_unlocked(FILE* restrict stream, const wchar_t* restrict format, ...
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `write`.
+ *
+ * @since Always.
*/
int dwprintf(int fd, const wchar_t* restrict format, ...)
{
@@ -1012,6 +1056,8 @@ int dwprintf(int fd, const wchar_t* restrict format, ...)
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `write`.
+ *
+ * @since Always.
*/
int sockwprintf(int fd, int flags, const wchar_t* restrict format, ...)
{
@@ -1039,6 +1085,8 @@ int sockwprintf(int fd, int flags, const wchar_t* restrict format, ...)
* actual length.
*
* @throws EINVAL `format` contained unsupported formatting codes.
+ *
+ * @since Always.
*/
int swprintf(wchar_t* restrict buffer, size_t size, const wchar_t* restrict format, ...)
{
@@ -1069,6 +1117,8 @@ int swprintf(wchar_t* restrict buffer, size_t size, const wchar_t* restrict form
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws ENOMEM The process cannot allocation the
* sufficient amount of memory.
+ *
+ * @since Always.
*/
int aswprintf(wchar_t** restrict buffer, const wchar_t* restrict format, ...)
{
@@ -1117,6 +1167,8 @@ int aswprintf(wchar_t** restrict buffer, const wchar_t* restrict format, ...)
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws ENOMEM The process cannot allocation the
* sufficient amount of memory.
+ *
+ * @since Always.
*/
int bwprintf(wchar_t** restrict buffer, size_t* restrict size, size_t offset,
int secure, const wchar_t* restrict format, ...)
@@ -1142,6 +1194,8 @@ int bwprintf(wchar_t** restrict buffer, size_t* restrict size, size_t offset,
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `fwrite`.
+ *
+ * @since Always.
*/
int vwprintf(const wchar_t* restrict format, va_list args)
{
@@ -1167,6 +1221,8 @@ int vwprintf(const wchar_t* restrict format, va_list args)
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `fwrite`.
+ *
+ * @since Always.
*/
int vfwprintf(FILE* restrict stream, const wchar_t* restrict format, va_list args)
{
@@ -1199,6 +1255,8 @@ int vfwprintf(FILE* restrict stream, const wchar_t* restrict format, va_list arg
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `fwrite_unlocked`.
+ *
+ * @since Always.
*/
int vfwprintf_unlocked(FILE* restrict stream, const wchar_t* restrict format, va_list args)
{
@@ -1226,6 +1284,8 @@ int vfwprintf_unlocked(FILE* restrict stream, const wchar_t* restrict format, va
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `write`.
+ *
+ * @since Always.
*/
int vdwprintf(int fd, const wchar_t* restrict format, va_list args)
{
@@ -1255,6 +1315,8 @@ int vdwprintf(int fd, const wchar_t* restrict format, va_list args)
*
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws Any error specified for `write`.
+ *
+ * @since Always.
*/
int vsockwprintf(int fd, int flags, const wchar_t* restrict format, va_list args)
{
@@ -1283,6 +1345,8 @@ int vsockwprintf(int fd, int flags, const wchar_t* restrict format, va_list args
* actual length.
*
* @throws EINVAL `format` contained unsupported formatting codes.
+ *
+ * @since Always.
*/
int vswprintf(wchar_t* restrict buffer, size_t size, const wchar_t* restrict format, va_list args)
{
@@ -1314,6 +1378,8 @@ int vswprintf(wchar_t* restrict buffer, size_t size, const wchar_t* restrict for
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws ENOMEM The process cannot allocation the
* sufficient amount of memory.
+ *
+ * @since Always.
*/
int vaswprintf(wchar_t** restrict buffer, const wchar_t* restrict format, va_list args)
{
@@ -1365,6 +1431,8 @@ int vaswprintf(wchar_t** restrict buffer, const wchar_t* restrict format, va_lis
* @throws EINVAL `format` contained unsupported formatting codes.
* @throws ENOMEM The process cannot allocation the
* sufficient amount of memory.
+ *
+ * @since Always.
*/
int vbwprintf(wchar_t** restrict buffer, size_t* restrict size, size_t offset,
int secure, const wchar_t* restrict format, va_list args)
diff --git a/src/stdio/scanf.c b/src/stdio/scanf.c
index 9a88ec4..f5147dd 100644
--- a/src/stdio/scanf.c
+++ b/src/stdio/scanf.c
@@ -27,6 +27,8 @@
# pragma GCC diagnostic ignored "-Wcast-qual"
# pragma GCC diagnostic ignored "-Wdiscarded-qualifiers"
+/* TODO [v]sock[w]scanf (can use MSG_PEEK) */
+/* TODO doc: performance issue on [v]d[w]scanf */
@@ -80,6 +82,8 @@ extern int wread_fd(void);
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int scanf(const char* restrict format, ...)
{
@@ -100,6 +104,8 @@ int scanf(const char* restrict format, ...)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int fscanf(FILE* restrict stream, const char* restrict format, ...)
{
@@ -120,6 +126,8 @@ int fscanf(FILE* restrict stream, const char* restrict format, ...)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int sscanf(const char* restrict input, const char* restrict format, ...)
{
@@ -141,6 +149,8 @@ int sscanf(const char* restrict input, const char* restrict format, ...)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int fscanf_unlocked(FILE* restrict stream, const char* restrict format, ...)
{
@@ -165,6 +175,8 @@ int fscanf_unlocked(FILE* restrict stream, const char* restrict format, ...)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int snscanf(const char* restrict input, size_t length, const char* restrict format, ...)
{
@@ -188,6 +200,8 @@ int snscanf(const char* restrict input, size_t length, const char* restrict form
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int dscanf(int fd, const char* restrict format, ...)
{
@@ -206,6 +220,8 @@ int dscanf(int fd, const char* restrict format, ...)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int vscanf(const char* restrict format, va_list args)
{
@@ -225,6 +241,8 @@ int vscanf(const char* restrict format, va_list args)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int vfscanf(FILE* restrict stream, const char* restrict format, va_list args)
{
@@ -249,6 +267,8 @@ int vfscanf(FILE* restrict stream, const char* restrict format, va_list args)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int vsscanf(const char* restrict input, const char* restrict format, va_list args)
{
@@ -270,6 +290,8 @@ int vsscanf(const char* restrict input, const char* restrict format, va_list arg
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int vfscanf_unlocked(FILE* restrict stream, const char* restrict format, va_list args)
{
@@ -292,6 +314,8 @@ int vfscanf_unlocked(FILE* restrict stream, const char* restrict format, va_list
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int vsnscanf(const char* restrict input, size_t length, const char* restrict format, va_list args)
{
@@ -313,6 +337,8 @@ int vsnscanf(const char* restrict input, size_t length, const char* restrict for
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int vdscanf(int fd, const char* restrict format, va_list args)
{
@@ -331,6 +357,8 @@ int vdscanf(int fd, const char* restrict format, va_list args)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int wscanf(const wchar_t* restrict format, ...)
{
@@ -350,6 +378,8 @@ int wscanf(const wchar_t* restrict format, ...)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int fwscanf(FILE* restrict stream, const wchar_t* restrict format, ...)
{
@@ -369,6 +399,8 @@ int fwscanf(FILE* restrict stream, const wchar_t* restrict format, ...)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int swscanf(const wchar_t* restrict input, const wchar_t* restrict format, ...)
{
@@ -390,6 +422,8 @@ int swscanf(const wchar_t* restrict input, const wchar_t* restrict format, ...)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int fwscanf_unlocked(FILE* restrict stream, const wchar_t* restrict format, ...)
{
@@ -412,6 +446,8 @@ int fwscanf_unlocked(FILE* restrict stream, const wchar_t* restrict format, ...)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int snwscanf(const wchar_t* restrict input, size_t length, const wchar_t* restrict format, ...)
{
@@ -433,6 +469,8 @@ int snwscanf(const wchar_t* restrict input, size_t length, const wchar_t* restri
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int dwscanf(int fd, const wchar_t* restrict format, ...)
{
@@ -451,6 +489,8 @@ int dwscanf(int fd, const wchar_t* restrict format, ...)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int vwscanf(const wchar_t* restrict format, va_list args)
{
@@ -470,6 +510,8 @@ int vwscanf(const wchar_t* restrict format, va_list args)
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int vfwscanf(FILE* restrict stream, const wchar_t* restrict format, va_list args)
{
@@ -494,6 +536,8 @@ int vfwscanf(FILE* restrict stream, const wchar_t* restrict format, va_list args
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int vswscanf(const wchar_t* restrict input, const wchar_t* restrict format, va_list args)
{
@@ -515,6 +559,8 @@ int vswscanf(const wchar_t* restrict input, const wchar_t* restrict format, va_l
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int vfwscanf_unlocked(FILE* restrict stream, const wchar_t* restrict format, va_list args)
{
@@ -537,6 +583,8 @@ int vfwscanf_unlocked(FILE* restrict stream, const wchar_t* restrict format, va_
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int vsnwscanf(const wchar_t* restrict input, size_t length, const wchar_t* restrict format, va_list args)
{
@@ -558,6 +606,8 @@ int vsnwscanf(const wchar_t* restrict input, size_t length, const wchar_t* restr
* if the end of the input is reached before the
* first argument is successfully converted, or
* on error.
+ *
+ * @since Always.
*/
int vdwscanf(int fd, const wchar_t* restrict format, va_list args)
{
@@ -568,6 +618,8 @@ int vdwscanf(int fd, const wchar_t* restrict format, va_list args)
/**
* This function is identical to `scanf`.
+ *
+ * @since Always.
*/
int __isoc99_scanf(const char* restrict format, ...)
{
@@ -576,6 +628,8 @@ int __isoc99_scanf(const char* restrict format, ...)
/**
* This function is identical to `fscanf`.
+ *
+ * @since Always.
*/
int __isoc99_fscanf(FILE* restrict stream, const char* restrict format, ...)
{
@@ -584,6 +638,8 @@ int __isoc99_fscanf(FILE* restrict stream, const char* restrict format, ...)
/**
* This function is identical to `sscanf`.
+ *
+ * @since Always.
*/
int __isoc99_sscanf(const char* restrict input, const char* restrict format, ...)
{
@@ -592,6 +648,8 @@ int __isoc99_sscanf(const char* restrict input, const char* restrict format, ...
/**
* This function is identical to `vscanf`.
+ *
+ * @since Always.
*/
int __isoc99_vscanf(const char* restrict format, va_list args)
{
@@ -600,6 +658,8 @@ int __isoc99_vscanf(const char* restrict format, va_list args)
/**
* This function is identical to `vfscanf`.
+ *
+ * @since Always.
*/
int __isoc99_vfscanf(FILE* restrict stream, const char* restrict format, va_list args)
{
@@ -608,6 +668,8 @@ int __isoc99_vfscanf(FILE* restrict stream, const char* restrict format, va_list
/**
* This function is identical to `vsscanf`.
+ *
+ * @since Always.
*/
int __isoc99_vsscanf(const char* restrict input, const char* restrict format, va_list args)
{
@@ -616,6 +678,8 @@ int __isoc99_vsscanf(const char* restrict input, const char* restrict format, va
/**
* This function is identical to `wscanf`.
+ *
+ * @since Always.
*/
int __isoc99_wscanf(const wchar_t* restrict format, ...)
{
@@ -624,6 +688,8 @@ int __isoc99_wscanf(const wchar_t* restrict format, ...)
/**
* This function is identical to `fwscanf`.
+ *
+ * @since Always.
*/
int __isoc99_fwscanf(FILE* restrict stream, const wchar_t* restrict format, ...)
{
@@ -632,6 +698,8 @@ int __isoc99_fwscanf(FILE* restrict stream, const wchar_t* restrict format, ...)
/**
* This function is identical to `swscanf`.
+ *
+ * @since Always.
*/
int __isoc99_swscanf(const wchar_t* restrict input, const wchar_t* restrict format, ...)
{
@@ -640,6 +708,8 @@ int __isoc99_swscanf(const wchar_t* restrict input, const wchar_t* restrict form
/**
* This function is identical to `vwscanf`.
+ *
+ * @since Always.
*/
int __isoc99_vwscanf(const wchar_t* restrict format, va_list args)
{
@@ -648,6 +718,8 @@ int __isoc99_vwscanf(const wchar_t* restrict format, va_list args)
/**
* This function is identical to `vfwscanf`.
+ *
+ * @since Always.
*/
int __isoc99_vfwscanf(FILE* restrict stream, const wchar_t* restrict format, va_list args)
{
@@ -656,6 +728,8 @@ int __isoc99_vfwscanf(FILE* restrict stream, const wchar_t* restrict format, va_
/**
* This function is identical to `vswscanf`.
+ *
+ * @since Always.
*/
int __isoc99_vswscanf(const wchar_t* restrict input, const wchar_t* restrict format, va_list args)
{
diff --git a/src/stdlib/abs/abs.c b/src/stdlib/abs/abs.c
index 9bc3bd4..ce2c81c 100644
--- a/src/stdlib/abs/abs.c
+++ b/src/stdlib/abs/abs.c
@@ -29,6 +29,8 @@
*
* @param value The integer.
* @return The absolute value of the integer.
+ *
+ * @since Always.
*/
int (abs)(int value)
{
diff --git a/src/stdlib/abs/labs.c b/src/stdlib/abs/labs.c
index 20d0ac6..bf20bb8 100644
--- a/src/stdlib/abs/labs.c
+++ b/src/stdlib/abs/labs.c
@@ -29,6 +29,8 @@
*
* @param value The integer.
* @return The absolute value of the integer.
+ *
+ * @since Always.
*/
long int (labs)(long int value)
{
diff --git a/src/stdlib/abs/llabs.c b/src/stdlib/abs/llabs.c
index 71e5a1b..8779d82 100644
--- a/src/stdlib/abs/llabs.c
+++ b/src/stdlib/abs/llabs.c
@@ -29,6 +29,8 @@
*
* @param value The integer.
* @return The absolute value of the integer.
+ *
+ * @since Always.
*/
long long int (llabs)(long long int value)
{
diff --git a/src/stdlib/abspath.c b/src/stdlib/abspath.c
index a0f0871..83daa1b 100644
--- a/src/stdlib/abspath.c
+++ b/src/stdlib/abspath.c
@@ -36,6 +36,8 @@
* if `file` does. (Or if `ref` does but file is empty.)
*
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
char* abspath(const char* file, const char* ref) /* XXX may also fail as get_current_dir_name */
{
diff --git a/src/stdlib/atof.c b/src/stdlib/atof.c
index a4546b1..087912b 100644
--- a/src/stdlib/atof.c
+++ b/src/stdlib/atof.c
@@ -31,6 +31,8 @@
*
* @param string The string to convert.
* @return The number encoded by the string.
+ *
+ * @since Always.
*/
double atof(const char* string)
{
diff --git a/src/stdlib/atoi.c b/src/stdlib/atoi.c
index 386c80d..6db57c5 100644
--- a/src/stdlib/atoi.c
+++ b/src/stdlib/atoi.c
@@ -32,6 +32,8 @@
*
* @param string The string to convert.
* @return The integer encoded by the string.
+ *
+ * @since Always.
*/
int atoi(const char* string)
{
diff --git a/src/stdlib/atol.c b/src/stdlib/atol.c
index b4170e1..d0706a4 100644
--- a/src/stdlib/atol.c
+++ b/src/stdlib/atol.c
@@ -32,6 +32,8 @@
*
* @param string The string to convert.
* @return The integer encoded by the string.
+ *
+ * @since Always.
*/
long int atol(const char* string)
{
diff --git a/src/stdlib/atoll.c b/src/stdlib/atoll.c
index ad26449..4e16bed 100644
--- a/src/stdlib/atoll.c
+++ b/src/stdlib/atoll.c
@@ -32,6 +32,8 @@
*
* @param string The string to convert.
* @return The integer encoded by the string.
+ *
+ * @since Always.
*/
long long int atoll(const char* string)
{
diff --git a/src/stdlib/atoq.c b/src/stdlib/atoq.c
index 57d2c0a..c929661 100644
--- a/src/stdlib/atoq.c
+++ b/src/stdlib/atoq.c
@@ -23,6 +23,8 @@
* This function is identical to `atoll`.
*
* This is a Linux libc extension.
+ *
+ * @since Always.
*/
long long int atoq(const char* string)
{
diff --git a/src/stdlib/div/div.c b/src/stdlib/div/div.c
index 3c071c5..1c5aa85 100644
--- a/src/stdlib/div/div.c
+++ b/src/stdlib/div/div.c
@@ -31,6 +31,8 @@
* the process will be killed by SIGFPE.
* @return The quotient in `.quot`, and
* the remainder in `.rem`.
+ *
+ * @since Always.
*/
div_t div(int numerator, int denominator)
{
diff --git a/src/stdlib/div/ldiv.c b/src/stdlib/div/ldiv.c
index 40028fa..65e139d 100644
--- a/src/stdlib/div/ldiv.c
+++ b/src/stdlib/div/ldiv.c
@@ -31,6 +31,8 @@
* the process will be killed by SIGFPE.
* @return The quotient in `.quot`, and
* the remainder in `.rem`.
+ *
+ * @since Always.
*/
ldiv_t ldiv(long numerator, long denominator)
{
diff --git a/src/stdlib/div/lldiv.c b/src/stdlib/div/lldiv.c
index 01ddd78..764cb9b 100644
--- a/src/stdlib/div/lldiv.c
+++ b/src/stdlib/div/lldiv.c
@@ -31,6 +31,8 @@
* the process will be killed by SIGFPE.
* @return The quotient in `.quot`, and
* the remainder in `.rem`.
+ *
+ * @since Always.
*/
lldiv_t lldiv(long long numerator, long long denominator)
{
diff --git a/src/stdlib/relpath.c b/src/stdlib/relpath.c
index e3d7e24..f710523 100644
--- a/src/stdlib/relpath.c
+++ b/src/stdlib/relpath.c
@@ -37,6 +37,8 @@
* point to `file`.
*
* @throws ENOMEM The process cannot allocate more memory.
+ *
+ * @since Always.
*/
char* relpath(const char* file, const char* ref) /* XXX may also fail as get_current_dir_name */
{
diff --git a/src/string/basename_gnu.c b/src/string/basename_gnu.c
index 6fb474a..c25fb1e 100644
--- a/src/string/basename_gnu.c
+++ b/src/string/basename_gnu.c
@@ -34,6 +34,8 @@
* of `filename` or, if `filename` is `NULL`
* or is empty, a statically allocationed string,
* so it must not freed or edited.
+ *
+ * @since Always.
*/
char* __gnu_basename(const char* filename)
{
diff --git a/src/string/mem/memcasecmp.c b/src/string/mem/memcasecmp.c
index d8ea014..816c954 100644
--- a/src/string/mem/memcasecmp.c
+++ b/src/string/mem/memcasecmp.c
@@ -31,6 +31,8 @@
* @param size The size of the segments.
* @return Zero is returned if `a` and `b` are equal, otherwise,
* see the specifications for `a` and `b`.
+ *
+ * @since Always.
*/
int memcasecmp(const void* a, const void* b, size_t size)
{
diff --git a/src/string/mem/memcasemem.c b/src/string/mem/memcasemem.c
index aad5d68..b15daea 100644
--- a/src/string/mem/memcasemem.c
+++ b/src/string/mem/memcasemem.c
@@ -38,6 +38,8 @@
* @param needle_length The length of `needle`.
* @return Pointer to the first occurrence of
* the substring, `NULL` if not found.
+ *
+ * @since Always.
*/
void* (memcasemem)(const void* __haystack, size_t haystack_length,
const void* __needle, size_t needle_length)
diff --git a/src/string/mem/memccpy.c b/src/string/mem/memccpy.c
index 01b4a4b..f5c669e 100644
--- a/src/string/mem/memccpy.c
+++ b/src/string/mem/memccpy.c
@@ -32,6 +32,8 @@
* that is, the address of `whither` plus the
* number of copied characters; the address of
* one character passed the last written character.
+ *
+ * @since Always.
*/
void* (memccpy)(void* restrict whither, const void* restrict whence, int c, size_t size)
{
diff --git a/src/string/mem/memchr.c b/src/string/mem/memchr.c
index 380fa0f..06c82a8 100644
--- a/src/string/mem/memchr.c
+++ b/src/string/mem/memchr.c
@@ -30,6 +30,8 @@
* @param size The size of the memory segment.
* @return Pointer to the first occurrence of `c`,
* `NULL` if none were found.
+ *
+ * @since Always.
*/
void* (memchr)(const void* segment, int c, size_t size)
{
diff --git a/src/string/mem/memcmove.c b/src/string/mem/memcmove.c
index ad10606..c1cf8ae 100644
--- a/src/string/mem/memcmove.c
+++ b/src/string/mem/memcmove.c
@@ -34,6 +34,8 @@
* that is, the address of `whither` plus the
* number of copied characters; the address of
* one character passed the last written character.
+ *
+ * @since Always.
*/
void* (memcmove)(void* whither, const void* whence, int c, size_t size)
{
diff --git a/src/string/mem/memcmp.c b/src/string/mem/memcmp.c
index 112cdd1..1de506d 100644
--- a/src/string/mem/memcmp.c
+++ b/src/string/mem/memcmp.c
@@ -27,6 +27,8 @@
* @param size The size of the segments.
* @return Zero is returned if `a` and `b` are equal, otherwise,
* see the specifications for `a` and `b`.
+ *
+ * @since Always.
*/
int memcmp(const void* a, const void* b, size_t size)
{
diff --git a/src/string/mem/memcpy.c b/src/string/mem/memcpy.c
index fcda29d..ccf716b 100644
--- a/src/string/mem/memcpy.c
+++ b/src/string/mem/memcpy.c
@@ -26,6 +26,8 @@
* @param whence The source memory segment.
* @param size The number of bytes to copy.
* @return `whither` is returned.
+ *
+ * @since Always.
*/
void* memcpy(void* restrict whither, const void* restrict whence, size_t size)
{
diff --git a/src/string/mem/memdup.c b/src/string/mem/memdup.c
index 3b301dc..3e3be99 100644
--- a/src/string/mem/memdup.c
+++ b/src/string/mem/memdup.c
@@ -31,6 +31,8 @@
* and `errno` is set to indicate the error.
*
* @throws ENOMEM The process could not allocate sufficient amount of memory.
+ *
+ * @since Always.
*/
void* memdup(const void* segment, size_t size)
{
diff --git a/src/string/mem/memmem.c b/src/string/mem/memmem.c
index 62739d4..71d1f4d 100644
--- a/src/string/mem/memmem.c
+++ b/src/string/mem/memmem.c
@@ -37,6 +37,8 @@
* @param needle_length The length of `needle`.
* @return Pointer to the first occurrence of
* the substring, `NULL` if not found.
+ *
+ * @since Always.
*/
void* (memmem)(const void* __haystack, size_t haystack_length,
const void* __needle, size_t needle_length)
diff --git a/src/string/mem/memmove.c b/src/string/mem/memmove.c
index 41871c6..00ee9c1 100644
--- a/src/string/mem/memmove.c
+++ b/src/string/mem/memmove.c
@@ -26,6 +26,8 @@
* @param whence The source memory segment.
* @param size The number of bytes to copy.
* @return `whither` is returned.
+ *
+ * @since Always.
*/
void* memmove(void* whither, const void* whence, size_t size)
{
diff --git a/src/string/mem/mempcpy.c b/src/string/mem/mempcpy.c
index 2072dc3..97b81f1 100644
--- a/src/string/mem/mempcpy.c
+++ b/src/string/mem/mempcpy.c
@@ -28,6 +28,8 @@
* @param whence The source memory segment.
* @param size The number of bytes to copy.
* @return `whither + size` is returned.
+ *
+ * @since Always.
*/
void* mempcpy(void* restrict whither, const void* restrict whence, size_t size)
{
diff --git a/src/string/mem/mempmove.c b/src/string/mem/mempmove.c
index f837032..415e38b 100644
--- a/src/string/mem/mempmove.c
+++ b/src/string/mem/mempmove.c
@@ -29,6 +29,8 @@
* @param whence The source memory segment.
* @param size The number of bytes to copy.
* @return `whither + size` is returned.
+ *
+ * @since Always.
*/
void* mempmove(void* whither, const void* whence, size_t size)
{
diff --git a/src/string/mem/memrchr.c b/src/string/mem/memrchr.c
index 7325049..2781a71 100644
--- a/src/string/mem/memrchr.c
+++ b/src/string/mem/memrchr.c
@@ -34,6 +34,8 @@
* @param size The size of the memory segment.
* @return Pointer to the last occurrence of `c`,
* `NULL` if none were found.
+ *
+ * @since Always.
*/
void* (memrchr)(const void* segment, int c, size_t size)
{
diff --git a/src/string/mem/memset.c b/src/string/mem/memset.c
index df36052..047620b 100644
--- a/src/string/mem/memset.c
+++ b/src/string/mem/memset.c
@@ -26,6 +26,8 @@
* @param c The character (8 bits wide.)
* @param size The size of the memory segment.
* @return `segment` is returned.
+ *
+ * @since Always.
*/
void* memset(void* segment, int c, size_t size)
{
diff --git a/src/string/mem/rawmemchr.c b/src/string/mem/rawmemchr.c
index 8f5c03e..afaae48 100644
--- a/src/string/mem/rawmemchr.c
+++ b/src/string/mem/rawmemchr.c
@@ -31,6 +31,8 @@
* @param segment The memory segment to search.
* @param c The sought after character.
* @return Pointer to the first occurrence of `c`.
+ *
+ * @since Always.
*/
void* (rawmemchr)(const void* segment, int c)
{
diff --git a/src/string/memfrob.c b/src/string/memfrob.c
index 7ec9abd..77c2e40 100644
--- a/src/string/memfrob.c
+++ b/src/string/memfrob.c
@@ -28,6 +28,8 @@
* @param segment The memory segment.
* @param size The size of the memory segment.
* @return `segment` is returned
+ *
+ * @since Always.
*/
char* memfrob(char* segment, size_t size)
{
diff --git a/src/string/new.c b/src/string/new.c
index 28d2b22..56b4e92 100644
--- a/src/string/new.c
+++ b/src/string/new.c
@@ -28,6 +28,8 @@
* @param str The string.
* @param stop The additional termination-byte.
* @return The number of bytes before, the first termination-byte.
+ *
+ * @since Always.
*/
size_t strclen(const char* string, int stop)
{
@@ -45,6 +47,8 @@ size_t strclen(const char* string, int stop)
* @param maxlen The number of bytes to inspect, at most.
* @return The number of bytes before, the first termination-byte.
* `maxlen` if no termination-byte was found.
+ *
+ * @since Always.
*/
size_t strcnlen(const char* string, int stop, size_t maxlen)
{
@@ -61,6 +65,8 @@ size_t strcnlen(const char* string, int stop, size_t maxlen)
* @param str The string.
* @param stop The additional termination-mark.
* @return The number of bytes before, the first termination-mark.
+ *
+ * @since Always.
*/
size_t strstrlen(const char* string, const char* stop)
{
@@ -79,6 +85,8 @@ size_t strstrlen(const char* string, const char* stop)
* @param maxlen The number of bytes to inspect, at most.
* @return The number of bytes before, the first termination-mark.
* `maxlen` if no termination-byte was found.
+ *
+ * @since Always.
*/
size_t strstrnlen(const char* string, const char* stop, size_t maxlen)
{
@@ -99,6 +107,8 @@ size_t strstrnlen(const char* string, const char* stop, size_t maxlen)
* @param maxlen The number of bytes to inspect, at most.
* @return Pointer to the first occurrence of `c`,
* `NULL` if none were found.
+ *
+ * @since Always.
*/
char* (strnchr)(const char* string, int c, size_t maxlen)
{
@@ -124,6 +134,8 @@ char* (strnchr)(const char* string, int c, size_t maxlen)
* part of the sring) if non were found. If the
* whole string was inspected, the returned
* pointer will point to a NUL byte.
+ *
+ * @since Always.
*/
char* (strnchrnul)(const char* string, int c, size_t maxlen)
{
diff --git a/src/string/str/rawstrcasestr.c b/src/string/str/rawstrcasestr.c
index 7e4cf9b..bae8c38 100644
--- a/src/string/str/rawstrcasestr.c
+++ b/src/string/str/rawstrcasestr.c
@@ -30,6 +30,8 @@
* @param haystack The string to search.
* @param needle The sought after substring.
* @return Pointer to the first occurrence of the substring.
+ *
+ * @since Always.
*/
char* (rawstrcasestr)(const char* haystack, const char* needle)
{
diff --git a/src/string/str/rawstrstr.c b/src/string/str/rawstrstr.c
index 9c3f186..8349210 100644
--- a/src/string/str/rawstrstr.c
+++ b/src/string/str/rawstrstr.c
@@ -29,6 +29,8 @@
* @param haystack The string to search.
* @param needle The sought after substring.
* @return Pointer to the first occurrence of the substring.
+ *
+ * @since Always.
*/
char* (rawstrstr)(const char* haystack, const char* needle)
{
diff --git a/src/string/str/stpcpy.c b/src/string/str/stpcpy.c
index a0d5f79..c643d77 100644
--- a/src/string/str/stpcpy.c
+++ b/src/string/str/stpcpy.c
@@ -26,6 +26,8 @@
* @param whither The destination memory segment.
* @param whence The source memory segment.
* @return `whither + strlen(whence)` is returned.
+ *
+ * @since Always.
*/
char* stpcpy(char* restrict whither, const char* restrict whence)
{
diff --git a/src/string/str/stpmove.c b/src/string/str/stpmove.c
index 8818c30..56ddd24 100644
--- a/src/string/str/stpmove.c
+++ b/src/string/str/stpmove.c
@@ -28,6 +28,8 @@
* @param whither The destination memory segment.
* @param whence The source memory segment.
* @return `whither + strlen(whence)` is returned.
+ *
+ * @since Always.
*/
char* stpmove(char* whither, const char* whence)
{
diff --git a/src/string/str/strcasecmp.c b/src/string/str/strcasecmp.c
index c4b9175..f2d6e83 100644
--- a/src/string/str/strcasecmp.c
+++ b/src/string/str/strcasecmp.c
@@ -31,6 +31,8 @@
* @param b A positive value is returned if this is the lesser.
* @return Zero is returned if `a` and `b` are equal, otherwise,
* see the specifications for `a` and `b`.
+ *
+ * @since Always.
*/
int strcasecmp(const char* a, const char* b)
{
diff --git a/src/string/str/strcaseends.c b/src/string/str/strcaseends.c
index 9155ea8..b9a1756 100644
--- a/src/string/str/strcaseends.c
+++ b/src/string/str/strcaseends.c
@@ -29,6 +29,8 @@
* @param desired The desired ending of the string.
* @return The `string`, where `desired` beings if
* `string` ends with `desired`, `NULL` otherwise.
+ *
+ * @since Always.
*/
char* (strcaseends)(const char* string, const char* desired)
{
diff --git a/src/string/str/strcasestarts.c b/src/string/str/strcasestarts.c
index f584da4..d17b936 100644
--- a/src/string/str/strcasestarts.c
+++ b/src/string/str/strcasestarts.c
@@ -29,6 +29,8 @@
* @param desired The desired beginning of the string.
* @return `string` if `string` begins with
* `desired`, `NULL` otherwise.
+ *
+ * @since Always.
*/
char* (strcasestarts)(const char* string, const char* desired)
{
diff --git a/src/string/str/strcasestr.c b/src/string/str/strcasestr.c
index 6468750..0ac4368 100644
--- a/src/string/str/strcasestr.c
+++ b/src/string/str/strcasestr.c
@@ -27,6 +27,8 @@
* @param needle The sought after substring.
* @return Pointer to the first occurrence of the
* substring, `NULL` if not found.
+ *
+ * @since Always.
*/
char* (strcasestr)(const char* haystack, const char* needle)
{
diff --git a/src/string/str/strcat.c b/src/string/str/strcat.c
index de5c63e..ec3cbe7 100644
--- a/src/string/str/strcat.c
+++ b/src/string/str/strcat.c
@@ -28,6 +28,8 @@
* @param whither The string to extend.
* @param whence The string to append.
* @return `whither` is returned.
+ *
+ * @since Always.
*/
char* strcat(char* restrict whither, const char* restrict whence)
{
diff --git a/src/string/str/strccpy.c b/src/string/str/strccpy.c
index 2d1bcd8..14b179b 100644
--- a/src/string/str/strccpy.c
+++ b/src/string/str/strccpy.c
@@ -34,6 +34,8 @@
* number of copied characters; the address of
* one character passed the last written non-NUL
* character.
+ *
+ * @since Always.
*/
char* strccpy(char* restrict whither, const char* restrict whence, int c)
{
diff --git a/src/string/str/strchr.c b/src/string/str/strchr.c
index 0ed53b4..8226726 100644
--- a/src/string/str/strchr.c
+++ b/src/string/str/strchr.c
@@ -34,6 +34,8 @@
* @param c The sought after character.
* @return Pointer to the first occurrence of `c`,
* `NULL` if none were found.
+ *
+ * @since Always.
*/
char* (strchr)(const char* string, int c)
{
diff --git a/src/string/str/strchrnul.c b/src/string/str/strchrnul.c
index 50dedfe..72ae9bc 100644
--- a/src/string/str/strchrnul.c
+++ b/src/string/str/strchrnul.c
@@ -35,6 +35,8 @@
* @return Pointer to the first occurrence of `c`,
* Pointer to the terminating NUL character
* if none were found.
+ *
+ * @since Always.
*/
char* (strchrnul)(const char* string, int c)
{
diff --git a/src/string/str/strcmove.c b/src/string/str/strcmove.c
index 8310b27..b2f877f 100644
--- a/src/string/str/strcmove.c
+++ b/src/string/str/strcmove.c
@@ -34,6 +34,8 @@
* number of copied characters; the address of
* one character passed the last written non-NUL
* character.
+ *
+ * @since Always.
*/
char* strcmove(char* whither, const char* whence, int c)
{
diff --git a/src/string/str/strcmp.c b/src/string/str/strcmp.c
index 3099d71..cf9426d 100644
--- a/src/string/str/strcmp.c
+++ b/src/string/str/strcmp.c
@@ -26,6 +26,8 @@
* @param b A positive value is returned if this is the lesser.
* @return Zero is returned if `a` and `b` are equal, otherwise,
* see the specifications for `a` and `b`.
+ *
+ * @since Always.
*/
int strcmp(const char* a, const char* b)
{
diff --git a/src/string/str/strcpy.c b/src/string/str/strcpy.c
index 75d88e7..d0fcd76 100644
--- a/src/string/str/strcpy.c
+++ b/src/string/str/strcpy.c
@@ -26,6 +26,8 @@
* @param whither The destination memory segment.
* @param whence The source memory segment.
* @return `whither` is returned.
+ *
+ * @since Always.
*/
char* strcpy(char* restrict whither, const char* restrict whence)
{
diff --git a/src/string/str/strcspn.c b/src/string/str/strcspn.c
index 35b3404..32cb530 100644
--- a/src/string/str/strcspn.c
+++ b/src/string/str/strcspn.c
@@ -27,6 +27,8 @@
* @param string The string.
* @param stopset Bytes disallowed in the substring.
* @return The length of the substring.
+ *
+ * @since Always.
*/
size_t strcspn(const char* string, const char* stopset)
{
diff --git a/src/string/str/strdup.c b/src/string/str/strdup.c
index b7155d7..50ba069 100644
--- a/src/string/str/strdup.c
+++ b/src/string/str/strdup.c
@@ -28,6 +28,8 @@
* and `errno` is set to indicate the error.
*
* @throws ENOMEM The process could not allocate sufficient amount of memory.
+ *
+ * @since Always.
*/
char* strdup(const char* string)
{
diff --git a/src/string/str/strends.c b/src/string/str/strends.c
index 957301c..43dd562 100644
--- a/src/string/str/strends.c
+++ b/src/string/str/strends.c
@@ -29,6 +29,8 @@
* @param desired The desired ending of the string.
* @return The `string`, where `desired` beings if
* `string` ends with `desired`, `NULL` otherwise.
+ *
+ * @since Always.
*/
char* (strends)(const char* string, const char* desired)
{
diff --git a/src/string/str/strlen.c b/src/string/str/strlen.c
index 2092ddc..16b7977 100644
--- a/src/string/str/strlen.c
+++ b/src/string/str/strlen.c
@@ -25,6 +25,8 @@
*
* @param str The string.
* @return The number of bytes before the first NUL byte.
+ *
+ * @since Always.
*/
size_t strlen(const char* str)
{
diff --git a/src/string/str/strmove.c b/src/string/str/strmove.c
index 4bd52f4..892b852 100644
--- a/src/string/str/strmove.c
+++ b/src/string/str/strmove.c
@@ -28,6 +28,8 @@
* @param whither The destination memory segment.
* @param whence The source memory segment.
* @return `whither` is returned.
+ *
+ * @since Always.
*/
char* strmove(char* whither, const char* whence)
{
diff --git a/src/string/str/strpbrk.c b/src/string/str/strpbrk.c
index e479dae..4cfb9ed 100644
--- a/src/string/str/strpbrk.c
+++ b/src/string/str/strpbrk.c
@@ -30,6 +30,8 @@
* @return A pointer to the first occurrence in
* `string` of a byte found in `stopset`.
* `NULL` is returned if none is found.
+ *
+ * @since Always.
*/
char* (strpbrk)(const char* string, const char* stopset)
{
diff --git a/src/string/str/strrchr.c b/src/string/str/strrchr.c
index 716a442..1933765 100644
--- a/src/string/str/strrchr.c
+++ b/src/string/str/strrchr.c
@@ -35,6 +35,8 @@
* @param c The sought after character.
* @return Pointer to the last occurrence of `c`,
* `NULL` if none were found.
+ *
+ * @since Always.
*/
char* (strrchr)(const char* string, int c)
{
diff --git a/src/string/str/strsep.c b/src/string/str/strsep.c
index 9fa0cff..c51e47f 100644
--- a/src/string/str/strsep.c
+++ b/src/string/str/strsep.c
@@ -33,6 +33,8 @@
* `NULL` is returned the search as reached
* the end of the string, and there therefore
* are no more tokens.
+ *
+ * @since Always.
*/
char* strsep(char** restrict string, const char* restrict delimiters)
{
diff --git a/src/string/str/strset.c b/src/string/str/strset.c
index c1eca65..ac1d551 100644
--- a/src/string/str/strset.c
+++ b/src/string/str/strset.c
@@ -28,6 +28,8 @@
* @param str The beginning of the memory segment.
* @param c The character (8 bits wide.)
* @return `str` is returned.
+ *
+ * @since Always.
*/
char* strset(char* str, int c)
{
diff --git a/src/string/str/strspn.c b/src/string/str/strspn.c
index 1b2e034..8a648ff 100644
--- a/src/string/str/strspn.c
+++ b/src/string/str/strspn.c
@@ -27,6 +27,8 @@
* @param string The string.
* @param skipset Bytes allowed in the substring.
* @return The length of the substring.
+ *
+ * @since Always.
*/
size_t strspn(const char* string, const char* skipset)
{
diff --git a/src/string/str/strstarts.c b/src/string/str/strstarts.c
index e132b68..e562f63 100644
--- a/src/string/str/strstarts.c
+++ b/src/string/str/strstarts.c
@@ -29,6 +29,8 @@
* @param desired The desired beginning of the string.
* @return `string` if `string` begins with
* `desired`, `NULL` otherwise.
+ *
+ * @since Always.
*/
char* (strstarts)(const char* string, const char* desired)
{
diff --git a/src/string/str/strstr.c b/src/string/str/strstr.c
index dadbc73..9f88cb4 100644
--- a/src/string/str/strstr.c
+++ b/src/string/str/strstr.c
@@ -27,6 +27,8 @@
* @param needle The sought after substring.
* @return Pointer to the first occurrence of the
* substring, `NULL` if not found.
+ *
+ * @since Always.
*/
char* (strstr)(const char* haystack, const char* needle)
{
diff --git a/src/string/str/strstrcpy.c b/src/string/str/strstrcpy.c
index 9dc9105..bd4c5a6 100644
--- a/src/string/str/strstrcpy.c
+++ b/src/string/str/strstrcpy.c
@@ -34,6 +34,8 @@
* number of copied characters; the address of
* one character passed the last written non-NUL
* character.
+ *
+ * @since Always.
*/
char* strstrcpy(char* restrict whither, const char* restrict whence, const char* restrict str)
{
diff --git a/src/string/str/strstrmove.c b/src/string/str/strstrmove.c
index 19969cd..686b0bd 100644
--- a/src/string/str/strstrmove.c
+++ b/src/string/str/strstrmove.c
@@ -34,6 +34,8 @@
* number of copied characters; the address of
* one character passed the last written non-NUL
* character.
+ *
+ * @since Always.
*/
char* strstrmove(char* whither, const char* whence, const char* restrict str)
{
diff --git a/src/string/str/strtok.c b/src/string/str/strtok.c
index b1b56b9..a856967 100644
--- a/src/string/str/strtok.c
+++ b/src/string/str/strtok.c
@@ -33,6 +33,8 @@
* `NULL` is returned the search as reached
* the end of the string, and there therefore
* are no more tokens.
+ *
+ * @since Always.
*/
char* strtok(char* restrict string, const char* restrict delimiters)
{
diff --git a/src/string/str/strtok_r.c b/src/string/str/strtok_r.c
index 3005ac7..e29e11b 100644
--- a/src/string/str/strtok_r.c
+++ b/src/string/str/strtok_r.c
@@ -37,6 +37,8 @@
* `NULL` is returned the search as reached
* the end of the string, and there therefore
* are no more tokens.
+ *
+ * @since Always.
*/
char* strtok_r(char* restrict string, const char* restrict delimiters,
char** restrict state)
diff --git a/src/string/strerror/strerror.c b/src/string/strerror/strerror.c
index 315e40d..75af8bd 100644
--- a/src/string/strerror/strerror.c
+++ b/src/string/strerror/strerror.c
@@ -36,6 +36,8 @@
*
* @param errnum The error code.
* @return A description of the error.
+ *
+ * @since Always.
*/
char* strerror(int errnum)
{
diff --git a/src/string/strerror/strerror_l.c b/src/string/strerror/strerror_l.c
index 838040f..0493d9f 100644
--- a/src/string/strerror/strerror_l.c
+++ b/src/string/strerror/strerror_l.c
@@ -34,6 +34,8 @@
* @param locale The locale, must be a valid locale and not
* `LC_GLOBAL_LOCALE`, lest the behaviour is undefined.
* @return A description of the error.
+ *
+ * @since Always.
*/
char* strerror_l(int errnum, locale_t locale)
{
diff --git a/src/string/strerror/strerror_r_gnu.c b/src/string/strerror/strerror_r_gnu.c
index 3e8bfd4..539866a 100644
--- a/src/string/strerror/strerror_r_gnu.c
+++ b/src/string/strerror/strerror_r_gnu.c
@@ -36,6 +36,8 @@
* is set to indicate the error.
*
* @throws ERANGE `buf` was too small to store the description.
+ *
+ * @since Always.
*/
char* __gnu_strerror_r(int errnum, char* buf, size_t buflen)
{
diff --git a/src/string/strerror/strerror_r_xsi.c b/src/string/strerror/strerror_r_xsi.c
index 70c3bc8..028226e 100644
--- a/src/string/strerror/strerror_r_xsi.c
+++ b/src/string/strerror/strerror_r_xsi.c
@@ -35,6 +35,8 @@
* @return Zero on success, value for `errno` on error
*
* @throws ERANGE `buf` was too small to store the description.
+ *
+ * @since Always.
*/
int __xsi_strerror_r(int errnum, char* buf, size_t buflen)
{
diff --git a/src/string/strfry.c b/src/string/strfry.c
index da6d0ac..ac8ef13 100644
--- a/src/string/strfry.c
+++ b/src/string/strfry.c
@@ -30,6 +30,8 @@
*
* @param anagram An anagram of the output, will be modified.
* @retrun The string, which will `== anagram`.
+ *
+ * @since Always.
*/
char* strfry(char* anagram)
{
diff --git a/src/string/strn/stpncpy.c b/src/string/strn/stpncpy.c
index 4290dab..561adc3 100644
--- a/src/string/strn/stpncpy.c
+++ b/src/string/strn/stpncpy.c
@@ -35,6 +35,8 @@
* until this amount of bytes have been written.
* @return `whither` plus the number of written bytes,
* excluding NUL bytes, is returned.
+ *
+ * @since Always.
*/
char* stpncpy(char* restrict whither, const char* restrict whence, size_t maxlen)
{
diff --git a/src/string/strn/stpnmove.c b/src/string/strn/stpnmove.c
index 917b753..e410b49 100644
--- a/src/string/strn/stpnmove.c
+++ b/src/string/strn/stpnmove.c
@@ -36,6 +36,8 @@
* until this amount of bytes have been written.
* @return `whither` plus the number of written bytes,
* excluding NUL bytes, is returned.
+ *
+ * @since Always.
*/
char* stpnmove(char* whither, const char* whence, size_t maxlen)
{
diff --git a/src/string/strn/strcncpy.c b/src/string/strn/strcncpy.c
index 594e7df..fb244b1 100644
--- a/src/string/strn/strcncpy.c
+++ b/src/string/strn/strcncpy.c
@@ -41,6 +41,8 @@
* number of copied characters; the address of
* one character passed the last written non-NUL
* character.
+ *
+ * @since Always.
*/
char* strcncpy(char* restrict whither, const char* restrict whence, int c, size_t maxlen)
{
diff --git a/src/string/strn/strcnmove.c b/src/string/strn/strcnmove.c
index 5fbdf19..f039959 100644
--- a/src/string/strn/strcnmove.c
+++ b/src/string/strn/strcnmove.c
@@ -41,6 +41,8 @@
* number of copied characters; the address of
* one character passed the last written non-NUL
* character.
+ *
+ * @since Always.
*/
char* strcnmove(char* whither, const char* whence, int c, size_t maxlen)
{
diff --git a/src/string/strn/strncasecmp.c b/src/string/strn/strncasecmp.c
index da9a1ba..d5fa666 100644
--- a/src/string/strn/strncasecmp.c
+++ b/src/string/strn/strncasecmp.c
@@ -32,6 +32,8 @@
* @param length The maximum number of characters to compare.
* @return Zero is returned if `a` and `b` are equal, otherwise,
* see the specifications for `a` and `b`.
+ *
+ * @since Always.
*/
int strncasecmp(const char* a, const char* b, size_t length)
{
diff --git a/src/string/strn/strncasestr.c b/src/string/strn/strncasestr.c
index e95dc4b..c74d590 100644
--- a/src/string/strn/strncasestr.c
+++ b/src/string/strn/strncasestr.c
@@ -30,6 +30,8 @@
* @param maxlen The maximum number of character to search.
* @return Pointer to the first occurrence of the
* substring, `NULL` if not found.
+ *
+ * @since Always.
*/
char* (strncasestr)(const char* haystack, const char* needle, size_t maxlen)
{
diff --git a/src/string/strn/strncat.c b/src/string/strn/strncat.c
index e7db0f2..1d6d35b 100644
--- a/src/string/strn/strncat.c
+++ b/src/string/strn/strncat.c
@@ -34,6 +34,8 @@
* shorter, `whither` will be filled with NUL bytes
* until this amount of bytes have been written.
* @return `whither` is returned.
+ *
+ * @since Always.
*/
char* strncat(char* restrict whither, const char* restrict whence, size_t maxlen)
{
diff --git a/src/string/strn/strncmp.c b/src/string/strn/strncmp.c
index 2c078d8..08bf5c1 100644
--- a/src/string/strn/strncmp.c
+++ b/src/string/strn/strncmp.c
@@ -27,6 +27,8 @@
* @param length The maximum number of characters to compare.
* @return Zero is returned if `a` and `b` are equal, otherwise,
* see the specifications for `a` and `b`.
+ *
+ * @since Always.
*/
int strncmp(const char* a, const char* b, size_t length)
{
diff --git a/src/string/strn/strncpy.c b/src/string/strn/strncpy.c
index 3a1e66b..199ca9c 100644
--- a/src/string/strn/strncpy.c
+++ b/src/string/strn/strncpy.c
@@ -32,6 +32,8 @@
* shorter, `whither` will be filled with NUL bytes
* until this amount of bytes have been written.
* @return `whither` is returned.
+ *
+ * @since Always.
*/
char* strncpy(char* restrict whither, const char* restrict whence, size_t maxlen)
{
diff --git a/src/string/strn/strndup.c b/src/string/strn/strndup.c
index ca3b3f0..51aa2bb 100644
--- a/src/string/strn/strndup.c
+++ b/src/string/strn/strndup.c
@@ -33,6 +33,8 @@
* and `errno` is set to indicate the error.
*
* @throws ENOMEM The process could not allocate sufficient amount of memory.
+ *
+ * @since Always.
*/
char* strndup(const char* string, size_t maxlen)
{
diff --git a/src/string/strn/strnlen.c b/src/string/strn/strnlen.c
index 5473682..2d45e68 100644
--- a/src/string/strn/strnlen.c
+++ b/src/string/strn/strnlen.c
@@ -27,6 +27,8 @@
* @param maxlen The number of bytes to inspect, at most.
* @return The number of bytes before, the first NUL byte.
* `maxlen` if no NUL byte was found.
+ *
+ * @since Always.
*/
size_t strnlen(const char* str, size_t maxlen)
{
diff --git a/src/string/strn/strnmove.c b/src/string/strn/strnmove.c
index 0d22c15..dc159db 100644
--- a/src/string/strn/strnmove.c
+++ b/src/string/strn/strnmove.c
@@ -34,6 +34,8 @@
* shorter, `whither` will be filled with NUL bytes
* until this amount of bytes have been written.
* @return `whither` is returned.
+ *
+ * @since Always.
*/
char* strnmove(char* whither, const char* whence, size_t maxlen)
{
diff --git a/src/string/strn/strnstr.c b/src/string/strn/strnstr.c
index 8db61ac..e581116 100644
--- a/src/string/strn/strnstr.c
+++ b/src/string/strn/strnstr.c
@@ -31,6 +31,8 @@
* @param maxlen The maximum number of character to search.
* @return Pointer to the first occurrence of the
* substring, `NULL` if not found.
+ *
+ * @since Always.
*/
char* (strnstr)(const char* haystack, const char* needle, size_t maxlen)
{
diff --git a/src/string/strn/strstrncpy.c b/src/string/strn/strstrncpy.c
index 43b58fe..822c4c6 100644
--- a/src/string/strn/strstrncpy.c
+++ b/src/string/strn/strstrncpy.c
@@ -41,6 +41,8 @@
* number of copied characters; the address of
* one character passed the last written non-NUL
* character.
+ *
+ * @since Always.
*/
char* strstrncpy(char* restrict whither, const char* restrict whence,
const char* restrict str, size_t maxlen)
diff --git a/src/string/strn/strstrnmove.c b/src/string/strn/strstrnmove.c
index d1c63f9..aadb1a9 100644
--- a/src/string/strn/strstrnmove.c
+++ b/src/string/strn/strstrnmove.c
@@ -41,6 +41,8 @@
* number of copied characters; the address of
* one character passed the last written non-NUL
* character.
+ *
+ * @since Always.
*/
char* strstrnmove(char* whither, const char* whence, const char* restrict str, size_t maxlen)
{
diff --git a/src/strings/bcmp.c b/src/strings/bcmp.c
index 23e6126..73f98be 100644
--- a/src/strings/bcmp.c
+++ b/src/strings/bcmp.c
@@ -24,6 +24,8 @@
* This function is identical to `memcmp`.
*
* @etymology (B)uffer: (c)o(mp)are.
+ *
+ * @since Always.
*/
int bcmp(const void* a, const void* b, size_t size)
{
diff --git a/src/strings/bcopy.c b/src/strings/bcopy.c
index 1abeb7c..fa44e87 100644
--- a/src/strings/bcopy.c
+++ b/src/strings/bcopy.c
@@ -28,6 +28,8 @@
* @param whence The source memory segment.
* @param whither The destination memory segment.
* @param size The number of bytes to copy.
+ *
+ * @since Always.
*/
void bcopy(const void* whence, void* whither, size_t size)
{
diff --git a/src/strings/bzero.c b/src/strings/bzero.c
index e581b94..a85bbda 100644
--- a/src/strings/bzero.c
+++ b/src/strings/bzero.c
@@ -27,6 +27,8 @@
*
* @param segment The memory segment to override.
* @param size The size of the memory segment.
+ *
+ * @since Always.
*/
void bzero(void* segment, size_t size)
{
diff --git a/src/strings/explicit_bzero.c b/src/strings/explicit_bzero.c
index 387c666..34e2cac 100644
--- a/src/strings/explicit_bzero.c
+++ b/src/strings/explicit_bzero.c
@@ -37,6 +37,8 @@ void* (*volatile __slibc_explicit_memset)(void*, int, size_t) = memset;
*
* @param segment The memory segment to override.
* @param size The size of the memory segment.
+ *
+ * @since Always.
*/
void explicit_bzero(void* segment, size_t size)
{
diff --git a/src/strings/ffs.c b/src/strings/ffs.c
index 46ad612..e51c0cf 100644
--- a/src/strings/ffs.c
+++ b/src/strings/ffs.c
@@ -26,6 +26,8 @@
*
* @param i The integer.
* @return The value of the least significant set bit, zero if none.
+ *
+ * @since Always.
*/
int ffs(int i)
{
diff --git a/src/strings/ffsl.c b/src/strings/ffsl.c
index 3116723..a93387b 100644
--- a/src/strings/ffsl.c
+++ b/src/strings/ffsl.c
@@ -26,6 +26,8 @@
*
* @param i The integer.
* @return The value of the least significant set bit, zero if none.
+ *
+ * @since Always.
*/
int ffsl(long i)
{
diff --git a/src/strings/ffsll.c b/src/strings/ffsll.c
index 13d4c14..c643b41 100644
--- a/src/strings/ffsll.c
+++ b/src/strings/ffsll.c
@@ -26,6 +26,8 @@
*
* @param i The integer.
* @return The value of the least significant set bit, zero if none.
+ *
+ * @since Always.
*/
int ffsll(long long i)
{
diff --git a/src/strings/index.c b/src/strings/index.c
index 332811d..543fffe 100644
--- a/src/strings/index.c
+++ b/src/strings/index.c
@@ -26,6 +26,8 @@
* This is a deprecated BSD extension.
*
* @etymology (Index) of character.
+ *
+ * @since Always.
*/
char* (index)(const char* string, int c)
{
diff --git a/src/strings/rindex.c b/src/strings/rindex.c
index 3e39a9e..b131367 100644
--- a/src/strings/rindex.c
+++ b/src/strings/rindex.c
@@ -26,6 +26,8 @@
* This is a deprecated BSD extension.
*
* @etymology (R)ight-most (index) of character.
+ *
+ * @since Always.
*/
char* (rindex)(const char* string, int c)
{
diff --git a/src/unistd/exec.c b/src/unistd/exec.c
index 0b76259..c6e4fca 100644
--- a/src/unistd/exec.c
+++ b/src/unistd/exec.c
@@ -29,6 +29,8 @@
/**
* The current environment variables.
+ *
+ * @since Always.
*/
extern char** environ;
@@ -44,6 +46,8 @@ extern char** environ;
* @param use_path Whether $PATH may be used.
*
* @throws Any error specified for execve(2).
+ *
+ * @since Always.
*/
static void vexec(const char* file, va_list argv, int fetch_envp, int use_path)
{
@@ -82,6 +86,8 @@ static void vexec(const char* file, va_list argv, int fetch_envp, int use_path)
* set to describe the error.
*
* @throws Any error specified for execve(2).
+ *
+ * @since Always.
*/
int execl(const char* path, ... /*, NULL */)
{
@@ -112,6 +118,8 @@ int execl(const char* path, ... /*, NULL */)
* set to describe the error.
*
* @throws Any error specified for execve(2).
+ *
+ * @since Always.
*/
int execlp(const char* file, ... /*, NULL */)
{
@@ -142,6 +150,8 @@ int execlp(const char* file, ... /*, NULL */)
* set to describe the error.
*
* @throws Any error specified for execve(2).
+ *
+ * @since Always.
*/
int execle(const char* path, ... /*, NULL, char* const envp[] */)
{
@@ -178,6 +188,8 @@ int execle(const char* path, ... /*, NULL, char* const envp[] */)
* set to describe the error.
*
* @throws Any error specified for execve(2).
+ *
+ * @since Always.
*/
int execlpe(const char* file, ... /*, NULL, char* const envp[] */)
{
@@ -208,6 +220,8 @@ int execlpe(const char* file, ... /*, NULL, char* const envp[] */)
* set to describe the error.
*
* @throws Any error specified for execve(2).
+ *
+ * @since Always.
*/
int execv(const char* path, char* const argv[])
{
@@ -236,6 +250,8 @@ int execv(const char* path, char* const argv[])
* set to describe the error.
*
* @throws Any error specified for execve(2).
+ *
+ * @since Always.
*/
int execvp(const char* file, char* const argv[])
{
@@ -264,6 +280,8 @@ int execvp(const char* file, char* const argv[])
* set to describe the error.
*
* @throws Any error specified for execve(2).
+ *
+ * @since Always.
*/
int execve(const char* path, char* const argv[], char* const envp[])
{
@@ -300,6 +318,8 @@ int execve(const char* path, char* const argv[], char* const envp[])
* set to describe the error.
*
* @throws Any error specified for execve(2).
+ *
+ * @since Always.
*/
int execvpe(const char* file, char* const argv[], char* const envp[])
{
diff --git a/src/unistd/execat.c b/src/unistd/execat.c
index a7de5dd..68d9cfd 100644
--- a/src/unistd/execat.c
+++ b/src/unistd/execat.c
@@ -36,6 +36,8 @@ struct stat { int st_mode; };
/**
* The current environment variables.
+ *
+ * @since Always.
*/
extern char** environ;
@@ -52,6 +54,8 @@ extern char** environ;
* @param use_path Whether $PATH may be used.
*
* @throws Any error specified for execve(2).
+ *
+ * @since Always.
*/
static void vexecat(int dirfd, const char* file, va_list argv, int fetch_envp, int use_path)
{
@@ -107,6 +111,8 @@ static void vexecat(int dirfd, const char* file, va_list argv, int fetch_envp, i
* set to describe the error.
*
* @throws Any error specified for execveat(2).
+ *
+ * @since Always.
*/
int execlat(int dirfd, const char* path, ... /*, NULL, int flags */)
{
@@ -152,6 +158,8 @@ int execlat(int dirfd, const char* path, ... /*, NULL, int flags */)
* set to describe the error.
*
* @throws Any error specified for execveat(2).
+ *
+ * @since Always.
*/
int execlpat(int dirfd, const char* file, ... /*, NULL, int flags */)
{
@@ -197,6 +205,8 @@ int execlpat(int dirfd, const char* file, ... /*, NULL, int flags */)
* set to describe the error.
*
* @throws Any error specified for execveat(2).
+ *
+ * @since Always.
*/
int execleat(int dirfd, const char* path, ... /*, NULL, char* const[] envp, int flags */)
{
@@ -246,6 +256,8 @@ int execleat(int dirfd, const char* path, ... /*, NULL, char* const[] envp, int
* set to describe the error.
*
* @throws Any error specified for execveat(2).
+ *
+ * @since Always.
*/
int execlpeat(int dirfd, const char* file, ... /*, NULL, char* const[] envp, int flags */)
{
@@ -291,6 +303,8 @@ int execlpeat(int dirfd, const char* file, ... /*, NULL, char* const[] envp, int
* set to describe the error.
*
* @throws Any error specified for execveat(2).
+ *
+ * @since Always.
*/
int execvat(int dirfd, const char* path, char* const argv[], int flags)
{
@@ -334,6 +348,8 @@ int execvat(int dirfd, const char* path, char* const argv[], int flags)
* set to describe the error.
*
* @throws Any error specified for execveat(2).
+ *
+ * @since Always.
*/
int execvpat(int dirfd, const char* file, char* const argv[], int flags)
{
@@ -375,6 +391,8 @@ int execvpat(int dirfd, const char* file, char* const argv[], int flags)
* set to describe the error.
*
* @throws Any error specified for execveat(2).
+ *
+ * @since Always.
*/
int execveat(int dirfd, const char* path, char* const argv[], char* const envp[], int flags)
{
@@ -451,6 +469,8 @@ int execveat(int dirfd, const char* path, char* const argv[], char* const envp[]
* set to describe the error.
*
* @throws Any error specified for execveat(2).
+ *
+ * @since Always.
*/
int execvpeat(int dirfd, const char* file, char* const argv[], char* const envp[], int flags)
{
diff --git a/src/unistd/fexec.c b/src/unistd/fexec.c
index 7a8d4f5..5277373 100644
--- a/src/unistd/fexec.c
+++ b/src/unistd/fexec.c
@@ -25,6 +25,8 @@
/**
* The current environment variables.
+ *
+ * @since Always.
*/
extern char** environ;
@@ -39,6 +41,8 @@ extern char** environ;
* @param fetch_envp Whether `argv` includes `envp`.
*
* @throws Any error specified for execve(2).
+ *
+ * @since Always.
*/
static void vfexec(int fd, va_list argv, int fetch_envp)
{
@@ -79,6 +83,8 @@ static void vfexec(int fd, va_list argv, int fetch_envp)
* set to describe the error.
*
* @throws Any error specified for execve(2).
+ *
+ * @since Always.
*/
int fexecl(int fd, ... /*, NULL */)
{
@@ -111,6 +117,8 @@ int fexecl(int fd, ... /*, NULL */)
* set to describe the error.
*
* @throws Any error specified for execve(2).
+ *
+ * @since Always.
*/
int fexecle(int fd, ... /*, NULL, char* const envp[] */)
{
@@ -143,6 +151,8 @@ int fexecle(int fd, ... /*, NULL, char* const envp[] */)
* set to describe the error.
*
* @throws Any error specified for execve(2).
+ *
+ * @since Always.
*/
int fexecv(int fd, char* const argv[])
{
@@ -171,6 +181,8 @@ int fexecv(int fd, char* const argv[])
* set to describe the error.
*
* @throws Any error specified for execve(2).
+ *
+ * @since Always.
*/
int fexecve(int fd, char* const argv[], char* const envp[])
{
diff --git a/src/wchar/rawwcscasestr.c b/src/wchar/rawwcscasestr.c
index 51af4ce..e027edb 100644
--- a/src/wchar/rawwcscasestr.c
+++ b/src/wchar/rawwcscasestr.c
@@ -30,6 +30,8 @@
* @param haystack The string to search.
* @param needle The sought after substring.
* @return Pointer to the first occurrence of the substring.
+ *
+ * @since Always.
*/
wchar_t* (rawwcscasestr)(const wchar_t* haystack, const wchar_t* needle)
{
diff --git a/src/wchar/rawwcsstr.c b/src/wchar/rawwcsstr.c
index 42450ab..59ec279 100644
--- a/src/wchar/rawwcsstr.c
+++ b/src/wchar/rawwcsstr.c
@@ -30,6 +30,8 @@
* @param haystack The string to search.
* @param needle The sought after substring.
* @return Pointer to the first occurrence of the substring.
+ *
+ * @since Always.
*/
wchar_t* (rawwcsstr)(const wchar_t* haystack, const wchar_t* needle)
{
diff --git a/src/wchar/rawwmemchr.c b/src/wchar/rawwmemchr.c
index dafc58b..31818ed 100644
--- a/src/wchar/rawwmemchr.c
+++ b/src/wchar/rawwmemchr.c
@@ -32,6 +32,8 @@
* @param segment The memory segment to search.
* @param c The sought after character.
* @return Pointer to the first occurrence of `c`.
+ *
+ * @since Always.
*/
wchar_t* (rawwmemchr)(const wchar_t* segment, wchar_t c)
{
diff --git a/src/wchar/wcpcpy.c b/src/wchar/wcpcpy.c
index 7afbd26..98e6cad 100644
--- a/src/wchar/wcpcpy.c
+++ b/src/wchar/wcpcpy.c
@@ -28,6 +28,8 @@
* @param whither The destination memory segment.
* @param whence The source memory segment.
* @return `whither + wcslen(whence)` is returned.
+ *
+ * @since Always.
*/
wchar_t* wcpcpy(wchar_t* restrict whither, const wchar_t* restrict whence)
{
diff --git a/src/wchar/wcpmove.c b/src/wchar/wcpmove.c
index bc1e754..1133009 100644
--- a/src/wchar/wcpmove.c
+++ b/src/wchar/wcpmove.c
@@ -28,6 +28,8 @@
* @param whither The destination memory segment.
* @param whence The source memory segment.
* @return `whither + wcslen(whence)` is returned.
+ *
+ * @since Always.
*/
wchar_t* wcpmove(wchar_t* whither, const wchar_t* whence)
{
diff --git a/src/wchar/wcpncpy.c b/src/wchar/wcpncpy.c
index e291d35..6bfeef2 100644
--- a/src/wchar/wcpncpy.c
+++ b/src/wchar/wcpncpy.c
@@ -35,6 +35,8 @@
* until this amount of characters have been written.
* @return `whither` plus the number of written characters,
* excluding NUL characters, is returned.
+ *
+ * @since Always.
*/
wchar_t* wcpncpy(wchar_t* restrict whither, const wchar_t* restrict whence, size_t maxlen)
{
diff --git a/src/wchar/wcpnmove.c b/src/wchar/wcpnmove.c
index 25a591a..799423a 100644
--- a/src/wchar/wcpnmove.c
+++ b/src/wchar/wcpnmove.c
@@ -36,6 +36,8 @@
* until this amount of characters have been written.
* @return `whither` plus the number of written characters,
* excluding NUL characters, is returned.
+ *
+ * @since Always.
*/
wchar_t* wcpnmove(wchar_t* whither, const wchar_t* whence, size_t maxlen)
{
diff --git a/src/wchar/wcscasecmp.c b/src/wchar/wcscasecmp.c
index dea8f46..be1b653 100644
--- a/src/wchar/wcscasecmp.c
+++ b/src/wchar/wcscasecmp.c
@@ -31,6 +31,8 @@
* @param b A positive value is returned if this is the lesser.
* @return Zero is returned if `a` and `b` are equal, otherwise,
* see the specifications for `a` and `b`.
+ *
+ * @since Always.
*/
int wcscasecmp(const wchar_t* a, const wchar_t* b)
{
diff --git a/src/wchar/wcscaseends.c b/src/wchar/wcscaseends.c
index 93d0cc6..c2df9ad 100644
--- a/src/wchar/wcscaseends.c
+++ b/src/wchar/wcscaseends.c
@@ -29,6 +29,8 @@
* @param desired The desired ending of the string.
* @return The `string`, where `desired` beings if
* `string` ends with `desired`, `NULL` otherwise.
+ *
+ * @since Always.
*/
wchar_t* (wcscaseends)(const wchar_t* string, const wchar_t* desired)
{
diff --git a/src/wchar/wcscasestarts.c b/src/wchar/wcscasestarts.c
index bba5881..c613e4e 100644
--- a/src/wchar/wcscasestarts.c
+++ b/src/wchar/wcscasestarts.c
@@ -29,6 +29,8 @@
* @param desired The desired beginning of the string.
* @return `string` if `string` begins with
* `desired`, `NULL` otherwise.
+ *
+ * @since Always.
*/
wchar_t* (wcscasestarts)(const wchar_t* string, const wchar_t* desired)
{
diff --git a/src/wchar/wcscasestr.c b/src/wchar/wcscasestr.c
index 3e0e6d0..b637191 100644
--- a/src/wchar/wcscasestr.c
+++ b/src/wchar/wcscasestr.c
@@ -29,6 +29,8 @@
* @param needle The sought after substring.
* @return Pointer to the first occurrence of the
* substring, `NULL` if not found.
+ *
+ * @since Always.
*/
wchar_t* (wcscasestr)(const wchar_t* haystack, const wchar_t* needle)
{
diff --git a/src/wchar/wcscat.c b/src/wchar/wcscat.c
index e6780e4..bb8f727 100644
--- a/src/wchar/wcscat.c
+++ b/src/wchar/wcscat.c
@@ -28,6 +28,8 @@
* @param whither The string to extend.
* @param whence The string to append.
* @return `whither` is returned.
+ *
+ * @since Always.
*/
wchar_t* wcscat(wchar_t* restrict whither, const wchar_t* restrict whence)
{
diff --git a/src/wchar/wcsccpy.c b/src/wchar/wcsccpy.c
index e078359..b7e4d98 100644
--- a/src/wchar/wcsccpy.c
+++ b/src/wchar/wcsccpy.c
@@ -35,6 +35,8 @@
* number of copied characters; the address of
* one character passed the last written non-NUL
* character.
+ *
+ * @since Always.
*/
wchar_t* wcsccpy(wchar_t* restrict whither, const wchar_t* restrict whence, wchar_t c)
{
diff --git a/src/wchar/wcschr.c b/src/wchar/wcschr.c
index 8ebe6c1..5151cc8 100644
--- a/src/wchar/wcschr.c
+++ b/src/wchar/wcschr.c
@@ -31,6 +31,8 @@
* @param c The sought after character.
* @return Pointer to the first occurrence of `c`,
* `NULL` if none were found.
+ *
+ * @since Always.
*/
wchar_t* (wcschr)(const wchar_t* string, wchar_t c)
{
diff --git a/src/wchar/wcschrnul.c b/src/wchar/wcschrnul.c
index e548e97..9480706 100644
--- a/src/wchar/wcschrnul.c
+++ b/src/wchar/wcschrnul.c
@@ -36,6 +36,8 @@
* @return Pointer to the first occurrence of `c`,
* Pointer to the terminating NUL character
* if none were found.
+ *
+ * @since Always.
*/
wchar_t* (wcschrnul)(const wchar_t* string, wchar_t c)
{
diff --git a/src/wchar/wcscmove.c b/src/wchar/wcscmove.c
index 733ec41..7359781 100644
--- a/src/wchar/wcscmove.c
+++ b/src/wchar/wcscmove.c
@@ -35,6 +35,8 @@
* number of copied characters; the address of
* one character passed the last written non-NUL
* character.
+ *
+ * @since Always.
*/
wchar_t* wcscmove(wchar_t* whither, const wchar_t* whence, wchar_t c)
{
diff --git a/src/wchar/wcscmp.c b/src/wchar/wcscmp.c
index 90ad251..0cc3f7b 100644
--- a/src/wchar/wcscmp.c
+++ b/src/wchar/wcscmp.c
@@ -26,6 +26,8 @@
* @param b A positive value is returned if this is the lesser.
* @return Zero is returned if `a` and `b` are equal, otherwise,
* see the specifications for `a` and `b`.
+ *
+ * @since Always.
*/
int wcscmp(const wchar_t* a, const wchar_t* b)
{
diff --git a/src/wchar/wcscncpy.c b/src/wchar/wcscncpy.c
index fe0a14f..6fe5661 100644
--- a/src/wchar/wcscncpy.c
+++ b/src/wchar/wcscncpy.c
@@ -42,6 +42,8 @@
* number of copied characters; the address of
* one character passed the last written non-NUL
* character.
+ *
+ * @since Always.
*/
wchar_t* wcscncpy(wchar_t* restrict whither, const wchar_t* restrict whence, wchar_t c, size_t maxlen)
{
diff --git a/src/wchar/wcscnmove.c b/src/wchar/wcscnmove.c
index daa518f..83b9ab2 100644
--- a/src/wchar/wcscnmove.c
+++ b/src/wchar/wcscnmove.c
@@ -42,6 +42,8 @@
* number of copied characters; the address of
* one character passed the last written non-NUL
* character.
+ *
+ * @since Always.
*/
wchar_t* wcscnmove(wchar_t* whither, const wchar_t* whence, wchar_t c, size_t maxlen)
{
diff --git a/src/wchar/wcscpy.c b/src/wchar/wcscpy.c
index 671e894..e5245bd 100644
--- a/src/wchar/wcscpy.c
+++ b/src/wchar/wcscpy.c
@@ -26,6 +26,8 @@
* @param whither The destination memory segment.
* @param whence The source memory segment.
* @return `whither` is returned.
+ *
+ * @since Always.
*/
wchar_t* wcscpy(wchar_t* restrict whither, const wchar_t* restrict whence)
{
diff --git a/src/wchar/wcscspn.c b/src/wchar/wcscspn.c
index 5ef1769..31398fe 100644
--- a/src/wchar/wcscspn.c
+++ b/src/wchar/wcscspn.c
@@ -30,6 +30,8 @@
* @param string The string.
* @param stopset Characters disallowed in the substring.
* @return The length of the substring.
+ *
+ * @since Always.
*/
size_t wcscspn(const wchar_t* string, const wchar_t* stopset)
{
diff --git a/src/wchar/wcsdup.c b/src/wchar/wcsdup.c
index 62fef76..49f974e 100644
--- a/src/wchar/wcsdup.c
+++ b/src/wchar/wcsdup.c
@@ -30,6 +30,8 @@
* and `errno` is set to indicate the error.
*
* @throws ENOMEM The process could not allocate sufficient amount of memory.
+ *
+ * @since Always.
*/
wchar_t* wcsdup(const wchar_t* string)
{
diff --git a/src/wchar/wcsends.c b/src/wchar/wcsends.c
index 2f585f4..72134ca 100644
--- a/src/wchar/wcsends.c
+++ b/src/wchar/wcsends.c
@@ -29,6 +29,8 @@
* @param desired The desired ending of the string.
* @return The `string`, where `desired` beings if
* `string` ends with `desired`, `NULL` otherwise.
+ *
+ * @since Always.
*/
wchar_t* (wcsends)(const wchar_t* string, const wchar_t* desired)
{
diff --git a/src/wchar/wcslen.c b/src/wchar/wcslen.c
index 5c0be9f..3597803 100644
--- a/src/wchar/wcslen.c
+++ b/src/wchar/wcslen.c
@@ -25,6 +25,8 @@
* @param str The string.
* @return The number of `wchar_t`:s before the
* first NUL character.
+ *
+ * @since Always.
*/
size_t wcslen(const wchar_t* str)
{
diff --git a/src/wchar/wcsmove.c b/src/wchar/wcsmove.c
index 377662c..254745f 100644
--- a/src/wchar/wcsmove.c
+++ b/src/wchar/wcsmove.c
@@ -28,6 +28,8 @@
* @param whither The destination memory segment.
* @param whence The source memory segment.
* @return `whither` is returned.
+ *
+ * @since Always.
*/
wchar_t* wcsmove(wchar_t* whither, const wchar_t* whence)
{
diff --git a/src/wchar/wcsncasecmp.c b/src/wchar/wcsncasecmp.c
index 69305ea..3964360 100644
--- a/src/wchar/wcsncasecmp.c
+++ b/src/wchar/wcsncasecmp.c
@@ -32,6 +32,8 @@
* @param length The maximum number of characters to compare.
* @return Zero is returned if `a` and `b` are equal, otherwise,
* see the specifications for `a` and `b`.
+ *
+ * @since Always.
*/
int wcsncasecmp(const wchar_t* a, const wchar_t* b, size_t length)
{
diff --git a/src/wchar/wcsncasestr.c b/src/wchar/wcsncasestr.c
index 9818de7..e43009c 100644
--- a/src/wchar/wcsncasestr.c
+++ b/src/wchar/wcsncasestr.c
@@ -30,6 +30,8 @@
* @param maxlen The maximum number of character to search.
* @return Pointer to the first occurrence of the
* substring, `NULL` if not found.
+ *
+ * @since Always.
*/
wchar_t* (wcsncasestr)(const wchar_t* haystack, const wchar_t* needle, size_t maxlen)
{
diff --git a/src/wchar/wcsncat.c b/src/wchar/wcsncat.c
index bd48265..b8de3b4 100644
--- a/src/wchar/wcsncat.c
+++ b/src/wchar/wcsncat.c
@@ -34,6 +34,8 @@
* shorter, `whither` will be filled with NUL characters
* until this amount of characters have been written.
* @return `whither` is returned.
+ *
+ * @since Always.
*/
wchar_t* wcsncat(wchar_t* restrict whither, const wchar_t* restrict whence, size_t maxlen)
{
diff --git a/src/wchar/wcsncmp.c b/src/wchar/wcsncmp.c
index c1e5707..1976cc0 100644
--- a/src/wchar/wcsncmp.c
+++ b/src/wchar/wcsncmp.c
@@ -29,6 +29,8 @@
* @param length The maximum number of characters to compare.
* @return Zero is returned if `a` and `b` are equal, otherwise,
* see the specifications for `a` and `b`.
+ *
+ * @since Always.
*/
int wcsncmp(const wchar_t* a, const wchar_t* b, size_t length)
{
diff --git a/src/wchar/wcsncpy.c b/src/wchar/wcsncpy.c
index 67631b1..ab6dd5a 100644
--- a/src/wchar/wcsncpy.c
+++ b/src/wchar/wcsncpy.c
@@ -32,6 +32,8 @@
* shorter, `whither` will be filled with NUL characters
* until this amount of characters have been written.
* @return `whither` is returned.
+ *
+ * @since Always.
*/
wchar_t* wcsncpy(wchar_t* restrict whither, const wchar_t* restrict whence, size_t maxlen)
{
diff --git a/src/wchar/wcsndup.c b/src/wchar/wcsndup.c
index db81f07..14c95e7 100644
--- a/src/wchar/wcsndup.c
+++ b/src/wchar/wcsndup.c
@@ -34,6 +34,8 @@
* and `errno` is set to indicate the error.
*
* @throws ENOMEM The process could not allocate sufficient amount of memory.
+ *
+ * @since Always.
*/
wchar_t* wcsndup(const wchar_t* string, size_t maxlen)
{
diff --git a/src/wchar/wcsnlen.c b/src/wchar/wcsnlen.c
index a094d28..efff94c 100644
--- a/src/wchar/wcsnlen.c
+++ b/src/wchar/wcsnlen.c
@@ -27,6 +27,8 @@
* @return The number of `wchar_t`:s before the
* first NUL character. `maxlen` if no
* NUL character was found.
+ *
+ * @since Always.
*/
size_t wcsnlen(const wchar_t* str, size_t maxlen)
{
diff --git a/src/wchar/wcsnmove.c b/src/wchar/wcsnmove.c
index 428a9f5..2af6b46 100644
--- a/src/wchar/wcsnmove.c
+++ b/src/wchar/wcsnmove.c
@@ -34,6 +34,8 @@
* shorter, `whither` will be filled with NUL characters
* until this amount of characters have been written.
* @return `whither` is returned.
+ *
+ * @since Always.
*/
wchar_t* wcsnmove(wchar_t* whither, const wchar_t* whence, size_t maxlen)
{
diff --git a/src/wchar/wcsnstr.c b/src/wchar/wcsnstr.c
index 266ebf4..48c34fc 100644
--- a/src/wchar/wcsnstr.c
+++ b/src/wchar/wcsnstr.c
@@ -31,6 +31,8 @@
* @param maxlen The maximum number of character to search.
* @return Pointer to the first occurrence of the
* substring, `NULL` if not found.
+ *
+ * @since Always.
*/
wchar_t* (wcsnstr)(const wchar_t* haystack, const wchar_t* needle, size_t maxlen)
{
diff --git a/src/wchar/wcspbrk.c b/src/wchar/wcspbrk.c
index 1cbb176..064252f 100644
--- a/src/wchar/wcspbrk.c
+++ b/src/wchar/wcspbrk.c
@@ -33,6 +33,8 @@
* @return A pointer to the first occurrence in
* `string` of a character found in `stopset`.
* `NULL` is returned if none is found.
+ *
+ * @since Always.
*/
wchar_t* (wcspbrk)(const wchar_t* string, const wchar_t* stopset)
{
diff --git a/src/wchar/wcsrchr.c b/src/wchar/wcsrchr.c
index 3f6e84c..d3af0b1 100644
--- a/src/wchar/wcsrchr.c
+++ b/src/wchar/wcsrchr.c
@@ -35,6 +35,8 @@
* @param c The sought after character.
* @return Pointer to the last occurrence of `c`,
* `NULL` if none were found.
+ *
+ * @since Always.
*/
wchar_t* (wcsrchr)(const wchar_t* string, wchar_t c)
{
diff --git a/src/wchar/wcssep.c b/src/wchar/wcssep.c
index 9e3f285..e757411 100644
--- a/src/wchar/wcssep.c
+++ b/src/wchar/wcssep.c
@@ -35,6 +35,8 @@
* `NULL` is returned the search as reached
* the end of the string, and there therefore
* are no more tokens.
+ *
+ * @since Always.
*/
wchar_t* wcssep(wchar_t** restrict string, const wchar_t* restrict delimiters)
{
diff --git a/src/wchar/wcsset.c b/src/wchar/wcsset.c
index 07639f4..54fedad 100644
--- a/src/wchar/wcsset.c
+++ b/src/wchar/wcsset.c
@@ -28,6 +28,8 @@
* @param str The beginning of the memory segment.
* @param c The wide character.
* @return `str` is returned.
+ *
+ * @since Always.
*/
wchar_t* wcsset(wchar_t* str, wchar_t c)
{
diff --git a/src/wchar/wcsspn.c b/src/wchar/wcsspn.c
index 4a023d5..3e9ddd2 100644
--- a/src/wchar/wcsspn.c
+++ b/src/wchar/wcsspn.c
@@ -30,6 +30,8 @@
* @param string The string.
* @param skipset Characters allowed in the substring.
* @return The length of the substring.
+ *
+ * @since Always.
*/
size_t wcsspn(const wchar_t* string, const wchar_t* skipset)
{
diff --git a/src/wchar/wcsstarts.c b/src/wchar/wcsstarts.c
index 0b000af..cff8a1d 100644
--- a/src/wchar/wcsstarts.c
+++ b/src/wchar/wcsstarts.c
@@ -29,6 +29,8 @@
* @param desired The desired beginning of the string.
* @return `string` if `string` begins with
* `desired`, `NULL` otherwise.
+ *
+ * @since Always.
*/
wchar_t* (wcsstarts)(const wchar_t* string, const wchar_t* desired)
{
diff --git a/src/wchar/wcsstr.c b/src/wchar/wcsstr.c
index e88530d..a933dc0 100644
--- a/src/wchar/wcsstr.c
+++ b/src/wchar/wcsstr.c
@@ -27,6 +27,8 @@
* @param needle The sought after substring.
* @return Pointer to the first occurrence of the
* substring, `NULL` if not found.
+ *
+ * @since Always.
*/
wchar_t* (wcsstr)(const wchar_t* haystack, const wchar_t* needle)
{
diff --git a/src/wchar/wcsstrcpy.c b/src/wchar/wcsstrcpy.c
index 1b694b5..9ec99b1 100644
--- a/src/wchar/wcsstrcpy.c
+++ b/src/wchar/wcsstrcpy.c
@@ -34,6 +34,8 @@
* number of copied characters; the address of
* one character passed the last written non-NUL
* character.
+ *
+ * @since Always.
*/
wchar_t* wcsstrcpy(wchar_t* restrict whither, const wchar_t* restrict whence, const wchar_t* restrict str)
{
diff --git a/src/wchar/wcsstrmove.c b/src/wchar/wcsstrmove.c
index 9509a05..3861dbd 100644
--- a/src/wchar/wcsstrmove.c
+++ b/src/wchar/wcsstrmove.c
@@ -34,6 +34,8 @@
* number of copied characters; the address of
* one character passed the last written non-NUL
* character.
+ *
+ * @since Always.
*/
wchar_t* wcsstrmove(wchar_t* whither, const wchar_t* whence, const wchar_t* restrict str)
{
diff --git a/src/wchar/wcsstrncpy.c b/src/wchar/wcsstrncpy.c
index 62ed24c..434827f 100644
--- a/src/wchar/wcsstrncpy.c
+++ b/src/wchar/wcsstrncpy.c
@@ -41,6 +41,8 @@
* number of copied chartacters; the address of
* one character passed the last written non-NUL
* character.
+ *
+ * @since Always.
*/
wchar_t* wcsstrncpy(wchar_t* restrict whither, const wchar_t* restrict whence,
const wchar_t* restrict str, size_t maxlen)
diff --git a/src/wchar/wcsstrnmove.c b/src/wchar/wcsstrnmove.c
index d72bd9c..72801ee 100644
--- a/src/wchar/wcsstrnmove.c
+++ b/src/wchar/wcsstrnmove.c
@@ -41,6 +41,8 @@
* number of copied chartacters; the address of
* one character passed the last written non-NUL
* character.
+ *
+ * @since Always.
*/
wchar_t* wcsstrnmove(wchar_t* whither, const wchar_t* whence, const wchar_t* restrict str, size_t maxlen)
{
diff --git a/src/wchar/wcstok.c b/src/wchar/wcstok.c
index dbf0c5f..a074bc3 100644
--- a/src/wchar/wcstok.c
+++ b/src/wchar/wcstok.c
@@ -37,6 +37,8 @@
* `NULL` is returned the search as reached
* the end of the string, and there therefore
* are no more tokens.
+ *
+ * @since Always.
*/
wchar_t* wcstok(wchar_t* restrict string, const wchar_t* restrict delimiters,
wchar_t** restrict state)
diff --git a/src/wchar/wcswcs.c b/src/wchar/wcswcs.c
index 339ec2f..91c1c49 100644
--- a/src/wchar/wcswcs.c
+++ b/src/wchar/wcswcs.c
@@ -21,6 +21,8 @@
/**
* This function is identical to `wcsstr`.
+ *
+ * @since Always.
*/
wchar_t* (wcswcs)(const wchar_t* haystack, const wchar_t* needle)
{
diff --git a/src/wchar/wmemcasecmp.c b/src/wchar/wmemcasecmp.c
index 8672bbb..53f8a46 100644
--- a/src/wchar/wmemcasecmp.c
+++ b/src/wchar/wmemcasecmp.c
@@ -28,6 +28,8 @@
* @param size The size of the segments.
* @return Zero is returned if `a` and `b` are equal, otherwise,
* see the specifications for `a` and `b`.
+ *
+ * @since Always.
*/
int wmemcasecmp(const wchar_t* a, const wchar_t* b, size_t size)
{
diff --git a/src/wchar/wmemcasemem.c b/src/wchar/wmemcasemem.c
index d01fda8..05a9734 100644
--- a/src/wchar/wmemcasemem.c
+++ b/src/wchar/wmemcasemem.c
@@ -39,6 +39,8 @@
* @param needle_length The length of `needle`.
* @return Pointer to the first occurrence of
* the substring, `NULL` if not found.
+ *
+ * @since Always.
*/
wchar_t* (wmemcasemem)(const wchar_t* haystack, size_t haystack_length,
const wchar_t* needle, size_t needle_length)
diff --git a/src/wchar/wmemccpy.c b/src/wchar/wmemccpy.c
index a6eb7ca..4dfde01 100644
--- a/src/wchar/wmemccpy.c
+++ b/src/wchar/wmemccpy.c
@@ -34,6 +34,8 @@
* that is, the address of `whither` plus the
* number of copied characters; the address of
* one character passed the last written character.
+ *
+ * @since Always.
*/
wchar_t* wmemccpy(wchar_t* restrict whither, const wchar_t* restrict whence, wchar_t c, size_t size)
{
diff --git a/src/wchar/wmemchr.c b/src/wchar/wmemchr.c
index 9dd3e5f..a1c8b98 100644
--- a/src/wchar/wmemchr.c
+++ b/src/wchar/wmemchr.c
@@ -31,6 +31,8 @@
* @param size The size of the memory segment.
* @return Pointer to the first occurrence of `c`,
* `NULL` if none were found.
+ *
+ * @since Always.
*/
wchar_t* (wmemchr)(const wchar_t* segment, wchar_t c, size_t size)
{
diff --git a/src/wchar/wmemcmove.c b/src/wchar/wmemcmove.c
index a86138f..cdc35c2 100644
--- a/src/wchar/wmemcmove.c
+++ b/src/wchar/wmemcmove.c
@@ -34,6 +34,8 @@
* that is, the address of `whither` plus the
* number of copied characters; the address of
* one character passed the last written character.
+ *
+ * @since Always.
*/
wchar_t* wmemcmove(wchar_t* whither, const wchar_t* whence, wchar_t c, size_t size)
{
diff --git a/src/wchar/wmemcmp.c b/src/wchar/wmemcmp.c
index 9bfe6b3..e912e57 100644
--- a/src/wchar/wmemcmp.c
+++ b/src/wchar/wmemcmp.c
@@ -27,6 +27,8 @@
* @param size The size of the segments.
* @return Zero is returned if `a` and `b` are equal, otherwise,
* see the specifications for `a` and `b`.
+ *
+ * @since Always.
*/
int wmemcmp(const wchar_t* a, const wchar_t* b, size_t size)
{
diff --git a/src/wchar/wmemcpy.c b/src/wchar/wmemcpy.c
index bcae22a..124f38c 100644
--- a/src/wchar/wmemcpy.c
+++ b/src/wchar/wmemcpy.c
@@ -26,6 +26,8 @@
* @param whence The source memory segment.
* @param size The number of wide characters to copy.
* @return `whither` is returned.
+ *
+ * @since Always.
*/
wchar_t* wmemcpy(wchar_t* restrict whither, const wchar_t* restrict whence, size_t size)
{
diff --git a/src/wchar/wmemdup.c b/src/wchar/wmemdup.c
index 196009b..b02ff27 100644
--- a/src/wchar/wmemdup.c
+++ b/src/wchar/wmemdup.c
@@ -31,6 +31,8 @@
* and `errno` is set to indicate the error.
*
* @throws ENOMEM The process could not allocate sufficient amount of memory.
+ *
+ * @since Always.
*/
wchar_t* wmemdup(const wchar_t* segment, size_t size)
{
diff --git a/src/wchar/wmemmem.c b/src/wchar/wmemmem.c
index bd32035..c0afe85 100644
--- a/src/wchar/wmemmem.c
+++ b/src/wchar/wmemmem.c
@@ -39,6 +39,8 @@
* @param needle_length The length of `needle`.
* @return Pointer to the first occurrence of
* the substring, `NULL` if not found.
+ *
+ * @since Always.
*/
wchar_t* (wmemmem)(const wchar_t* haystack, size_t haystack_length,
const wchar_t* needle, size_t needle_length)
diff --git a/src/wchar/wmemmove.c b/src/wchar/wmemmove.c
index b531468..70ce283 100644
--- a/src/wchar/wmemmove.c
+++ b/src/wchar/wmemmove.c
@@ -28,6 +28,8 @@
* @param whence The source memory segment.
* @param size The number of wide characters to copy.
* @return `whither` is returned.
+ *
+ * @since Always.
*/
wchar_t* wmemmove(wchar_t* whither, const wchar_t* whence, size_t size)
{
diff --git a/src/wchar/wmempcpy.c b/src/wchar/wmempcpy.c
index 0cd419c..acc05a3 100644
--- a/src/wchar/wmempcpy.c
+++ b/src/wchar/wmempcpy.c
@@ -28,6 +28,8 @@
* @param whence The source memory segment.
* @param size The number of wide characters to copy.
* @return `whither + size` is returned.
+ *
+ * @since Always.
*/
wchar_t* wmempcpy(wchar_t* restrict whither, const wchar_t* restrict whence, size_t size)
{
diff --git a/src/wchar/wmempmove.c b/src/wchar/wmempmove.c
index 2d5ecd4..36f3123 100644
--- a/src/wchar/wmempmove.c
+++ b/src/wchar/wmempmove.c
@@ -29,6 +29,8 @@
* @param whence The source memory segment.
* @param size The number of wide characters to copy.
* @return `whither + size` is returned.
+ *
+ * @since Always.
*/
wchar_t* wmempmove(wchar_t* whither, const wchar_t* whence, size_t size)
{
diff --git a/src/wchar/wmemrchr.c b/src/wchar/wmemrchr.c
index b41e666..2ad53d5 100644
--- a/src/wchar/wmemrchr.c
+++ b/src/wchar/wmemrchr.c
@@ -37,6 +37,8 @@
* @param size The size of the memory segment.
* @return Pointer to the last occurrence of `c`,
* `NULL` if none were found.
+ *
+ * @since Always.
*/
wchar_t* (wmemrchr)(const wchar_t* segment, wchar_t c, size_t size)
{
diff --git a/src/wchar/wmemset.c b/src/wchar/wmemset.c
index 95ec70f..83b4706 100644
--- a/src/wchar/wmemset.c
+++ b/src/wchar/wmemset.c
@@ -26,6 +26,8 @@
* @param c The wide character.
* @param size The number of wide characters in the memory segment.
* @return `segment` is returned.
+ *
+ * @since Always.
*/
wchar_t* wmemset(wchar_t* segment, wchar_t c, size_t size)
{