]> granicus.if.org Git - strace/blob - retval.c
tests: fix format warnings on x32
[strace] / retval.c
1 /*
2  * Copyright (c) 2018 The strace developers.
3  * All rights reserved.
4  *
5  * SPDX-License-Identifier: LGPL-2.1-or-later
6  */
7
8 #include "defs.h"
9 #include "retval.h"
10
11 static kernel_long_t *retval_vec;
12 static size_t retval_vec_capacity; /* size of the arena */
13 static size_t retval_vec_size;     /* size of the used arena */
14
15 static void
16 expand_retval_vec(void)
17 {
18         const size_t old_capacity = retval_vec_capacity;
19         retval_vec = xgrowarray(retval_vec, &retval_vec_capacity,
20                                 sizeof(*retval_vec));
21         memset(retval_vec + old_capacity, 0,
22                (retval_vec_capacity - old_capacity)
23                * sizeof(*retval_vec));
24 }
25
26 uint16_t
27 retval_new(const kernel_long_t rval)
28 {
29         const uint16_t idx = retval_vec_size;
30
31         if (idx < retval_vec_size)
32                 error_func_msg_and_die("retval index overflow");
33
34         if (retval_vec_size == retval_vec_capacity)
35                 expand_retval_vec();
36
37         retval_vec[idx] = rval;
38         ++retval_vec_size;
39
40         return idx;
41 }
42
43 kernel_long_t
44 retval_get(const uint16_t rval_idx)
45 {
46         if (rval_idx >= retval_vec_size)
47                 error_func_msg_and_die("rval_idx >= retval_vec_size");
48
49         return retval_vec[rval_idx];
50 }