diff options
Diffstat (limited to 'bin/echo')
| -rw-r--r-- | bin/echo/Kbuild | 5 | ||||
| -rwxr-xr-x | bin/echo/echo | bin | 0 -> 3480 bytes | |||
| -rw-r--r-- | bin/echo/echo.c | 30 |
3 files changed, 35 insertions, 0 deletions
diff --git a/bin/echo/Kbuild b/bin/echo/Kbuild new file mode 100644 index 00000000..919423fd --- /dev/null +++ b/bin/echo/Kbuild @@ -0,0 +1,5 @@ +bin-y := echo + +libs-y += $(srctree)/lib/libc/libc.a + +obj-y += echo.o diff --git a/bin/echo/echo b/bin/echo/echo Binary files differnew file mode 100755 index 00000000..c9bbb0df --- /dev/null +++ b/bin/echo/echo diff --git a/bin/echo/echo.c b/bin/echo/echo.c new file mode 100644 index 00000000..b8e5bbe0 --- /dev/null +++ b/bin/echo/echo.c @@ -0,0 +1,30 @@ +#include <string.h> +#include <unistd.h> +#include <sys/uio.h> + +int main(int argc, char **argv) +{ + if (argc <= 1) + return 0; + + struct iovec iov[2 * argc - 2]; + int iovcnt = 0; + + for (int i = 1; i < argc; i++) { + iov[iovcnt].iov_base = argv[i]; + iov[iovcnt].iov_len = strlen(argv[i]); + iovcnt++; + + if (i < argc - 1) { + iov[iovcnt].iov_base = " "; + iov[iovcnt].iov_len = 1; + iovcnt++; + } + } + + iov[iovcnt].iov_base = "\n"; + iov[iovcnt].iov_len = 1; + iovcnt++; + + return writev(STDOUT_FILENO, iov, iovcnt) < 0 ? 1 : 0; +} |
