135ea84adSSiva Chandra Reddy //===-- Implementation of readdir -----------------------------------------===// 235ea84adSSiva Chandra Reddy // 335ea84adSSiva Chandra Reddy // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 435ea84adSSiva Chandra Reddy // See https://llvm.org/LICENSE.txt for license information. 535ea84adSSiva Chandra Reddy // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 635ea84adSSiva Chandra Reddy // 735ea84adSSiva Chandra Reddy //===----------------------------------------------------------------------===// 835ea84adSSiva Chandra Reddy 935ea84adSSiva Chandra Reddy #include "readdir.h" 1035ea84adSSiva Chandra Reddy 1135ea84adSSiva Chandra Reddy #include "src/__support/File/dir.h" 1235ea84adSSiva Chandra Reddy #include "src/__support/common.h" 13*5ff3ff33SPetr Hosek #include "src/__support/macros/config.h" 14d49b993fSSiva Chandra Reddy #include "src/errno/libc_errno.h" 1535ea84adSSiva Chandra Reddy 1635ea84adSSiva Chandra Reddy #include <dirent.h> 1735ea84adSSiva Chandra Reddy 18*5ff3ff33SPetr Hosek namespace LIBC_NAMESPACE_DECL { 1935ea84adSSiva Chandra Reddy 2035ea84adSSiva Chandra Reddy LLVM_LIBC_FUNCTION(struct ::dirent *, readdir, (::DIR * dir)) { 21b6bc9d72SGuillaume Chatelet auto *d = reinterpret_cast<LIBC_NAMESPACE::Dir *>(dir); 229b29436aSSiva Chandra Reddy auto dirent_val = d->read(); 239b29436aSSiva Chandra Reddy if (!dirent_val) { 24d49b993fSSiva Chandra Reddy libc_errno = dirent_val.error(); 259b29436aSSiva Chandra Reddy return nullptr; 269b29436aSSiva Chandra Reddy } 27b95ed8b6STue Ly return dirent_val.value(); 2835ea84adSSiva Chandra Reddy } 2935ea84adSSiva Chandra Reddy 30*5ff3ff33SPetr Hosek } // namespace LIBC_NAMESPACE_DECL 31