Line data Source code
1 : /*
2 : * libpino - pino_internal.h
3 : *
4 : */
5 :
6 : #ifndef PINO_INTERNAL_H
7 : #define PINO_INTERNAL_H
8 :
9 : #include <stdio.h>
10 :
11 : #include <stdbool.h>
12 : #include <stdint.h>
13 : #include <stdlib.h>
14 : #include <string.h>
15 :
16 : #ifdef PINO_SUPPLIMENTS
17 : # include <stdio.h>
18 : #endif
19 :
20 : #include <pino.h>
21 : #include <pino/handler.h>
22 : #include <pino/endianness.h>
23 :
24 : #define HANDLER_STEP 8
25 : #define MM_STEP 16
26 :
27 : #define PINO_VERSION_ID 10000000
28 :
29 : #ifndef PINO_BUILDTIME
30 : # define PINO_BUILDTIME 0
31 : #endif
32 :
33 : #define pmemcpy(dest, src, size) memcpy(dest, src, size)
34 : #define pmemcpy_n2l(dest, src, size) pino_endianness_memcpy_native2le(dest, src, size)
35 : #define pmemcpy_n2b(dest, src, size) pino_endianness_memcpy_native2be(dest, src, size)
36 : #define pmemcpy_l2n(dest, src, size) pino_endianness_memcpy_le2native(dest, src, size)
37 : #define pmemcpy_b2n(dest, src, size) pino_endianness_memcpy_be2native(dest, src, size)
38 : #define pmemmove(dest, src, size) memmove(dest, src, size)
39 : #define pmemcmp(s1, s2, size) memcmp(s1, s2, size)
40 : #define pmalloc(size) malloc(size)
41 : #define pcalloc(count, size) calloc(count, size)
42 : #define prealloc(ptr, size) realloc(ptr, size)
43 : #define pfree(ptr) free(ptr)
44 :
45 : typedef struct {
46 : size_t usage;
47 : size_t capacity;
48 : void **ptrs;
49 : } mm_t;
50 :
51 : typedef struct {
52 : pino_magic_t magic;
53 : mm_t mm;
54 : pino_handler_t *handler;
55 : } handler_entry_t;
56 :
57 1056 : static inline bool validate_magic(pino_magic_safe_t magic)
58 : {
59 1056 : if (!magic) {
60 1 : return false;
61 : }
62 :
63 : return
64 1055 : (strspn(
65 : (const char *)magic,
66 : "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
67 2105 : ) == sizeof(pino_magic_t)) &&
68 1050 : strlen((const char *)magic) == sizeof(pino_magic_t);
69 : }
70 :
71 501555 : static inline bool magic_equal(pino_magic_t magic, pino_magic_safe_t smagic)
72 : {
73 501555 : return strncmp(magic, smagic, sizeof(pino_magic_t)) == 0;
74 : }
75 :
76 : bool pino_handler_init(size_t initialize_size);
77 : void pino_handler_free(void);
78 : pino_handler_t *pino_handler_find(pino_magic_safe_t magic);
79 :
80 : bool pino_memory_manager_obj_init(mm_t *mm, size_t initialize_size);
81 : void pino_memory_manager_obj_free(mm_t *mm);
82 :
83 : /* for debugging */
84 : #ifdef PINO_SUPPLIMENTS
85 : # define PINO_SUPRTF(fmt, ...) printf(" %s > " fmt "\n", __func__, ##__VA_ARGS__)
86 : # define PINO_SUPUNREACH() printf(" %s > !!!UNREACHABLE!!!\n", __func__)
87 : #else
88 : # define PINO_SUPRTF(fmt, ...) ((void)0)
89 : # define PINO_SUPUNREACH() ((void)0)
90 : #endif
91 :
92 : #endif /* PINO_INTERNAL_H */
|