Wireshark  4.3.0
The Wireshark network protocol analyzer
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
22 extern "C" {
23 #endif /* __cplusplus */
24 
25 #if !GLIB_CHECK_VERSION(2, 61, 2)
26 
27 typedef volatile gint gatomicrefcount;
28 
29 typedef 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 
42 static inline gboolean
43 g_array_binary_search (GArray *array,
44  gconstpointer 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)
88 static inline void *
89 g_memdup2(gconstpointer 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