File: array.c

package info (click to toggle)
optee-os 4.7.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 31,560 kB
  • sloc: ansic: 441,914; asm: 12,903; python: 3,719; makefile: 1,676; sh: 238
file content (51 lines) | stat: -rw-r--r-- 1,159 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
// SPDX-License-Identifier: BSD-2-Clause
/*
 * Copyright (c) 2024, Linaro Limited
 */

#include <assert.h>
#include <stdint.h>
#include <string.h>
#include <string_ext.h>

void *ins_array_elem(void *base, size_t elem_count, size_t elem_size,
		     size_t pos, const void *elem)
{
	uint8_t *b = base;
	void *e = b + pos * elem_size;

	assert(pos < elem_count);

	memmove(b + (pos + 1) * elem_size, e,
		(elem_count - pos - 1) * elem_size);

	if (elem)
		memcpy(e, elem, elem_size);

	return e;
}

void *ins_array_elem_zero_init(void *base, size_t elem_count, size_t elem_size,
			       size_t pos)
{
	return memset(ins_array_elem(base, elem_count, elem_size, pos, NULL),
		      0, elem_size);
}

void rem_array_elem(void *base, size_t elem_count, size_t elem_size,
		    size_t pos)
{
	uint8_t *b = base;

	assert(pos < elem_count);

	memmove(b + pos * elem_size, b + (pos + 1) * elem_size,
		(elem_count - pos - 1) * elem_size);
}

void rem_array_elem_zero_pad(void *base, size_t elem_count, size_t elem_size,
			     size_t pos)
{
	rem_array_elem(base, elem_count, elem_size, pos);
	memset((uint8_t *)base + (elem_count - 1) * elem_size, 0, elem_size);
}