diff --git a/src/Makefile b/src/Makefile
index af4f9ead..d52def45 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -799,7 +799,7 @@ OBJS = main.o init.o graph.o $(APIOBJ) misc.o special.o \
fileformats.o miscfileformats.o libraw2crtc.o \
brush_ops.o buttons_effects.o layers.o \
oldies.o tiles.o colorred.o unicode.o gfx2surface.o \
- gfx2log.o tifformat.o
+ gfx2log.o gfx2mem.o tifformat.o
ifndef NORECOIL
OBJS += loadrecoil.o recoil.o
endif
diff --git a/src/gfx2mem.c b/src/gfx2mem.c
new file mode 100644
index 00000000..1156c586
--- /dev/null
+++ b/src/gfx2mem.c
@@ -0,0 +1,32 @@
+/* vim:expandtab:ts=2 sw=2:
+*/
+/* Grafx2 - The Ultimate 256-color bitmap paint program
+
+ Copyright 2019 Thomas Bernard
+ Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud)
+
+ Grafx2 is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; version 2
+ of the License.
+
+ Grafx2 is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Grafx2; if not, see
+*/
+#include
+#include "gfx2mem.h"
+#include "gfx2log.h"
+
+void * GFX2_malloc_and_log(size_t size, const char * file, unsigned line)
+{
+ void * p = malloc(size);
+ if (p == NULL)
+ GFX2_Log(GFX2_ERROR, "%s:%u Failed to allocate %lu bytes",
+ file, line, (unsigned long)size);
+ return p;
+}
diff --git a/src/gfx2mem.h b/src/gfx2mem.h
new file mode 100644
index 00000000..537b559f
--- /dev/null
+++ b/src/gfx2mem.h
@@ -0,0 +1,30 @@
+/* vim:expandtab:ts=2 sw=2:
+*/
+/* Grafx2 - The Ultimate 256-color bitmap paint program
+
+ Copyright 2019 Thomas Bernard
+ Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud)
+
+ Grafx2 is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; version 2
+ of the License.
+
+ Grafx2 is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Grafx2; if not, see
+*/
+#ifndef GFX2MEM_H_DEFINED
+#define GFX2MEM_H_DEFINED
+
+/// malloc() memory and log in case of error
+void * GFX2_malloc_and_log(size_t size, const char * file, unsigned line);
+
+/// malloc() memory and log in case of error
+#define GFX2_malloc(size) GFX2_malloc_and_log((size), __FILE__, __LINE__)
+
+#endif