mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-01-09 17:38:00 +00:00
Some int -> size_t cleanup in terminal.c API.
term_do_paste and term_input_data_from_* were still taking int, which should be size_t. Not that I expect those functions to get >2^31 bytes of input in one go, but I noticed it while about to modify the same functions for another reason.
This commit is contained in:
parent
964890f1a1
commit
ed621590b0
2
putty.h
2
putty.h
@ -1994,7 +1994,7 @@ void term_lost_clipboard_ownership(Terminal *, int clipboard);
|
|||||||
void term_update(Terminal *);
|
void term_update(Terminal *);
|
||||||
void term_invalidate(Terminal *);
|
void term_invalidate(Terminal *);
|
||||||
void term_blink(Terminal *, bool set_cursor);
|
void term_blink(Terminal *, bool set_cursor);
|
||||||
void term_do_paste(Terminal *, const wchar_t *, int);
|
void term_do_paste(Terminal *, const wchar_t *, size_t);
|
||||||
void term_nopaste(Terminal *);
|
void term_nopaste(Terminal *);
|
||||||
void term_copyall(Terminal *, const int *, int);
|
void term_copyall(Terminal *, const int *, int);
|
||||||
void term_pre_reconfig(Terminal *, Conf *);
|
void term_pre_reconfig(Terminal *, Conf *);
|
||||||
|
@ -3456,7 +3456,7 @@ static void term_display_graphic_char(Terminal *term, unsigned long c)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static strbuf *term_input_data_from_unicode(
|
static strbuf *term_input_data_from_unicode(
|
||||||
Terminal *term, const wchar_t *widebuf, int len)
|
Terminal *term, const wchar_t *widebuf, size_t len)
|
||||||
{
|
{
|
||||||
strbuf *buf = strbuf_new();
|
strbuf *buf = strbuf_new();
|
||||||
|
|
||||||
@ -3465,7 +3465,7 @@ static strbuf *term_input_data_from_unicode(
|
|||||||
* Translate input wide characters into UTF-8 to go in the
|
* Translate input wide characters into UTF-8 to go in the
|
||||||
* terminal's input data queue.
|
* terminal's input data queue.
|
||||||
*/
|
*/
|
||||||
for (int i = 0; i < len; i++) {
|
for (size_t i = 0; i < len; i++) {
|
||||||
unsigned long ch = widebuf[i];
|
unsigned long ch = widebuf[i];
|
||||||
|
|
||||||
if (IS_SURROGATE(ch)) {
|
if (IS_SURROGATE(ch)) {
|
||||||
@ -3508,7 +3508,7 @@ static strbuf *term_input_data_from_unicode(
|
|||||||
}
|
}
|
||||||
|
|
||||||
static strbuf *term_input_data_from_charset(
|
static strbuf *term_input_data_from_charset(
|
||||||
Terminal *term, int codepage, const char *str, int len)
|
Terminal *term, int codepage, const char *str, size_t len)
|
||||||
{
|
{
|
||||||
strbuf *buf;
|
strbuf *buf;
|
||||||
|
|
||||||
@ -3516,7 +3516,7 @@ static strbuf *term_input_data_from_charset(
|
|||||||
buf = strbuf_new();
|
buf = strbuf_new();
|
||||||
put_data(buf, str, len);
|
put_data(buf, str, len);
|
||||||
} else {
|
} else {
|
||||||
int widesize = len * 2; /* allow for UTF-16 surrogates */
|
size_t widesize = len * 2; /* allow for UTF-16 surrogates */
|
||||||
wchar_t *widebuf = snewn(widesize, wchar_t);
|
wchar_t *widebuf = snewn(widesize, wchar_t);
|
||||||
int widelen = mb_to_wc(codepage, 0, str, len, widebuf, widesize);
|
int widelen = mb_to_wc(codepage, 0, str, len, widebuf, widesize);
|
||||||
buf = term_input_data_from_unicode(term, widebuf, widelen);
|
buf = term_input_data_from_unicode(term, widebuf, widelen);
|
||||||
@ -7077,7 +7077,7 @@ static void term_paste_callback(void *vterm)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
while (term->paste_pos < term->paste_len) {
|
while (term->paste_pos < term->paste_len) {
|
||||||
int n = 0;
|
size_t n = 0;
|
||||||
while (n + term->paste_pos < term->paste_len) {
|
while (n + term->paste_pos < term->paste_len) {
|
||||||
if (term->paste_buffer[term->paste_pos + n++] == '\015')
|
if (term->paste_buffer[term->paste_pos + n++] == '\015')
|
||||||
break;
|
break;
|
||||||
@ -7112,7 +7112,7 @@ static bool wstartswith(const wchar_t *a, size_t alen,
|
|||||||
return alen >= blen && !wcsncmp(a, b, blen);
|
return alen >= blen && !wcsncmp(a, b, blen);
|
||||||
}
|
}
|
||||||
|
|
||||||
void term_do_paste(Terminal *term, const wchar_t *data, int len)
|
void term_do_paste(Terminal *term, const wchar_t *data, size_t len)
|
||||||
{
|
{
|
||||||
const wchar_t *p;
|
const wchar_t *p;
|
||||||
bool paste_controls = conf_get_bool(term->conf, CONF_paste_controls);
|
bool paste_controls = conf_get_bool(term->conf, CONF_paste_controls);
|
||||||
@ -7186,6 +7186,7 @@ void term_do_paste(Terminal *term, const wchar_t *data, int len)
|
|||||||
if (term->ldisc) {
|
if (term->ldisc) {
|
||||||
strbuf *buf = term_input_data_from_unicode(
|
strbuf *buf = term_input_data_from_unicode(
|
||||||
term, term->paste_buffer, term->paste_len);
|
term, term->paste_buffer, term->paste_len);
|
||||||
|
assert(buf->len <= INT_MAX); /* because paste_len was also small */
|
||||||
term_keyinput_internal(term, buf->s, buf->len, false);
|
term_keyinput_internal(term, buf->s, buf->len, false);
|
||||||
strbuf_free(buf);
|
strbuf_free(buf);
|
||||||
}
|
}
|
||||||
|
@ -227,7 +227,7 @@ struct terminal_tag {
|
|||||||
int attr_mask;
|
int attr_mask;
|
||||||
|
|
||||||
wchar_t *paste_buffer;
|
wchar_t *paste_buffer;
|
||||||
int paste_len, paste_pos;
|
size_t paste_len, paste_pos;
|
||||||
|
|
||||||
Backend *backend;
|
Backend *backend;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user