Require: #657 ([compare](https://git.kolibrios.org/Egor00f/kolibrios/compare/update-shell-api...shell-api-implement-return-value)) Implement a return value for shell API functions. required for updating libc streams. The return value is declared after `data` for consistency with older programs. # Changes: ## [`shell`](https://git.kolibrios.org/KolibriOS/kolibrios/pulls/660/files#diff-9e9982c0c3e401531fcfbc1f9dd5f1f3d85452fd) + `SHELL_PUTS` and `SHELL_GETS` return the number of bytes written + `SHELL_GETC` write full `int` value ## `libshell` + [`shell_gets`](https://git.kolibrios.org/KolibriOS/kolibrios/pulls/660/files#diff-8840a9f9a5e28f05f5f46e1b5106caf3ce6c470e) returns `NULL` or `EOF`, or a pointer to a string and returns the number of bytes received + [`shell_getc`](https://git.kolibrios.org/KolibriOS/kolibrios/pulls/660/files#diff-955a257b2a02cfc5ee9879b7efc50d0644ad179c) return `int` + [`shell_printf`](https://git.kolibrios.org/KolibriOS/kolibrios/pulls/660/files#diff-4ffb653a63ef098530e336370053615fee66be03) returns the number of bytes written + [`shell_puts`](https://git.kolibrios.org/KolibriOS/kolibrios/pulls/660/files#diff-ee4df9617f16bc52153701c0edc6c2947dd877a8) returns the number of bytes written + [`shell_write_string`](https://git.kolibrios.org/KolibriOS/kolibrios/pulls/660/files#diff-cebe23f17158adc73d20c5f9096862c209732598) returns the number of bytes written Reviewed-on: https://git.kolibrios.org/KolibriOS/kolibrios/pulls/660 Reviewed-by: Kiril Lipatov <lipatov.kiril@gmail.com>
28 lines
977 B
C
28 lines
977 B
C
#include <shell_api.h>
|
|
#include <string.h>
|
|
|
|
size_t shell_write_string(const char *s, size_t len)
|
|
{
|
|
__shell_init();
|
|
if (__shell_is_init == __SHELL_INIT_OK)
|
|
{
|
|
size_t written_bytes = 0;
|
|
if (len > sizeof(__shell_shm->data) - 1)
|
|
{
|
|
written_bytes += shell_write_string(s, sizeof(__shell_shm->data) - 1); // Outputs as much as it can.
|
|
written_bytes += shell_write_string(s + (sizeof(__shell_shm->data) - 1), len - (sizeof(__shell_shm->data) - 1)); // Outputs the rest.
|
|
}
|
|
else
|
|
{
|
|
memset(__shell_shm->data, 0, sizeof(__shell_shm->data)); // without int shell show \t, \n, lose chars and other trash
|
|
memcpy(__shell_shm->data, s, len);
|
|
__shell_shm->cmd = SHELL_PUTS;
|
|
__SHELL_WAIT();
|
|
written_bytes += __shell_shm->return_value.written_bytes;
|
|
}
|
|
|
|
return written_bytes;
|
|
}
|
|
return 0;
|
|
}
|