Б
Бестиарий программирования
@programming_tales1.1K подп.
512просмотров
47.9%от подписчиков
14 марта 2026 г.
Score: 563
Ещё пример. Функция bt_set_local_name просто перекладывает строку в буфер размером 248 байт и передаёт её в hci_send_cmd. int bt_set_local_name(const char name) { uint8_t params[248] = {0}; int len = 0; while (name[len] && len < 247) { params[len] = name[len]; len++; } return hci_send_cmd(HCI_OP_WRITE_LOCAL_NAME, params, 248); } Посмотрим, что происходит со строкой дальше: static int hci_send_cmd(uint16_t opcode, void params, uint8_t plen) { uint8_t buf[256]; buf[0] = HCI_COMMAND_PKT; struct hci_command_hdr hdr = (struct hci_command_hdr )&buf[1]; hdr->opcode = opcode; hdr->plen = plen; if (plen > 0 && params) { for (int i = 0; i < plen; i++) { buf[4 + i] = ((uint8_t )params)[i]; } } / TODO: Send via USB bulk endpoint */ printk(KERN_DEBUG "BT: Send cmd opcode=0x%04x len=%d&#092;n", opcode, plen); return 0; } Формируется новый буфер из специального заголовка и переданной строки. Дальше этот буфер пока не используется, но суть не в этом. Непонятно, зачем вообще был нужен промежуточный буфер в bt_set_local_name. Код можно сократить, попутно ускорив его, убрав одно копирование.
512
просмотров
1234
символов
Нет
эмодзи
Нет
медиа

Другие посты @programming_tales

Все посты канала →
Ещё пример. Функция bt_set_local_name просто перекладывает с — @programming_tales | PostSniper