You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.0 KiB
80 lines
2.0 KiB
/**
|
|
* General purpose, platform agnostic, reusable utils
|
|
*/
|
|
|
|
#ifndef COMMON_UTILS_UTILS_H
|
|
#define COMMON_UTILS_UTILS_H
|
|
|
|
#include <stdbool.h>
|
|
#include <stdint.h>
|
|
|
|
#include "base16.h"
|
|
#include "datetime.h"
|
|
#include "hexdump.h"
|
|
|
|
/** Convert a value to BCD struct */
|
|
static inline bcd_t num2bcd(uint8_t value)
|
|
{
|
|
return (bcd_t) {.ones=value % 10, .tens=value / 10};
|
|
}
|
|
|
|
/** Convert unpacked BCD to value */
|
|
static inline uint8_t bcd2num(uint8_t tens, uint8_t ones)
|
|
{
|
|
return tens * 10 + ones;
|
|
}
|
|
|
|
/**
|
|
* Append to a buffer.
|
|
*
|
|
* In case the buffer capacity is reached, it stays unchanged (up to the terminator) and NULL is returned.
|
|
*
|
|
* @param buf - buffer position to append at; if NULL is given, the function immediately returns NULL.
|
|
* @param appended - string to append
|
|
* @param pcap - pointer to a capacity variable
|
|
* @return the new end of the string (null byte); use as 'buf' for following appends
|
|
*/
|
|
char *append(char *buf, const char *appended, size_t *pcap);
|
|
|
|
/**
|
|
* Test if a file descriptor is valid (e.g. when cleaning up after a failed select)
|
|
*
|
|
* @param fd - file descriptor number
|
|
* @return is valid
|
|
*/
|
|
bool fd_is_valid(int fd);
|
|
|
|
/**
|
|
* parse user-provided string as boolean
|
|
*
|
|
* @param str
|
|
* @return 0 false, 1 true, -1 invalid
|
|
*/
|
|
int parse_boolean_arg(const char *str);
|
|
|
|
/** Check equality of two strings; returns bool */
|
|
#define streq(a, b) (strcmp((const char*)(a), (const char*)(b)) == 0)
|
|
|
|
/** Check prefix equality of two strings; returns bool */
|
|
#define strneq(a, b, n) (strncmp((const char*)(a), (const char*)(b), (n)) == 0)
|
|
|
|
/** Check if a string starts with a substring; returns bool */
|
|
#define strstarts(a, b) strneq((a), (b), (int)strlen((b)))
|
|
|
|
#ifndef MIN
|
|
/** Get min of two numbers */
|
|
#define MIN(a, b) ((a) > (b) ? (b) : (a))
|
|
#endif
|
|
|
|
#ifndef MAX
|
|
/** Get max of two values */
|
|
#define MAX(a, b) ((a) > (b) ? (a) : (b))
|
|
#endif
|
|
|
|
#ifndef STR
|
|
#define STR_HELPER(x) #x
|
|
/** Stringify a token */
|
|
#define STR(x) STR_HELPER(x)
|
|
#endif
|
|
|
|
#endif //COMMON_UTILS_UTILS_H
|
|
|