diff options
author | sotech117 <michael_foiani@brown.edu> | 2024-03-03 02:25:30 +0000 |
---|---|---|
committer | sotech117 <michael_foiani@brown.edu> | 2024-03-03 02:25:30 +0000 |
commit | 00c85e5881a7cc1f3e15b2c4940ea2d02e4fbe9c (patch) | |
tree | c014a3267db88bee84833055d60571b497826a7b | |
parent | e8970e39cac119369177e32723c75ea585a94587 (diff) |
work on disk read
-rw-r--r-- | kernel/drivers/tty/ldisc.c | 52 |
1 files changed, 24 insertions, 28 deletions
diff --git a/kernel/drivers/tty/ldisc.c b/kernel/drivers/tty/ldisc.c index 5651601..23c9d00 100644 --- a/kernel/drivers/tty/ldisc.c +++ b/kernel/drivers/tty/ldisc.c @@ -93,43 +93,39 @@ size_t ldisc_read(ldisc_t *ldisc, char *buf, size_t count) // read from ldisc buffer to buf size_t i = 0; - while (i < count) + int break_loop = 0; + while (i < count && !break_loop) { // if we have new chars to read if (ldisc->ldisc_head != ldisc->ldisc_tail) { - // if we encounter a new line symbol - if (ldisc->ldisc_buffer[ldisc->ldisc_head] == '\n') - { - buf[i] = ldisc->ldisc_buffer[ldisc->ldisc_head]; - ldisc->ldisc_head = (ldisc->ldisc_head + 1) % LDISC_BUFFER_SIZE; - i++; - break; - } - // if we encounter an EOT - else if (ldisc->ldisc_buffer[ldisc->ldisc_head] == EOT) + char c = ldisc->ldisc_buffer[ldisc->ldisc_tail]; + switch (c) { + + case EOT: + buf[i] = c; + break_loop = 1; break; - } - // if we encounter an ETX - else if (ldisc->ldisc_buffer[ldisc->ldisc_head] == ETX) - { - // clear uncooked portion of the line - ldisc->ldisc_head = ldisc->ldisc_cooked; + + // case ETX: + // ldisc->ldisc_tail = ldisc->ldisc_cooked; + // break; + + case '\n': + buf[i] = c; + ldisc->ldisc_tail = (ldisc->ldisc_tail + 1) % LDISC_BUFFER_SIZE; + i++; + break_loop = 1; break; - } - // if we encounter a normal char - else - { - buf[i] = ldisc->ldisc_buffer[ldisc->ldisc_head]; - ldisc->ldisc_head = (ldisc->ldisc_head + 1) % LDISC_BUFFER_SIZE; + + default: + buf[i] = c; + ldisc->ldisc_tail = (ldisc->ldisc_tail + 1) % LDISC_BUFFER_SIZE; i++; + break; } } - else - { - break; - } } // return the number of bytes read @@ -207,7 +203,7 @@ void ldisc_key_pressed(ldisc_t *ldisc, char c) vterminal_write(ldisc_to_tty(ldisc), "\n", 1); // add the new char to the buffer - // ldisc->ldisc_buffer[ldisc->ldisc_tail] = c; + ldisc->ldisc_buffer[ldisc->ldisc_tail] = c; ldisc->ldisc_head = (ldisc->ldisc_head + 1) % LDISC_BUFFER_SIZE; // cook the buffer |