| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- #include "hbase.h"
- #include <assert.h>
- #include <stdio.h>
- #include <string.h>
- #ifdef OS_DARWIN
- #include <mach-o/dyld.h> // for _NSGetExecutablePath
- #define environ (*_NSGetEnviron())
- #endif
- unsigned int g_alloc_cnt = 0;
- unsigned int g_free_cnt = 0;
- void* safe_malloc(size_t size) {
- ++g_alloc_cnt;
- void* ptr = malloc(size);
- if (!ptr) {
- fprintf(stderr, "malloc failed!\n");
- exit(-1);
- }
- return ptr;
- }
- void* safe_realloc(void* oldptr, size_t newsize, size_t oldsize) {
- ++g_alloc_cnt;
- ++g_free_cnt;
- void* ptr = realloc(oldptr, newsize);
- if (!ptr) {
- fprintf(stderr, "realloc failed!\n");
- exit(-1);
- }
- if (newsize > oldsize) {
- memset((char*)ptr + oldsize, 0, newsize - oldsize);
- }
- return ptr;
- }
- void* safe_calloc(size_t nmemb, size_t size) {
- ++g_alloc_cnt;
- void* ptr = calloc(nmemb, size);
- if (!ptr) {
- fprintf(stderr, "calloc failed!\n");
- exit(-1);
- }
- return ptr;
- }
- void* safe_zalloc(size_t size) {
- ++g_alloc_cnt;
- void* ptr = malloc(size);
- if (!ptr) {
- fprintf(stderr, "malloc failed!\n");
- exit(-1);
- }
- memset(ptr, 0, size);
- return ptr;
- }
- char* strupper(char* str) {
- char* p = str;
- while (*p != '\0') {
- if (*p >= 'a' && *p <= 'z') {
- *p &= ~0x20;
- }
- ++p;
- }
- return str;
- }
- char* strlower(char* str) {
- char* p = str;
- while (*p != '\0') {
- if (*p >= 'A' && *p <= 'Z') {
- *p |= 0x20;
- }
- ++p;
- }
- return str;
- }
- char* strreverse(char* str) {
- if (str == NULL) return NULL;
- char* b = str;
- char* e = str;
- while(*e) {++e;}
- --e;
- char tmp;
- while (e > b) {
- tmp = *e;
- *e = *b;
- *b = tmp;
- --e;
- ++b;
- }
- return str;
- }
- // n = sizeof(dest_buf)
- char* safe_strncpy(char* dest, const char* src, size_t n) {
- assert(dest != NULL && src != NULL);
- char* ret = dest;
- while (*src != '\0' && --n > 0) {
- *dest++ = *src++;
- }
- *dest = '\0';
- return ret;
- }
- // n = sizeof(dest_buf)
- char* safe_strncat(char* dest, const char* src, size_t n) {
- assert(dest != NULL && src != NULL);
- char* ret = dest;
- while (*dest) {++dest;--n;}
- while (*src != '\0' && --n > 0) {
- *dest++ = *src++;
- }
- *dest = '\0';
- return ret;
- }
- bool strstartswith(const char* str, const char* start) {
- assert(str != NULL && start != NULL);
- while (*str && *start && *str == *start) {
- ++str;
- ++start;
- }
- return *start == '\0';
- }
- bool strendswith(const char* str, const char* end) {
- assert(str != NULL && end != NULL);
- int len1 = 0;
- int len2 = 0;
- while (*str++) {++len1;}
- while (*end++) {++len2;}
- if (len1 < len2) return false;
- while (len2-- > 0) {
- --str;
- --end;
- if (*str != *end) {
- return false;
- }
- }
- return true;
- }
- bool strcontains(const char* str, const char* sub) {
- assert(str != NULL && sub != NULL);
- return strstr(str, sub) != NULL;
- }
- char* strrchr_dir(const char* filepath) {
- char* b = (char*)filepath;
- char* e = b;
- while (*e) ++e;
- while (--e >= b) {
- #ifdef OS_WIN
- if (*e == '/' || *e == '\\')
- #else
- if (*e == '/')
- #endif
- return e;
- }
- return b;
- }
- bool getboolean(const char* str) {
- if (str == NULL) return false;
- int len = strlen(str);
- if (len == 0) return false;
- switch (len) {
- case 1: return *str == '1' || *str == 'y' || *str == 'Y';
- case 2: return stricmp(str, "on") == 0;
- case 3: return stricmp(str, "yes") == 0;
- case 4: return stricmp(str, "true") == 0;
- case 6: return stricmp(str, "enable") == 0;
- default: return false;
- }
- }
- char* get_executable_path(char* buf, int size) {
- #ifdef OS_WIN
- GetModuleFileName(NULL, buf, size);
- #elif defined(OS_LINUX)
- readlink("/proc/self/exe", buf, size);
- #elif defined(OS_DARWIN)
- _NSGetExecutablePath(buf, (uint32_t*)&size);
- #endif
- return buf;
- }
- char* get_executable_dir(char* buf, int size) {
- char filepath[MAX_PATH];
- get_executable_path(filepath, sizeof(filepath));
- char* pos = strrchr_dir(filepath);
- if (pos) {
- *pos = '\0';
- strncpy(buf, filepath, size);
- }
- return buf;
- }
- char* get_executable_file(char* buf, int size) {
- char filepath[MAX_PATH];
- get_executable_path(filepath, sizeof(filepath));
- char* pos = strrchr_dir(filepath);
- if (pos) {
- strncpy(buf, pos+1, size);
- }
- return buf;
- }
- char* get_run_dir(char* buf, int size) {
- getcwd(buf, size);
- return buf;
- }
|