about summary refs log tree commit diff
path: root/shared/nm-std-aux/nm-std-utils.c
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2021-10-01 23:05:04 +0200
committerMichael Biebl <biebl@debian.org>2021-10-01 23:05:04 +0200
commite74c568b07b50b97873fb4ee1d776dedefbd54d6 (patch)
tree3469f17ea9af91f7ff169b890633bda68b0cf76e /shared/nm-std-aux/nm-std-utils.c
parentbfe522304da217296e2a61040f58e35ec5d6f3f2 (diff)
New upstream version 1.32.12 upstream/1.32.12
Diffstat (limited to 'shared/nm-std-aux/nm-std-utils.c')
-rw-r--r--shared/nm-std-aux/nm-std-utils.c90
1 files changed, 0 insertions, 90 deletions
diff --git a/shared/nm-std-aux/nm-std-utils.c b/shared/nm-std-aux/nm-std-utils.c
deleted file mode 100644
index 18692b19..00000000
--- a/shared/nm-std-aux/nm-std-utils.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include "nm-default-std.h"
-
-#include "nm-std-utils.h"
-
-#include <stdint.h>
-#include <assert.h>
-#include <limits.h>
-
-/*****************************************************************************/
-
-size_t
-nm_utils_get_next_realloc_size(bool true_realloc, size_t requested)
-{
-    size_t n, x;
-
-    /* https://doc.qt.io/qt-5/containers.html#growth-strategies */
-
-    if (requested <= 40) {
-        /* small allocations. Increase in small steps of 8 bytes.
-         *
-         * We get thus sizes of 8, 16, 32, 40. */
-        if (requested <= 8)
-            return 8;
-        if (requested <= 16)
-            return 16;
-        if (requested <= 32)
-            return 32;
-
-        /* The return values for < 104 are essentially hard-coded, and the choice here is
-         * made without very strong reasons.
-         *
-         * We want to stay 24 bytes below the power-of-two border 64. Hence, return 40 here.
-         * However, the next step then is already 104 (128 - 24). It's a larger gap than in
-         * the steps before.
-         *
-         * It's not clear whether some of the steps should be adjusted (or how exactly). */
-        return 40;
-    }
-
-    if (requested <= 0x2000u - 24u || NM_UNLIKELY(!true_realloc)) {
-        /* mid sized allocations. Return next power of two, minus 24 bytes extra space
-         * at the beginning.
-         * That means, we double the size as we grow.
-         *
-         * With !true_realloc, it means that the caller does not intend to call
-         * realloc() but instead clone the buffer. This is for example the case, when we
-         * want to nm_explicit_bzero() the old buffer. In that case we really want to grow
-         * the buffer exponentially every time and not increment in page sizes of 4K (below).
-         *
-         * We get thus sizes of 104, 232, 488, 1000, 2024, 4072, 8168... */
-
-        if (NM_UNLIKELY(requested > SIZE_MAX / 2u - 24u))
-            goto out_huge;
-
-        x = requested + 24u;
-        n = 128u;
-        while (n < x) {
-            n <<= 1;
-            nm_assert(n > 128u);
-        }
-
-        nm_assert(n > 24u && n - 24u >= requested);
-        return n - 24u;
-    }
-
-    if (NM_UNLIKELY(requested > SIZE_MAX - 0x1000u - 24u)) {
-        /* overflow happened. */
-        goto out_huge;
-    }
-
-    /* For large allocations (with !true_realloc) we allocate memory in chunks of
-     * 4K (- 24 bytes extra), assuming that the memory gets mmapped and thus
-     * realloc() is efficient by just reordering pages. */
-    n = ((requested + (0x0FFFu + 24u)) & ~((size_t) 0x0FFFu)) - 24u;
-    nm_assert(n >= requested);
-    return n;
-
-out_huge:
-    if (sizeof(size_t) > 4u) {
-        /* on s390x (64 bit), gcc with LTO can complain that the size argument to
-         * malloc must not be larger than 9223372036854775807.
-         *
-         * Work around that by returning SSIZE_MAX. It should be plenty still! */
-        assert(requested <= (size_t) SSIZE_MAX);
-        return (size_t) SSIZE_MAX;
-    }
-    return SIZE_MAX;
-}