summaryrefslogtreecommitdiff
path: root/src/htsbase.h
diff options
context:
space:
mode:
authorXavier Roche <xroche@users.noreply.github.com>2014-05-04 08:48:23 +0000
committerXavier Roche <xroche@users.noreply.github.com>2014-05-04 08:48:23 +0000
commitb1fa75dfe08461c0f1349093266bcdc852bcd713 (patch)
treef9d3d7950c6e72d1c0d05d6ea4f0a6dff2346ab9 /src/htsbase.h
parent4da59a639962cecf3599f19813b00f2ab065e089 (diff)
Big cleanup in string primitives and abort functions
Diffstat (limited to 'src/htsbase.h')
-rw-r--r--src/htsbase.h225
1 files changed, 1 insertions, 224 deletions
diff --git a/src/htsbase.h b/src/htsbase.h
index fcda7a8..a3d7743 100644
--- a/src/htsbase.h
+++ b/src/htsbase.h
@@ -40,6 +40,7 @@ extern "C" {
#include "htsglobal.h"
#include "htsstrings.h"
+#include "htssafe.h"
#include <string.h>
#include <time.h>
@@ -106,230 +107,6 @@ extern "C" {
#define DynamicGet(handle, sym) dlsym(handle, sym)
#endif
-// emergency log
- typedef void (*t_abortLog) (char *msg, char *file, int line);
- extern HTSEXT_API t_abortLog abortLog__;
-#define abortLog(a) abortLog__(a, __FILE__, __LINE__)
-#define _ ,
-#define abortLogFmt(a) do { \
- FILE* fp = fopen("CRASH.TXT", "wb"); \
- if (!fp) fp = fopen("/tmp/CRASH.TXT", "wb"); \
- if (!fp) fp = fopen("C:\\CRASH.TXT", "wb"); \
- if (!fp) fp = fopen("\\Temp\\CRASH.TXT", "wb"); \
- if (!fp) fp = fopen("\\CRASH.TXT", "wb"); \
- if (!fp) fp = fopen("CRASH.TXT", "wb"); \
- if (fp) { \
- fprintf(fp, "HTTrack " HTTRACK_VERSIONID " closed at '" __FILE__ "', line %d\r\n", __LINE__); \
- fprintf(fp, "Reason:\r\n"); \
- fprintf(fp, a); \
- fprintf(fp, "\r\n"); \
- fflush(fp); \
- fclose(fp); \
- } \
-} while(0)
-
-#define assertf(exp) do { \
- if (! ( exp ) ) { \
- abortLog("assert failed: " #exp); \
- if (htsCallbackErr != NULL) { \
- htsCallbackErr("assert failed: " #exp, __FILE__ , __LINE__ ); \
- } \
- abort(); \
- } \
-} while(0)
-/* non-fatal assert */
-#define assertnf(exp) do { \
- if (! ( exp ) ) { \
- abortLog("assert failed: " #exp); \
- if (htsCallbackErr != NULL) { \
- htsCallbackErr("assert failed: " #exp, __FILE__ , __LINE__ ); \
- } \
- } \
-} while(0)
-
-/* regular malloc's() */
-#ifndef HTS_TRACE_MALLOC
-#define malloct(A) malloc(A)
-#define calloct(A,B) calloc((A), (B))
-#define freet(A) do { assertnf((A) != NULL); if ((A) != NULL) { free(A); (A) = NULL; } } while(0)
-#define strdupt(A) strdup(A)
-#define realloct(A,B) ( ((A) != NULL) ? realloc((A), (B)) : malloc(B) )
-#define memcpybuff(A, B, N) memcpy((A), (B), (N))
-#else
-/* debug version */
-#define malloct(A) hts_malloc(A)
-#define calloct(A,B) hts_calloc(A,B)
-#define strdupt(A) hts_strdup(A)
-#define freet(A) do { hts_free(A); (A) = NULL; } while(0)
-#define realloct(A,B) hts_realloc(A,B)
- void hts_freeall();
- void *hts_malloc(size_t);
- void *hts_calloc(size_t, size_t);
- char *hts_strdup(char *);
- void *hts_xmalloc(size_t, size_t);
- void hts_free(void *);
- void *hts_realloc(void *, size_t);
- mlink *hts_find(char *adr);
-/* protected memcpy */
-#define memcpybuff(A, B, N) do { \
- mlink* lnk = hts_find((void*)(A)); \
- if (lnk != NULL) { \
- assertf(lnk != NULL); \
- assertf( * ( (t_htsboundary*) ( ((char*) lnk->adr) - sizeof(htsboundary) ) ) == htsboundary ); \
- assertf( * ( (t_htsboundary*) ( ((char*) lnk->adr) + lnk->len ) ) == htsboundary ); \
- assertf( ( ((char*)(A)) + (N)) < (char*) (lnk->adr + lnk->len) ); \
- } \
- memcpy(A, B, N); \
-} while(0)
-
-#endif
-
- typedef void (*htsErrorCallback) (char *msg, char *file, int line);
- extern HTSEXT_API htsErrorCallback htsCallbackErr;
- extern HTSEXT_API int htsMemoryFastXfr;
-
-/*
-*/
-
-#define stringdup()
-
-#ifdef STRDEBUG
-
-/* protected strcat, strncat and strcpy - definitely useful */
-#define strcatbuff(A, B) do { \
- assertf( (A) != NULL ); \
- assertf( (B) != NULL ); \
- if (htsMemoryFastXfr) { \
- if (sizeof(A) != sizeof(char*)) { \
- (A)[sizeof(A) - 1] = '\0'; \
- } \
- strcat(A, B); \
- if (sizeof(A) != sizeof(char*)) { \
- assertf((A)[sizeof(A) - 1] == '\0'); \
- } \
- } else { \
- unsigned int sz = (unsigned int) strlen(A); \
- unsigned int szf = (unsigned int) strlen(B); \
- if (sizeof(A) != sizeof(char*)) { \
- assertf(sz + szf + 1 < sizeof(A)); \
- if (szf > 0) { \
- if (sz + szf + 1 < sizeof(A)) { \
- memcpy((A) + sz, (B), szf + 1); \
- } \
- } \
- } else if (szf > 0) { \
- memcpybuff((A) + sz, (B), szf + 1); \
- } \
- } \
-} while(0)
-#define strncatbuff(A, B, N) do { \
- assertf( (A) != NULL ); \
- assertf( (B) != NULL ); \
- if (htsMemoryFastXfr) { \
- if (sizeof(A) != sizeof(char*)) { \
- (A)[sizeof(A) - 1] = '\0'; \
- } \
- strncat(A, B, N); \
- if (sizeof(A) != sizeof(char*)) { \
- assertf((A)[sizeof(A) - 1] == '\0'); \
- } \
- } else { \
- unsigned int sz = (unsigned int) strlen(A); \
- unsigned int szf = (unsigned int) strlen(B); \
- if (szf > (unsigned int) (N)) szf = (unsigned int) (N); \
- if (sizeof(A) != sizeof(char*)) { \
- assertf(sz + szf + 1 < sizeof(A)); \
- if (szf > 0) { \
- if (sz + szf + 1 < sizeof(A)) { \
- memcpy((A) + sz, (B), szf); \
- * ( (A) + sz + szf) = '\0'; \
- } \
- } \
- } else if (szf > 0) { \
- memcpybuff((A) + sz, (B), szf); \
- * ( (A) + sz + szf) = '\0'; \
- } \
- } \
-} while(0)
-#define strcpybuff(A, B) do { \
- assertf( (A) != NULL ); \
- assertf( (const char*) (B) != NULL ); \
- if (htsMemoryFastXfr) { \
- if (sizeof(A) != sizeof(char*)) { \
- (A)[sizeof(A) - 1] = '\0'; \
- } \
- strcpy(A, B); \
- if (sizeof(A) != sizeof(char*)) { \
- assertf((A)[sizeof(A) - 1] == '\0'); \
- } \
- } else { \
- unsigned int szf = (unsigned int) strlen(B); \
- if (sizeof(A) != sizeof(char*)) { \
- assertf(szf + 1 < sizeof(A)); \
- if (szf > 0) { \
- if (szf + 1 < sizeof(A)) { \
- memcpy((A), (B), szf + 1); \
- } else { \
- * (A) = '\0'; \
- } \
- } else { \
- * (A) = '\0'; \
- } \
- } else { \
- memcpybuff((A), (B), szf + 1); \
- } \
- } \
-} while(0)
-
-#else
-
-#ifdef STRDEBUGFAST
-
-/* protected strcat, strncat and strcpy - definitely useful */
-#define strcatbuff(A, B) do { \
- assertf( (A) != NULL ); \
- assertf( (B) != NULL ); \
- if (sizeof(A) != sizeof(char*)) { \
- (A)[sizeof(A) - 1] = '\0'; \
- } \
- strcat(A, B); \
- if (sizeof(A) != sizeof(char*)) { \
- assertf((A)[sizeof(A) - 1] == '\0'); \
- } \
-} while(0)
-#define strncatbuff(A, B, N) do { \
- assertf( (A) != NULL ); \
- assertf( (B) != NULL ); \
- if (sizeof(A) != sizeof(char*)) { \
- (A)[sizeof(A) - 1] = '\0'; \
- } \
- strncat(A, B, N); \
- if (sizeof(A) != sizeof(char*)) { \
- assertf((A)[sizeof(A) - 1] == '\0'); \
- } \
-} while(0)
-#define strcpybuff(A, B) do { \
- assertf( (A) != NULL ); \
- assertf( (B) != NULL ); \
- if (sizeof(A) != sizeof(char*)) { \
- (A)[sizeof(A) - 1] = '\0'; \
- } \
- strcpy(A, B); \
- if (sizeof(A) != sizeof(char*)) { \
- assertf((A)[sizeof(A) - 1] == '\0'); \
- } \
-} while(0)
-
-#else
-
-#define strcatbuff strcat
-#define strncatbuff strncat
-#define strcpybuff strcpy
-
-#endif
-
-#endif
-
#endif
#ifdef __cplusplus