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