чување 4bd84d27ec94e5d591a4a8d1bdd035796092207e
родитељ 6f6a902010de6749bb20c317915b4d1b212af6ba
Аутор: Страхиња Радић <contact@strahinja.org>
Датум: Sat, 6 Jul 2024 14:23:21 +0200
defs.h: Move macros to defs.h; use perror(3)
Diffstat:
| M | defs.h | | | 69 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
измењених датотека: 1, додавања: 69(+), брисања: 0(-)
diff --git a/defs.h b/defs.h
@@ -12,9 +12,78 @@
#define ANSI_SGR_BOLD_ON "\033[1m"
#define ANSI_SGR_BOLD_OFF "\033[0m"
+#define LEN(x) (sizeof(x) / sizeof(x[0]))
+#define MAX(a, b) (((a) > (b)) ? (a) : (b))
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#define UNUSED(x) ((void)(x))
+#define ENSURE_SIZE(to, temp, tosize, testsize, fromsize, type) \
+ do \
+ { \
+ if (!to || tosize < testsize) \
+ { \
+ tosize = fromsize; \
+ temp = realloc(to, tosize * sizeof(type)); \
+ if (!temp) \
+ { \
+ perror(PROGRAMNAME ": realloc"); \
+ exit(1); \
+ } \
+ to = temp; \
+ } \
+ } while (0)
+
+#define CALLOC(ptr, ptrtype, nmemb) \
+ do \
+ { \
+ ptr = calloc(nmemb, sizeof(ptrtype)); \
+ if (!ptr) \
+ { \
+ perror(PROGRAMNAME ": calloc"); \
+ exit(1); \
+ } \
+ } while (0)
+
+#define REALLOC(ptr, ptrtype, newsize) \
+ do \
+ { \
+ ptrtype* newptr = realloc(ptr, newsize); \
+ if (!newptr) \
+ { \
+ perror(PROGRAMNAME ": realloc"); \
+ exit(1); \
+ } \
+ ptr = newptr; \
+ } while (0)
+
+/* Copy *parg to *ptoken and increase ptoken */
+#define CHECKCOPY(token, ptoken, token_size, parg) \
+ do \
+ { \
+ if (ptoken + 2 > token + token_size) \
+ { \
+ size_t old_size = token_size; \
+ token_size += BUF_DELTA; \
+ REALLOC(token, char, token_size); \
+ ptoken = token + old_size - 1; \
+ } \
+ *ptoken++ = *parg++; \
+ } while (0)
+
+/* Set *pformat to num and increase pformat */
+#define CHECKSET(format, pformat, format_size, num) \
+ do \
+ { \
+ if (pformat + 2 > format + format_size) \
+ { \
+ size_t old_size = format_size; \
+ format_size += BUF_DELTA; \
+ REALLOC(format, int, format_size); \
+ pformat = format + old_size - 1; \
+ } \
+ *pformat++ = num; \
+ } while (0)
+
typedef enum {
CMD_NONE,
CMD_ALIGN,