X-Git-Url: http://git.dolda2000.com/gitweb/?a=blobdiff_plain;f=include%2Futils.h;h=d09f17255047f7a57fe776e11a8e001a6ab1e7c7;hb=672dbb8f2fe881723f08bba084acd54703411342;hp=a8b5a08ef81d87dca98f3fed5726b74a56788d5b;hpb=7a83517c3dd9bbc9958c4c00d912c07444dabc01;p=doldaconnect.git diff --git a/include/utils.h b/include/utils.h index a8b5a08..d09f172 100644 --- a/include/utils.h +++ b/include/utils.h @@ -21,7 +21,6 @@ #include #include -#include #ifdef DAEMON #include "log.h" #endif @@ -35,10 +34,10 @@ struct wcspair { /* "Safe" functions */ #ifdef DAEMON -#define LOGOOM(size) flog(LOG_CRIT, "%s (%s:%i): out of memory (alloc %i)", __FUNCTION__, __FILE__, __LINE__, (size)) -#define smalloc(size) ({void *__result__; ((__result__ = malloc(size)) == NULL)?({LOGOOM(size); abort(); (void *)0;}):__result__;}) -#define srealloc(ptr, size) ({void *__result__; ((__result__ = realloc((ptr), (size))) == NULL)?({LOGOOM(size); abort(); (void *)0;}):__result__;}) -#define swcsdup(wcs) ((wchar_t *)wcscpy(smalloc(sizeof(wchar_t) * (wcslen(wcs) + 1)), (wcs))) +#define LOGOOM(size) flog(LOG_CRIT, "%s (%s:%i): out of memory (alloc %zi)", __FUNCTION__, __FILE__, __LINE__, (size)) +#define smalloc(size) ({void *__result__; ((__result__ = malloc(size)) == NULL)?({LOGOOM((ssize_t)(size)); abort(); (void *)0;}):__result__;}) +#define srealloc(ptr, size) ({void *__result__; ((__result__ = realloc((ptr), (size))) == NULL)?({LOGOOM((ssize_t)(size)); abort(); (void *)0;}):__result__;}) +#define swcsdup(wcs) ({wchar_t *__eval__; __eval__ = (wcs); (wchar_t *)wcscpy(smalloc(sizeof(wchar_t) * (wcslen(__eval__) + 1)), __eval__);}) #define sstrdup(str) ((char *)strcpy(smalloc(strlen(str) + 1), (str))) #else #define LOGOOM(size) @@ -74,7 +73,7 @@ extern int swprintf (wchar_t *__restrict __s, size_t __n, char *vsprintf2(char *format, va_list al); char *sprintf2(char *format, ...) -#if defined(__GNUC__) && 0 +#if defined(__GNUC__) __attribute__ ((format (printf, 1, 2))) #endif ; @@ -121,6 +120,13 @@ do { \ memcpy((d) + (d ## data), (s), sizeof(*(d)) * __bufcat_size__); \ (d ## data) += __bufcat_size__; \ } while (0) +#define bprintf(b, fmt...) \ + do { \ + char *__bprintf_dest__; \ + __bprintf_dest__ = sprintf2(fmt); \ + bufcat(b, __bprintf_dest__, strlen(__bprintf_dest__)); \ + free(__bprintf_dest__); \ + } while(0) #define freeparr(parr) _freeparr((void **)(parr)) #define parrlen(parr) _parrlen((void **)(parr))