This source file includes following definitions.
- __libc_dynarray_finalize
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 #ifndef _LIBC
20 # include <libc-config.h>
21 #endif
22
23 #include <dynarray.h>
24 #include <stdlib.h>
25 #include <string.h>
26
27 bool
28 __libc_dynarray_finalize (struct dynarray_header *list,
29 void *scratch, size_t element_size,
30 struct dynarray_finalize_result *result)
31 {
32 if (__dynarray_error (list))
33
34 return false;
35
36 size_t used = list->used;
37
38
39 if (used == 0)
40 {
41
42
43 if (list->array != scratch)
44 free (list->array);
45 *result = (struct dynarray_finalize_result) { NULL, 0 };
46 return true;
47 }
48
49 size_t allocation_size = used * element_size;
50 void *heap_array = malloc (allocation_size);
51 if (heap_array != NULL)
52 {
53
54 if (list->array != NULL)
55 memcpy (heap_array, list->array, allocation_size);
56 if (list->array != scratch)
57 free (list->array);
58 *result = (struct dynarray_finalize_result)
59 { .array = heap_array, .length = used };
60 return true;
61 }
62 else
63
64 return false;
65 }
66 libc_hidden_def (__libc_dynarray_finalize)