Go to the documentation of this file.
28 #ifndef HOMEPORT_HPD_COMMON_H
29 #define HOMEPORT_HPD_COMMON_H
44 #define HPD_CALLOC(PTR, NUM, CAST) do { \
45 (PTR) = (CAST *) calloc((NUM), sizeof(CAST)); \
46 if(!(PTR)) goto alloc_error; \
52 #define HPD_REALLOC(PTR, NUM, CAST) do { \
53 void *_tmp = realloc((PTR), (NUM)*sizeof(CAST)); \
54 if(!_tmp) goto alloc_error; \
55 (PTR) = (CAST *) _tmp; \
58 #define HPD_CPY_ALLOC(DST, SRC, CAST) do { \
59 (DST) = (CAST *) malloc(sizeof(CAST)); \
60 if(!(DST)) goto alloc_error; \
61 memcpy((DST), (SRC), sizeof(CAST)); \
64 #define HPD_STR_CPY(DST, SRC) do { \
65 HPD_REALLOC((DST), (strlen((SRC))+1), char); \
66 strcpy((DST), (SRC)); \
69 #define HPD_STR_N_CPY(DST, SRC, LEN) do { \
70 HPD_REALLOC((DST), ((LEN)+1), char); \
71 strncpy((DST), (SRC), (LEN)); \
75 #define HPD_SPRINTF_ALLOC(DST, FMT, ...) do { \
77 if ((_len = snprintf(NULL, 0, (FMT), ##__VA_ARGS__)) < 0) goto snprintf_error; \
78 if (!((DST) = calloc(_len+1, sizeof(char)))) goto alloc_error; \
79 if (snprintf((DST), _len+1, (FMT), ##__VA_ARGS__) < 0) { free((DST)); goto snprintf_error; } \
82 #define HPD_VSPRINTF_ALLOC(DST, FMT, VP) do { \
86 if ((_len = vsnprintf(NULL, 0, (FMT), _vp)) < 0) { \
88 goto vsnprintf_error; \
91 if (!((DST) = calloc(_len+1, sizeof(char)))) goto alloc_error; \
92 if (vsnprintf((DST), _len+1, (FMT), (VP)) < 0) { free((DST)); goto vsnprintf_error; } \
99 #endif //HOMEPORT_HPD_COMMON_H