Skip to content

Commit 00854b2

Browse files
committed
Merge branch 'bugfix/fix_sscanf_usage' into 'master'
fix(nimble): Updated sscanf usage in examples to work for all versions Closes BLERP-1693 See merge request espressif/esp-idf!38020
2 parents 7005b10 + 963a50c commit 00854b2

File tree

8 files changed

+184
-48
lines changed
  • examples/bluetooth/nimble
    • ble_cts/cts_cent/main
    • ble_enc_adv_data/enc_adv_data_cent/main
    • ble_htp/htp_cent/main
    • ble_l2cap_coc/coc_blecent/main
    • ble_phy/phy_cent/main
    • ble_proximity_sensor/proximity_sensor_cent/main
    • blecent/main
    • throughput_app/blecent_throughput/main

8 files changed

+184
-48
lines changed

examples/bluetooth/nimble/ble_cts/cts_cent/main/main.c

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
static const char *tag = "NimBLE_CTS_CENT";
2020
static int ble_cts_cent_gap_event(struct ble_gap_event *event, void *arg);
21-
static uint8_t peer_addr[6];
2221

2322
static char *day_of_week[7] = {
2423
"Unknown"
@@ -193,18 +192,29 @@ ext_ble_cts_cent_should_connect(const struct ble_gap_ext_disc_desc *disc)
193192
{
194193
int offset = 0;
195194
int ad_struct_len = 0;
195+
uint8_t test_addr[6];
196+
uint32_t peer_addr[6];
197+
198+
memset(peer_addr, 0x0, sizeof peer_addr);
196199

197200
if (disc->legacy_event_type != BLE_HCI_ADV_RPT_EVTYPE_ADV_IND &&
198201
disc->legacy_event_type != BLE_HCI_ADV_RPT_EVTYPE_DIR_IND) {
199202
return 0;
200203
}
201204
if (strlen(CONFIG_EXAMPLE_PEER_ADDR) && (strncmp(CONFIG_EXAMPLE_PEER_ADDR, "ADDR_ANY", strlen("ADDR_ANY")) != 0)) {
202205
ESP_LOGI(tag, "Peer address from menuconfig: %s", CONFIG_EXAMPLE_PEER_ADDR);
203-
/* Convert string to address */
204-
sscanf(CONFIG_EXAMPLE_PEER_ADDR, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx",
206+
207+
/* Convert string to address */
208+
sscanf(CONFIG_EXAMPLE_PEER_ADDR, "%lx:%lx:%lx:%lx:%lx:%lx",
205209
&peer_addr[5], &peer_addr[4], &peer_addr[3],
206210
&peer_addr[2], &peer_addr[1], &peer_addr[0]);
207-
if (memcmp(peer_addr, disc->addr.val, sizeof(disc->addr.val)) != 0) {
211+
212+
/* Conversion */
213+
for(int i=0; i<6; i++) {
214+
test_addr[i] = (uint8_t )peer_addr[i];
215+
}
216+
217+
if (memcmp(test_addr, disc->addr.val, sizeof(disc->addr.val)) != 0) {
208218
return 0;
209219
}
210220
}
@@ -243,6 +253,10 @@ ble_cts_cent_should_connect(const struct ble_gap_disc_desc *disc)
243253
struct ble_hs_adv_fields fields;
244254
int rc;
245255
int i;
256+
uint8_t test_addr[6];
257+
uint32_t peer_addr[6];
258+
259+
memset(peer_addr, 0x0, sizeof peer_addr);
246260

247261
/* The device has to be advertising connectability. */
248262
if (disc->event_type != BLE_HCI_ADV_RPT_EVTYPE_ADV_IND &&
@@ -259,10 +273,16 @@ ble_cts_cent_should_connect(const struct ble_gap_disc_desc *disc)
259273
if (strlen(CONFIG_EXAMPLE_PEER_ADDR) && (strncmp(CONFIG_EXAMPLE_PEER_ADDR, "ADDR_ANY", strlen("ADDR_ANY")) != 0)) {
260274
ESP_LOGI(tag, "Peer address from menuconfig: %s", CONFIG_EXAMPLE_PEER_ADDR);
261275
/* Convert string to address */
262-
sscanf(CONFIG_EXAMPLE_PEER_ADDR, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx",
276+
sscanf(CONFIG_EXAMPLE_PEER_ADDR, "%lx:%lx:%lx:%lx:%lx:%lx",
263277
&peer_addr[5], &peer_addr[4], &peer_addr[3],
264278
&peer_addr[2], &peer_addr[1], &peer_addr[0]);
265-
if (memcmp(peer_addr, disc->addr.val, sizeof(disc->addr.val)) != 0) {
279+
280+
/* Conversion */
281+
for (int i=0; i<6; i++) {
282+
test_addr[i] = (uint8_t )peer_addr[i];
283+
}
284+
285+
if (memcmp(test_addr, disc->addr.val, sizeof(disc->addr.val)) != 0) {
266286
return 0;
267287
}
268288
}

examples/bluetooth/nimble/ble_enc_adv_data/enc_adv_data_cent/main/main.c

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ static struct km_peer kmp[CONFIG_BT_NIMBLE_MAX_CONNECTIONS + 1] = {0};
2222

2323
static const char *tag = "ENC_ADV_DATA_CENT";
2424
static int enc_adv_data_cent_gap_event(struct ble_gap_event *event, void *arg);
25-
static uint8_t peer_addr[6];
2625
static int mtu_def = 512;
2726

2827
void ble_store_config_init(void);
@@ -287,6 +286,10 @@ enc_adv_data_cent_should_connect(const struct ble_gap_disc_desc *disc)
287286
struct ble_hs_adv_fields fields;
288287
int rc;
289288
int i;
289+
uint8_t test_addr[6];
290+
uint32_t peer_addr[6];
291+
292+
memset(peer_addr, 0x0, sizeof peer_addr);
290293

291294
if (disc->event_type != BLE_HCI_ADV_RPT_EVTYPE_ADV_IND &&
292295
disc->event_type != BLE_HCI_ADV_RPT_EVTYPE_DIR_IND) {
@@ -301,10 +304,16 @@ enc_adv_data_cent_should_connect(const struct ble_gap_disc_desc *disc)
301304
if (strlen(CONFIG_EXAMPLE_PEER_ADDR) && (strncmp(CONFIG_EXAMPLE_PEER_ADDR, "ADDR_ANY", strlen ("ADDR_ANY")) != 0)) {
302305
MODLOG_DFLT(INFO, "Peer address from menuconfig: %s", CONFIG_EXAMPLE_PEER_ADDR);
303306
/* Convert string to address */
304-
sscanf(CONFIG_EXAMPLE_PEER_ADDR, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx",
307+
sscanf(CONFIG_EXAMPLE_PEER_ADDR, "%lx:%lx:%lx:%lx:%lx:%lx",
305308
&peer_addr[5], &peer_addr[4], &peer_addr[3],
306309
&peer_addr[2], &peer_addr[1], &peer_addr[0]);
307-
if (memcmp(peer_addr, disc->addr.val, sizeof(disc->addr.val)) != 0) {
310+
311+
/* Conversion */
312+
for (int i=0; i<6; i++) {
313+
test_addr[i] = (uint8_t )peer_addr[i];
314+
}
315+
316+
if (memcmp(test_addr, disc->addr.val, sizeof(disc->addr.val)) != 0) {
308317
return 0;
309318
}
310319
}

examples/bluetooth/nimble/ble_htp/htp_cent/main/main.c

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
static const char *tag = "NimBLE_HTP_CENT";
1919
static int ble_htp_cent_gap_event(struct ble_gap_event *event, void *arg);
20-
static uint8_t peer_addr[6];
2120

2221
void ble_store_config_init(void);
2322
static void ble_htp_cent_scan(void);
@@ -311,6 +310,10 @@ ext_ble_htp_cent_should_connect(const struct ble_gap_ext_disc_desc *disc)
311310
{
312311
int offset = 0;
313312
int ad_struct_len = 0;
313+
uint8_t test_addr[6];
314+
uint32_t peer_addr[6];
315+
316+
memset(peer_addr, 0x0, sizeof peer_addr);
314317

315318
if (disc->legacy_event_type != BLE_HCI_ADV_RPT_EVTYPE_ADV_IND &&
316319
disc->legacy_event_type != BLE_HCI_ADV_RPT_EVTYPE_DIR_IND) {
@@ -319,10 +322,16 @@ ext_ble_htp_cent_should_connect(const struct ble_gap_ext_disc_desc *disc)
319322
if (strlen(CONFIG_EXAMPLE_PEER_ADDR) && (strncmp(CONFIG_EXAMPLE_PEER_ADDR, "ADDR_ANY", strlen ("ADDR_ANY")) != 0)) {
320323
ESP_LOGI(tag, "Peer address from menuconfig: %s", CONFIG_EXAMPLE_PEER_ADDR);
321324
/* Convert string to address */
322-
sscanf(CONFIG_EXAMPLE_PEER_ADDR, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx",
325+
sscanf(CONFIG_EXAMPLE_PEER_ADDR, "%lx:%lx:%lx:%lx:%lx:%lx",
323326
&peer_addr[5], &peer_addr[4], &peer_addr[3],
324327
&peer_addr[2], &peer_addr[1], &peer_addr[0]);
325-
if (memcmp(peer_addr, disc->addr.val, sizeof(disc->addr.val)) != 0) {
328+
329+
/* Conversion */
330+
for (int i=0; i<6; i++) {
331+
test_addr[i] = (uint8_t )peer_addr[i];
332+
}
333+
334+
if (memcmp(test_addr, disc->addr.val, sizeof(disc->addr.val)) != 0) {
326335
return 0;
327336
}
328337
}
@@ -358,6 +367,10 @@ ble_htp_cent_should_connect(const struct ble_gap_disc_desc *disc)
358367
struct ble_hs_adv_fields fields;
359368
int rc;
360369
int i;
370+
uint8_t test_addr[6];
371+
uint32_t peer_addr[6];
372+
373+
memset(peer_addr, 0x0, sizeof peer_addr);
361374

362375
/* The device has to be advertising connectability. */
363376
if (disc->event_type != BLE_HCI_ADV_RPT_EVTYPE_ADV_IND &&
@@ -374,10 +387,16 @@ ble_htp_cent_should_connect(const struct ble_gap_disc_desc *disc)
374387
if (strlen(CONFIG_EXAMPLE_PEER_ADDR) && (strncmp(CONFIG_EXAMPLE_PEER_ADDR, "ADDR_ANY", strlen("ADDR_ANY")) != 0)) {
375388
ESP_LOGI(tag, "Peer address from menuconfig: %s", CONFIG_EXAMPLE_PEER_ADDR);
376389
/* Convert string to address */
377-
sscanf(CONFIG_EXAMPLE_PEER_ADDR, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx",
390+
sscanf(CONFIG_EXAMPLE_PEER_ADDR, "%lx:%lx:%lx:%lx:%lx:%lx",
378391
&peer_addr[5], &peer_addr[4], &peer_addr[3],
379392
&peer_addr[2], &peer_addr[1], &peer_addr[0]);
380-
if (memcmp(peer_addr, disc->addr.val, sizeof(disc->addr.val)) != 0) {
393+
394+
/* Conversion */
395+
for (int i=0; i<6; i++) {
396+
test_addr[i] = (uint8_t )peer_addr[i];
397+
}
398+
399+
if (memcmp(test_addr, disc->addr.val, sizeof(disc->addr.val)) != 0) {
381400
return 0;
382401
}
383402
}

examples/bluetooth/nimble/ble_l2cap_coc/coc_blecent/main/main.c

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
static const char *tag = "NimBLE_BLE_CENT_L2CAP_COC";
1919
static int blecent_gap_event(struct ble_gap_event *event, void *arg);
20-
static uint8_t peer_addr[6];
2120

2221
void ble_store_config_init(void);
2322

@@ -237,6 +236,10 @@ ext_blecent_should_connect(const struct ble_gap_ext_disc_desc *disc)
237236
{
238237
int offset = 0;
239238
int ad_struct_len = 0;
239+
uint8_t test_addr[6];
240+
uint32_t peer_addr[6];
241+
242+
memset(peer_addr, 0x0, sizeof peer_addr);
240243

241244
if (disc->legacy_event_type != BLE_HCI_ADV_RPT_EVTYPE_ADV_IND &&
242245
disc->legacy_event_type != BLE_HCI_ADV_RPT_EVTYPE_DIR_IND) {
@@ -246,10 +249,16 @@ ext_blecent_should_connect(const struct ble_gap_ext_disc_desc *disc)
246249
(strncmp(CONFIG_EXAMPLE_PEER_ADDR, "ADDR_ANY", strlen("ADDR_ANY")) != 0)) {
247250
ESP_LOGI(tag, "Peer address from menuconfig: %s", CONFIG_EXAMPLE_PEER_ADDR);
248251
/* Convert string to address */
249-
sscanf(CONFIG_EXAMPLE_PEER_ADDR, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx",
252+
sscanf(CONFIG_EXAMPLE_PEER_ADDR, "%lx:%lx:%lx:%lx:%lx:%lx",
250253
&peer_addr[5], &peer_addr[4], &peer_addr[3],
251254
&peer_addr[2], &peer_addr[1], &peer_addr[0]);
252-
if (memcmp(peer_addr, disc->addr.val, sizeof(disc->addr.val)) != 0) {
255+
256+
/* Conversion */
257+
for (int i=0; i<6; i++) {
258+
test_addr[i] = (uint8_t )peer_addr[i];
259+
}
260+
261+
if (memcmp(test_addr, disc->addr.val, sizeof(disc->addr.val)) != 0) {
253262
return 0;
254263
}
255264
}
@@ -281,6 +290,10 @@ blecent_should_connect(const struct ble_gap_disc_desc *disc)
281290
struct ble_hs_adv_fields fields;
282291
int rc;
283292
int i;
293+
uint8_t test_addr[6];
294+
uint32_t peer_addr[6];
295+
296+
memset(peer_addr, 0x0, sizeof peer_addr);
284297

285298
/* The device has to be advertising connectability. */
286299
if (disc->event_type != BLE_HCI_ADV_RPT_EVTYPE_ADV_IND &&
@@ -298,10 +311,16 @@ blecent_should_connect(const struct ble_gap_disc_desc *disc)
298311
(strncmp(CONFIG_EXAMPLE_PEER_ADDR, "ADDR_ANY", strlen("ADDR_ANY")) != 0)) {
299312
MODLOG_DFLT(INFO, "Peer address from menuconfig:%s", CONFIG_EXAMPLE_PEER_ADDR);
300313
/* Convert string to address */
301-
sscanf(CONFIG_EXAMPLE_PEER_ADDR, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx",
314+
sscanf(CONFIG_EXAMPLE_PEER_ADDR, "%lx:%lx:%lx:%lx:%lx:%lx",
302315
&peer_addr[5], &peer_addr[4], &peer_addr[3],
303316
&peer_addr[2], &peer_addr[1], &peer_addr[0]);
304-
if (memcmp(peer_addr, disc->addr.val, sizeof(disc->addr.val)) != 0) {
317+
318+
/* Conversion */
319+
for (int i=0; i<6; i++) {
320+
test_addr[i] = (uint8_t )peer_addr[i];
321+
}
322+
323+
if (memcmp(test_addr, disc->addr.val, sizeof(disc->addr.val)) != 0) {
305324
return 0;
306325
}
307326
}

examples/bluetooth/nimble/ble_phy/phy_cent/main/main.c

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
static const char *tag = "NimBLE_BLE_PHY_CENT";
1919
static int blecent_gap_event(struct ble_gap_event *event, void *arg);
20-
static uint8_t peer_addr[6];
2120
static ble_addr_t conn_addr;
2221

2322
static void blecent_scan(void);
@@ -233,6 +232,10 @@ ext_blecent_should_connect(const struct ble_gap_ext_disc_desc *disc)
233232
{
234233
int offset = 0;
235234
int ad_struct_len = 0;
235+
uint8_t test_addr[6];
236+
uint32_t peer_addr[6];
237+
238+
memset(peer_addr, 0x0, sizeof peer_addr);
236239

237240
if (disc->legacy_event_type != BLE_HCI_ADV_RPT_EVTYPE_ADV_IND &&
238241
disc->legacy_event_type != BLE_HCI_ADV_RPT_EVTYPE_DIR_IND) {
@@ -241,10 +244,16 @@ ext_blecent_should_connect(const struct ble_gap_ext_disc_desc *disc)
241244
if (strlen(CONFIG_EXAMPLE_PEER_ADDR) && (strncmp(CONFIG_EXAMPLE_PEER_ADDR, "ADDR_ANY", strlen("ADDR_ANY")) != 0)) {
242245
ESP_LOGI(tag, "Peer address from menuconfig: %s", CONFIG_EXAMPLE_PEER_ADDR);
243246
/* Convert string to address */
244-
sscanf(CONFIG_EXAMPLE_PEER_ADDR, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx",
247+
sscanf(CONFIG_EXAMPLE_PEER_ADDR, "%lx:%lx:%lx:%lx:%lx:%lx",
245248
&peer_addr[5], &peer_addr[4], &peer_addr[3],
246249
&peer_addr[2], &peer_addr[1], &peer_addr[0]);
247-
if (memcmp(peer_addr, disc->addr.val, sizeof(disc->addr.val)) != 0) {
250+
251+
/* Conversion */
252+
for (int i=0; i<6; i++) {
253+
test_addr[i] = (uint8_t )peer_addr[i];
254+
}
255+
256+
if (memcmp(test_addr, disc->addr.val, sizeof(disc->addr.val)) != 0) {
248257
return 0;
249258
}
250259
}
@@ -462,6 +471,10 @@ blecent_on_sync(void)
462471
{
463472
int ii, rc;
464473
uint8_t all_phy;
474+
uint8_t test_addr[6];
475+
uint32_t peer_addr[6];
476+
477+
memset(peer_addr, 0x0, sizeof peer_addr);
465478

466479
/* Make sure we have proper identity address set (public preferred) */
467480
rc = ble_hs_util_ensure_addr(0);
@@ -478,12 +491,17 @@ blecent_on_sync(void)
478491
if (strlen(CONFIG_EXAMPLE_PEER_ADDR) &&
479492
(strncmp(CONFIG_EXAMPLE_PEER_ADDR, "ADDR_ANY", strlen("ADDR_ANY")) != 0)) {
480493
/* User wants to connect on 2M or coded phy directly */
481-
sscanf(CONFIG_EXAMPLE_PEER_ADDR, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx",
494+
sscanf(CONFIG_EXAMPLE_PEER_ADDR, "%lx:%lx:%lx:%lx:%lx:%lx",
482495
&peer_addr[5], &peer_addr[4], &peer_addr[3],
483496
&peer_addr[2], &peer_addr[1], &peer_addr[0]);
484497

498+
/* Conversion */
499+
for (int i=0; i<6; i++) {
500+
test_addr[i] = (uint8_t )peer_addr[i];
501+
}
502+
485503
for(ii = 0 ;ii < 6; ii++)
486-
conn_addr.val[ii] = peer_addr[ii];
504+
conn_addr.val[ii] = test_addr[ii];
487505

488506
conn_addr.type = 0;
489507

examples/bluetooth/nimble/ble_proximity_sensor/proximity_sensor_cent/main/main.c

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
#include "ble_prox_cent.h"
1717

1818
static const char *tag = "NimBLE_PROX_CENT";
19-
static uint8_t peer_addr[6];
2019
static uint8_t link_supervision_timeout;
2120
static int8_t tx_pwr_lvl;
2221
static struct ble_prox_cent_conn_peer conn_peer[MYNEWT_VAL(BLE_MAX_CONNECTIONS) + 1];
@@ -228,6 +227,10 @@ ext_ble_prox_cent_should_connect(const struct ble_gap_ext_disc_desc *disc)
228227
{
229228
int offset = 0;
230229
int ad_struct_len = 0;
230+
uint8_t test_addr[6];
231+
uint32_t peer_addr[6];
232+
233+
memset(peer_addr, 0x0, sizeof peer_addr);
231234

232235
if (disc->legacy_event_type != BLE_HCI_ADV_RPT_EVTYPE_ADV_IND &&
233236
disc->legacy_event_type != BLE_HCI_ADV_RPT_EVTYPE_DIR_IND) {
@@ -236,10 +239,16 @@ ext_ble_prox_cent_should_connect(const struct ble_gap_ext_disc_desc *disc)
236239
if (strlen(CONFIG_EXAMPLE_PEER_ADDR) && (strncmp(CONFIG_EXAMPLE_PEER_ADDR, "ADDR_ANY", strlen ("ADDR_ANY")) != 0)) {
237240
ESP_LOGI(tag, "Peer address from menuconfig: %s", CONFIG_EXAMPLE_PEER_ADDR);
238241
/* Convert string to address */
239-
sscanf(CONFIG_EXAMPLE_PEER_ADDR, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx",
242+
sscanf(CONFIG_EXAMPLE_PEER_ADDR, "%lx:%lx:%lx:%lx:%lx:%lx",
240243
&peer_addr[5], &peer_addr[4], &peer_addr[3],
241244
&peer_addr[2], &peer_addr[1], &peer_addr[0]);
242-
if (memcmp(peer_addr, disc->addr.val, sizeof(disc->addr.val)) != 0) {
245+
246+
/* Conversion */
247+
for (int i=0; i<6; i++) {
248+
test_addr[i] = (uint8_t )peer_addr[i];
249+
}
250+
251+
if (memcmp(test_addr, disc->addr.val, sizeof(disc->addr.val)) != 0) {
243252
return 0;
244253
}
245254
}
@@ -275,6 +284,10 @@ ble_prox_cent_should_connect(const struct ble_gap_disc_desc *disc)
275284
struct ble_hs_adv_fields fields;
276285
int rc;
277286
int i;
287+
uint8_t test_addr[6];
288+
uint32_t peer_addr[6];
289+
290+
memset(peer_addr, 0x0, sizeof peer_addr);
278291

279292
/* The device has to be advertising connectability. */
280293
if (disc->event_type != BLE_HCI_ADV_RPT_EVTYPE_ADV_IND &&
@@ -291,10 +304,16 @@ ble_prox_cent_should_connect(const struct ble_gap_disc_desc *disc)
291304
if (strlen(CONFIG_EXAMPLE_PEER_ADDR) && (strncmp(CONFIG_EXAMPLE_PEER_ADDR, "ADDR_ANY", strlen("ADDR_ANY")) != 0)) {
292305
ESP_LOGI(tag, "Peer address from menuconfig: %s", CONFIG_EXAMPLE_PEER_ADDR);
293306
/* Convert string to address */
294-
sscanf(CONFIG_EXAMPLE_PEER_ADDR, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx",
307+
sscanf(CONFIG_EXAMPLE_PEER_ADDR, "%lx:%lx:%lx:%lx:%lx:%lx",
295308
&peer_addr[5], &peer_addr[4], &peer_addr[3],
296309
&peer_addr[2], &peer_addr[1], &peer_addr[0]);
297-
if (memcmp(peer_addr, disc->addr.val, sizeof(disc->addr.val)) != 0) {
310+
311+
/* Conversion */
312+
for (int i=0; i<6; i++) {
313+
test_addr[i] = (uint8_t )peer_addr[i];
314+
}
315+
316+
if (memcmp(test_addr, disc->addr.val, sizeof(disc->addr.val)) != 0) {
298317
return 0;
299318
}
300319
}

0 commit comments

Comments
 (0)