diff options
author | Felipe Oliveira Carvalho <felipekde@gmail.com> | 2014-04-18 02:16:51 -0300 |
---|---|---|
committer | Thiago de Arruda <tpadilha84@gmail.com> | 2014-04-24 10:31:31 -0300 |
commit | 15d8f702a81803cf716b0da2b7b5c88e171580a6 (patch) | |
tree | ee4d90c977cbf437354e39a3fa529f9291f07849 /src/memory.c | |
parent | 1befc494144fbf1d5bff6d7eaeeae4bc20d75f54 (diff) | |
download | rneovim-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.c | 30 |
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; } |