15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- Directory.cpp ------------------------------------------------------===// 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//===----------------------------------------------------------------------===// 9f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines#include <mcld/Support/Directory.h> 10f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines#include <mcld/Support/FileSystem.h> 115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcld; 135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcld::sys::fs; 145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaonamespace { // anonymous 165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaobool status_known(FileStatus f) 185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return f.type() != StatusError; 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaobool is_symlink(FileStatus f) 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return f.type() == SymlinkFile; 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 27f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinesconst Path dot_path("."); 28f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinesconst Path dot_dot_path(".."); 29f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of anonymous 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 326f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines//===----------------------------------------------------------------------===// 335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Directory 346f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines//===----------------------------------------------------------------------===// 355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoDirectory::Directory() 365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao : m_Path(), 375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_FileStatus(), 385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_SymLinkStatus(), 39affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_Handler(0), 405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_Cache(), 415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_CacheFull(false) { 425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoDirectory::Directory(const Path& pPath, 455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao FileStatus st, 465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao FileStatus symlink_st) 475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao : m_Path(pPath), 485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_FileStatus(st), 495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_SymLinkStatus(symlink_st), 50affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_Handler(0), 515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_Cache(), 525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_CacheFull(false) { 53f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines if (m_Path == dot_path) 54f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines detail::get_pwd(m_Path); 555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_Path.m_append_separator_if_needed(); 56f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines detail::open_dir(*this); 575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoDirectory::Directory(const Directory& pCopy) 605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao : m_Path(pCopy.m_Path), 615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_FileStatus(pCopy.m_FileStatus), 625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_SymLinkStatus(pCopy.m_SymLinkStatus), 63affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_Handler(0), 645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_Cache(), 655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_CacheFull(false) { 66f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines detail::open_dir(*this); 675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoDirectory::~Directory() 705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao detail::close_dir(*this); 725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaobool Directory::isGood() const 755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return (0 != m_Handler); 775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoDirectory& Directory::operator=(const Directory& pCopy) 805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assign(pCopy.m_Path, pCopy.m_FileStatus, pCopy.m_SymLinkStatus); 825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *this; 835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaovoid Directory::assign(const Path& pPath, 865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao FileStatus st, 875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao FileStatus symlink_st) 885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (isGood()) 905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao clear(); 915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_Path = pPath; 93f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines if (m_Path == dot_path) 94f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines detail::get_pwd(m_Path); 955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_Path.m_append_separator_if_needed(); 965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_FileStatus = st; 985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_SymLinkStatus = symlink_st; 995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao detail::open_dir(*this); 1005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoFileStatus Directory::status() const 1035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 1045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (!status_known(m_FileStatus)) 1055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { 1065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // optimization: if the symlink status is known, and it isn't a symlink, 1075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // then status and symlink_status are identical so just copy the 1085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // symlink status to the regular status. 1095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (status_known(m_SymLinkStatus) 1105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao && !is_symlink(m_SymLinkStatus)) 1115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { 1125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_FileStatus = m_SymLinkStatus; 1135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 1145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao else detail::status(m_Path,m_FileStatus); 1155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 1165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_FileStatus; 1175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoFileStatus Directory::symlinkStatus() const 1215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 1225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (!status_known(m_SymLinkStatus)) 1235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao detail::symlink_status(m_Path,m_SymLinkStatus); 1245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_SymLinkStatus; 1255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoDirectory::iterator Directory::begin() 1285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 1295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (m_CacheFull && m_Cache.empty()) 1305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return end(); 1315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao PathCache::iterator iter = m_Cache.begin(); 1325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (NULL == iter.getEntry()) 1335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ++iter; 1345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return iterator(this, iter); 1355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoDirectory::iterator Directory::end() 1385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 1395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return iterator(0, m_Cache.end()); 1405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaovoid Directory::clear() 1435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 1445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_Path.native().clear(); 1455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_FileStatus = FileStatus(); 1465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_SymLinkStatus = FileStatus(); 1475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_Cache.clear(); 1485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao detail::close_dir(*this); 1495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//========================== 1525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// DirIterator 1535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoDirIterator::DirIterator(Directory* pParent, 1545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const DirIterator::DirCache::iterator& pIter) 1555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao : m_pParent(pParent), 1565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_Iter(pIter) { 1575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pEntry = m_Iter.getEntry(); 1585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoDirIterator::DirIterator(const DirIterator& pCopy) 1615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao : m_pParent(pCopy.m_pParent), 1625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_Iter(pCopy.m_Iter), 1635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pEntry(pCopy.m_pEntry) { 1645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoDirIterator::~DirIterator() 1675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 1685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoPath* DirIterator::path() 1715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 1726f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines if (NULL == m_pParent) 1736f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return NULL; 1746f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return &m_pEntry->value(); 1755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoconst Path* DirIterator::path() const 1785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 1796f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines if (NULL == m_pParent) 1806f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return NULL; 1816f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return &m_pEntry->value(); 1825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoDirIterator& DirIterator::operator=(const DirIterator& pCopy) 1855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 1865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pParent = pCopy.m_pParent; 1875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_Iter = pCopy.m_Iter; 1885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pEntry = pCopy.m_pEntry; 1895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return (*this); 1905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoDirIterator& DirIterator::operator++() 1935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 1945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (0 == m_pParent) 1955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *this; 1965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // move forward one step first. 1985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ++m_Iter; 1995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (m_pParent->m_Cache.end() == m_Iter) { 2015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (!m_pParent->m_CacheFull) { 2025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pEntry = detail::bring_one_into_cache(*this); 2035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (0 == m_pEntry && m_pParent->m_CacheFull) 2045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pParent = 0; 2055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *this; 2065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 2075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pParent = 0; 2085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *this; 2095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 2105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pEntry = m_Iter.getEntry(); 2125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *this; 2135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 2145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoDirIterator DirIterator::operator++(int) 2165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 2175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao DirIterator tmp(*this); 2185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // move forward one step first. 2205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ++m_Iter; 2215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (m_pParent->m_Cache.end() == m_Iter) { 2235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (!m_pParent->m_CacheFull) { 2245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pEntry = detail::bring_one_into_cache(*this); 2255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (0 == m_pEntry && m_pParent->m_CacheFull) 2265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pParent = 0; 2275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return tmp; 2285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 2295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pParent = 0; 2305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return tmp; 2315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 2325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pEntry = m_Iter.getEntry(); 2345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return tmp; 2355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 2365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaobool DirIterator::operator==(const DirIterator& y) const 2385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 2395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (m_pParent != y.m_pParent) 2405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return false; 2415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (0 == m_pParent) 2425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return true; 2435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const Path* x_path = path(); 2445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const Path* y_path = y.path(); 2455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (0 == x_path && 0 == y_path) 2465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return true; 2475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (0 == x_path || 0 == y_path) 2485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return false; 2495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return (*x_path == *y_path); 2505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 2515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaobool DirIterator::operator!=(const DirIterator& y) const 2535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 2545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return !this->operator==(y); 2555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 2565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 257