summaryrefslogtreecommitdiff
path: root/bin/echo
diff options
context:
space:
mode:
Diffstat (limited to 'bin/echo')
-rw-r--r--bin/echo/Kbuild5
-rwxr-xr-xbin/echo/echobin0 -> 3480 bytes
-rw-r--r--bin/echo/echo.c30
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
new file mode 100755
index 00000000..c9bbb0df
--- /dev/null
+++ b/bin/echo/echo
Binary files differ
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;
+}