/*
* \brief Standalone POSIX pipe
* \author Emery Hemingway
* \date 2018-03-06
*/
/*
* Copyright (C) 2018 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU Affero General Public License version 3.
*/
/* Genode includes */
#include
/* Libc includes */
#include
#include
#include
int main()
{
enum { SIXTEEN_K = 1 << 14 };
static char buf[SIXTEEN_K];
Genode::uint64_t total = 0;
while (true) {
auto const nr = fread(buf, 1, sizeof(buf), stdin);
if (nr == 0 && feof(stdin))
break;
if (nr < 1 || nr > sizeof(buf)) {
int res = errno;
Genode::error((char const *)strerror(res));
return res;
}
auto remain = nr;
auto off = 0;
while (remain > 0) {
auto const nw = fwrite(buf+off, 1, remain, stdout);
if (nw < 1 || nw > remain) {
int res = errno;
Genode::error((char const *)strerror(res));
return res;
}
remain -= nw;
off += nw;
total += nw;
}
}
Genode::log("piped ", total, " bytes");
return 0;
};