144 lines
4.3 KiB
C
144 lines
4.3 KiB
C
#ifndef __CORE_LIB_H__
|
|
#define __CORE_LIB_H__
|
|
|
|
/**
|
|
* @file c_lib.h
|
|
* This is collection of oddballs that didn't fit anywhere else,
|
|
* and might move to more appropriate headers with the release
|
|
* of CORE 1.0.
|
|
* @brief CORE general purpose library routines
|
|
*/
|
|
|
|
#include "core.h"
|
|
#include "core_errno.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif /* __cplusplus */
|
|
|
|
/**
|
|
* @defgroup c_lib General Purpose Library Routines
|
|
* @ingroup CORE
|
|
* This is collection of oddballs that didn't fit anywhere else,
|
|
* and might move to more appropriate headers with the release
|
|
* of CORE 1.0.
|
|
* @{
|
|
*/
|
|
|
|
/*
|
|
* Define the structures used by the CORE general-purpose library.
|
|
*/
|
|
|
|
/** @} */
|
|
|
|
/**
|
|
* @defgroup c_ctype ctype functions
|
|
* These macros allow correct support of 8-bit characters on systems which
|
|
* support 8-bit characters. Pretty dumb how the cast is required, but
|
|
* that's legacy libc for ya. These new macros do not support EOF like
|
|
* the standard macros do. Tough.
|
|
* @{
|
|
*/
|
|
/** @see isalnum */
|
|
#define c_isalnum(c) (isalnum(((unsigned char)(c))))
|
|
/** @see isalpha */
|
|
#define c_isalpha(c) (isalpha(((unsigned char)(c))))
|
|
/** @see iscntrl */
|
|
#define c_iscntrl(c) (iscntrl(((unsigned char)(c))))
|
|
/** @see isdigit */
|
|
#define c_isdigit(c) (isdigit(((unsigned char)(c))))
|
|
/** @see isgraph */
|
|
#define c_isgraph(c) (isgraph(((unsigned char)(c))))
|
|
/** @see islower*/
|
|
#define c_islower(c) (islower(((unsigned char)(c))))
|
|
/** @see isascii */
|
|
#ifdef isascii
|
|
#define c_isascii(c) (isascii(((unsigned char)(c))))
|
|
#else
|
|
#define c_isascii(c) (((c) & ~0x7f)==0)
|
|
#endif
|
|
/** @see isprint */
|
|
#define c_isprint(c) (isprint(((unsigned char)(c))))
|
|
/** @see ispunct */
|
|
#define c_ispunct(c) (ispunct(((unsigned char)(c))))
|
|
/** @see isspace */
|
|
#define c_isspace(c) (isspace(((unsigned char)(c))))
|
|
/** @see isupper */
|
|
#define c_isupper(c) (isupper(((unsigned char)(c))))
|
|
/** @see isxdigit */
|
|
#define c_isxdigit(c) (isxdigit(((unsigned char)(c))))
|
|
/** @see tolower */
|
|
#define c_tolower(c) (tolower(((unsigned char)(c))))
|
|
/** @see toupper */
|
|
#define c_toupper(c) (toupper(((unsigned char)(c))))
|
|
|
|
#define c_max(x , y) (((x) > (y)) ? (x) : (y))
|
|
#define c_min(x , y) (((x) < (y)) ? (x) : (y))
|
|
|
|
#define c_uint64_to_array(array, uint64) \
|
|
{ \
|
|
int i = 0; \
|
|
for (i = 0; i < 8; i++) array[i] = ((uint64 >> (8-1-i) * 8) & 0xff); \
|
|
}
|
|
|
|
CORE_DECLARE(status_t) core_generate_random_bytes(
|
|
c_uint8_t *buf, int length);
|
|
|
|
#define CORE_HEX(I, I_LEN, O) core_ascii_to_hex(I, I_LEN, O, sizeof(O))
|
|
CORE_DECLARE(void *) core_ascii_to_hex(
|
|
char *in, int in_len, void *out, int out_len);
|
|
|
|
CORE_DECLARE(void *) core_hex_to_ascii(
|
|
void *in, int in_len, void *out, int out_len);
|
|
|
|
CORE_DECLARE(void *) core_uint64_to_buffer(
|
|
c_uint64_t num, int size, void *buffer);
|
|
|
|
CORE_DECLARE(c_uint64_t) core_buffer_to_uint64(void *buffer, int size);
|
|
|
|
CORE_DECLARE(void *) core_bcd_to_buffer(c_int8_t *in, void *out, int *out_len);
|
|
CORE_DECLARE(void *) core_buffer_to_bcd(c_uint8_t *in, int in_len, void *out);
|
|
|
|
/*
|
|
* Apache's "replacement" for the strncpy() function. We roll our
|
|
* own to implement these specific changes:
|
|
* (1) strncpy() doesn't always null terminate and we want it to.
|
|
* (2) strncpy() null fills, which is bogus, esp. when copy 8byte
|
|
* strings into 8k blocks.
|
|
* (3) Instead of returning the pointer to the beginning of
|
|
* the destination string, we return a pointer to the
|
|
* terminating '\0' to allow us to "check" for truncation
|
|
* (4) If src is NULL, null terminate dst (empty string copy)
|
|
*
|
|
* apr_cpystrn() follows the same call structure as strncpy().
|
|
*/
|
|
CORE_DECLARE(char *)core_cpystrn(char *dst, const char *src, size_t dst_size);
|
|
|
|
/**
|
|
* Get the value of an environment variable
|
|
* @param value the returned value, allocated from @a pool
|
|
* @param envvar the name of the environment variable
|
|
*/
|
|
CORE_DECLARE(char *) core_env_get(const char *envvar);
|
|
|
|
/**
|
|
* Set the value of an environment variable
|
|
* @param envvar the name of the environment variable
|
|
* @param value the value to set
|
|
*/
|
|
CORE_DECLARE(status_t) core_env_set(const char *envvar, const char *value);
|
|
|
|
/**
|
|
* Delete a variable from the environment
|
|
* @param envvar the name of the environment variable
|
|
*/
|
|
CORE_DECLARE(status_t) core_env_delete(const char *envvar);
|
|
|
|
/** @} */
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif /* __cplusplus */
|
|
|
|
#endif /* ! __CORE_LIB_H__ */
|