// Copyright 2019 The Pigweed Authors // // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy of // the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the // License for the specific language governing permissions and limitations under // the License. #include "pw_sys_io/sys_io.h" #include namespace pw::sys_io { Status ReadByte(std::byte* dest) { if (dest == nullptr) { return Status::FailedPrecondition(); } int value = std::getchar(); if (value == EOF) { return Status::ResourceExhausted(); } *dest = static_cast(value); return OkStatus(); } Status TryReadByte(std::byte*) { // TryReadByte() is not (yet) supported on hosts. return Status::Unimplemented(); } Status WriteByte(std::byte b) { if (std::putchar(static_cast(b)) == EOF) { return Status::Internal(); } return OkStatus(); } StatusWithSize WriteLine(const std::string_view& s) { size_t chars_written = 0; StatusWithSize size_result = WriteBytes(std::as_bytes(std::span(s))); if (!size_result.ok()) { return size_result; } chars_written += size_result.size(); // Write trailing newline character. Status result = WriteByte(static_cast('\n')); if (result.ok()) { chars_written++; } return StatusWithSize(result, chars_written); } } // namespace pw::sys_io