2 * Copyright (c) 2017-2018 The strace developers.
4 * SPDX-License-Identifier: LGPL-2.1-or-later
12 struct xlat_data *data;
16 dyxlat_alloc(const size_t nmemb)
18 struct dyxlat *const dyxlat = xmalloc(sizeof(*dyxlat));
20 dyxlat->xlat.type = XT_NORMAL;
21 dyxlat->xlat.size = 0;
22 dyxlat->allocated = nmemb;
23 dyxlat->xlat.data = dyxlat->data = xgrowarray(NULL, &dyxlat->allocated,
24 sizeof(struct xlat_data));
30 dyxlat_free(struct dyxlat *const dyxlat)
34 for (i = 0; i < dyxlat->xlat.size; ++i) {
35 free((void *) dyxlat->data[i].str);
36 dyxlat->data[i].str = NULL;
40 dyxlat->xlat.data = NULL;
45 dyxlat_get(const struct dyxlat *const dyxlat)
51 dyxlat_add_pair(struct dyxlat *const dyxlat, const uint64_t val,
52 const char *const str, const size_t len)
56 for (i = 0; i < dyxlat->xlat.size; ++i) {
57 if (dyxlat->data[i].val == val) {
58 if (strncmp(dyxlat->data[i].str, str, len) == 0
59 && dyxlat->data[i].str[len] == '\0')
62 free((void *) dyxlat->data[i].str);
63 dyxlat->data[i].str = xstrndup(str, len);
68 if (dyxlat->xlat.size >= dyxlat->allocated)
69 dyxlat->xlat.data = dyxlat->data =
70 xgrowarray(dyxlat->data, &dyxlat->allocated,
71 sizeof(struct xlat_data));
73 dyxlat->data[dyxlat->xlat.size].val = val;
74 dyxlat->data[dyxlat->xlat.size].str = xstrndup(str, len);