Wireshark 4.5.0
The Wireshark network protocol analyzer
Loading...
Searching...
No Matches
glib-compat.h
Go to the documentation of this file.
1
12#ifndef GLIB_COMPAT_H
13#define GLIB_COMPAT_H
14
15#include "ws_symbol_export.h"
16#include "ws_attributes.h"
17
18#include <glib.h>
19#include <string.h>
20
21#ifdef __cplusplus
22extern "C" {
23#endif /* __cplusplus */
24
25#if !GLIB_CHECK_VERSION(2, 61, 2)
26
27typedef volatile gint gatomicrefcount;
28
29typedef struct _GRealArray GRealArray;
31{
32 guint8 *data;
33 guint len;
34 guint alloc;
35 guint elt_size;
36 guint zero_terminated ;
37 guint clear;
38 gatomicrefcount ref_count;
39 GDestroyNotify clear_func;
40};
41
42static inline gboolean
43g_array_binary_search (GArray *array,
44 const void * target,
45 GCompareFunc compare_func,
46 guint *out_match_index)
47{
48 gboolean result = FALSE;
49 GRealArray *_array = (GRealArray *) array;
50 guint left, middle, right;
51 gint val;
52
53 g_return_val_if_fail (_array != NULL, FALSE);
54 g_return_val_if_fail (compare_func != NULL, FALSE);
55
56 if (G_LIKELY(_array->len))
57 {
58 left = 0;
59 right = _array->len - 1;
60
61 while (left <= right)
62 {
63 middle = left + (right - left) / 2;
64
65 val = compare_func (_array->data + (_array->elt_size * middle), target);
66 if (val == 0)
67 {
68 result = TRUE;
69 break;
70 }
71 else if (val < 0)
72 left = middle + 1;
73 else if (/* val > 0 && */ middle > 0)
74 right = middle - 1;
75 else
76 break; /* element not found */
77 }
78 }
79
80 if (result && out_match_index != NULL)
81 *out_match_index = middle;
82
83 return result;
84}
85#endif
86
87#if !GLIB_CHECK_VERSION(2, 68, 0)
88static inline void *
89g_memdup2(const void *mem, size_t byte_size)
90{
91 void * new_mem;
92
93 if (mem && byte_size != 0) {
94 new_mem = g_malloc(byte_size);
95 memcpy(new_mem, mem, byte_size);
96 }
97 else
98 new_mem = NULL;
99
100 return new_mem;
101}
102#endif
103
104#ifdef __cplusplus
105}
106#endif /* __cplusplus */
107
108#endif /* GLIB_COMPAT_H */
Definition glib-compat.h:31