15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- FileSystem.h -------------------------------------------------------===//
25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//                     The MCLinker Project
45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source
65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details.
75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===//
95460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file declares the mcld::sys::fs:: namespace. It follows TR2/boost
105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// filesystem (v3), but modified to remove exception handling and the
115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// path class.
125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===//
135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifndef MCLD_FILE_SYSTEM_H
155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define MCLD_FILE_SYSTEM_H
165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifdef ENABLE_UNITTEST
175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <gtest.h>
185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif
195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include "mcld/Support/PathCache.h"
21affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include <mcld/Config/Config.h>
225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <string>
235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <iosfwd>
245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <locale>
255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaonamespace mcld {
275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaonamespace sys {
28affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaonamespace fs {
305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoenum FileType
325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  StatusError,
345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  StatusUnknown = StatusError,
355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  FileNotFound,
365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  RegularFile,
375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  DirectoryFile,
385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  SymlinkFile,
395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  BlockFile,
405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  CharacterFile,
415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  FifoFile,
425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  SocketFile,
435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ReparseFile,
445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  TypeUnknown,
455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  StatusKnown,
465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  IsSymLink
475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao};
485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** \class FileStatus
505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *  \brief FileStatus
515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */
525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass FileStatus
535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic:
555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  FileStatus()
565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    : m_Value(StatusError) {}
575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  explicit FileStatus(FileType v)
595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    : m_Value(v) {}
605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  void setType(FileType v)   { m_Value = v; }
625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  FileType type() const   { return m_Value; }
635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprivate:
655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  FileType m_Value;
665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao};
675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoinline bool operator==(const FileStatus& rhs, const FileStatus& lhs) {
695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  return rhs.type() == lhs.type();
705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoinline bool operator!=(const FileStatus& rhs, const FileStatus& lhs ) {
735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  return !(rhs == lhs);
745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass Path;
775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass DirIterator;
785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass Directory;
795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaobool exists(const Path &pPath);
815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaobool is_directory(const Path &pPath);
825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
83f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinesnamespace detail {
845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
85f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinesextern Path::StringType static_library_extension;
86f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinesextern Path::StringType shared_library_extension;
87f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinesextern Path::StringType executable_extension;
88f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinesextern Path::StringType relocatable_extension;
89f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinesextern Path::StringType assembly_extension;
90f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinesextern Path::StringType bitcode_extension;
915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
92f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinessize_t canonicalize(Path::StringType& pPathName);
935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaobool not_found_error(int perrno);
945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaovoid status(const Path& p, FileStatus& pFileStatus);
955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaovoid symlink_status(const Path& p, FileStatus& pFileStatus);
965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaomcld::sys::fs::PathCache::entry_type* bring_one_into_cache(DirIterator& pIter);
975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaovoid open_dir(Directory& pDir);
985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaovoid close_dir(Directory& pDir);
99f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinesvoid get_pwd(Path& pPWD);
100affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
101affc150dc44fab1911775a49636d0ce85333b634Zonr Changint open(const Path& pPath, int pOFlag);
102affc150dc44fab1911775a49636d0ce85333b634Zonr Changint open(const Path& pPath, int pOFlag, int pPermission);
103f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinesssize_t pread(int pFD, void* pBuf, size_t pCount, off_t pOffset);
104f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinesssize_t pwrite(int pFD, const void* pBuf, size_t pCount, off_t pOffset);
105affc150dc44fab1911775a49636d0ce85333b634Zonr Changint ftruncate(int pFD, size_t pLength);
106f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinesvoid* mmap(void *pAddr, size_t pLen,
107f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines           int pProt, int pFlags, int pFD, off_t pOffset);
108f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinesint munmap(void *pAddr, size_t pLen);
1095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of detail
1115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of fs
1125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of sys
1135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld
1145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif
1165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
117