aboutsummaryrefslogtreecommitdiffstats
path: root/libterminput.c
diff options
context:
space:
mode:
Diffstat (limited to 'libterminput.c')
-rw-r--r--libterminput.c33
1 files changed, 16 insertions, 17 deletions
diff --git a/libterminput.c b/libterminput.c
index b444ea7..aa0814b 100644
--- a/libterminput.c
+++ b/libterminput.c
@@ -18,7 +18,7 @@ static int
read_input(int fd, struct input *input, struct libterminput_state *ctx)
{
unsigned char c, tc;
- int r;
+ ssize_t r;
/* Get next byte from input */
if (ctx->stored_head != ctx->stored_tail) {
@@ -28,8 +28,8 @@ read_input(int fd, struct input *input, struct libterminput_state *ctx)
} else {
r = read(fd, ctx->stored, sizeof(ctx->stored));
if (r <= 0)
- return r;
- c = ctx->stored[0];
+ return (int)r;
+ c = (unsigned char)ctx->stored[0];
if (r > 1) {
ctx->stored_tail = 1;
ctx->stored_head = (size_t)r;
@@ -42,18 +42,18 @@ again:
if ((c & 0xC0) != 0x80) {
/* Short multibyte-character: return short and store read byte from next input */
input->mods = ctx->mods;
- ctx->partial[ctx->npartial] = '\0';
+ ctx->partial[(unsigned char)ctx->npartial] = '\0';
ctx->n = 0;
ctx->npartial = 0;
ctx->mods = 0;
- ctx->stored[ctx->stored_head++] = c;
+ ctx->stored[ctx->stored_head++] = (char)c;
strcpy(input->symbol, ctx->partial);
return 1;
} else {
/* Store byte, and if done, return */
- ctx->partial[ctx->npartial++] = c;
+ ctx->partial[(unsigned char)ctx->npartial++] = (char)c;
if (ctx->npartial == ctx->n) {
- ctx->partial[ctx->npartial] = '\0';
+ ctx->partial[(unsigned char)ctx->npartial] = '\0';
input->mods = ctx->mods;
ctx->npartial = 0;
ctx->mods = 0;
@@ -86,13 +86,13 @@ again:
ctx->n++;
if (ctx->n > 6) {
/* If overlong, return first byte a single-byte-character */
- input->symbol[0] = c;
+ input->symbol[0] = (char)c;
input->symbol[1] = '\0';
input->mods = ctx->mods;
ctx->mods = 0;
return 1;
}
- ctx->partial[0] = c;
+ ctx->partial[0] = (char)c;
ctx->npartial = 1;
} else if (c & 0x80) {
/* 8th bit set to signify META */
@@ -104,7 +104,7 @@ again:
} else {
single_byte:
/* Single-byte-character */
- input->symbol[0] = c;
+ input->symbol[0] = (char)c;
input->symbol[1] = '\0';
input->mods = ctx->mods;
ctx->mods = 0;
@@ -120,7 +120,7 @@ again:
static void
encode_utf8(unsigned long long int codepoint, char buffer[7])
{
- static const char masks[6] = {0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC};
+ static const char masks[6] = {(char)0x00, (char)0xC0, (char)0xE0, (char)0xF0, (char)0xF8, (char)0xFC};
static const unsigned long long int limits[6] = {
1ULL << (7 + 0 * 6),
1ULL << (5 + 1 * 6),
@@ -143,7 +143,6 @@ encode_utf8(unsigned long long int codepoint, char buffer[7])
static int
check_utf8_char(const char *s, size_t *lenp, size_t size)
{
- size_t len;
*lenp = 0;
if (!size) {
return 0;
@@ -203,7 +202,7 @@ utf8_decode(const char *s, size_t *ip)
size_t len;
if ((s[*ip] & 0x80) == 0) {
- return s[(*ip)++];
+ return (unsigned long long int)s[(*ip)++];
} else if ((s[*ip] & 0xE0) == 0xC0) {
cp = (unsigned long long int)((unsigned char)s[(*ip)++] ^ 0xC0U);
len = 1;
@@ -765,7 +764,7 @@ again:
} else if (r < 0) {
ctx->mouse_tracking = 0;
input->type = LIBTERMINPUT_NONE;
- ctx->stored_tail + n;
+ ctx->stored_tail += n;
return 1;
}
r = check_utf8_char(&ctx->stored[ctx->stored_tail + n], &m, ctx->stored_head - (ctx->stored_tail + n));
@@ -776,7 +775,7 @@ again:
} else if (r < 0) {
ctx->mouse_tracking = 0;
input->type = LIBTERMINPUT_NONE;
- ctx->stored_tail + n;
+ ctx->stored_tail += n;
return 1;
}
r = check_utf8_char(&ctx->stored[ctx->stored_tail + n], &m, ctx->stored_head - (ctx->stored_tail + n));
@@ -787,7 +786,7 @@ again:
} else if (r < 0) {
ctx->mouse_tracking = 0;
input->type = LIBTERMINPUT_NONE;
- ctx->stored_tail + n;
+ ctx->stored_tail += n;
return 1;
}
} else if (ctx->key[0] == '[' && ctx->key[1] == 'M' && ctx->stored_head - ctx->stored_tail < 3) {
@@ -811,7 +810,7 @@ again:
} else if (ctx->meta && (!strcmp(ret.symbol, "[") || !strcmp(ret.symbol, "O"))) {
/* ESC [ or ESC 0 is used as the beginning of most special keys */
strcpy(ctx->key, ret.symbol);
- input->type == LIBTERMINPUT_NONE;
+ input->type = LIBTERMINPUT_NONE;
} else {
/* Character input and single-byte special keys */
input->type = LIBTERMINPUT_KEYPRESS;