static int put_utf16be(unsigned char *buf, size_t buf_len, ICONV_CHAR c) { if (c < 0x10000u) { if (buf_len < 2) return -E2BIG; TDS_PUT_A2BE(buf, c); return 2; } if (TDS_UNLIKELY(c >= 0x110000u)) return -EILSEQ; if (buf_len < 4) return -E2BIG; TDS_PUT_A2BE(buf, 0xd7c0 + (c >> 10)); TDS_PUT_A2BE(buf+2, 0xdc00 + (c & 0x3ffu)); return 4; }
int tds_append_cancel(TDSSOCKET *tds) { unsigned char buf[8]; TDSPACKET *packet; buf[0] = TDS_CANCEL; buf[1] = 1; TDS_PUT_A2BE(buf+2, 8); TDS_PUT_A4(buf+4, 0); if (IS_TDS7_PLUS(tds->conn) && !tds->login) buf[6] = 0x01; packet = tds_build_packet(tds, buf, 8); if (!packet) return TDS_FAIL; tds_mutex_lock(&tds->conn->list_mtx); tds_append_packet(&tds->conn->send_packets, packet); tds_mutex_unlock(&tds->conn->list_mtx); return TDS_SUCCESS; }