| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- #ifndef HV_BASE_H_
- #define HV_BASE_H_
- #include "hexport.h"
- #include "hplatform.h" // for bool
- #include "hdef.h" // for printd
- BEGIN_EXTERN_C
- //--------------------alloc/free---------------------------
- HV_EXPORT void* hv_malloc(size_t size);
- HV_EXPORT void* hv_realloc(void* oldptr, size_t newsize, size_t oldsize);
- HV_EXPORT void* hv_calloc(size_t nmemb, size_t size);
- HV_EXPORT void* hv_zalloc(size_t size);
- HV_EXPORT void hv_free(void* ptr);
- #define HV_ALLOC(ptr, size)\
- do {\
- *(void**)&(ptr) = hv_zalloc(size);\
- printd("alloc(%p, size=%llu)\tat [%s:%d:%s]\n", ptr, (unsigned long long)size, __FILE__, __LINE__, __FUNCTION__);\
- } while(0)
- #define HV_ALLOC_SIZEOF(ptr) HV_ALLOC(ptr, sizeof(*(ptr)))
- #define HV_FREE(ptr)\
- do {\
- if (ptr) {\
- hv_free(ptr);\
- printd("free( %p )\tat [%s:%d:%s]\n", ptr, __FILE__, __LINE__, __FUNCTION__);\
- ptr = NULL;\
- }\
- } while(0)
- #define STACK_OR_HEAP_ALLOC(ptr, size, stack_size)\
- unsigned char _stackbuf_[stack_size] = { 0 };\
- if ((size) > (stack_size)) {\
- HV_ALLOC(ptr, size);\
- } else {\
- *(unsigned char**)&(ptr) = _stackbuf_;\
- }
- #define STACK_OR_HEAP_FREE(ptr)\
- if ((unsigned char*)(ptr) != _stackbuf_) {\
- HV_FREE(ptr);\
- }
- #define HV_DEFAULT_STACKBUF_SIZE 1024
- #define HV_STACK_ALLOC(ptr, size) STACK_OR_HEAP_ALLOC(ptr, size, HV_DEFAULT_STACKBUF_SIZE)
- #define HV_STACK_FREE(ptr) STACK_OR_HEAP_FREE(ptr)
- HV_EXPORT long hv_alloc_cnt();
- HV_EXPORT long hv_free_cnt();
- HV_INLINE void hv_memcheck(void) {
- printf("Memcheck => alloc:%ld free:%ld\n", hv_alloc_cnt(), hv_free_cnt());
- }
- #define HV_MEMCHECK atexit(hv_memcheck);
- //--------------------string-------------------------------
- HV_EXPORT char* hv_strupper(char* str);
- HV_EXPORT char* hv_strlower(char* str);
- HV_EXPORT char* hv_strreverse(char* str);
- HV_EXPORT bool hv_strstartswith(const char* str, const char* start);
- HV_EXPORT bool hv_strendswith(const char* str, const char* end);
- HV_EXPORT bool hv_strcontains(const char* str, const char* sub);
- // strncpy n = sizeof(dest_buf)-1
- // hv_strncpy n = sizeof(dest_buf)
- HV_EXPORT char* hv_strncpy(char* dest, const char* src, size_t n);
- // strncat n = sizeof(dest_buf)-1-strlen(dest)
- // hv_strncpy n = sizeof(dest_buf)
- HV_EXPORT char* hv_strncat(char* dest, const char* src, size_t n);
- #if !HAVE_STRLCPY
- #define strlcpy hv_strncpy
- #endif
- #if !HAVE_STRLCAT
- #define strlcat hv_strncat
- #endif
- HV_EXPORT char* hv_strnchr(const char* s, char c, size_t n);
- #define hv_strrchr_dot(str) strrchr(str, '.')
- HV_EXPORT char* hv_strrchr_dir(const char* filepath);
- // basename
- HV_EXPORT const char* hv_basename(const char* filepath);
- HV_EXPORT const char* hv_suffixname(const char* filename);
- // mkdir -p
- HV_EXPORT int hv_mkdir_p(const char* dir);
- // rmdir -p
- HV_EXPORT int hv_rmdir_p(const char* dir);
- // path
- HV_EXPORT bool hv_exists(const char* path);
- HV_EXPORT bool hv_isdir(const char* path);
- HV_EXPORT bool hv_isfile(const char* path);
- HV_EXPORT bool hv_islink(const char* path);
- HV_EXPORT size_t hv_filesize(const char* filepath);
- HV_EXPORT char* get_executable_path(char* buf, int size);
- HV_EXPORT char* get_executable_dir(char* buf, int size);
- HV_EXPORT char* get_executable_file(char* buf, int size);
- HV_EXPORT char* get_run_dir(char* buf, int size);
- // random
- HV_EXPORT int hv_rand(int min, int max);
- HV_EXPORT char* hv_random_string(char *buf, int len);
- // 1 y on yes true enable => true
- HV_EXPORT bool hv_getboolean(const char* str);
- // 1T2G3M4K5B => ?B
- HV_EXPORT size_t hv_parse_size(const char* str);
- // 1w2d3h4m5s => ?s
- HV_EXPORT time_t hv_parse_time(const char* str);
- // scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]
- typedef enum {
- HV_URL_SCHEME,
- HV_URL_USERNAME,
- HV_URL_PASSWORD,
- HV_URL_HOST,
- HV_URL_PORT,
- HV_URL_PATH,
- HV_URL_QUERY,
- HV_URL_FRAGMENT,
- HV_URL_FIELD_NUM,
- } hurl_field_e;
- typedef struct hurl_s {
- struct {
- unsigned short off;
- unsigned short len;
- } fields[HV_URL_FIELD_NUM];
- unsigned short port;
- } hurl_t;
- HV_EXPORT int hv_parse_url(hurl_t* stURL, const char* strURL);
- END_EXTERN_C
- #endif // HV_BASE_H_
|