summaryrefslogtreecommitdiff
path: root/include/lib.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/lib.h')
-rw-r--r--include/lib.h224
1 files changed, 178 insertions, 46 deletions
diff --git a/include/lib.h b/include/lib.h
index 7c74fa2..b5f6ccc 100644
--- a/include/lib.h
+++ b/include/lib.h
@@ -3,77 +3,156 @@
#include <stdarg.h>
#include <stddef.h>
+
+//
+// memory operations
+//
+
+
/**
- * The memcmp() function compares the first n bytes (each interpreted as unsigned char) of the memory
- * areas s1 and s2.
+ * Compare the first n bytes (interpreted as unsigned char) of the memory areas s1 and s2
+ * @param s1 - the first memory area
+ * @param s2 - the second memory area
+ * @param n - the byte count
+ * @returns an interger less than, equal to, or greater than 0 if the first n bytes
+ * of s1 are less than, equal to, or greater than s2.
*/
-int memcmp(const void *restrict s1, const void *restrict s2, unsigned long n);
+int memcmp(const void *restrict s1, const void *restrict s2, size_t n);
/**
- * the memcpy() function copies n bytes from memory area src to memory area dest.
- * the memory areas must not overlap.
+ * Copy the first n bytes from memory area src to memory area dest. The memory
+ * areas must not overlap.
+ * @param dest - the destination
+ * @param src - the source
+ * @param n - the byte count
+ * @returns a pointer to dest
*/
-void *memcpy(void *restrict dest, const void *restrict src, unsigned long n);
+void *memcpy(void *restrict dest, const void *restrict src, size_t n);
/**
- * the memcpy() function copies n bytes from memory area src to memory area dest.
- * the memory areas must not overlap.
+ * Volatile version of memcpy.
+ * Copy the first n bytes from memory area src to memory area dest. The memory
+ * areas must not overlap.
+ * @param dest - the destination
+ * @param src - the source
+ * @param n - the byte count
+ * @returns a pointer to dest
*/
-volatile void *memcpyv(volatile void *dest, const volatile void *src, unsigned long n);
+volatile void *memcpyv(volatile void *restrict dest, const volatile void *restrict src, size_t n);
/**
- * The memmove() function copies n bytes from memory area src to memory area dest. The memory areas
- * may overlap: copying takes place as though the bytes in src are first copied into a temporary array
- * that does not overlap src or dest, and the bytes are then copied from the temporary array to dest.
+ * Copy the first n bytes from memory area src to memory area dest. The memory
+ * areas may overlap; memmove behaves as though the bytes are first copied to a
+ * temporary array.
+ * @param dest - the destination
+ * @param src - the source
+ * @param n - the byte count
+ * @returns a pointer to dest
*/
-void *memmove(void *dest, const void *src, unsigned long n);
+void *memmove(void *dest, const void *src, size_t n);
/**
- * The memset() function fills the first n bytes of the memory area pointed to by s with the constant
- * byte c.
+ * Fill the first n bytes of the memory region dest with the constant byte c.
+ * @param dest - the destination
+ * @param c - the byte to write
+ * @param n - the byte count
+ * @returns a pointer to dest
*/
-void *memset(void *restrict dest, int c, unsigned long n);
+void *memset(void *dest, int c, size_t n);
+
+/**
+ * Volatile version of memset.
+ * Fill the first n bytes of the memory region dest with the constant byte c.
+ * @param c - the byte to write
+ * @param n - the byte count
+ * @returns a pointer to dest
+ */
+volatile void *memsetv(volatile void *dest, int c, size_t n);
+
+
+//
+// string operations
+//
+
/**
- * The memset() function fills the first n bytes of the memory area pointed to by s with the constant
- * byte c.
+ * Calculates the length of the string pointed to by str, excluding
+ * the terminating null byte
+ * @param str - the string pointer
+ * @returns the length of the string in bytes
*/
-volatile void *memsetv(volatile void *dest, int c, unsigned long n);
+size_t strlen(const char *str);
/**
- * The strcmp() function compares the two strings s1 and s2. The locale is not taken into account
- * (for a locale-aware comparison, see strcoll(3)). The comparison is done using unsigned characters.
+ * Compare at most the first n bytes of the strings s1 and s2. The comparison is
+ * done using unsigned characters.
+ * @param s1 - a pointer to the first string
+ * @param s2 - a pointer to the second string
+ * @param n - the maximum number of bytes
+ * @returns an interger less than, equal to, or greater than 0 if s1 compares less
+ * than, equal to, or greater than s2
*/
-int strncmp(const char *restrict s1, const char *restrict s2, unsigned long n);
+int strncmp(const char *restrict s1, const char *restrict s2, size_t n);
+
+
+//
+// string copying and concatenation
+//
+
/**
- * Copys the string pointed to by src , into a string at the buffer pointer to by dest.
+ * Copies the string pointed to by src into the buffer pointer to by dest.
* The dest buffer must be long enough to hold src.
+ * @param dest - the destination
+ * @param src - the source
+ * @returns a pointer to dest
*/
char *strcpy(char *restrict dest, const char *restrict src);
/**
- * Copys the string pointed to by src , into a string at the buffer pointer to by dest.
+ * Copies the string pointed to by src into the buffer pointer to by dest.
* The dest buffer must be long enough to hold src or size n.
+ * @param dest - the destination
+ * @param src - the source
+ * @param n - the maximum number of bytes
+ * @returns a pointer to dest
*/
-char *strncpy(char *restrict dest, const char *restrict src, unsigned long n);
+char *strncpy(char *restrict dest, const char *restrict src, size_t n);
/**
- * Calculates the length of the string pointed to by str, excluding
- * the terminating null byte
- * @param str - the string pointer
- * @returns the length of the string in bytes
+ * Copies the string pointed to by src into the buffer pointed to by dest.
+ * The dest buffer must be long enough to hold src.
+ * @param dest - the destination
+ * @param src - the source
+ * @param n - the maximum number of bytes
+ * @returns a pointer to the terminating null byte
*/
-size_t strlen(const char *str);
+char *stpcpy(char *restrict dest, const char *restrict src);
+
+/**
+ * Copies the string pointed to by src into the buffer pointed to by dest.
+ * The dest buffer must be long enough to hold src or size n.
+ * @param dest - the destination
+ * @param src - the source
+ * @param n - the maximum number of bytes
+ * @returns a pointer to the byte after the last character copied
+ */
+char *stpncpy(char *restrict dest, const char *restrict src, size_t n);
/**
* Concatenate the string pointed to by src after the string pointed
- * to by dst.
- * @param dst - the pointer to the destination string
- * @param src - the pointer to the source string
- * @returns dst
+ * to by dest.
+ * @param dest - the destination
+ * @param src - the source
+ * @returns a pointer to dest
*/
-char *strcat(char *restrict dst, const char *restrict src);
+char *strcat(char *restrict dest, const char *restrict src);
+
+
+//
+// character operations
+//
+
/**
* @returns 1 if c is a space
@@ -95,10 +174,16 @@ char itoc(int i);
/**
* converts single base 36 chat into int
* @param c - base 36 char
- * @returns i - int
+ * @returns i - int, or -1 if the char was invalid
*/
int ctoi(char c);
+
+//
+// string/numeric conversions
+//
+
+
/**
* Converts the initial portiion of the string pointed to by s to int.
* @param s - the string to convert
@@ -169,14 +254,6 @@ char *ultoa(unsigned long int n, char *buffer, int radix);
char *ulltoa(unsigned long long int n, char *buffer, int radix);
/**
- * Converts a byte count to a human readable file size
- * @param bytes - the bytes to convert
- * @param buf - the buffer to store it in
- * @preturns - bus
- */
-char *btoa(size_t bytes, char *buf);
-
-/**
* Converts the string in str to an int value based on the given base.
* The endptr is updated to where the string was no longer valid.
* @param str - the string buffer
@@ -187,7 +264,7 @@ char *btoa(size_t bytes, char *buf);
int strtoi(const char *str, char **endptr, int base);
/**
- * Converts the string in str to an long value based on the given base.
+ * Converts the string in str to a long value based on the given base.
* The endptr is updated to where the string was no longer valid.
* @param str - the string buffer
* @param endptr - the endptr
@@ -197,7 +274,7 @@ int strtoi(const char *str, char **endptr, int base);
long int strtol(const char *str, char **endptr, int base);
/**
- * Converts the string in str to an long long value based on the given base.
+ * Converts the string in str to a long long value based on the given base.
* The endptr is updated to where the string was no longer valid.
* @param str - the string buffer
* @param endptr - the endptr
@@ -207,6 +284,61 @@ long int strtol(const char *str, char **endptr, int base);
long long int strtoll(const char *str, char **endptr, int base);
/**
+ * Converts the string in str to an unsigned int value based on the given base.
+ * The endptr is updated to where the string was no longer valid.
+ * @param str - the string buffer
+ * @param endptr - the endptr
+ * @param base - the base to convert to
+ * @returns 0 on error or success, error if endptr is still equal to str
+ */
+unsigned int strtoui(const char *str, char **endptr, int base);
+
+/**
+ * Converts the string in str to an unsigned long value based on the given base.
+ * The endptr is updated to where the string was no longer valid.
+ * @param str - the string buffer
+ * @param endptr - the endptr
+ * @param base - the base to convert to
+ * @returns 0 on error or success, error if endptr is still equal to str
+ */
+unsigned long int strtoul(const char *str, char **endptr, int base);
+
+/**
+ * Converts the string in str to an unsigned long long value based on the given base.
+ * The endptr is updated to where the string was no longer valid.
+ * @param str - the string buffer
+ * @param endptr - the endptr
+ * @param base - the base to convert to
+ * @returns 0 on error or success, error if endptr is still equal to str
+ */
+unsigned long long int strtoull(const char *str, char **endptr, int base);
+
+/**
+ * Converts a byte count to a human readable file size of at most four characters
+ * using binary suffixes.
+ *
+ * The following rules are applied:
+ * - If the byte count is less than 1024, the count is written in decimal
+ * and no suffix is applied
+ * - Otherwise, repeatedly divide by 1024 until the value is under 1000.
+ * - If the value has two or three decimal digits, print it followed by the
+ * approprate suffix.
+ * - If the value has one decimal digit, print it along with a single fractional
+ * digit. This also applies if the value is zero.
+ *
+ * @param bytes - the bytes to convert
+ * @param buf - a pointer to the buffer to store it in (which must be at least five
+ * bytes long)
+ * @returns - buf
+ */
+char *btoa(size_t bytes, char *buf);
+
+
+//
+// printing and formatting
+//
+
+/**
* Prints out a char
* @param c - the char
*/