11e573f37SJoseph Huber //===-- Implementation of fread -------------------------------------------===// 21e573f37SJoseph Huber // 31e573f37SJoseph Huber // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 41e573f37SJoseph Huber // See https://llvm.org/LICENSE.txt for license information. 51e573f37SJoseph Huber // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 61e573f37SJoseph Huber // 71e573f37SJoseph Huber //===----------------------------------------------------------------------===// 81e573f37SJoseph Huber 91e573f37SJoseph Huber #include "src/stdio/fread.h" 101e573f37SJoseph Huber #include "src/__support/File/file.h" 111e573f37SJoseph Huber 125aed6d67SMichael Jones #include "hdr/types/FILE.h" 13*5ff3ff33SPetr Hosek #include "src/__support/macros/config.h" 141e573f37SJoseph Huber #include "src/errno/libc_errno.h" 155aed6d67SMichael Jones #include <stddef.h> 161e573f37SJoseph Huber 17*5ff3ff33SPetr Hosek namespace LIBC_NAMESPACE_DECL { 181e573f37SJoseph Huber 191e573f37SJoseph Huber LLVM_LIBC_FUNCTION(size_t, fread, 201e573f37SJoseph Huber (void *__restrict buffer, size_t size, size_t nmemb, 211e573f37SJoseph Huber ::FILE *stream)) { 221e573f37SJoseph Huber if (size == 0 || nmemb == 0) 231e573f37SJoseph Huber return 0; 24b6bc9d72SGuillaume Chatelet auto result = reinterpret_cast<LIBC_NAMESPACE::File *>(stream)->read( 25b6bc9d72SGuillaume Chatelet buffer, size * nmemb); 261e573f37SJoseph Huber if (result.has_error()) 271e573f37SJoseph Huber libc_errno = result.error; 281e573f37SJoseph Huber return result.value / size; 291e573f37SJoseph Huber } 301e573f37SJoseph Huber 31*5ff3ff33SPetr Hosek } // namespace LIBC_NAMESPACE_DECL 32