diff options
author | Daniel P. Berrange <berrange@redhat.com> | 2013-11-12 18:21:49 +0000 |
---|---|---|
committer | Daniel P. Berrange <berrange@redhat.com> | 2013-11-21 16:37:07 +0000 |
commit | 5fb9567edf7777b00d3171e1ab018c6585c1e55a (patch) | |
tree | 310943a818f91fc21ad3c18f4657e44622ee67a4 /libvirt-utils.h | |
parent | ecf4429bd359f7ef68f28a2f8cf0fe9fb9c649ee (diff) | |
download | libvirt-python-v7-5fb9567edf7777b00d3171e1ab018c6585c1e55a.tar.gz libvirt-python-v7-5fb9567edf7777b00d3171e1ab018c6585c1e55a.tar.xz libvirt-python-v7-5fb9567edf7777b00d3171e1ab018c6585c1e55a.zip |
Import gnulib's xalloc_oversized macro
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Diffstat (limited to 'libvirt-utils.h')
-rw-r--r-- | libvirt-utils.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/libvirt-utils.h b/libvirt-utils.h index aed64e6..c1223fd 100644 --- a/libvirt-utils.h +++ b/libvirt-utils.h @@ -28,4 +28,19 @@ # define MIN(a,b) (((a) < (b)) ? (a) : (b)) # endif +/* Return 1 if an array of N objects, each of size S, cannot exist due + to size arithmetic overflow. S must be positive and N must be + nonnegative. This is a macro, not a function, so that it + works correctly even when SIZE_MAX < N. + + By gnulib convention, SIZE_MAX represents overflow in size + calculations, so the conservative dividend to use here is + SIZE_MAX - 1, since SIZE_MAX might represent an overflowed value. + However, malloc (SIZE_MAX) fails on all known hosts where + sizeof (ptrdiff_t) <= sizeof (size_t), so do not bother to test for + exactly-SIZE_MAX allocations on such hosts; this avoids a test and + branch when S is known to be 1. */ +# define xalloc_oversized(n, s) \ + ((size_t) (sizeof (ptrdiff_t) <= sizeof (size_t) ? -1 : -2) / (s) < (n)) + #endif /* __LIBVIRT_UTILS_H__ */ |