Skip to content

Commit 999e870

Browse files
committed
Mark some functions as unsafe
1 parent 26046fb commit 999e870

21 files changed

+133
-93
lines changed

hdf5-sys/src/h5.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ extern "C" {
117117
}
118118

119119
#[cfg(feature = "1.14.0")]
120-
type H5_atclose_func_t = Option<extern "C" fn(ctx: *mut c_void)>;
120+
type H5_atclose_func_t = Option<unsafe extern "C" fn(ctx: *mut c_void)>;
121121

122122
#[cfg(feature = "1.14.0")]
123123
extern "C" {

hdf5-sys/src/h5a.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,15 @@ impl Default for H5A_info_t {
2626

2727
#[deprecated(note = "deprecated in HDF5 1.8.0, use H5A_operator2_t")]
2828
pub type H5A_operator1_t = Option<
29-
extern "C" fn(
29+
unsafe extern "C" fn(
3030
location_id: hid_t,
3131
attr_name: *const c_char,
3232
operator_data: *mut c_void,
3333
) -> herr_t,
3434
>;
3535

3636
pub type H5A_operator2_t = Option<
37-
extern "C" fn(
37+
unsafe extern "C" fn(
3838
location_id: hid_t,
3939
attr_name: *const c_char,
4040
ainfo: *const H5A_info_t,

hdf5-sys/src/h5d.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ pub enum H5D_mpio_no_collective_cause_t {
125125
}
126126

127127
pub type H5D_operator_t = Option<
128-
extern "C" fn(
128+
unsafe extern "C" fn(
129129
elem: *mut c_void,
130130
type_id: hid_t,
131131
ndim: c_uint,
@@ -136,15 +136,15 @@ pub type H5D_operator_t = Option<
136136

137137
#[cfg(feature = "1.8.11")]
138138
pub type H5D_scatter_func_t = Option<
139-
extern "C" fn(
139+
unsafe extern "C" fn(
140140
src_buf: *mut *const c_void,
141141
src_buf_bytes_used: *mut size_t,
142142
op_data: *mut c_void,
143143
) -> herr_t,
144144
>;
145145
#[cfg(feature = "1.8.11")]
146146
pub type H5D_gather_func_t = Option<
147-
extern "C" fn(
147+
unsafe extern "C" fn(
148148
dst_buf: *const c_void,
149149
dst_buf_bytes_used: size_t,
150150
op_data: *mut c_void,
@@ -289,7 +289,7 @@ extern "C" {
289289

290290
#[cfg(feature = "1.14.0")]
291291
pub type H5D_chunk_iter_op_t = Option<
292-
extern "C" fn(
292+
unsafe extern "C" fn(
293293
offset: *const hsize_t,
294294
filter_mask: c_uint,
295295
addr: haddr_t,

hdf5-sys/src/h5es.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ pub enum H5ES_status_t {
4545
}
4646

4747
pub type H5ES_event_complete_func_t = Option<
48-
extern "C" fn(
48+
unsafe extern "C" fn(
4949
op_info: *mut H5ES_op_info_t,
5050
status: H5ES_status_t,
5151
err_stack: hid_t,
@@ -54,7 +54,7 @@ pub type H5ES_event_complete_func_t = Option<
5454
>;
5555

5656
pub type H5ES_event_insert_func_t =
57-
Option<extern "C" fn(op_info: *const H5ES_op_info_t, ctx: *mut c_void) -> c_int>;
57+
Option<unsafe extern "C" fn(op_info: *const H5ES_op_info_t, ctx: *mut c_void) -> c_int>;
5858

5959
extern "C" {
6060
pub fn H5ESinsert_request(es_id: hid_t, connector_id: hid_t, request: *mut c_void) -> herr_t;

hdf5-sys/src/h5fd.rs

+27-24
Original file line numberDiff line numberDiff line change
@@ -132,31 +132,33 @@ pub struct H5FD_class_t {
132132
pub fc_degree: H5F_close_degree_t,
133133
#[cfg(feature = "1.14.0")]
134134
pub terminate: Option<extern "C" fn() -> herr_t>,
135-
pub sb_size: Option<extern "C" fn(file: *mut H5FD_t) -> hsize_t>,
136-
pub sb_encode:
137-
Option<extern "C" fn(file: *mut H5FD_t, name: *mut c_char, p: *mut c_uchar) -> herr_t>,
138-
pub sb_decode:
139-
Option<extern "C" fn(f: *mut H5FD_t, name: *const c_char, p: *const c_uchar) -> herr_t>,
135+
pub sb_size: Option<unsafe extern "C" fn(file: *mut H5FD_t) -> hsize_t>,
136+
pub sb_encode: Option<
137+
unsafe extern "C" fn(file: *mut H5FD_t, name: *mut c_char, p: *mut c_uchar) -> herr_t,
138+
>,
139+
pub sb_decode: Option<
140+
unsafe extern "C" fn(f: *mut H5FD_t, name: *const c_char, p: *const c_uchar) -> herr_t,
141+
>,
140142
pub fapl_size: size_t,
141-
pub fapl_get: Option<extern "C" fn(file: *mut H5FD_t) -> *mut c_void>,
142-
pub fapl_copy: Option<extern "C" fn(fapl: *const c_void) -> *mut c_void>,
143-
pub fapl_free: Option<extern "C" fn(fapl: *mut c_void) -> herr_t>,
143+
pub fapl_get: Option<unsafe extern "C" fn(file: *mut H5FD_t) -> *mut c_void>,
144+
pub fapl_copy: Option<unsafe extern "C" fn(fapl: *const c_void) -> *mut c_void>,
145+
pub fapl_free: Option<unsafe extern "C" fn(fapl: *mut c_void) -> herr_t>,
144146
pub dxpl_size: size_t,
145-
pub dxpl_copy: Option<extern "C" fn(dxpl: *const c_void) -> *mut c_void>,
146-
pub dxpl_free: Option<extern "C" fn(dxpl: *mut c_void) -> herr_t>,
147+
pub dxpl_copy: Option<unsafe extern "C" fn(dxpl: *const c_void) -> *mut c_void>,
148+
pub dxpl_free: Option<unsafe extern "C" fn(dxpl: *mut c_void) -> herr_t>,
147149
pub open: Option<
148-
extern "C" fn(
150+
unsafe extern "C" fn(
149151
name: *const c_char,
150152
flags: c_uint,
151153
fapl: hid_t,
152154
maxaddr: haddr_t,
153155
) -> *mut H5FD_t,
154156
>,
155-
pub close: Option<extern "C" fn(file: *mut H5FD_t) -> herr_t>,
156-
pub cmp: Option<extern "C" fn(f1: *const H5FD_t, f2: *const H5FD_t) -> c_int>,
157-
pub query: Option<extern "C" fn(f1: *const H5FD_t, flags: *mut c_ulong) -> herr_t>,
157+
pub close: Option<unsafe extern "C" fn(file: *mut H5FD_t) -> herr_t>,
158+
pub cmp: Option<unsafe extern "C" fn(f1: *const H5FD_t, f2: *const H5FD_t) -> c_int>,
159+
pub query: Option<unsafe extern "C" fn(f1: *const H5FD_t, flags: *mut c_ulong) -> herr_t>,
158160
pub get_type_map:
159-
Option<extern "C" fn(file: *const H5FD_t, type_map: *mut H5FD_mem_t) -> herr_t>,
161+
Option<unsafe extern "C" fn(file: *const H5FD_t, type_map: *mut H5FD_mem_t) -> herr_t>,
160162
pub alloc: Option<
161163
extern "C" fn(
162164
file: *mut H5FD_t,
@@ -174,10 +176,10 @@ pub struct H5FD_class_t {
174176
size: hsize_t,
175177
) -> herr_t,
176178
>,
177-
pub get_eoa: Option<extern "C" fn(file: *const H5FD_t, type_: H5FD_mem_t) -> haddr_t>,
179+
pub get_eoa: Option<unsafe extern "C" fn(file: *const H5FD_t, type_: H5FD_mem_t) -> haddr_t>,
178180
pub set_eoa:
179-
Option<extern "C" fn(file: *mut H5FD_t, type_: H5FD_mem_t, addr: haddr_t) -> herr_t>,
180-
pub get_eof: Option<extern "C" fn(file: *const H5FD_t) -> haddr_t>,
181+
Option<unsafe extern "C" fn(file: *mut H5FD_t, type_: H5FD_mem_t, addr: haddr_t) -> herr_t>,
182+
pub get_eof: Option<unsafe extern "C" fn(file: *const H5FD_t) -> haddr_t>,
181183
pub get_handle: Option<
182184
extern "C" fn(file: *mut H5FD_t, fapl: hid_t, file_handle: *mut *mut c_void) -> herr_t,
183185
>,
@@ -201,9 +203,10 @@ pub struct H5FD_class_t {
201203
buffer: *const c_void,
202204
) -> herr_t,
203205
>,
204-
pub flush: Option<extern "C" fn(file: *mut H5FD_t, dxpl_id: hid_t, closing: c_uint) -> herr_t>,
206+
pub flush:
207+
Option<unsafe extern "C" fn(file: *mut H5FD_t, dxpl_id: hid_t, closing: c_uint) -> herr_t>,
205208
pub truncate:
206-
Option<extern "C" fn(file: *mut H5FD_t, dxpl_id: hid_t, closing: hbool_t) -> herr_t>,
209+
Option<unsafe extern "C" fn(file: *mut H5FD_t, dxpl_id: hid_t, closing: hbool_t) -> herr_t>,
207210
pub lock: Option<
208211
extern "C" fn(
209212
file: *mut H5FD_t,
@@ -213,9 +216,9 @@ pub struct H5FD_class_t {
213216
) -> herr_t,
214217
>,
215218
pub unlock:
216-
Option<extern "C" fn(file: *mut H5FD_t, oid: *mut c_uchar, last: hbool_t) -> herr_t>,
219+
Option<unsafe extern "C" fn(file: *mut H5FD_t, oid: *mut c_uchar, last: hbool_t) -> herr_t>,
217220
#[cfg(feature = "1.14.0")]
218-
pub del: Option<extern "C" fn(name: *const c_char, fapl: hid_t) -> herr_t>,
221+
pub del: Option<unsafe extern "C" fn(name: *const c_char, fapl: hid_t) -> herr_t>,
219222
#[cfg(feature = "1.14.0")]
220223
pub ctl: Option<
221224
extern "C" fn(
@@ -316,8 +319,8 @@ pub struct H5FD_file_image_callbacks_t {
316319
udata: *mut c_void,
317320
) -> herr_t,
318321
>,
319-
pub udata_copy: Option<extern "C" fn(udata: *mut c_void) -> *mut c_void>,
320-
pub udata_free: Option<extern "C" fn(udata: *mut c_void) -> herr_t>,
322+
pub udata_copy: Option<unsafe extern "C" fn(udata: *mut c_void) -> *mut c_void>,
323+
pub udata_free: Option<unsafe extern "C" fn(udata: *mut c_void) -> herr_t>,
321324
pub udata: *mut c_void,
322325
}
323326

hdf5-sys/src/h5i.rs

+9-7
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,14 @@ pub type hid_t = c_int;
4343
pub const H5I_INVALID_HID: hid_t = -1;
4444

4545
#[cfg(not(feature = "1.14.0"))]
46-
pub type H5I_free_t = Option<extern "C" fn(arg1: *mut c_void) -> herr_t>;
46+
pub type H5I_free_t = Option<unsafe extern "C" fn(arg1: *mut c_void) -> herr_t>;
4747
#[cfg(feature = "1.14.0")]
48-
pub type H5I_free_t = Option<extern "C" fn(*mut c_void, *mut *mut c_void) -> herr_t>;
48+
pub type H5I_free_t = Option<unsafe extern "C" fn(*mut c_void, *mut *mut c_void) -> herr_t>;
4949

5050
pub type H5I_search_func_t =
51-
Option<extern "C" fn(obj: *mut c_void, id: hid_t, key: *mut c_void) -> c_int>;
51+
Option<unsafe extern "C" fn(obj: *mut c_void, id: hid_t, key: *mut c_void) -> c_int>;
5252
#[cfg(feature = "1.12.0")]
53-
pub type H5I_iterate_func_t = Option<extern "C" fn(id: hid_t, udata: *mut c_void) -> herr_t>;
53+
pub type H5I_iterate_func_t = Option<unsafe extern "C" fn(id: hid_t, udata: *mut c_void) -> herr_t>;
5454

5555
extern "C" {
5656
pub fn H5Iregister(type_: H5I_type_t, object: *const c_void) -> hid_t;
@@ -79,11 +79,13 @@ extern "C" {
7979
}
8080

8181
#[cfg(feature = "1.14.0")]
82-
pub type H5I_future_realize_func_t =
83-
Option<extern "C" fn(future_object: *mut c_void, actual_object_id: *mut hid_t) -> herr_t>;
82+
pub type H5I_future_realize_func_t = Option<
83+
unsafe extern "C" fn(future_object: *mut c_void, actual_object_id: *mut hid_t) -> herr_t,
84+
>;
8485

8586
#[cfg(feature = "1.14.0")]
86-
pub type H5I_future_discard_func_t = Option<extern "C" fn(future_object: *mut c_void) -> herr_t>;
87+
pub type H5I_future_discard_func_t =
88+
Option<unsafe extern "C" fn(future_object: *mut c_void) -> herr_t>;
8789

8890
#[cfg(feature = "1.14.0")]
8991
extern "C" {

hdf5-sys/src/h5l.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ impl Default for H5L_class_t {
169169
}
170170

171171
pub type H5L_iterate1_t = Option<
172-
extern "C" fn(
172+
unsafe extern "C" fn(
173173
group: hid_t,
174174
name: *const c_char,
175175
info: *const H5L_info1_t,
@@ -178,7 +178,7 @@ pub type H5L_iterate1_t = Option<
178178
>;
179179
#[cfg(feature = "1.12.0")]
180180
pub type H5L_iterate2_t = Option<
181-
extern "C" fn(
181+
unsafe extern "C" fn(
182182
group: hid_t,
183183
name: *const c_char,
184184
info: *const H5L_info2_t,

hdf5-sys/src/h5mm.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
use crate::internal_prelude::*;
33

44
pub type H5MM_allocate_t =
5-
Option<extern "C" fn(size: size_t, alloc_info: *mut c_void) -> *mut c_void>;
6-
pub type H5MM_free_t = Option<extern "C" fn(mem: *mut c_void, free_info: *mut c_void)>;
5+
Option<unsafe extern "C" fn(size: size_t, alloc_info: *mut c_void) -> *mut c_void>;
6+
pub type H5MM_free_t = Option<unsafe extern "C" fn(mem: *mut c_void, free_info: *mut c_void)>;

hdf5-sys/src/h5o.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ pub enum H5O_mcdt_search_ret_t {
204204

205205
#[cfg(feature = "1.8.9")]
206206
pub type H5O_mcdt_search_cb_t =
207-
Option<extern "C" fn(op_data: *mut c_void) -> H5O_mcdt_search_ret_t>;
207+
Option<unsafe extern "C" fn(op_data: *mut c_void) -> H5O_mcdt_search_ret_t>;
208208

209209
#[cfg(not(feature = "1.10.3"))]
210210
extern "C" {

hdf5-sys/src/h5p.rs

+10-8
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,14 @@ pub const H5P_CRT_ORDER_INDEXED: c_uint = 0x0002;
2626
pub const H5P_DEFAULT: hid_t = 0;
2727

2828
pub type H5P_cls_create_func_t =
29-
Option<extern "C" fn(prop_id: hid_t, create_data: *mut c_void) -> herr_t>;
30-
pub type H5P_cls_copy_func_t =
31-
Option<extern "C" fn(new_prop_id: hid_t, old_prop_id: hid_t, copy_data: *mut c_void) -> herr_t>;
29+
Option<unsafe extern "C" fn(prop_id: hid_t, create_data: *mut c_void) -> herr_t>;
30+
pub type H5P_cls_copy_func_t = Option<
31+
unsafe extern "C" fn(new_prop_id: hid_t, old_prop_id: hid_t, copy_data: *mut c_void) -> herr_t,
32+
>;
3233
pub type H5P_cls_close_func_t =
33-
Option<extern "C" fn(prop_id: hid_t, close_data: *mut c_void) -> herr_t>;
34+
Option<unsafe extern "C" fn(prop_id: hid_t, close_data: *mut c_void) -> herr_t>;
3435
pub type H5P_prp_cb1_t =
35-
Option<extern "C" fn(name: *const c_char, size: size_t, value: *mut c_void) -> herr_t>;
36+
Option<unsafe extern "C" fn(name: *const c_char, size: size_t, value: *mut c_void) -> herr_t>;
3637
pub type H5P_prp_cb2_t = Option<
3738
extern "C" fn(prop_id: hid_t, name: *const c_char, size: size_t, value: *mut c_void) -> herr_t,
3839
>;
@@ -41,11 +42,12 @@ pub type H5P_prp_set_func_t = H5P_prp_cb2_t;
4142
pub type H5P_prp_get_func_t = H5P_prp_cb2_t;
4243
pub type H5P_prp_delete_func_t = H5P_prp_cb2_t;
4344
pub type H5P_prp_copy_func_t = H5P_prp_cb1_t;
44-
pub type H5P_prp_compare_func_t =
45-
Option<extern "C" fn(value1: *const c_void, value2: *const c_void, size: size_t) -> c_int>;
45+
pub type H5P_prp_compare_func_t = Option<
46+
unsafe extern "C" fn(value1: *const c_void, value2: *const c_void, size: size_t) -> c_int,
47+
>;
4648
pub type H5P_prp_close_func_t = H5P_prp_cb1_t;
4749
pub type H5P_iterate_t =
48-
Option<extern "C" fn(id: hid_t, name: *const c_char, iter_data: *mut c_void) -> herr_t>;
50+
Option<unsafe extern "C" fn(id: hid_t, name: *const c_char, iter_data: *mut c_void) -> herr_t>;
4951

5052
pub use self::globals::*;
5153

hdf5-sys/src/h5vl.rs

+22-17
Original file line numberDiff line numberDiff line change
@@ -131,34 +131,36 @@ mod v1_14_0 {
131131
#[derive(Debug, Copy, Clone)]
132132
pub struct H5VL_info_class_t {
133133
pub size: size_t,
134-
pub copy: Option<extern "C" fn(info: *const c_void) -> *mut c_void>,
134+
pub copy: Option<unsafe extern "C" fn(info: *const c_void) -> *mut c_void>,
135135
pub cmp: Option<
136136
extern "C" fn(
137137
cmp_value: *mut c_int,
138138
info1: *const c_void,
139139
info2: *const c_void,
140140
) -> herr_t,
141141
>,
142-
pub free: Option<extern "C" fn(info: *mut c_void) -> herr_t>,
143-
pub to_str: Option<extern "C" fn(info: *const c_void, str: *mut *mut c_char) -> herr_t>,
144-
pub from_str: Option<extern "C" fn(str: *const c_char, info: *mut *mut c_void) -> herr_t>,
142+
pub free: Option<unsafe extern "C" fn(info: *mut c_void) -> herr_t>,
143+
pub to_str:
144+
Option<unsafe extern "C" fn(info: *const c_void, str: *mut *mut c_char) -> herr_t>,
145+
pub from_str:
146+
Option<unsafe extern "C" fn(str: *const c_char, info: *mut *mut c_void) -> herr_t>,
145147
}
146148

147149
#[repr(C)]
148150
#[derive(Debug, Copy, Clone)]
149151
pub struct H5VL_wrap_class_t {
150-
pub get_object: Option<extern "C" fn(obj: *const c_void) -> *mut c_void>,
152+
pub get_object: Option<unsafe extern "C" fn(obj: *const c_void) -> *mut c_void>,
151153
pub get_wrap_ctx:
152-
Option<extern "C" fn(obj: *const c_void, wrap_ctx: *mut *mut c_void) -> herr_t>,
154+
Option<unsafe extern "C" fn(obj: *const c_void, wrap_ctx: *mut *mut c_void) -> herr_t>,
153155
pub wrap_object: Option<
154156
extern "C" fn(
155157
obj: *mut c_void,
156158
obj_type: H5I_type_t,
157159
wrap_ctx: *mut c_void,
158160
) -> *mut c_void,
159161
>,
160-
pub unwrap_object: Option<extern "C" fn(obj: *mut c_void) -> *mut c_void>,
161-
pub free_wrap_ctx: Option<extern "C" fn(wrap_ctx: *mut c_void) -> herr_t>,
162+
pub unwrap_object: Option<unsafe extern "C" fn(obj: *mut c_void) -> *mut c_void>,
163+
pub free_wrap_ctx: Option<unsafe extern "C" fn(wrap_ctx: *mut c_void) -> herr_t>,
162164
}
163165

164166
#[repr(C)]
@@ -762,8 +764,9 @@ mod v1_14_0 {
762764
req: *mut *mut c_void,
763765
) -> herr_t,
764766
>,
765-
pub close:
766-
Option<extern "C" fn(dt: *mut c_void, dxpl_id: hid_t, req: *mut *mut c_void) -> herr_t>,
767+
pub close: Option<
768+
unsafe extern "C" fn(dt: *mut c_void, dxpl_id: hid_t, req: *mut *mut c_void) -> herr_t,
769+
>,
767770
}
768771

769772
#[repr(C)]
@@ -1602,7 +1605,7 @@ mod v1_14_0 {
16021605
) -> herr_t,
16031606
>,
16041607
pub get_cap_flags:
1605-
Option<extern "C" fn(info: *const c_void, cap_flags: *mut c_uint) -> herr_t>,
1608+
Option<unsafe extern "C" fn(info: *const c_void, cap_flags: *mut c_uint) -> herr_t>,
16061609
pub opt_query: Option<
16071610
extern "C" fn(
16081611
obj: *mut c_void,
@@ -1668,7 +1671,7 @@ mod v1_14_0 {
16681671
);
16691672

16701673
pub type H5VL_request_notify_t =
1671-
Option<extern "C" fn(ctx: *mut c_void, status: H5VL_request_status_t) -> herr_t>;
1674+
Option<unsafe extern "C" fn(ctx: *mut c_void, status: H5VL_request_status_t) -> herr_t>;
16721675

16731676
#[repr(C)]
16741677
#[derive(Debug, Copy, Clone)]
@@ -1683,14 +1686,16 @@ mod v1_14_0 {
16831686
pub notify: Option<
16841687
extern "C" fn(req: *mut c_void, cb: H5VL_request_notify_t, ctx: *mut c_void) -> herr_t,
16851688
>,
1686-
pub cancel:
1687-
Option<extern "C" fn(req: *mut c_void, status: *mut H5VL_request_status_t) -> herr_t>,
1689+
pub cancel: Option<
1690+
unsafe extern "C" fn(req: *mut c_void, status: *mut H5VL_request_status_t) -> herr_t,
1691+
>,
16881692
pub specific: Option<
16891693
extern "C" fn(req: *mut c_void, args: *mut H5VL_request_specific_args_t) -> herr_t,
16901694
>,
1691-
pub optional:
1692-
Option<extern "C" fn(req: *mut c_void, args: *mut H5VL_optional_args_t) -> herr_t>,
1693-
pub free: Option<extern "C" fn(req: *mut c_void) -> herr_t>,
1695+
pub optional: Option<
1696+
unsafe extern "C" fn(req: *mut c_void, args: *mut H5VL_optional_args_t) -> herr_t,
1697+
>,
1698+
pub free: Option<unsafe extern "C" fn(req: *mut c_void) -> herr_t>,
16941699
}
16951700

16961701
#[repr(C)]

hdf5-sys/src/h5z.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ pub type H5Z_can_apply_func_t =
114114
pub type H5Z_set_local_func_t =
115115
Option<extern "C" fn(dcpl_id: hid_t, type_id: hid_t, space_id: hid_t) -> herr_t>;
116116
pub type H5Z_func_t = Option<
117-
extern "C" fn(
117+
unsafe extern "C" fn(
118118
flags: c_uint,
119119
cd_nelmts: size_t,
120120
cd_values: *const c_uint,

0 commit comments

Comments
 (0)