diff options
author | Jens-Heiner Rechtien <hr@openoffice.org> | 2006-06-19 12:41:57 +0000 |
---|---|---|
committer | Jens-Heiner Rechtien <hr@openoffice.org> | 2006-06-19 12:41:57 +0000 |
commit | ef75547b647cfd26149d20b017372a651d19431c (patch) | |
tree | 2ad5a60ae1f34bbe0eb9bc547ba78b0555a68b4e /tools/source/fsys | |
parent | bda7552fd3a2cfa474fd493bc5c5acdd9ff064be (diff) |
INTEGRATION: CWS warnings01 (1.4.8); FILE REMOVED
2005/10/13 13:24:28 sb 1.4.8.1: #i53898# Removed code for obsolete platforms.
Diffstat (limited to 'tools/source/fsys')
-rw-r--r-- | tools/source/fsys/os2.cxx | 1123 |
1 files changed, 0 insertions, 1123 deletions
diff --git a/tools/source/fsys/os2.cxx b/tools/source/fsys/os2.cxx deleted file mode 100644 index 58aad0ece7be..000000000000 --- a/tools/source/fsys/os2.cxx +++ /dev/null @@ -1,1123 +0,0 @@ -/************************************************************************* - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: os2.cxx,v $ - * - * $Revision: 1.4 $ - * - * last change: $Author: rt $ $Date: 2005-09-09 14:17:11 $ - * - * The Contents of this file are made available subject to - * the terms of GNU Lesser General Public License Version 2.1. - * - * - * GNU Lesser General Public License Version 2.1 - * ============================================= - * Copyright 2005 by Sun Microsystems, Inc. - * 901 San Antonio Road, Palo Alto, CA 94303, USA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - ************************************************************************/ - -#define INCL_DOSEXCEPTIONS - -#ifdef __BORLANDC__ -#include <alloc.h> -#else -#include <malloc.h> -#endif - -#ifndef _DEBUG_HXX -#include <debug.hxx> -#endif -#ifndef _LIST_HXX -#include <list.hxx> -#endif -#ifndef _BIGINT_HXX -#include <bigint.hxx> -#endif -#ifndef _FSYS_HXX -#include <fsys.hxx> -#endif -#include "comdep.hxx" - -#ifdef OS2 -#ifndef _VOS_MUTEX_HXX //autogen -#include <vos/mutex.hxx> -#endif -#endif - -int Sys2SolarError_Impl( int nSysErr ); - -DECLARE_LIST( DirEntryList, DirEntry* ); -DECLARE_LIST( FSysSortList, FSysSort* ); -DECLARE_LIST( FileStatList, FileStat* ); - -static char sCaseMap[256]; -static BOOL bCaseMap = FALSE; -static BOOL bDriveMap = FALSE; - -struct DriveMapItem -{ - DirEntryKind nKind; - char cName; - FSysPathStyle nStyle; -}; - -void CreateCaseMapImpl(); -void CreateDriveMapImpl(); - -static DriveMapItem aDriveMap[26]; - -static BOOL bLastCaseSensitive = FALSE; - -//==================================================================== - -int ApiRet2ToSolarError_Impl( int nApiRet ) -{ - switch ( nApiRet ) - { - case NO_ERROR: return ERRCODE_NONE; - case ERROR_FILE_NOT_FOUND: return ERRCODE_IO_NOTEXISTS; - case ERROR_PATH_NOT_FOUND: return ERRCODE_IO_NOTEXISTSPATH; - case ERROR_TOO_MANY_OPEN_FILES: return ERRCODE_IO_TOOMANYOPENFILES; - case ERROR_ACCESS_DENIED: return ERRCODE_IO_ACCESSDENIED; - case ERROR_NOT_ENOUGH_MEMORY: return ERRCODE_IO_OUTOFMEMORY; - case ERROR_BAD_FORMAT: return ERRCODE_IO_WRONGFORMAT; - case ERROR_NOT_SAME_DEVICE: return ERRCODE_IO_INVALIDDEVICE; - case ERROR_WRITE_PROTECT: return ERRCODE_IO_INVALIDDEVICE; - case ERROR_BAD_UNIT: return ERRCODE_IO_INVALIDDEVICE; - case ERROR_CRC: return ERRCODE_IO_INVALIDDEVICE; - case ERROR_NOT_DOS_DISK: return ERRCODE_IO_INVALIDDEVICE; - case ERROR_WRITE_FAULT: return ERRCODE_IO_CANTWRITE; - case ERROR_READ_FAULT: return ERRCODE_IO_CANTREAD; - case ERROR_SHARING_VIOLATION: return ERRCODE_IO_LOCKVIOLATION; - case ERROR_LOCK_VIOLATION: return ERRCODE_IO_LOCKVIOLATION; - case ERROR_WRONG_DISK: return ERRCODE_IO_LOCKVIOLATION; - case ERROR_HANDLE_DISK_FULL: return ERRCODE_IO_OUTOFSPACE; - case ERROR_NOT_SUPPORTED: return ERRCODE_IO_NOTSUPPORTED; - case ERROR_DUP_NAME: return ERRCODE_IO_ALREADYEXISTS; - case ERROR_BAD_NETPATH: return ERRCODE_IO_NOTEXISTSPATH; - case ERROR_DEV_NOT_EXIST: return ERRCODE_IO_NOTEXISTS; - case ERROR_NETWORK_ACCESS_DENIED: return ERRCODE_IO_ACCESSDENIED; - case ERROR_INVALID_PARAMETER: return ERRCODE_IO_INVALIDPARAMETER; - case ERROR_NET_WRITE_FAULT: return ERRCODE_IO_CANTWRITE; - case ERROR_DEVICE_IN_USE: return ERRCODE_IO_INVALIDPARAMETER; - case ERROR_DISK_FULL: return ERRCODE_IO_OUTOFSPACE; - case ERROR_BAD_ARGUMENTS: return ERRCODE_IO_INVALIDPARAMETER; - case ERROR_BAD_PATHNAME: return ERRCODE_IO_NOTEXISTSPATH; - case ERROR_LOCK_FAILED: return ERRCODE_IO_LOCKVIOLATION; - case ERROR_LOCKED: return ERRCODE_IO_LOCKVIOLATION; - case ERROR_DUPLICATE_NAME: return ERRCODE_IO_ALREADYEXISTS; - case ERROR_DIRECTORY_IN_CDS: return ERRCODE_IO_LOCKVIOLATION; - case ERROR_CURRENT_DIRECTORY: return ERRCODE_IO_LOCKVIOLATION; - case ERROR_FILENAME_EXCED_RANGE: return ERRCODE_IO_NAMETOOLONG; - } - - DBG_TRACE1( "FSys: unknown apiret error %d occured", nApiRet ); - return FSYS_ERR_UNKNOWN; -} - -//-------------------------------------------------------------------- - -DIR *opendir( const char* pPfad ) -{ - DIR *pDir = new DIR; - if ( pDir ) - pDir->p = (char*) pPfad; - return pDir; -} - -struct dirent *readdir( DIR *pDir ) -{ - APIRET nRet; - ULONG nCount = 1; - if ( pDir->p ) - { - char *pBuf = new char[ strlen( pDir->p ) + 5 ]; - if ( pBuf ) - { - // *.* dahinter, ggf mit "\\" abtrennen (falls nicht schon da) - strcpy( pBuf, pDir->p ); - strcat( pBuf, "\\*.*" + ( *(pBuf + strlen( pBuf ) - 1 ) == '\\' ) ); - pDir->aDirHdl = HDIR_SYSTEM; - nRet = DosFindFirst( (PSZ) pBuf, &pDir->aDirHdl, 23, - (PVOID) &pDir->aDirEnt, sizeof( FILEFINDBUF3 ), - &nCount, FIL_STANDARD ); - pDir->p = NULL; - delete pBuf; - } - else - nRet = 1; - } - else - { - nRet = DosFindNext( pDir->aDirHdl, - (PVOID) &pDir->aDirEnt, sizeof( pDir->aDirEnt ), - &nCount ); - } - - return !nRet ? &pDir->aDirEnt : NULL; -} - -int closedir( DIR *pDir ) -{ - if ( pDir ) - { - if ( !pDir->p ) - DosFindClose( pDir->aDirHdl ); - delete pDir; - } - return (pDir != NULL); -} - -typedef struct _FSInfo -{ - ULONG nSerial; - BYTE nNameLen; - UCHAR sName[40]; -} FSInfo; - -char* volumeid( const char* pPfad ) -{ - static FSInfo aFSInfoBuf; - - ULONG ulFSInfoLevel = FSIL_VOLSER; - ULONG nDriveNumber; - - nDriveNumber = toupper(*pPfad) - 'A' + 1; - - if ( nDriveNumber >= 3 ) - { - APIRET rc = DosQueryFSInfo( - nDriveNumber, ulFSInfoLevel, &aFSInfoBuf, sizeof(FSInfo) ); - if ( rc ) - return 0; - return (char*) aFSInfoBuf.sName; - } - return 0; -} - -/************************************************************************* -|* -|* DirEntry::ToAbs() -|* -|* Beschreibung FSYS.SDW -|* Ersterstellung MI 26.04.91 -|* Letzte Aenderung MA 02.12.91 13:30 -|* -*************************************************************************/ - -BOOL DirEntry::ToAbs() -{ - DBG_CHKTHIS( DirEntry, ImpCheckDirEntry ); - - if (paVirtualURL) - { - return TRUE; - } - - if ( FSYS_FLAG_VOLUME == eFlag ) - { - eFlag = FSYS_FLAG_ABSROOT; - return TRUE; - } - - if ( IsAbs() ) - return TRUE; - - char sBuf[512]; - - // Device bestimmen - DirEntry* pTop = ImpGetTopPtr(); - ULONG nDev, nMap; - if ( ( pTop->eFlag == FSYS_FLAG_VOLUME || pTop->eFlag == FSYS_FLAG_RELROOT ) && - pTop->aName.Len() ) - nDev = tolower(aName(0)) - 'a' + 1; - else - DosQueryCurrentDisk( &nDev, &nMap ); - - // das dortige CWD ermitteln; - ULONG nLen = sizeof( sBuf ) - 1; - DirEntry *pCWD = 0; - DosQueryCurrentDir( nDev, (PSZ) sBuf, &nLen ); - if ( sBuf[0] == 0 ) - strcpy( sBuf, "\\" ); - else - pCWD = new DirEntry( String( sBuf ) ); - - // das Device voranstellen - String aTempStr( (char)(nDev + 'a' - 1) ); - aTempStr += ':'; - if ( pCWD ) - pCWD->ImpGetTopPtr()->pParent = - new DirEntry( aTempStr, FSYS_FLAG_ABSROOT, DEFSTYLE ); - else - pCWD = new DirEntry( aTempStr, FSYS_FLAG_ABSROOT, DEFSTYLE ); - - // die relative Root durch ihr aktuelles Verzeichnis ersetzen - if ( pTop == this && - ( pTop->eFlag == FSYS_FLAG_RELROOT || pTop->eFlag == FSYS_FLAG_VOLUME ) ) - { - *pTop = *pCWD; - delete pCWD; - } - else if ( pTop->eFlag == FSYS_FLAG_ABSROOT ) - { - pTop->aName = aTempStr; - delete pCWD; - } - else - { - // dir\\..-Sequenzen aufloesen - while ( (pTop = ImpGetTopPtr())->eFlag == FSYS_FLAG_PARENT && - pTop != this ) - { - pCWD->CutName(); - ImpGetPreTopPtr()->pParent = 0; - delete pTop; - } - - // Pfad davorhaengen - if ( pTop == this && eFlag == FSYS_FLAG_PARENT ) - { - *this = pCWD->GetPath(); - delete pCWD; - } - else - ImpGetTopPtr()->pParent = pCWD; - } - - return IsAbs(); -} - -/************************************************************************* -|* -|* DirEntry::GetVolume() -|* -|* Beschreibung FSYS.SDW -|* Ersterstellung MI 04.03.92 -|* Letzte Aenderung MI 04.03.92 -|* -*************************************************************************/ - -String DirEntry::GetVolume() const -{ - DBG_CHKTHIS( DirEntry, ImpCheckDirEntry ); - - const DirEntry *pTop = ImpGetTopPtr(); - - if ( pTop->eFlag == FSYS_FLAG_ABSROOT || - pTop->eFlag == FSYS_FLAG_VOLUME ) - { - const char *pVol; - pVol = volumeid( (char*) pTop->aName.GetStr() ); - return FSYS2GUI( String( pVol ? pVol : "" ) ); - } - - return String(); -} - -/************************************************************************* -|* -|* DirEntry::SetCWD() -|* -|* Beschreibung FSYS.SDW -|* Ersterstellung MI 26.04.91 -|* Letzte Aenderung MI 21.05.92 -|* -*************************************************************************/ - -BOOL DirEntry::SetCWD( BOOL bSloppy ) -{ - if (paVirtualURL) - { - String aTempString(GetRealPathFromVirtualURL()); - if (aTempString.Len()==0) - { - return FALSE; - } - DirEntry aTempDirEntry(aTempString); - return aTempDirEntry.SetCWD(bSloppy); - } - - // is the device to be changed? - DirEntry *pTop = ImpGetTopPtr(); - if ( ( pTop->eFlag == FSYS_FLAG_ABSROOT || - pTop->eFlag == FSYS_FLAG_RELROOT || pTop->eFlag == FSYS_FLAG_VOLUME ) - && pTop->aName.Len() ) - if ( DosSetDefaultDisk( pTop->aName.Lower()(0)-'a'+1 ) ) - return FALSE; - - APIRET nRet = DosSetCurrentDir( (PSZ) (const char *) GetFull() ); - if ( nRet && bSloppy ) - nRet = DosSetCurrentDir( (PSZ) (const char *) GetPath().GetFull() ); - return !nRet; -} - -/************************************************************************* -|* -|* DirEntry::MoveTo() -|* -|* Beschreibung FSYS.SDW -|* Ersterstellung MI 26.04.91 -|* Letzte Aenderung MA 02.12.91 14:07 -|* -*************************************************************************/ - -BOOL createLongNameEA( const PCSZ pszPath, ULONG ulAttributes, const String& aLongName ); - -FSysError DirEntry::MoveTo( const DirEntry& rDest ) const -{ - DBG_CHKTHIS( DirEntry, ImpCheckDirEntry ); - - DirEntry aTmpDest(rDest); - FileStat aTmpStat(aTmpDest); - if ( aTmpStat.IsKind(FSYS_KIND_DIR) ) - aTmpDest += DirEntry( GetName() ); - - String aSource( GetFull() ); - String aDest( aTmpDest.GetFull() ); - String aShortSource(""); - String aShortDest(""); - - if (Folder::IsAvailable()) - { - if (IsLongNameOnFAT()) - { - // in kurzen Pfad wandeln - ItemIDPath aItemIDPath(aSource); - aShortSource = aItemIDPath.GetHostNotationPath(); - } - if (rDest.IsLongNameOnFAT()) - { - // in kurzen Pfad wandeln - ItemIDPath aItemIDPath(aDest); - aShortDest = aItemIDPath.GetHostNotationPath(); - } - } - - APIRET nRet = DosMove( aShortSource.Len()>0?(PSZ)aShortSource.GetStr():(PSZ)aSource.GetStr(), - aShortDest.Len()>0?(PSZ)aShortDest.GetStr():(PSZ)aDest.GetStr()); - - if ( nRet == ERROR_DIRECTORY_IN_CDS || - nRet == ERROR_CURRENT_DIRECTORY ) - { - // 2nd chance with modified CWD - DosSetCurrentDir( (PSZ) "\\" ); - nRet = DosMove( aShortSource.Len()>0?(PSZ)aShortSource.GetStr():(PSZ)aSource.GetStr(), - aShortDest.Len()>0?(PSZ)aShortDest.GetStr():(PSZ)aDest.GetStr()); - } - else if ( nRet == ERROR_NOT_SAME_DEVICE ) - { - // other volume => copy+delete - FileCopier aMover( *this, rDest ); - nRet = aMover.Execute( FSYS_ACTION_MOVE|FSYS_ACTION_RECURSIVE ); - return nRet; - } - - if ( (nRet==NO_ERROR) && aShortDest.Len()>0) - { - createLongNameEA((const char*)aShortDest, FILE_NORMAL, rDest.GetName()); - } - - return ApiRet2ToSolarError_Impl( nRet ); -} - -//------------------------------------------------------------------------- - -USHORT DirReader_Impl::Init() -{ - USHORT nRead = 0; - if ( pDir->eAttrMask & FSYS_KIND_BLOCK ) - { - CreateDriveMapImpl(); - DirEntry aCurrentDir; - aCurrentDir.ToAbs(); - char sDrive[3] = "?:"; - - for ( char c = START_DRV; c <= 'z'; c++ ) - { - sDrive[0] = c; - DirEntry* pDrive = new DirEntry( sDrive, - FSYS_FLAG_VOLUME, FSYS_STYLE_HOST ); - if ( aDriveMap[c-'a'].nKind != FSYS_KIND_UNKNOWN && - pDir->aNameMask.Matches( sDrive ) ) - { - if ( pDir->pStatLst ) //Status fuer Sort gewuenscht? - { - FileStat *pNewStat = new FileStat( *pDrive ); - pDir->ImpSortedInsert( pDrive, pNewStat ); - } - else - pDir->ImpSortedInsert( pDrive, NULL ); - ++nRead; - } - else - delete pDrive; - } - - aCurrentDir.SetCWD(); - - } - -// OS2 ist beim Directory auslesen nicht threadfest -#ifdef OS2 - static NAMESPACE_VOS( OMutex )* pMutex = 0; - if( !pMutex ) pMutex = new NAMESPACE_VOS( OMutex ); - NAMESPACE_VOS( OGuard ) aGuard( pMutex ); -#endif - // Workaround: kein async-read, da OS/2 dann nix mehr liefert - for ( USHORT nLastRead; nLastRead = Read(); ) - nRead += nLastRead; - - return nRead; -} - -//------------------------------------------------------------------------- - -USHORT DirReader_Impl::Read() -{ - // Directories und Files auflisten? - if ( ( pDir->eAttrMask & FSYS_KIND_DIR || pDir->eAttrMask & FSYS_KIND_FILE ) && - ( ( pDosEntry = readdir( pDosDir ) ) != NULL ) ) - { - if ( ( ( ( pDir->eAttrMask & FSYS_KIND_DIR ) && - ( pDosEntry->d_type & DOS_DIRECT ) ) || - ( ( pDir->eAttrMask & FSYS_KIND_FILE ) && - !( pDosEntry->d_type & DOS_DIRECT ) ) ) && - pDir->aNameMask.Matches( - ToLowerImpl( String( pDosEntry->d_name ) ) ) ) - { - String aName( FSYS2GUI( pDosEntry->d_name ) ); - DirEntryFlag eFlag = - aName == "." ? FSYS_FLAG_CURRENT - : aName == ".." ? FSYS_FLAG_PARENT - : FSYS_FLAG_NORMAL; - DirEntry *pTemp = new DirEntry( String( aName ), - eFlag, FSYS_STYLE_NTFS ); - if ( pParent ) - pTemp->ImpChangeParent( new DirEntry( *pParent ), FALSE ); - if ( pDir->pStatLst ) //Status fuer Sort gewuenscht? - { - FileStat *pNewStat = new FileStat( (void*) pDosDir, (void*) 0 ); - pDir->ImpSortedInsert( pTemp, pNewStat ); - } - else - pDir->ImpSortedInsert( pTemp, NULL ); - return 1; - } - } - else - bReady = TRUE; - return 0; -} - -/************************************************************************* -|* -|* FileStat::FileStat() -|* -|* Beschreibung FSYS.SDW -|* Ersterstellung MA 05.11.91 -|* Letzte Aenderung MA 07.11.91 -|* -*************************************************************************/ - -FileStat::FileStat( const void *pInfo, // struct dirent - const void * ): // dummy - aDateCreated(0), - aTimeCreated(0), - aDateModified(0), - aTimeModified(0), - aDateAccessed(0), - aTimeAccessed(0) -{ - paVirtualURL = NULL; - - struct dirent *pDirent = (struct dirent*) pInfo; - - nSize = pDirent->d_size; - - aDateCreated = MsDos2Date( pDirent->d_date ); - aTimeCreated = MsDos2Time( pDirent->d_time ); - aDateModified = aDateModified; - aTimeModified = aTimeModified; - aDateAccessed = aDateModified; - aTimeAccessed = aTimeModified; - - nKindFlags = FSYS_KIND_FILE; - if ( pDirent->d_type & DOS_DIRECT ) - nKindFlags = FSYS_KIND_DIR; -} - -/************************************************************************* -|* -|* FileStat::Update() -|* -|* Beschreibung FSYS.SDW -|* Ersterstellung MI 11.06.91 -|* Letzte Aenderung MA 07.11.91 -|* -*************************************************************************/ - -struct _FSYS_FSQBUFFER -{ - FSQBUFFER2 aBuf; - UCHAR sBuf[256]; -}; - -BOOL FileStat::Update( const DirEntry& rDirEntry, BOOL bAccessRemovableDevice ) -{ - paVirtualURL = rDirEntry.paVirtualURL; - - nSize = 0; - FSysPathStyle eStyle = FSYS_STYLE_UNKNOWN; - aCreator.Erase(); - aType.Erase(); - aDateCreated = Date(0); - aTimeCreated = Time(0); - aDateModified = Date(0); - aTimeModified = Time(0); - aDateAccessed = Date(0); - aTimeAccessed = Time(0); - - if (paVirtualURL) - { - if (rDirEntry.GetRealPathFromVirtualURL().Len()==0) - { - // keine reale reprsentation fr VirtualURL, also alles setzen, - // lediglich dir/file unterscheidbar - nKindFlags = FSYS_KIND_ALL; - - if (Folder(ItemIDPath(rDirEntry.GetFull())).IsValid()) //ist dir? - { - nKindFlags &= ~FSYS_KIND_FILE; //ja, also kein file - } - else - { - nKindFlags &= ~FSYS_KIND_DIR; //nein, also kein dir - } - - nError = FSYS_ERR_OK; - return TRUE; - } - } - - nError = rDirEntry.IsValid() ? FSYS_ERR_OK : FSYS_ERR_UNKNOWN; - if ( nError > FSYS_ERR_OK ) - return FALSE; - - // Sonderbehandlung falls es sich um eine Wildcard handelt - String aTempName( rDirEntry.GetName() ); - if ( strchr( (char*) (const char*) aTempName, '?' ) || - strchr( (char*) (const char*) aTempName, '*' ) || - strchr( (char*) (const char*) aTempName, ';' ) ) - { - nKindFlags = FSYS_KIND_WILD; - nError = FSYS_ERR_OK; - return TRUE; - } - - // Sonderbehandlung falls es sich um eine Root handelt - if ( rDirEntry.eFlag == FSYS_FLAG_VOLUME || - rDirEntry.eFlag == FSYS_FLAG_ABSROOT ) - { - if ( rDirEntry.eFlag == FSYS_FLAG_VOLUME ) - nKindFlags = FSYS_KIND_DEV; - else - nKindFlags = FSYS_KIND_DIR; - - if ( rDirEntry.aName.Len() == 2 ) - { - if ( !bDriveMap ) - CreateDriveMapImpl(); - - DriveMapItem &rItem = aDriveMap[toupper(rDirEntry.aName[0]) - 'A']; - if ( !rItem.nKind ) - { - nError = ERRCODE_IO_INVALIDDEVICE; - nKindFlags = FSYS_KIND_UNKNOWN; - return FALSE; - } - else - { - if ( rDirEntry.eFlag == FSYS_FLAG_VOLUME ) - nKindFlags |= FSYS_KIND_BLOCK | rItem.nKind; - eStyle = rItem.nStyle; - } - } - - nError = FSYS_ERR_OK; - return TRUE; - } - - // disable error-boxes for hard-errors - DosError(FERR_DISABLEHARDERR); - - // Statusinformation vom Betriebssystem holen - DirEntry aTempDirEntry( rDirEntry ); - char* p; - String aFullName; - - aTempDirEntry.ToAbs(); - aFullName = aTempDirEntry.GetFull(); - - if (aTempDirEntry.paVirtualURL) - { - aFullName = rDirEntry.GetRealPathFromVirtualURL(); - } - - if (Folder::IsAvailable() && aTempDirEntry.IsLongNameOnFAT()) - { - // in String mit kurzem Pfad wandeln - ItemIDPath aItemIDPath(aTempDirEntry.GetFull()); - aFullName = aItemIDPath.GetHostNotationPath(); - } - - p = (char *) aFullName.GetStr(); - - FILESTATUS3 filestat; - memset( &filestat, 0, sizeof( filestat ) ); - if( DosQueryPathInfo( (PSZ)p, 1, &filestat, sizeof( filestat ) ) ) - { - nError = FSYS_ERR_NOTEXISTS; - nKindFlags = FSYS_KIND_UNKNOWN; - return FALSE; - } - - nError = FSYS_ERR_OK; - nSize = filestat.cbFile; - - nKindFlags = FSYS_KIND_UNKNOWN; - if( filestat.attrFile & FILE_DIRECTORY ) - nKindFlags |= FSYS_KIND_DIR; - if ( nKindFlags == FSYS_KIND_UNKNOWN ) - nKindFlags = nKindFlags | FSYS_KIND_FILE; - - aDateModified = Date( filestat.fdateLastWrite.day, - filestat.fdateLastWrite.month, - filestat.fdateLastWrite.year + 1980 ); - - aTimeModified = Time( filestat.ftimeLastWrite.hours, - filestat.ftimeLastWrite.minutes, - filestat.ftimeLastWrite.twosecs*2 ); - - if ( filestat.fdateCreation.day ) - { - aDateCreated = Date( filestat.fdateCreation.day, - filestat.fdateCreation.month, - filestat.fdateCreation.year + 1980 ); - - aTimeCreated = Time( filestat.ftimeCreation.hours, - filestat.ftimeCreation.minutes, - filestat.ftimeCreation.twosecs*2 ); - } - else - { - aDateCreated = aDateModified; - aTimeCreated = aTimeModified; - } - - if ( filestat.fdateLastAccess.day > 0 ) - { - aDateAccessed = Date( filestat.fdateLastAccess.day, - filestat.fdateLastAccess.month, - filestat.fdateLastAccess.year + 1980 ); - - aTimeAccessed = Time( filestat.ftimeLastAccess.hours, - filestat.ftimeLastAccess.minutes, - filestat.ftimeLastAccess.twosecs*2 ); - } - else - { - aDateAccessed = aDateModified; - aTimeAccessed = aTimeModified; - } - - return TRUE; -} - -BOOL IsRedirectable_Impl( const String &rPath ) -{ - if ( rPath.Len() >= 3 && ':' == rPath.GetStr()[1] ) - { - DriveMapItem &rItem = aDriveMap[toupper(rPath[0]) - 'A']; - return FSYS_KIND_FIXED != rItem.nKind; - } - return FALSE; -} -const char* TempDirImpl( char *pBuf ) -{ -#if defined( __BORLANDC__ ) && (__BORLANDC__ < 0x0460) - PSZ pVar; -#else - PCSZ pVar; -#endif - USHORT nRet; - BOOL bAppendTemp = FALSE; // mu\s noch \\temp angeh"angt werden - - // Erstmal sehen, ob TEMP oder TMP gesetzt sind - nRet = DosScanEnv( (PSZ)"TEMP", &pVar ); - if( nRet ) - nRet = DosScanEnv( (PSZ)"temp", &pVar ); - if( nRet ) - nRet = DosScanEnv( (PSZ)"TMP", &pVar ); - if( nRet ) - nRet = DosScanEnv( (PSZ)"tmp", &pVar ); - - // falls das geklappt hat, und ein Backslash dranhaengt, - // oder falls es bisher nicht geklappt hat, - // muessen wir nachher einen Backslash entfernen - BOOL bRemoveBS = nRet || *(pVar+strlen(pVar)-1) == '\\'; - - // Keine temp-Variable gefunden, dann gehen wir mal auf die Suche - // nach dem System-Laufwerk - if( nRet ) - { - nRet = DosScanEnv( (PSZ)"USER_INI",&pVar ); - bAppendTemp = (0 == nRet); - } - if( nRet ) - { - nRet = DosScanEnv( (PSZ)"SYSTEM_INI", &pVar ); - bAppendTemp = (0 == nRet); - } - if( nRet ) - // Wenn das immer noch nicht reicht nehmen wir eben die Root von C: -#ifdef __BORLANDC__ - pVar = (PSZ)"c:\\temp\\"; -#else - pVar = (PCSZ)"c:\\temp\\"; -#endif - strcpy( pBuf, (const char*)pVar ); - - // jetzt haengt ggf. ein Backlash dran, den wir abschneiden, - // ggf. inklusive dahinter haengendem Dateinamen - if ( bRemoveBS ) - { - char *pTail = pBuf + strlen(pBuf) - 1; - for ( char cLast = *pTail; cLast != '\\'; cLast = *(--pTail) ) - *pTail = 0; - } - - if ( bAppendTemp ) - strcat( pBuf, "\\temp" ); - DirEntry( pBuf ).MakeDir(); - - return pBuf; -} - -#define CURRENT_COUNTRY 0 -#define NLS_CODEPAGE 850 - -/*==================================================================== - * CreateCaseMapImpl() - * creates a map of each character to convert to lower - *--------------------------------------------------------------------*/ - -void CreateCaseMapImpl() -{ - // build a string starting with code 0 as first character upto 255 - char sTemp[256]; - for ( USHORT n = 0; n < 256; ++n ) - sTemp[n] = (char) n; - - // convert string to upper case - COUNTRYCODE aCountry; - aCountry.country = CURRENT_COUNTRY; /* Country code */ - aCountry.codepage = NLS_CODEPAGE; /* Code page */ - DosMapCase( 255, &aCountry, sTemp+1 ); - - // fill a global buffer starting with code 0 as first character upto 255 - for ( n = 0; n < 256; ++n ) - sCaseMap[n] = (char) n; - - // reorder by upper-code and store in a global buffer - for ( n = 255; n > 0; --n ) - // was this character converted? - if ( sTemp[n] != (char) n ) - // we found a convertion from upper to lower - sCaseMap[ (unsigned char) sTemp[n] ] = (char) n; - - bCaseMap = TRUE; -} - -String ToLowerImpl( const String& rSource ) -{ - if ( !bCaseMap ) - CreateCaseMapImpl(); - - // TH sagt: International ist zu langsam, also mit einer eigenen Map - String aLower( rSource ); - for ( USHORT n = 0; n < aLower.Len(); ++n ) - aLower[n] = sCaseMap[ (unsigned char) aLower[n] ]; - return aLower; -} - -/*==================================================================== - * CreateDriveMapImpl() - * creates a map of drive-infos like FileSystem (style) and Kind (remote) - *--------------------------------------------------------------------*/ - -typedef struct _FSQBUFFER_ -{ - FSQBUFFER2 aBuf; - UCHAR sBuf[64]; -} FSQBUFFER_; - -void CreateDriveMapImpl() -{ -#ifdef POWERPC - // !!!!! Hack, da der untere Teil mit Beta 2 noch abstuertzt !!!!! - BYTE nFloppies = 1; - for ( USHORT nDrive = 0; nDrive < 26; ++nDrive ) - { - if ( nDrive < nFloppies ) - { - aDriveMap[nDrive].nKind = FSYS_KIND_REMOVEABLE; - aDriveMap[nDrive].nStyle = FSYS_STYLE_FAT; - } - else - { - aDriveMap[nDrive].nKind = FSYS_KIND_UNKNOWN; - aDriveMap[nDrive].nStyle = FSYS_STYLE_UNKNOWN; - } - } - - aDriveMap[2].nKind = FSYS_KIND_FIXED; - aDriveMap[2].nStyle = FSYS_STYLE_FAT; -#else - FSQBUFFER_ aBuf; - ULONG nBufLen; - APIRET nRet; - - // disable error-boxes for hard-errors - DosError(FERR_DISABLEHARDERR); - - // determine number of floppy-drives - BYTE nFloppies; - nRet = DosDevConfig( (void*) &nFloppies, DEVINFO_FLOPPY ); - - // reset the map - for ( USHORT nDrive = 0; nDrive < 26; ++nDrive ) - { - if ( nDrive < nFloppies ) - { - aDriveMap[nDrive].nKind = FSYS_KIND_REMOVEABLE; - aDriveMap[nDrive].nStyle = FSYS_STYLE_FAT; - } - else - { - aDriveMap[nDrive].nKind = FSYS_KIND_UNKNOWN; - aDriveMap[nDrive].nStyle = FSYS_STYLE_UNKNOWN; - } - } - - // determine file-system via DosOpen/DocDevIOCtrl - for ( nDrive = 2; nDrive < 26; ++nDrive ) - { - // open drive - BOOL bFixed; - HFILE nDevHandle; - char pDriveName[3] = "#:"; - pDriveName[0] = nDrive+'a'; - ULONG nAction; - nRet = DosOpen( (PSZ) pDriveName, &nDevHandle, - &nAction, 0, 0, OPEN_ACTION_OPEN_IF_EXISTS, - OPEN_FLAGS_DASD|OPEN_SHARE_DENYNONE|OPEN_ACCESS_READONLY, - 0 ); - - // exists? - if ( !nRet ) - { - // removeable? - BYTE nDriveId = nDrive; - ULONG nParaOutLen, nDataOutLen; - nRet = DosDevIOCtl(nDevHandle, 8, 0x20, - &nDriveId, sizeof(nDriveId), &nParaOutLen, - &bFixed, sizeof(bFixed), &nDataOutLen ); - - // prepare the drive-map - if ( !nRet && !bFixed ) - aDriveMap[nDrive].nKind = FSYS_KIND_REMOVEABLE; - - // close drive - DosClose(nDevHandle); - } - else if ( nRet == ERROR_NOT_READY ) - aDriveMap[nDrive].nKind = FSYS_KIND_REMOVEABLE | FSYS_KIND_CDROM; - } - - // determine file-system via FSAttach - nRet = 0; - for ( USHORT n = 3; nRet != ERROR_NO_MORE_ITEMS; ++n ) - { - nBufLen = sizeof( aBuf ); - nRet = DosQueryFSAttach( 0, n, FSAIL_DRVNUMBER, - (_FSQBUFFER2*) &aBuf, &nBufLen ); - if ( !nRet ) - { - nDrive = toupper(aBuf.aBuf.szName[0]) - 'A'; - - if ( aDriveMap[nDrive].nKind == FSYS_KIND_UNKNOWN ) - aDriveMap[nDrive].nKind = - aBuf.aBuf.iType == 3 ? FSYS_KIND_FIXED : - aBuf.aBuf.iType == 4 ? FSYS_KIND_REMOTE : - FSYS_KIND_UNKNOWN; - - char *pType = (char*)(aBuf.aBuf.szName + aBuf.aBuf.cbName + 1); - aDriveMap[nDrive].nStyle = - strcmp( pType, "FAT" ) == 0 ? FSYS_STYLE_FAT : - strcmp( pType, "HPFS" ) == 0 ? FSYS_STYLE_HPFS : - strcmp( pType, "NWFS" ) == 0 ? FSYS_STYLE_NWFS : - strcmp( pType, "EXT2" ) == 0 ? FSYS_STYLE_UNX : - strcmp( pType, "NFS" ) == 0 ? FSYS_STYLE_UNX : - FSYS_STYLE_UNKNOWN; - if ( strcmp( pType, "CDFS" ) == 0 ) - aDriveMap[nDrive].nKind = FSYS_KIND_CDROM|FSYS_KIND_REMOVEABLE; - } - } -#endif - - bDriveMap = TRUE; -} - -Time MsDos2Time( const time_t *pTimeT ) -{ - tm *pTm = localtime( pTimeT ); - if ( pTm ) - return Time( pTm->tm_hour, pTm->tm_min, pTm->tm_sec ); - else - return Time(0); -} - -Date MsDos2Date( const time_t *pTimeT ) -{ - tm *pTm = localtime( pTimeT ); - if ( pTm ) - return Date( pTm->tm_mday, pTm->tm_mon + 1, pTm->tm_year ); - else - return Date(0); -} - -/************************************************************************* -|* -|* DirEntry::GetPathStyle() const -|* -|* Beschreibung -|* Ersterstellung MI 11.05.95 -|* Letzte Aenderung MI 11.05.95 -|* -*************************************************************************/ - -FSysPathStyle DirEntry::GetPathStyle( const String &rDevice ) -{ - // UNC-Pathname? - if ( !rDevice || ( rDevice.Len() > 1 && rDevice[ (USHORT) 1] != ':' ) ) - return FSYS_STYLE_UNKNOWN; - - if ( !bDriveMap ) - CreateDriveMapImpl(); - return aDriveMap[toupper(rDevice[0]) - 'A'].nStyle; -} - -/************************************************************************* -|* -|* DirEntry::IsCaseSensitive() const -|* -|* Beschreibung -|* Ersterstellung TPF 26.02.1999 -|* Letzte Aenderung -|* -*************************************************************************/ - -BOOL DirEntry::IsCaseSensitive( FSysPathStyle eFormatter ) const -{ - if (eFormatter==FSYS_STYLE_HOST) - { - if (GetPathStyle(GetDevice().GetName()) == FSYS_STYLE_UNX) - { - return TRUE; - } - else - { - return FALSE; - } - } - else - { - BOOL isCaseSensitive = FALSE; // ich bin unter OS2, also ist der default im Zweifelsfall case insensitiv - switch ( eFormatter ) - { - case FSYS_STYLE_MAC: - case FSYS_STYLE_FAT: - case FSYS_STYLE_VFAT: - case FSYS_STYLE_NTFS: - case FSYS_STYLE_NWFS: - case FSYS_STYLE_HPFS: - case FSYS_STYLE_DETECT: - { - isCaseSensitive = FALSE; - break; - } - case FSYS_STYLE_SYSV: - case FSYS_STYLE_BSD: - { - isCaseSensitive = TRUE; - break; - } - default: - { - isCaseSensitive = FALSE; // ich bin unter OS2, also ist der default im Zweifelsfall case insensitiv - break; - } - } - return isCaseSensitive; - } -} - - - - -//========================================================================= - -ErrCode FileStat::QueryDiskSpace( const String &rPath, - BigInt &rFreeBytes, BigInt &rTotalBytes ) -{ - FSALLOCATE aFSInfoBuf; - String aVolume( DirEntry(rPath).ImpGetTopPtr()->GetName() ); - ULONG nDriveNumber = toupper( aVolume(0) ) - 'A' + 1; - - APIRET rc = DosQueryFSInfo( nDriveNumber, FSIL_ALLOC, - &aFSInfoBuf, sizeof(aFSInfoBuf) ); - if ( rc ) - return Sys2SolarError_Impl( rc ); - - BigInt aBytesPerCluster( BigInt(aFSInfoBuf.cbSector) * - BigInt(aFSInfoBuf.cSectorUnit) ); - rFreeBytes = aBytesPerCluster * BigInt(aFSInfoBuf.cUnitAvail); - rTotalBytes = aBytesPerCluster * BigInt(aFSInfoBuf.cUnit); - return 0; -} - -//========================================================================= - -void FSysEnableSysErrorBox( BOOL bEnable ) -{ - DosError( bEnable ? 0 : FERR_DISABLEHARDERR ); -} - |