diff options
author | 2023-11-02 11:45:11 -0700 | |
---|---|---|
committer | 2023-11-20 12:50:43 -0800 | |
commit | 26db5e4b39739b3101e5f86d921b4858bb476b88 (patch) | |
tree | 53e6accc17f5bcb62105b61ba3708d1884723a95 /libs/binder/file.cpp | |
parent | 639490b9ec6535cda7f24403237355c941e9fcb2 (diff) |
Binder file module
Test: mma
Bug: 302723053
Change-Id: Ie27f8a36ab56069c928079da8a0cf3d8bfb49813
Diffstat (limited to 'libs/binder/file.cpp')
-rw-r--r-- | libs/binder/file.cpp | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/libs/binder/file.cpp b/libs/binder/file.cpp new file mode 100644 index 0000000000..bac667e4e5 --- /dev/null +++ b/libs/binder/file.cpp @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * 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 + * + * http://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 "file.h" + +#ifdef BINDER_NO_LIBBASE + +#include <stdint.h> + +// clang-format off + +namespace android::binder { + +bool ReadFully(borrowed_fd fd, void* data, size_t byte_count) { + uint8_t* p = reinterpret_cast<uint8_t*>(data); + size_t remaining = byte_count; + while (remaining > 0) { + ssize_t n = TEMP_FAILURE_RETRY(read(fd.get(), p, remaining)); + if (n == 0) { // EOF + errno = ENODATA; + return false; + } + if (n == -1) return false; + p += n; + remaining -= n; + } + return true; +} + +bool WriteFully(borrowed_fd fd, const void* data, size_t byte_count) { + const uint8_t* p = reinterpret_cast<const uint8_t*>(data); + size_t remaining = byte_count; + while (remaining > 0) { + ssize_t n = TEMP_FAILURE_RETRY(write(fd.get(), p, remaining)); + if (n == -1) return false; + p += n; + remaining -= n; + } + return true; +} + +} // namespace android::binder + +#endif // BINDER_NO_LIBBASE |