|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT PATCH v2 2/2] lib/vfscore: Add stdin fop
Reviewed-by: Yuri Volchkov <yuri.volchkov@xxxxxxxxx>
"Vlad-Andrei BĂDOIU (78692)" <vlad_andrei.badoiu@xxxxxxxxxxxxxxx>
writes:
> From: Vlad-Andrei BĂDOIU (78692) <vlad_andrei.badoiu@xxxxxxxxxxxxxxx>
>
> This patch adds the stdin operation inside lib/vfscore/stdio.c.
>
> The stdio is mapped by default to fd 0. This implementation mimics
> the normal read behaviour.(read until count bytes or read until VEOF or
> \n is met). The '\r' is replaced with '\n' because ukplat_cink returns
> '\r' on KVM and Xen.
>
> For every successful call of ukplat_cink the input is printed
> to the stdout.
>
> Signed-off-by: Vlad-Andrei Badoiu <vlad_andrei.badoiu@xxxxxxxxxxxxxxx>
> ---
> lib/vfscore/stdio.c | 43 ++++++++++++++++++++++++++++++++++++++++---
> 1 file changed, 40 insertions(+), 3 deletions(-)
>
> diff --git a/lib/vfscore/stdio.c b/lib/vfscore/stdio.c
> index c631f5f..a9bdfd6 100644
> --- a/lib/vfscore/stdio.c
> +++ b/lib/vfscore/stdio.c
> @@ -35,19 +35,55 @@
>
> #include <vfscore/file.h>
> #include <uk/plat/console.h>
> +#include <uk/essentials.h>
> +#include <termios.h>
>
> /* One function for stderr and stdout */
> -static ssize_t stdout_write(struct vfscore_file *vfscore_file, const void
> *buf,
> - size_t count)
> +static ssize_t stdout_write(struct vfscore_file *vfscore_file __unused,
> + const void *buf, size_t count)
> {
> - (void) vfscore_file;
> return ukplat_coutk(buf, count);
> }
>
> +static ssize_t stdin_read(struct vfscore_file *vfscore_file __unused,
> + void *_buf, size_t count)
> +{
> + int bytes_read;
> + size_t bytes_total = 0;
> + char *buf = (char *)_buf;
> +
> + do {
> + while ((bytes_read = ukplat_cink(buf,
> + count - bytes_total)) <= 0)
> + ;
> +
> + buf = buf + bytes_read;
> + *(buf - 1) = *(buf - 1) == '\r' ?
> + '\n' : *(buf - 1);
> +
> + stdout_write(vfscore_file, (buf - bytes_read),
> + bytes_read);
> + bytes_total += bytes_read;
> +
> + } while (bytes_total < count && *(buf - 1) != '\n'
> + && *(buf - 1) != VEOF);
> +
> + return bytes_total;
> +}
> +
> +static struct vfscore_fops stdin_fops = {
> + .read = stdin_read,
> +};
> +
> static struct vfscore_fops stdout_fops = {
> .write = stdout_write,
> };
>
> +static struct vfscore_file stdin_file = {
> + .fd = 0,
> + .fops = &stdin_fops,
> +};
> +
> static struct vfscore_file stdout_file = {
> .fd = 1,
> .fops = &stdout_fops,
> @@ -61,6 +97,7 @@ static struct vfscore_file stderr_file = {
>
> void init_stdio(void)
> {
> + vfscore_install_fd(0, &stdin_file);
> vfscore_install_fd(1, &stdout_file);
> vfscore_install_fd(2, &stderr_file);
> }
> --
> 2.20.1
>
--
Yuri Volchkov
Software Specialist
NEC Europe Ltd
Kurfürsten-Anlage 36
D-69115 Heidelberg
_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |