File Annotation

Not logged in
dcdd144598 2011-02-23        kinaba: #include "stdafx.h"
dcdd144598 2011-02-23        kinaba: #include "find.h"
dcdd144598 2011-02-23        kinaba: using namespace ki;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: //=========================================================================
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: namespace {
dcdd144598 2011-02-23        kinaba: static inline bool isDots(const TCHAR* p)
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	return (*p=='.' && (p[1]=='\0' || (p[1]=='.' && p[2]=='\0')));
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: bool FindFile::FindFirst( const TCHAR* wild, WIN32_FIND_DATA* pfd )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	HANDLE xh = ::FindFirstFile( wild, pfd );
dcdd144598 2011-02-23        kinaba: 	if( xh==INVALID_HANDLE_VALUE )
dcdd144598 2011-02-23        kinaba: 		return false;
dcdd144598 2011-02-23        kinaba: 	while( isDots(pfd->cFileName) )
dcdd144598 2011-02-23        kinaba: 		if( !::FindNextFile( xh, pfd ) )
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 			::FindClose( xh );
dcdd144598 2011-02-23        kinaba: 			return false;
dcdd144598 2011-02-23        kinaba: 		}
dcdd144598 2011-02-23        kinaba: 	::FindClose( xh );
dcdd144598 2011-02-23        kinaba: 	return true;
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void FindFile::Close()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	first_ = true;
dcdd144598 2011-02-23        kinaba: 	if( han_ != INVALID_HANDLE_VALUE )
dcdd144598 2011-02-23        kinaba: 		::FindClose( han_ ), han_ = INVALID_HANDLE_VALUE;
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: bool FindFile::Begin( const TCHAR* wild )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	Close();
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	han_ = ::FindFirstFile( wild, &fd_ );
dcdd144598 2011-02-23        kinaba: 	if( han_ == INVALID_HANDLE_VALUE )
dcdd144598 2011-02-23        kinaba: 		return false;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	while( isDots(fd_.cFileName) )
dcdd144598 2011-02-23        kinaba: 		if( !::FindNextFile( han_, &fd_ ) )
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 			Close();
dcdd144598 2011-02-23        kinaba: 			return false;
dcdd144598 2011-02-23        kinaba: 		}
dcdd144598 2011-02-23        kinaba: 	return true;
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: bool FindFile::Next( WIN32_FIND_DATA* pfd )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	if( han_ == INVALID_HANDLE_VALUE )
dcdd144598 2011-02-23        kinaba: 		return false;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	if( first_ )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		first_ = false;
dcdd144598 2011-02-23        kinaba: 		memmove( pfd, &fd_, sizeof(fd_) );
dcdd144598 2011-02-23        kinaba: 		return true;
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 	if( !::FindNextFile( han_, pfd ) )
dcdd144598 2011-02-23        kinaba: 		return false;
dcdd144598 2011-02-23        kinaba: 	while( isDots(fd_.cFileName) )
dcdd144598 2011-02-23        kinaba: 		if( !::FindNextFile( han_, pfd ) )
dcdd144598 2011-02-23        kinaba: 			return false;
dcdd144598 2011-02-23        kinaba: 	return true;
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: #undef isDots