summaryrefslogtreecommitdiff
path: root/com32/lib/sys/rawcon_read.c
diff options
context:
space:
mode:
Diffstat (limited to 'com32/lib/sys/rawcon_read.c')
-rw-r--r--com32/lib/sys/rawcon_read.c35
1 files changed, 11 insertions, 24 deletions
diff --git a/com32/lib/sys/rawcon_read.c b/com32/lib/sys/rawcon_read.c
index e6635909..7eae95f1 100644
--- a/com32/lib/sys/rawcon_read.c
+++ b/com32/lib/sys/rawcon_read.c
@@ -35,51 +35,38 @@
#include <errno.h>
#include <string.h>
#include <com32.h>
+#include <core.h>
#include <minmax.h>
#include "file.h"
/* Global, since it's used by stdcon_read */
-#ifndef SYSLINUX_EFI
ssize_t __rawcon_read(struct file_info *fp, void *buf, size_t count)
{
- com32sys_t ireg, oreg;
char *bufp = buf;
size_t n = 0;
+ char hi = 0;
-printf("__rawcon_read... enter\n");
(void)fp;
- memset(&ireg, 0, sizeof ireg);
-
while (n < count) {
+ if (hi) {
+ *bufp++ = hi;
+ n++;
+ hi = 0;
+ continue;
+ }
+
/* Poll */
- ireg.eax.b[1] = 0x0B;
- __intcall(0x21, &ireg, &oreg);
- if (!oreg.eax.b[0])
+ if (!pollchar())
break;
/* We have data, go get it */
- ireg.eax.b[1] = 0x08;
- __intcall(0x21, &ireg, &oreg);
- *bufp++ = oreg.eax.b[0];
+ *bufp++ = getchar(&hi);
n++;
}
return n;
}
-#else
-ssize_t __rawcon_read(struct file_info *fp, void *buf, size_t count)
-{
- extern char getchar();
- char *bufp = buf;
- size_t n = 0;
- while (n < count) {
- *bufp++ = getchar();
- n++;
- }
- return n;
-}
-#endif
const struct input_dev dev_rawcon_r = {
.dev_magic = __DEV_MAGIC,