Skip to content

Commit beab824

Browse files
authored
Merge pull request #35 from Geod24/openssl-v1.1.0-fix-vibed
[v1.1.0] Add OPENSSL prefix for sk_* macros
2 parents 7c445ab + 1b270cb commit beab824

File tree

2 files changed

+89
-23
lines changed

2 files changed

+89
-23
lines changed

deimos/openssl/stack.d

Lines changed: 89 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -76,26 +76,92 @@ alias stack_st _STACK; /* Use STACK_OF(...) instead */
7676
int M_sk_num()(_STACK* sk) { return (sk ? sk.num : -1); }
7777
char* M_sk_value()(_STACK* sk, size_t n) { return (sk ? sk.data[n] : null); }
7878

79-
int sk_num(const(_STACK)*);
80-
void* sk_value(const(_STACK)*, int);
81-
82-
void* sk_set(_STACK*, int, void*);
83-
84-
_STACK* sk_new(ExternC!(int function(const(void)*, const(void)*)) cmp);
85-
_STACK* sk_new_null();
86-
void sk_free(_STACK*);
87-
void sk_pop_free(_STACK* st, ExternC!(void function(void*)) func);
88-
int sk_insert(_STACK* sk, void* data, int where);
89-
void* sk_delete(_STACK* st, int loc);
90-
void* sk_delete_ptr(_STACK* st, void* p);
91-
int sk_find(_STACK* st, void* data);
92-
int sk_find_ex(_STACK* st, void* data);
93-
int sk_push(_STACK* st, void* data);
94-
int sk_unshift(_STACK* st, void* data);
95-
void* sk_shift(_STACK* st);
96-
void* sk_pop(_STACK* st);
97-
void sk_zero(_STACK* st);
98-
int function(const(void)*, const(void)*) sk_set_cmp_func(_STACK* sk, ExternC!(int function(const(void)*, const(void)*)) c);
99-
_STACK* sk_dup(_STACK* st);
100-
void sk_sort(_STACK* st);
101-
int sk_is_sorted(const(_STACK)* st);
79+
/*******************************************************************************
80+
81+
Starting from OpenSSL v1.1.0, the `sk_*` functions are prefixed with
82+
`OPENSSL_`, so e.g. `sk_num` becomes `OPENSSL_sk_num`.
83+
84+
To cope with that and provide downstream with an easier interface to deal
85+
with, we always provide the `OPENSSL_` methods, as they are just `extern(C)`
86+
anyway, and we either provide `sk_*` as `alias`es or `extern (C)`.
87+
88+
The need for aliases comes from users of those binding, e.g. `safestack`.
89+
90+
*******************************************************************************/
91+
92+
version (DeimosOpenSSLv1_1)
93+
{
94+
int OPENSSL_sk_num(const(_STACK)*);
95+
void* OPENSSL_sk_value(const(_STACK)*, int);
96+
97+
void* OPENSSL_sk_set(_STACK*, int, void*);
98+
99+
_STACK* OPENSSL_sk_new(ExternC!(int function(const(void)*, const(void)*)) cmp);
100+
_STACK* OPENSSL_sk_new_null();
101+
void OPENSSL_sk_free(_STACK*);
102+
void OPENSSL_sk_pop_free(_STACK* st, ExternC!(void function(void*)) func);
103+
int OPENSSL_sk_insert(_STACK* sk, void* data, int where);
104+
void* OPENSSL_sk_delete(_STACK* st, int loc);
105+
void* OPENSSL_sk_delete_ptr(_STACK* st, void* p);
106+
int OPENSSL_sk_find(_STACK* st, void* data);
107+
int OPENSSL_sk_find_ex(_STACK* st, void* data);
108+
int OPENSSL_sk_push(_STACK* st, void* data);
109+
int OPENSSL_sk_unshift(_STACK* st, void* data);
110+
void* OPENSSL_sk_shift(_STACK* st);
111+
void* OPENSSL_sk_pop(_STACK* st);
112+
void OPENSSL_sk_zero(_STACK* st);
113+
int function(const(void)*, const(void)*) OPENSSL_sk_set_cmp_func(_STACK* sk, ExternC!(int function(const(void)*, const(void)*)) c);
114+
_STACK* OPENSSL_sk_dup(_STACK* st);
115+
void OPENSSL_sk_sort(_STACK* st);
116+
int OPENSSL_sk_is_sorted(const(_STACK)* st);
117+
118+
alias sk_num = OPENSSL_sk_num;
119+
alias sk_value = OPENSSL_sk_value;
120+
alias sk_set = OPENSSL_sk_set;
121+
122+
alias sk_new = OPENSSL_sk_new;
123+
alias sk_new_null = OPENSSL_sk_new_null;
124+
alias sk_free = OPENSSL_sk_free;
125+
alias sk_pop_free = OPENSSL_sk_pop_free;
126+
alias sk_insert = OPENSSL_sk_insert;
127+
alias sk_delete = OPENSSL_sk_delete;
128+
alias sk_delete_ptr = OPENSSL_sk_delete_ptr;
129+
alias sk_find = OPENSSL_sk_find;
130+
alias sk_find_ex = OPENSSL_sk_find_ex;
131+
132+
alias sk_push = OPENSSL_sk_push;
133+
alias sk_unshift = OPENSSL_sk_unshift;
134+
alias sk_shift = OPENSSL_sk_shift;
135+
alias sk_pop = OPENSSL_sk_pop;
136+
alias sk_zero = OPENSSL_sk_zero;
137+
alias sk_set_cmp_func = OPENSSL_sk_set_cmp_func;
138+
alias sk_dup = OPENSSL_sk_dup;
139+
alias sk_sort = OPENSSL_sk_sort;
140+
alias sk_is_sorted = OPENSSL_sk_is_sorted;
141+
}
142+
else
143+
{
144+
int sk_num(const(_STACK)*);
145+
void* sk_value(const(_STACK)*, int);
146+
147+
void* sk_set(_STACK*, int, void*);
148+
149+
_STACK* sk_new(ExternC!(int function(const(void)*, const(void)*)) cmp);
150+
_STACK* sk_new_null();
151+
void sk_free(_STACK*);
152+
void sk_pop_free(_STACK* st, ExternC!(void function(void*)) func);
153+
int sk_insert(_STACK* sk, void* data, int where);
154+
void* sk_delete(_STACK* st, int loc);
155+
void* sk_delete_ptr(_STACK* st, void* p);
156+
int sk_find(_STACK* st, void* data);
157+
int sk_find_ex(_STACK* st, void* data);
158+
int sk_push(_STACK* st, void* data);
159+
int sk_unshift(_STACK* st, void* data);
160+
void* sk_shift(_STACK* st);
161+
void* sk_pop(_STACK* st);
162+
void sk_zero(_STACK* st);
163+
int function(const(void)*, const(void)*) sk_set_cmp_func(_STACK* sk, ExternC!(int function(const(void)*, const(void)*)) c);
164+
_STACK* sk_dup(_STACK* st);
165+
void sk_sort(_STACK* st);
166+
int sk_is_sorted(const(_STACK)* st);
167+
}

package.json renamed to dub.json

File renamed without changes.

0 commit comments

Comments
 (0)