Skip to content

Commit 73e94f2

Browse files
committed
fix: Correct callback function types.
In some cases, they could cause serious issues. In most cases, it'll accidentally work, but it's undefined behaviour anyway.
1 parent 8853493 commit 73e94f2

File tree

3 files changed

+34
-32
lines changed

3 files changed

+34
-32
lines changed

group.go

+9-9
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ package tox
66
#include <string.h>
77
#include <tox/tox.h>
88
9-
void callbackConferenceInviteWrapperForC(Tox*, uint32_t, Tox_Conference_Type, uint8_t *, size_t, void *);
10-
void callbackConferenceMessageWrapperForC(Tox *, uint32_t, uint32_t, Tox_Message_Type, int8_t *, size_t, void *);
11-
// void callbackConferenceActionWrapperForC(Tox*, uint32_t, uint32_t, uint8_t*, size_t, void*);
9+
typedef const uint8_t gcuint8_t;
10+
void callbackConferenceInviteWrapperForC(Tox*, uint32_t, Tox_Conference_Type, gcuint8_t *, size_t, void *);
11+
void callbackConferenceMessageWrapperForC(Tox *, uint32_t, uint32_t, Tox_Message_Type, gcuint8_t *, size_t, void *);
1212
13-
void callbackConferenceTitleWrapperForC(Tox*, uint32_t, uint32_t, uint8_t*, size_t, void*);
14-
void callbackConferencePeerNameWrapperForC(Tox*, uint32_t, uint32_t, uint8_t*, size_t, void*);
13+
void callbackConferenceTitleWrapperForC(Tox*, uint32_t, uint32_t, gcuint8_t*, size_t, void*);
14+
void callbackConferencePeerNameWrapperForC(Tox*, uint32_t, uint32_t, gcuint8_t*, size_t, void*);
1515
void callbackConferencePeerListChangedWrapperForC(Tox*, uint32_t, void*);
1616
1717
// fix nouse compile warning
@@ -40,7 +40,7 @@ type cb_conference_peer_list_changed_ftype func(this *Tox, groupNumber uint32, u
4040
// tox_callback_conference_***
4141

4242
//export callbackConferenceInviteWrapperForC
43-
func callbackConferenceInviteWrapperForC(m *C.Tox, a0 C.uint32_t, a1 C.Tox_Conference_Type, a2 *C.uint8_t, a3 C.size_t, a4 unsafe.Pointer) {
43+
func callbackConferenceInviteWrapperForC(m *C.Tox, a0 C.uint32_t, a1 C.Tox_Conference_Type, a2 *C.gcuint8_t, a3 C.size_t, a4 unsafe.Pointer) {
4444
var this = cbUserDatas.get(m)
4545
for cbfni, ud := range this.cb_conference_invites {
4646
cbfn := *(*cb_conference_invite_ftype)(cbfni)
@@ -64,7 +64,7 @@ func (this *Tox) CallbackConferenceInviteAdd(cbfn cb_conference_invite_ftype, us
6464
}
6565

6666
//export callbackConferenceMessageWrapperForC
67-
func callbackConferenceMessageWrapperForC(m *C.Tox, a0 C.uint32_t, a1 C.uint32_t, mtype C.Tox_Message_Type, a2 *C.int8_t, a3 C.size_t, a4 unsafe.Pointer) {
67+
func callbackConferenceMessageWrapperForC(m *C.Tox, a0 C.uint32_t, a1 C.uint32_t, mtype C.Tox_Message_Type, a2 *C.gcuint8_t, a3 C.size_t, a4 unsafe.Pointer) {
6868
var this = cbUserDatas.get(m)
6969
if int(mtype) == MESSAGE_TYPE_NORMAL {
7070
for cbfni, ud := range this.cb_conference_messages {
@@ -115,7 +115,7 @@ func (this *Tox) CallbackConferenceActionAdd(cbfn cb_conference_action_ftype, us
115115
}
116116

117117
//export callbackConferenceTitleWrapperForC
118-
func callbackConferenceTitleWrapperForC(m *C.Tox, a0 C.uint32_t, a1 C.uint32_t, a2 *C.uint8_t, a3 C.size_t, a4 unsafe.Pointer) {
118+
func callbackConferenceTitleWrapperForC(m *C.Tox, a0 C.uint32_t, a1 C.uint32_t, a2 *C.gcuint8_t, a3 C.size_t, a4 unsafe.Pointer) {
119119
var this = cbUserDatas.get(m)
120120
for cbfni, ud := range this.cb_conference_titles {
121121
cbfn := *(*cb_conference_title_ftype)(cbfni)
@@ -138,7 +138,7 @@ func (this *Tox) CallbackConferenceTitleAdd(cbfn cb_conference_title_ftype, user
138138
}
139139

140140
//export callbackConferencePeerNameWrapperForC
141-
func callbackConferencePeerNameWrapperForC(m *C.Tox, a0 C.uint32_t, a1 C.uint32_t, a2 *C.uint8_t, a3 C.size_t, a4 unsafe.Pointer) {
141+
func callbackConferencePeerNameWrapperForC(m *C.Tox, a0 C.uint32_t, a1 C.uint32_t, a2 *C.gcuint8_t, a3 C.size_t, a4 unsafe.Pointer) {
142142
var this = cbUserDatas.get(m)
143143
for cbfni, ud := range this.cb_conference_peer_names {
144144
cbfn := *(*cb_conference_peer_name_ftype)(cbfni)

options.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ package tox
55
#include <string.h>
66
#include <tox/tox.h>
77
8-
extern void toxCallbackLog(Tox*, Tox_Log_Level, char*, uint32_t, char*, char*);
8+
typedef const char cchar_t;
9+
extern void toxCallbackLog(Tox*, Tox_Log_Level, cchar_t*, uint32_t, cchar_t*, cchar_t*, void*);
910
1011
*/
1112
import "C"
@@ -95,7 +96,7 @@ func (this *ToxOptions) toCToxOptions() *C.struct_Tox_Options {
9596
}
9697

9798
//export toxCallbackLog
98-
func toxCallbackLog(ctox *C.Tox, level C.Tox_Log_Level, file *C.char, line C.uint32_t, fname *C.char, msg *C.char) {
99+
func toxCallbackLog(ctox *C.Tox, level C.Tox_Log_Level, file *C.cchar_t, line C.uint32_t, fname *C.cchar_t, msg *C.cchar_t, userdata unsafe.Pointer) {
99100
t := cbUserDatas.get(ctox)
100101
if t != nil && t.opts != nil && t.opts.LogCallback != nil {
101102
t.opts.LogCallback(t, int(level), C.GoString(file), uint32(line), C.GoString(fname), C.GoString(msg))

tox.go

+22-21
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,24 @@ package tox
77
88
//////
99
10-
void callbackFriendRequestWrapperForC(Tox *, uint8_t *, uint8_t *, uint16_t, void*);
11-
void callbackFriendMessageWrapperForC(Tox *, uint32_t, int, uint8_t*, uint32_t, void*);
12-
void callbackFriendNameWrapperForC(Tox *, uint32_t, uint8_t*, uint32_t, void*);
13-
void callbackFriendStatusMessageWrapperForC(Tox *, uint32_t, uint8_t*, uint32_t, void*);
14-
void callbackFriendStatusWrapperForC(Tox *, uint32_t, int, void*);
15-
void callbackFriendConnectionStatusWrapperForC(Tox *, uint32_t, int, void*);
10+
typedef const uint8_t cuint8_t;
11+
void callbackFriendRequestWrapperForC(Tox *, cuint8_t *, cuint8_t *, size_t, void*);
12+
void callbackFriendMessageWrapperForC(Tox *, uint32_t, Tox_Message_Type, cuint8_t*, size_t, void*);
13+
void callbackFriendNameWrapperForC(Tox *, uint32_t, cuint8_t*, size_t, void*);
14+
void callbackFriendStatusMessageWrapperForC(Tox *, uint32_t, cuint8_t*, size_t, void*);
15+
void callbackFriendStatusWrapperForC(Tox *, uint32_t, Tox_User_Status, void*);
16+
void callbackFriendConnectionStatusWrapperForC(Tox *, uint32_t, Tox_Connection, void*);
1617
void callbackFriendTypingWrapperForC(Tox *, uint32_t, uint8_t, void*);
1718
void callbackFriendReadReceiptWrapperForC(Tox *, uint32_t, uint32_t, void*);
18-
void callbackFriendLossyPacketWrapperForC(Tox *, uint32_t, uint8_t*, size_t, void*);
19-
void callbackFriendLosslessPacketWrapperForC(Tox *, uint32_t, uint8_t*, size_t, void*);
19+
void callbackFriendLossyPacketWrapperForC(Tox *, uint32_t, cuint8_t*, size_t, void*);
20+
void callbackFriendLosslessPacketWrapperForC(Tox *, uint32_t, cuint8_t*, size_t, void*);
2021
void callbackSelfConnectionStatusWrapperForC(Tox *, int, void*);
2122
void callbackFileRecvControlWrapperForC(Tox *tox, uint32_t friend_number, uint32_t file_number,
2223
Tox_File_Control control, void *user_data);
2324
void callbackFileRecvWrapperForC(Tox *tox, uint32_t friend_number, uint32_t file_number, uint32_t kind,
24-
uint64_t file_size, uint8_t *filename, size_t filename_length, void *user_data);
25+
uint64_t file_size, cuint8_t *filename, size_t filename_length, void *user_data);
2526
void callbackFileRecvChunkWrapperForC(Tox *tox, uint32_t friend_number, uint32_t file_number, uint64_t position,
26-
uint8_t *data, size_t length, void *user_data);
27+
cuint8_t *data, size_t length, void *user_data);
2728
void callbackFileChunkRequestWrapperForC(Tox *tox, uint32_t friend_number, uint32_t file_number, uint64_t position,
2829
size_t length, void *user_data);
2930
@@ -118,7 +119,7 @@ type Tox struct {
118119
var cbUserDatas = newUserData()
119120

120121
//export callbackFriendRequestWrapperForC
121-
func callbackFriendRequestWrapperForC(m *C.Tox, a0 *C.uint8_t, a1 *C.uint8_t, a2 C.uint16_t, a3 unsafe.Pointer) {
122+
func callbackFriendRequestWrapperForC(m *C.Tox, a0 *C.cuint8_t, a1 *C.cuint8_t, a2 C.size_t, a3 unsafe.Pointer) {
122123
var this = cbUserDatas.get(m)
123124
for cbfni, ud := range this.cb_friend_requests {
124125
pubkey_b := C.GoBytes(unsafe.Pointer(a0), C.int(PUBLIC_KEY_SIZE))
@@ -145,8 +146,8 @@ func (this *Tox) CallbackFriendRequestAdd(cbfn cb_friend_request_ftype, userData
145146
}
146147

147148
//export callbackFriendMessageWrapperForC
148-
func callbackFriendMessageWrapperForC(m *C.Tox, a0 C.uint32_t, mtype C.int,
149-
a1 *C.uint8_t, a2 C.uint32_t, a3 unsafe.Pointer) {
149+
func callbackFriendMessageWrapperForC(m *C.Tox, a0 C.uint32_t, mtype C.Tox_Message_Type,
150+
a1 *C.cuint8_t, a2 C.size_t, a3 unsafe.Pointer) {
150151
var this = cbUserDatas.get(m)
151152
for cbfni, ud := range this.cb_friend_messages {
152153
message_ := C.GoStringN((*C.char)(unsafe.Pointer(a1)), (C.int)(a2))
@@ -169,7 +170,7 @@ func (this *Tox) CallbackFriendMessageAdd(cbfn cb_friend_message_ftype, userData
169170
}
170171

171172
//export callbackFriendNameWrapperForC
172-
func callbackFriendNameWrapperForC(m *C.Tox, a0 C.uint32_t, a1 *C.uint8_t, a2 C.uint32_t, a3 unsafe.Pointer) {
173+
func callbackFriendNameWrapperForC(m *C.Tox, a0 C.uint32_t, a1 *C.cuint8_t, a2 C.size_t, a3 unsafe.Pointer) {
173174
var this = cbUserDatas.get(m)
174175
for cbfni, ud := range this.cb_friend_names {
175176
name := C.GoStringN((*C.char)((unsafe.Pointer)(a1)), C.int(a2))
@@ -192,7 +193,7 @@ func (this *Tox) CallbackFriendNameAdd(cbfn cb_friend_name_ftype, userData inter
192193
}
193194

194195
//export callbackFriendStatusMessageWrapperForC
195-
func callbackFriendStatusMessageWrapperForC(m *C.Tox, a0 C.uint32_t, a1 *C.uint8_t, a2 C.uint32_t, a3 unsafe.Pointer) {
196+
func callbackFriendStatusMessageWrapperForC(m *C.Tox, a0 C.uint32_t, a1 *C.cuint8_t, a2 C.size_t, a3 unsafe.Pointer) {
196197
var this = cbUserDatas.get(m)
197198
for cbfni, ud := range this.cb_friend_status_messages {
198199
statusText := C.GoStringN((*C.char)(unsafe.Pointer(a1)), C.int(a2))
@@ -215,7 +216,7 @@ func (this *Tox) CallbackFriendStatusMessageAdd(cbfn cb_friend_status_message_ft
215216
}
216217

217218
//export callbackFriendStatusWrapperForC
218-
func callbackFriendStatusWrapperForC(m *C.Tox, a0 C.uint32_t, a1 C.int, a2 unsafe.Pointer) {
219+
func callbackFriendStatusWrapperForC(m *C.Tox, a0 C.uint32_t, a1 C.Tox_User_Status, a2 unsafe.Pointer) {
219220
var this = cbUserDatas.get(m)
220221
for cbfni, ud := range this.cb_friend_statuss {
221222
cbfn := *(*cb_friend_status_ftype)(cbfni)
@@ -237,7 +238,7 @@ func (this *Tox) CallbackFriendStatusAdd(cbfn cb_friend_status_ftype, userData i
237238
}
238239

239240
//export callbackFriendConnectionStatusWrapperForC
240-
func callbackFriendConnectionStatusWrapperForC(m *C.Tox, a0 C.uint32_t, a1 C.int, a2 unsafe.Pointer) {
241+
func callbackFriendConnectionStatusWrapperForC(m *C.Tox, a0 C.uint32_t, a1 C.Tox_Connection, a2 unsafe.Pointer) {
241242
var this = cbUserDatas.get(m)
242243
for cbfni, ud := range this.cb_friend_connection_statuss {
243244
cbfn := *(*cb_friend_connection_status_ftype)((unsafe.Pointer)(cbfni))
@@ -303,7 +304,7 @@ func (this *Tox) CallbackFriendReadReceiptAdd(cbfn cb_friend_read_receipt_ftype,
303304
}
304305

305306
//export callbackFriendLossyPacketWrapperForC
306-
func callbackFriendLossyPacketWrapperForC(m *C.Tox, a0 C.uint32_t, a1 *C.uint8_t, len C.size_t, a2 unsafe.Pointer) {
307+
func callbackFriendLossyPacketWrapperForC(m *C.Tox, a0 C.uint32_t, a1 *C.cuint8_t, len C.size_t, a2 unsafe.Pointer) {
307308
var this = cbUserDatas.get(m)
308309
for cbfni, ud := range this.cb_friend_lossy_packets {
309310
cbfn := *(*cb_friend_lossy_packet_ftype)(cbfni)
@@ -326,7 +327,7 @@ func (this *Tox) CallbackFriendLossyPacketAdd(cbfn cb_friend_lossy_packet_ftype,
326327
}
327328

328329
//export callbackFriendLosslessPacketWrapperForC
329-
func callbackFriendLosslessPacketWrapperForC(m *C.Tox, a0 C.uint32_t, a1 *C.uint8_t, len C.size_t, a2 unsafe.Pointer) {
330+
func callbackFriendLosslessPacketWrapperForC(m *C.Tox, a0 C.uint32_t, a1 *C.cuint8_t, len C.size_t, a2 unsafe.Pointer) {
330331
var this = cbUserDatas.get(m)
331332
for cbfni, ud := range this.cb_friend_lossless_packets {
332333
cbfn := *(*cb_friend_lossless_packet_ftype)(cbfni)
@@ -395,7 +396,7 @@ func (this *Tox) CallbackFileRecvControlAdd(cbfn cb_file_recv_control_ftype, use
395396

396397
//export callbackFileRecvWrapperForC
397398
func callbackFileRecvWrapperForC(m *C.Tox, friendNumber C.uint32_t, fileNumber C.uint32_t, kind C.uint32_t,
398-
fileSize C.uint64_t, fileName *C.uint8_t, fileNameLength C.size_t, userData unsafe.Pointer) {
399+
fileSize C.uint64_t, fileName *C.cuint8_t, fileNameLength C.size_t, userData unsafe.Pointer) {
399400
var this = cbUserDatas.get(m)
400401
for cbfni, ud := range this.cb_file_recvs {
401402
cbfn := *(*cb_file_recv_ftype)(cbfni)
@@ -422,7 +423,7 @@ func (this *Tox) CallbackFileRecvAdd(cbfn cb_file_recv_ftype, userData interface
422423

423424
//export callbackFileRecvChunkWrapperForC
424425
func callbackFileRecvChunkWrapperForC(m *C.Tox, friendNumber C.uint32_t, fileNumber C.uint32_t,
425-
position C.uint64_t, data *C.uint8_t, length C.size_t, userData unsafe.Pointer) {
426+
position C.uint64_t, data *C.cuint8_t, length C.size_t, userData unsafe.Pointer) {
426427
var this = cbUserDatas.get(m)
427428
for cbfni, ud := range this.cb_file_recv_chunks {
428429
cbfn := *(*cb_file_recv_chunk_ftype)(cbfni)

0 commit comments

Comments
 (0)