aboutsummaryrefslogtreecommitdiff
path: root/src/memory.c
diff options
context:
space:
mode:
authorFelipe Oliveira Carvalho <felipekde@gmail.com>2014-04-18 02:16:51 -0300
committerThiago de Arruda <tpadilha84@gmail.com>2014-04-24 10:31:31 -0300
commit15d8f702a81803cf716b0da2b7b5c88e171580a6 (patch)
treeee4d90c977cbf437354e39a3fa529f9291f07849 /src/memory.c
parent1befc494144fbf1d5bff6d7eaeeae4bc20d75f54 (diff)
downloadrneovim-15d8f702a81803cf716b0da2b7b5c88e171580a6.tar.gz
rneovim-15d8f702a81803cf716b0da2b7b5c88e171580a6.tar.bz2
rneovim-15d8f702a81803cf716b0da2b7b5c88e171580a6.zip
(verbose_)?try_malloc() to use on buf_write()
There will be more use cases for try_malloc(): see #556. - Reimplemented xmalloc() using try_malloc(). - verbose_try_malloc() is just like try_malloc() but shows an out-of-memory error message before returning NULL. - Let the compiler generate size>>1 assembly for signed types. We're not using old compilers here. - Add proper function attributes to the new functions in memory.h
Diffstat (limited to 'src/memory.c')
-rw-r--r--src/memory.c30
1 files changed, 23 insertions, 7 deletions
diff --git a/src/memory.c b/src/memory.c
index 2ec1b179ea..4411c1526f 100644
--- a/src/memory.c
+++ b/src/memory.c
@@ -81,24 +81,40 @@ static void try_to_free_memory()
trying_to_free = false;
}
-void *xmalloc(size_t size)
+void *try_malloc(size_t size)
{
void *ret = malloc(size);
- if (!ret && !size)
+ if (!ret && !size) {
ret = malloc(1);
-
+ }
if (!ret) {
try_to_free_memory();
ret = malloc(size);
- if (!ret && !size)
+ if (!ret && !size) {
ret = malloc(1);
- if (!ret) {
- OUT_STR("Vim: Error: Out of memory.\n");
- preserve_exit();
}
}
+ return ret;
+}
+
+void *verbose_try_malloc(size_t size)
+{
+ void *ret = try_malloc(size);
+ if (!ret) {
+ do_outofmem_msg((long_u)size);
+ }
+ return ret;
+}
+void *xmalloc(size_t size)
+{
+ void *ret = try_malloc(size);
+
+ if (!ret) {
+ OUT_STR("Vim: Error: Out of memory.\n");
+ preserve_exit();
+ }
return ret;
}