summaryrefslogtreecommitdiff
path: root/tools/source/fsys/wntmsc.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'tools/source/fsys/wntmsc.cxx')
-rw-r--r--tools/source/fsys/wntmsc.cxx770
1 files changed, 0 insertions, 770 deletions
diff --git a/tools/source/fsys/wntmsc.cxx b/tools/source/fsys/wntmsc.cxx
deleted file mode 100644
index c6cf063abdfa..000000000000
--- a/tools/source/fsys/wntmsc.cxx
+++ /dev/null
@@ -1,770 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#ifdef _MSC_VER
-#pragma warning (push,1)
-#endif
-
-#include <stdio.h>
-#include <ctype.h>
-#include <limits.h>
-
-#ifdef _MSC_VER
-#pragma warning (pop)
-#endif
-
-#include "wntmsc.hxx"
-#include <tools/errinf.hxx>
-#include <tools/debug.hxx>
-#include <tools/fsys.hxx>
-#include <vector>
-
-#define INIT_WIN32_FIND_DATAA { 0, { 0, 0 }, { 0, 0 }, { 0, 0 }, 0, 0, 0, 0, { 0 }, { 0 } }
-
-int Sys2SolarError_Impl( int nSysErr );
-
-rtl::OString Upper_Impl(const rtl::OString &rStr)
-{
- std::vector<sal_Char> aBuffer(rStr.getLength());
- memcpy(&aBuffer[0], rStr.getStr(), rStr.getLength());
- CharUpperBuff(&aBuffer[0], rStr.getLength());
- return rtl::OString(&aBuffer[0], rStr.getLength());
-}
-
-DIR *opendir( const char* pPfad )
-{
- DIR *pDir = new DIR;
- if ( pDir )
- pDir->p = (char*) pPfad;
- return pDir;
-}
-
-struct dirent *readdir( DIR *pDir )
-{
- bool bOk = false;
- if ( pDir->p )
- {
- char *pBuf = new char[ strlen( pDir->p ) + 5 ];
- if ( pBuf )
- {
- // if string ends with *.*, seperate with "\\" (unless it exists)
- strcpy( pBuf, pDir->p );
- strcat( pBuf, "\\*.*" + ( *(pBuf + strlen( pBuf ) - 1 ) == '\\' ) );
- CharUpperBuff( pBuf, strlen(pBuf) );
- pDir->h = FindFirstFile( pBuf, &pDir->aDirEnt );
- bOk = pDir->h != INVALID_HANDLE_VALUE;
- pDir->p = NULL;
- delete [] pBuf;
- }
- else
- pDir->h = INVALID_HANDLE_VALUE;
- }
- else
- {
- bOk = FindNextFile( pDir->h, &pDir->aDirEnt );
- }
-
- return bOk ? &pDir->aDirEnt : NULL;
-}
-
-int closedir( DIR *pDir )
-{
- sal_Bool bOk = sal_False;
- if ( pDir )
- {
- bOk = 0 != pDir->p || FindClose( pDir->h );
- delete pDir;
- }
- return bOk;
-}
-
-sal_Bool DirEntry::ToAbs()
-{
- DBG_CHKTHIS( DirEntry, ImpCheckDirEntry );
-
- if ( FSYS_FLAG_VOLUME == eFlag )
- {
- eFlag = FSYS_FLAG_ABSROOT;
- return sal_True;
- }
-
- if ( IsAbs() )
- {
- return sal_True;
- }
-
-
- char sBuf[256];
- char *pOld;
- rtl::OString aFullName(rtl::OUStringToOString(GetFull(),
- osl_getThreadTextEncoding()));
- if ( GetFullPathName(aFullName.getStr(), 256, sBuf, &pOld) > 511 )
- return sal_False;
-
- *this = DirEntry( String(sBuf, osl_getThreadTextEncoding() ));
- return sal_True;
-}
-
-String DirEntry::GetVolume() const
-{
- DBG_CHKTHIS( DirEntry, ImpCheckDirEntry );
-
- String aRet;
- const DirEntry *pTop = ImpGetTopPtr();
- rtl::OString aTopName = rtl::OString(pTop->aName).toAsciiLowerCase();
-
- if ( ( pTop->eFlag == FSYS_FLAG_ABSROOT ||
- pTop->eFlag == FSYS_FLAG_RELROOT ||
- pTop->eFlag == FSYS_FLAG_VOLUME )
- && aTopName != "a:"
- && aTopName != "b:" && Exists() )
- {
- char sFileSysName[256];
- char sVolumeName[256];
- DWORD nVolumeNameLen = 256;
- DWORD nSerial[2];
- DWORD nMaxCompLen[2];
- DWORD nFlags[2];
- rtl::OString aRootDir = pTop->aName;
-
- // Try network device first due to slow samba drives
- if ( !WNetGetConnection( aRootDir.getStr(),
- sVolumeName, &nVolumeNameLen ) )
- aRet = String( sVolumeName, osl_getThreadTextEncoding());
-
- // Append volume name for local drives
- if ( aRet.Len() == 0 )
- {
- aRootDir += "\\";
- if ( GetVolumeInformation( aRootDir.getStr(),
- sVolumeName, 256,
- (LPDWORD) &nSerial, (LPDWORD) &nMaxCompLen,
- (LPDWORD) &nFlags, sFileSysName, 256 ) )
- aRet = String( sVolumeName, osl_getThreadTextEncoding());
- }
- }
-
- return aRet;
-}
-
-sal_Bool DirEntry::SetCWD( sal_Bool bSloppy ) const
-{
- DBG_CHKTHIS( DirEntry, ImpCheckDirEntry );
-
- if ( eFlag == FSYS_FLAG_CURRENT && !aName.getLength() )
- return sal_True;
-
- if ( SetCurrentDirectory(rtl::OUStringToOString(GetFull(), osl_getThreadTextEncoding()).getStr()) )
- {
- return sal_True;
- }
-
- if ( bSloppy && pParent &&
- SetCurrentDirectory(rtl::OUStringToOString(pParent->GetFull(), osl_getThreadTextEncoding()).getStr()) )
- {
- return sal_True;
- }
-
- return sal_False;
-}
-
-USHORT DirReader_Impl::Init()
-{
- // List Block-devices?
- if ( pDir->eAttrMask & FSYS_KIND_BLOCK )
- {
- // remember CWD
- DirEntry aCurrentDir;
- aCurrentDir.ToAbs();
-
- // Check for existence and conformity to flags
- USHORT nRead = 0;
- char sDrive[3] = { '?', ':', 0 };
- char sRoot[4] = { '?', ':', '\\', 0 };
- for ( char c = 'a'; c <= 'z'; c++ )
- {
- sDrive[0] = c;
- sRoot[0] = c;
- DirEntry* pDrive = new DirEntry( sDrive, FSYS_FLAG_VOLUME );
- if ( pDir->aNameMask.Matches( String(rtl::OStringToOUString(sDrive, osl_getThreadTextEncoding())) ) && GetDriveType( sRoot ) != 1 )
- {
- if ( pDir->pStatLst ) // Status required by sorting criteria?
- {
- FileStat *pNewStat = new FileStat( *pDrive );
- pDir->ImpSortedInsert( pDrive, pNewStat );
- }
- else
- pDir->ImpSortedInsert( pDrive, NULL );
- ++nRead;
- }
- else
- delete pDrive;
- }
-
- // restore CWD
- aCurrentDir.SetCWD();
- return nRead;
- }
-
- return 0;
-}
-
-USHORT DirReader_Impl::Read()
-{
- // List directories and Files?
- if ( ( pDir->eAttrMask & FSYS_KIND_DIR ||
- pDir->eAttrMask & FSYS_KIND_FILE ) &&
- ( ( pDosEntry = readdir( pDosDir ) ) != NULL ) )
- {
- // Do not distinguish between lower-/upper-case letters
- size_t nLen = strlen(pDosEntry->d_name);
- std::vector<char> aBuffer(nLen);
- memcpy(&aBuffer[0], pDosEntry->d_name, nLen);
- CharLowerBuff(&aBuffer[0], nLen);
- rtl::OString aLowerName(&aBuffer[0], nLen);
-
- // check Flags
- sal_Bool bIsDirAndWantsDir =
- ( ( pDir->eAttrMask & FSYS_KIND_DIR ) &&
-#ifdef ICC
- ( pDosEntry->d_type & ( strcmp(pDosEntry->d_name,".") ||
- strcmp(pDosEntry->d_name,"..")) ) );
-#else
- ( pDosEntry->d_type & DOS_DIRECT ) );
-#endif
- sal_Bool bIsFileAndWantsFile =
- ( ( pDir->eAttrMask & FSYS_KIND_FILE ) &&
-#ifdef ICC
- !( pDosEntry->d_type & ( strcmp(pDosEntry->d_name,".") ||
- strcmp(pDosEntry->d_name,"..")) ) &&
-#else
- !( pDosEntry->d_type & DOS_DIRECT ) &&
-#endif
- !( pDosEntry->d_type & DOS_VOLUMEID ) );
- sal_Bool bIsHidden = (pDosEntry->d_type & _A_HIDDEN) != 0;
- sal_Bool bWantsHidden = 0 == ( pDir->eAttrMask & FSYS_KIND_VISIBLE );
- if ( ( bIsDirAndWantsDir || bIsFileAndWantsFile ) &&
- ( bWantsHidden || !bIsHidden ) &&
- pDir->aNameMask.Matches( rtl::OStringToOUString(aLowerName, osl_getThreadTextEncoding()) ) )
- {
-#ifdef DBG_UTIL
- DbgOutf( "%s %s flags:%x found",
- pDosEntry->d_name,
- bIsFileAndWantsFile ? "file" : "dir",
- pDosEntry->d_type );
-#endif
- DirEntryFlag eFlag =
- 0 == strcmp( pDosEntry->d_name, "." ) ? FSYS_FLAG_CURRENT
- : 0 == strcmp( pDosEntry->d_name, ".." ) ? FSYS_FLAG_PARENT
- : FSYS_FLAG_NORMAL;
- DirEntry *pTemp = new DirEntry( rtl::OString(pDosEntry->d_name),
- eFlag );
-
- pTemp->ImpSetStat( new FileStat( (void*) pDosDir ) );
-
- if ( pParent )
- pTemp->ImpChangeParent( new DirEntry( *pParent ), sal_False );
- if ( pDir->pStatLst ) // Status required by sorting criteria?
- {
- FileStat *pNewStat = new FileStat( (void*) pDosDir );
- pDir->ImpSortedInsert( pTemp, pNewStat );
- }
- else
- pDir->ImpSortedInsert( pTemp, NULL );
- return 1;
- }
-#ifdef DBG_UTIL
- else
- DbgOutf( "%s flags:%x skipped",
- pDosEntry->d_name,
- pDosEntry->d_type );
-#endif
-
- }
- else
- bReady = sal_True;
- return 0;
-}
-
-/// shared part of CTors for FileStat
-void FileStat::ImpInit( void* p )
-{
- _WIN32_FIND_DATAA *pDirEnt = (_WIN32_FIND_DATAA*) p;
-
- nError = FSYS_ERR_OK;
- nSize = pDirEnt->nFileSizeLow;
-
- SYSTEMTIME aSysTime;
- FILETIME aLocTime;
-
- // use the last write date / time when the creation date / time isn't set
- if ( ( pDirEnt->ftCreationTime.dwLowDateTime == 0 ) &&
- ( pDirEnt->ftCreationTime.dwHighDateTime == 0 ) )
- {
- pDirEnt->ftCreationTime.dwLowDateTime = pDirEnt->ftLastWriteTime.dwLowDateTime;
- pDirEnt->ftCreationTime.dwHighDateTime = pDirEnt->ftLastWriteTime.dwHighDateTime;
- }
-
- // use the last write date / time when the last accessed date / time isn't set
- if ( ( pDirEnt->ftLastAccessTime.dwLowDateTime == 0 ) &&
- ( pDirEnt->ftLastAccessTime.dwHighDateTime == 0 ) )
- {
- pDirEnt->ftLastAccessTime.dwLowDateTime = pDirEnt->ftLastWriteTime.dwLowDateTime;
- pDirEnt->ftLastAccessTime.dwHighDateTime = pDirEnt->ftLastWriteTime.dwHighDateTime;
- }
-
- FileTimeToLocalFileTime( &pDirEnt->ftCreationTime, &aLocTime );
- FileTimeToSystemTime( &aLocTime, &aSysTime );
- aDateCreated = Date( aSysTime.wDay, aSysTime.wMonth, aSysTime.wYear );
- aTimeCreated = Time( aSysTime.wHour, aSysTime.wMinute,
- aSysTime.wSecond, 0 );
-
- FileTimeToLocalFileTime( &pDirEnt->ftLastWriteTime, &aLocTime );
- FileTimeToSystemTime( &aLocTime, &aSysTime );
- aDateModified = Date( aSysTime.wDay, aSysTime.wMonth, aSysTime.wYear );
- aTimeModified = Time( aSysTime.wHour, aSysTime.wMinute,
- aSysTime.wSecond, 0 );
-
- FileTimeToLocalFileTime( &pDirEnt->ftLastAccessTime, &aLocTime );
- FileTimeToSystemTime( &aLocTime, &aSysTime );
- aDateAccessed = Date( aSysTime.wDay, aSysTime.wMonth, aSysTime.wYear );
- aTimeAccessed = Time( aSysTime.wHour, aSysTime.wMinute,
- aSysTime.wSecond, 0 );
-
- nKindFlags = FSYS_KIND_FILE;
- if ( pDirEnt->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
- nKindFlags = FSYS_KIND_DIR;
-}
-
-FileStat::FileStat( const void *pInfo ): // struct dirent
- aDateCreated(0),
- aTimeCreated(0),
- aDateModified(0),
- aTimeModified(0),
- aDateAccessed(0),
- aTimeAccessed(0)
-{
- ImpInit( ( (dirent*) pInfo ) );
-}
-
-#ifdef _MSC_VER
-#pragma warning(push, 1)
-#pragma warning(disable: 4917)
-#endif
-
-#include <shlobj.h>
-
-#ifdef _MSC_VER
-#pragma warning(pop)
-#endif
-
-#ifdef UNICODE
-#define lstrchr wcschr
-#define lstrncmp wcsncmp
-#else
-#define lstrchr strchr
-#define lstrncmp strncmp
-#endif
-
-void SHFreeMem( void *p )
-{
- LPMALLOC pMalloc = NULL;
-
- if ( SUCCEEDED(SHGetMalloc(&pMalloc)) )
- {
- pMalloc->Free( p );
- pMalloc->Release();
- }
-}
-
-HRESULT SHGetIDListFromPath( HWND hwndOwner, LPCTSTR pszPath, LPITEMIDLIST *ppidl )
-{
- if ( IsBadWritePtr(ppidl, sizeof(LPITEMIDLIST)) )
- return E_INVALIDARG;
-
- LPSHELLFOLDER pDesktopFolder = NULL;
-
- HRESULT hResult = SHGetDesktopFolder( &pDesktopFolder );
- if ( FAILED(hResult) )
- return hResult;
-
- ULONG chEaten = lstrlen( pszPath );
- DWORD dwAttributes = FILE_ATTRIBUTE_DIRECTORY;
-
-#ifdef UNICODE
- LPOLESTR wszPath = pszPath;
-#else
- WCHAR wszPath[MAX_PATH];
- MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, pszPath, -1, wszPath, MAX_PATH );
-#endif
-
- hResult = pDesktopFolder->ParseDisplayName( hwndOwner, (LPBC)NULL, wszPath, &chEaten, ppidl, &dwAttributes );
- pDesktopFolder->Release();
-
- return hResult;
-}
-
-HRESULT SHGetFolderFromIDList( LPCITEMIDLIST pidl, LPSHELLFOLDER *ppFolder )
-{
- if ( IsBadWritePtr(ppFolder, sizeof(LPSHELLFOLDER)) )
- return E_INVALIDARG;
-
- *ppFolder = NULL;
-
- LPSHELLFOLDER pDesktopFolder = NULL;
-
- HRESULT hResult = SHGetDesktopFolder( &pDesktopFolder );
- if ( FAILED(hResult) )
- return hResult;
-
- hResult = pDesktopFolder->BindToObject( pidl, (LPBC)NULL, IID_IShellFolder, (LPVOID *)ppFolder );
- pDesktopFolder->Release();
-
- return hResult;
-}
-
-HRESULT SHResolvePath( HWND hwndOwner, LPCTSTR pszPath, LPITEMIDLIST *ppidl )
-{
- // If hwndOwner is NULL, use the desktop window, because dialogs need a parent
-
-#ifdef BOOTSTRAP
- return NO_ERROR;
-#else
- if ( !hwndOwner )
- hwndOwner = GetDesktopWindow();
-
- HRESULT hResult = NOERROR;
- LPTSTR pszPathCopy;
- LPTSTR pszTrailingPath;
- TCHAR cBackup = 0;
-
- // First make a copy of the path
-
- pszPathCopy = new TCHAR[lstrlen(pszPath) + 1];
- lstrcpy( pszPathCopy, pszPath );
-
- // Determine the first token
-
- if ( !lstrncmp( pszPathCopy, "\\\\", 2 ) )
- pszTrailingPath = lstrchr( pszPathCopy + 2, '\\' );
- else
- pszTrailingPath = lstrchr( pszPathCopy, '\\' );
-
- // Now scan the path tokens
-
- while ( SUCCEEDED(hResult) )
- {
- if ( pszTrailingPath )
- {
- cBackup = *(++pszTrailingPath);
- *pszTrailingPath = 0;
- }
-
- LPITEMIDLIST pidl = NULL;
-
- // Make item ID list from leading path
-
- hResult = SHGetIDListFromPath( hwndOwner, pszPathCopy, &pidl );
-
- // if path exists try to open it as folder
-
- if ( SUCCEEDED(hResult) )
- {
- // Only open the folder if it was not the last token
-
- if ( pszTrailingPath )
- {
- LPSHELLFOLDER pFolder;
-
- // Create a folder instance
- hResult = SHGetFolderFromIDList( pidl, &pFolder);
-
- // Is it a folder ?
- if ( SUCCEEDED(hResult) )
- {
- // No try to instantiate an enumerator.
- // This should popup a login dialog if any
-
- LPENUMIDLIST pEnum = NULL;
-
- hResult = pFolder->EnumObjects( hwndOwner,
- SHCONTF_NONFOLDERS | SHCONTF_FOLDERS | SHCONTF_INCLUDEHIDDEN,
- &pEnum );
-
- // Release the enumerator interface
- if ( SUCCEEDED(hResult) )
- pEnum->Release();
-
- // Release the folder interface
- pFolder->Release();
- }
-
- SHFreeMem( pidl );
- }
- else // It was the last token
- {
- if ( ppidl )
- *ppidl = pidl;
- else
- SHFreeMem( pidl );
- }
- }
-
-
- // Forward to next token
-
- if ( pszTrailingPath )
- {
- *pszTrailingPath = cBackup;
- pszTrailingPath = lstrchr( pszTrailingPath, '\\' );
- }
- else
- break;
- }
-
- // Free the working copy of the path
- delete pszPathCopy;
-
- // NOERROR or OLE error code
- return hResult;
-#endif
-}
-
-// The Wrapper
-
-sal_Bool Exists_Impl(const rtl::OString& crPath)
-{
- // We do not know if OLE was initialized for this thread
-
- CoInitialize( NULL );
-
- sal_Bool bSuccess = SUCCEEDED( SHResolvePath(NULL, crPath.getStr(), NULL) );
-
- CoUninitialize();
-
- return bSuccess;
-}
-
-sal_Bool FileStat::Update( const DirEntry& rDirEntry, sal_Bool bForceAccess )
-{
- nSize = 0;
- nKindFlags = 0;
- aCreator.Erase();
- aType.Erase();
- aDateCreated = Date(0);
- aTimeCreated = Time(0);
- aDateModified = Date(0);
- aTimeModified = Time(0);
- aDateAccessed = Date(0);
- aTimeAccessed = Time(0);
-
- if ( !rDirEntry.IsValid() )
- {
- nError = FSYS_ERR_UNKNOWN;
- nKindFlags = 0;
- return sal_False;
- }
-
- // Special treatment if it's a root without device
-
- if ( !rDirEntry.aName.getLength() && rDirEntry.eFlag == FSYS_FLAG_ABSROOT )
- {
- nKindFlags = FSYS_KIND_DIR;
- nError = FSYS_ERR_OK;
- return sal_True;
- }
-
- // Redirect
- String aPath( rDirEntry.GetFull() );
- DirEntry aDirEntry( aPath );
-
- // Is a medium in this device?
- // How?
- sal_Bool bAccess = sal_True;
- const DirEntry *pTop = aDirEntry.ImpGetTopPtr();
- rtl::OString aName = rtl::OString(pTop->aName).toAsciiLowerCase();
- if ( !bForceAccess &&
- ( pTop->eFlag == FSYS_FLAG_ABSROOT ||
- pTop->eFlag == FSYS_FLAG_RELROOT ||
- pTop->eFlag == FSYS_FLAG_VOLUME ) )
- {
- if ( aName == "a:" || aName == "b:" )
- bAccess = sal_False;
- else
- OSL_TRACE( "FSys: will access removable device!" );
- }
- if ( bAccess && ( aName == "a:" || aName == "b:" ) )
- {
- DBG_WARNING( "floppy will clatter" );
- }
-
- // Special treatment if it's a volume
- if ( aDirEntry.eFlag == FSYS_FLAG_VOLUME ||
- aDirEntry.eFlag == FSYS_FLAG_ABSROOT )
- {
- if ( aDirEntry.eFlag == FSYS_FLAG_VOLUME )
- nKindFlags = FSYS_KIND_DEV | ( aDirEntry.aName.getLength() == 2
- ? FSYS_KIND_BLOCK
- : FSYS_KIND_CHAR );
- else
- nKindFlags = FSYS_KIND_DIR;
-
- if ( !bAccess )
- {
- if ( aDirEntry.eFlag == FSYS_FLAG_VOLUME )
- nKindFlags |= FSYS_KIND_REMOVEABLE;
- nError = FSYS_ERR_NOTEXISTS;
- nKindFlags = 0;
- return sal_False;
- }
-
- rtl::OString aRootDir = aDirEntry.aName;
- aRootDir += "\\";
- UINT nType = GetDriveType( aRootDir.getStr() ); //TPF: 2i
- if ( nType == 1 || nType == 0 )
- {
- nError = FSYS_ERR_NOTEXISTS;
- nKindFlags = 0;
- return sal_False;
- }
-
- if ( aDirEntry.eFlag == FSYS_FLAG_VOLUME )
- nKindFlags = nKindFlags |
- ( ( nType == DRIVE_REMOVABLE ) ? FSYS_KIND_REMOVEABLE : 0 ) |
- ( ( nType == DRIVE_FIXED ) ? FSYS_KIND_FIXED : 0 ) |
- ( ( nType == DRIVE_REMOTE ) ? FSYS_KIND_REMOTE : 0 ) |
- ( ( nType == DRIVE_RAMDISK ) ? FSYS_KIND_RAM : 0 ) |
- ( ( nType == DRIVE_CDROM ) ? FSYS_KIND_CDROM : 0 ) |
- ( ( nType == 0 ) ? FSYS_KIND_UNKNOWN : 0 );
-
- nError = ERRCODE_NONE;
-
- return sal_True;
- }
-
- // Get status data from OS
- HANDLE h; //()
- _WIN32_FIND_DATAA aEntry = INIT_WIN32_FIND_DATAA;
- DirEntry aAbsEntry( aDirEntry );
- if ( bAccess && aAbsEntry.ToAbs() )
- {
- // names can contain ';*?' as normal characters
- rtl::OString aFilePath(rtl::OUStringToOString(aAbsEntry.GetFull(), osl_getThreadTextEncoding()));
-
- OSL_TRACE( "FileStat: %s", aFilePath.getStr() );
- h = aFilePath.getLength() < 230
- ? FindFirstFile( aFilePath.getStr(), &aEntry )//TPF: 2i
- : INVALID_HANDLE_VALUE;
-
- if ( INVALID_HANDLE_VALUE != h )
- {
- if ( !( aEntry.dwFileAttributes & 0x40 ) ) // com1: etc. e.g. not encrypted (means normal)
- {
- rtl::OString aUpperName = Upper_Impl(rtl::OUStringToOString(aAbsEntry.GetName(), osl_getThreadTextEncoding()));
-
- // HRO: #74051# Compare also with short alternate filename
- if ( aUpperName != Upper_Impl( aEntry.cFileName ) && aUpperName != Upper_Impl( aEntry.cAlternateFileName ) )
- h = INVALID_HANDLE_VALUE;
- }
- }
-
- if ( INVALID_HANDLE_VALUE == h )
- {
- DWORD dwError = GetLastError();
-
- if ( ERROR_BAD_NET_NAME == dwError )
- {
- nKindFlags = FSYS_KIND_UNKNOWN;
- nError = FSYS_ERR_NOTEXISTS;
- return sal_False;
- }
-
- // UNC-Volume?
- DirEntry *pTop2 = aAbsEntry.ImpGetTopPtr();
- if ( pTop2->GetFlag() == FSYS_FLAG_ABSROOT &&
- ( pTop2->aName.getLength() > 1 && (pTop2->aName[1] != ':' )) )
- {
- if ( bForceAccess )
- {
- if ( Exists_Impl( aFilePath ) )
- {
- nKindFlags = FSYS_KIND_DIR|FSYS_KIND_REMOTE;
- nError = FSYS_ERR_OK;
- return sal_True;
- }
- else
- {
- nKindFlags = FSYS_KIND_UNKNOWN;
- nError = FSYS_ERR_NOTEXISTS;
- return sal_False;
- }
- }
- }
- }
- }
- else
- h = INVALID_HANDLE_VALUE;
-
- if ( h == INVALID_HANDLE_VALUE )
- {
- // Special treatment if name contains wildcard
- rtl::OString aTempName(rtl::OUStringToOString(aDirEntry.GetName(), osl_getThreadTextEncoding()));
- if ( strchr( aTempName.getStr(), '?' ) ||
- strchr( aTempName.getStr(), '*' ) ||
- strchr( aTempName.getStr(), ';' ) )
- {
- nKindFlags = FSYS_KIND_WILD;
- nError = FSYS_ERR_OK;
- return sal_True;
- }
-
- if ( bAccess )
- {
- nError = FSYS_ERR_NOTEXISTS;
- nKindFlags = FSYS_KIND_UNKNOWN;
- }
- else
- nKindFlags = FSYS_KIND_REMOVEABLE;
- }
- else
- {
- ImpInit( &aEntry );
- FindClose( h );
- }
-
- if ( 0 != nError )
- nKindFlags = 0;
-
- return 0 == nError;
-
-}
-
-sal_Bool IsRedirectable_Impl( const rtl::OString& rPath )
-{
- if ( rPath.getLength() >= 3 && ':' == rPath[1] )
- {
- rtl::OString aVolume = rPath.copy( 0, 3 );
- UINT nType = GetDriveType( aVolume.getStr() );
- SetLastError( ERROR_SUCCESS );
- return DRIVE_FIXED != nType;
- }
- return sal_False;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */