summaryrefslogtreecommitdiff
path: root/src/util.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/util.h')
-rw-r--r--src/util.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/util.h b/src/util.h
index 6d6072a..3fd533c 100644
--- a/src/util.h
+++ b/src/util.h
@@ -28,11 +28,33 @@ typedef unsigned char BOOL;
#define UH_ATTR __attribute__((__unused__, __hot__))
#define UHP_ATTR __attribute__((__unused__, __hot__, __pure__))
+/* For convenient declarations */
+#define CC_MOD(X) const X const
+#define CCR_MOD(X) const X const restrict
#define eprintf(...) fprintf(stderr, __VA_ARGS__)
#define fleprintf0(M) eprintf("%s:%d, " M, __FILE__, __LINE__)
#define fleprintf(M, ...) eprintf("%s:%d, " M, __FILE__, __LINE__, __VA_ARGS__)
+#define SAFE_MALLOC(TYPE, VAR, LEN, CLEAN) do { \
+ VAR = malloc(sizeof (TYPE) * (LEN)); \
+ if (VAR == NULL) { \
+ fleprintf0("Fail to malloc\n"); \
+ { CLEAN }; \
+ } \
+ } while (0)
+
+#define SAFE_REALLOC(TYPE, VAR, LEN, CLEAN) do { \
+ TYPE *macro_new_var = \
+ realloc(VAR, sizeof (TYPE) * (LEN)); \
+ if (macro_new_var == NULL) { \
+ fleprintf0("Fail to realloc\n"); \
+ { CLEAN }; \
+ } else { \
+ VAR = macro_new_var; \
+ } \
+ } while (0)
+
BOOL read_entire_file(const char *file_name, char **str, NUM *len);
#endif