summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorAndras Timar <atimar@suse.com>2013-04-04 21:40:03 +0200
committerAndras Timar <atimar@suse.com>2013-04-04 21:40:57 +0200
commit75e014c30753f635ddc74cdb654a8342049a114b (patch)
tree2cc7c4c81ee4af795776a3d03a1092cd2cb48105 /tools
parent79af094f8a31d4f47fe3b2675035055523cb54ab (diff)
fdo#61514 clean obsolete tools/ filesystem abstraction
Change-Id: I7d1d5eca43d0b0f9a013e31383abc574a7b15f93
Diffstat (limited to 'tools')
-rw-r--r--tools/Library_tl.mk4
-rw-r--r--tools/Package_inc.mk1
-rw-r--r--tools/inc/tools/fsys.hxx335
-rw-r--r--tools/source/fsys/comdep.cxx32
-rw-r--r--tools/source/fsys/comdep.hxx98
-rw-r--r--tools/source/fsys/dirent.cxx1627
-rw-r--r--tools/source/fsys/fstat.cxx133
-rw-r--r--tools/source/fsys/tdir.cxx416
-rw-r--r--tools/source/fsys/tempfile.cxx1
-rw-r--r--tools/source/fsys/unx.cxx366
-rw-r--r--tools/source/fsys/unx.hxx74
-rw-r--r--tools/source/fsys/wntmsc.cxx770
-rw-r--r--tools/source/fsys/wntmsc.hxx67
13 files changed, 0 insertions, 3924 deletions
diff --git a/tools/Library_tl.mk b/tools/Library_tl.mk
index cf29effe82fb..a48117e194f8 100644
--- a/tools/Library_tl.mk
+++ b/tools/Library_tl.mk
@@ -49,10 +49,6 @@ $(eval $(call gb_Library_add_exception_objects,tl,\
tools/source/datetime/tdate \
tools/source/datetime/ttime \
tools/source/debug/debug \
- tools/source/fsys/comdep \
- tools/source/fsys/dirent \
- tools/source/fsys/fstat \
- tools/source/fsys/tdir \
tools/source/fsys/tempfile \
tools/source/fsys/urlobj \
tools/source/fsys/wldcrd \
diff --git a/tools/Package_inc.mk b/tools/Package_inc.mk
index 5557b12cfbd1..6d6f402d3358 100644
--- a/tools/Package_inc.mk
+++ b/tools/Package_inc.mk
@@ -36,7 +36,6 @@ $(eval $(call gb_Package_add_file,tools_inc,inc/tools/extendapplicationenvironme
$(eval $(call gb_Package_add_file,tools_inc,inc/tools/fldunit.hxx,tools/fldunit.hxx))
$(eval $(call gb_Package_add_file,tools_inc,inc/tools/fontenum.hxx,tools/fontenum.hxx))
$(eval $(call gb_Package_add_file,tools_inc,inc/tools/fract.hxx,tools/fract.hxx))
-$(eval $(call gb_Package_add_file,tools_inc,inc/tools/fsys.hxx,tools/fsys.hxx))
$(eval $(call gb_Package_add_file,tools_inc,inc/tools/gen.hxx,tools/gen.hxx))
$(eval $(call gb_Package_add_file,tools_inc,inc/tools/getprocessworkingdir.hxx,tools/getprocessworkingdir.hxx))
$(eval $(call gb_Package_add_file,tools_inc,inc/tools/globname.hxx,tools/globname.hxx))
diff --git a/tools/inc/tools/fsys.hxx b/tools/inc/tools/fsys.hxx
deleted file mode 100644
index e135a76957c4..000000000000
--- a/tools/inc/tools/fsys.hxx
+++ /dev/null
@@ -1,335 +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 .
- */
-#ifndef _FSYS_HXX
-#define _FSYS_HXX
-
-#include <tools/solar.h>
-#include <tools/datetime.hxx>
-#include <tools/string.hxx>
-#include <tools/link.hxx>
-#include <tools/wldcrd.hxx>
-#include <tools/errcode.hxx>
-#include "tools/toolsdllapi.h"
-
-#include <cstdarg>
-#include <vector>
-
-// FSys-Types
-class DirEntry;
-class FileStat;
-class SvFileStream;
-class BigInt;
-
-typedef ::std::vector< DirEntry* > DirEntryList;
-typedef ::std::vector< FileStat* > FileStatList;
-
-// DirEntryKind
-typedef int DirEntryKind;
-#define FSYS_KIND_NONE ((DirEntryKind) 0)
-#define FSYS_KIND_UNKNOWN FSYS_KIND_NONE
-#define FSYS_KIND_FILE ((DirEntryKind) 1)
-#define FSYS_KIND_DIR ((DirEntryKind) 2)
-#define FSYS_KIND_DEV ((DirEntryKind) 4)
-#define FSYS_KIND_BLOCK ((DirEntryKind) 8)
-#define FSYS_KIND_CHAR ((DirEntryKind) 16)
-#define FSYS_KIND_WILD ((DirEntryKind) 32)
-#define FSYS_KIND_BLOCK_REMOTE ((DirEntryKind) 64)
-#define FSYS_KIND_REMOVEABLE ((DirEntryKind) 128)
-#define FSYS_KIND_FIXED ((DirEntryKind) 256)
-#define FSYS_KIND_REMOTE ((DirEntryKind) 512)
-#define FSYS_KIND_RAM ((DirEntryKind) 1024)
-#define FSYS_KIND_CDROM ((DirEntryKind) 2048)
-#define FSYS_KIND_ALL ((DirEntryKind) 4095)
-#define FSYS_KIND_VISIBLE ((DirEntryKind) 4096)
-
-// FSysSort
-typedef int FSysSort;
-#define FSYS_SORT_NONE ((FSysSort) 0)
-#define FSYS_SORT_SIZE ((FSysSort) 1)
-#define FSYS_SORT_CREATED ((FSysSort) 2)
-#define FSYS_SORT_MODIFYED ((FSysSort) 4)
-#define FSYS_SORT_ACCESSED ((FSysSort) 8)
-#define FSYS_SORT_ASCENDING ((FSysSort) 16)
-#define FSYS_SORT_DESCENDING ((FSysSort) 32)
-#define FSYS_SORT_EXT ((FSysSort) 64)
-#define FSYS_SORT_NAME ((FSysSort) 128)
-#define FSYS_SORT_KIND ((FSysSort) 256)
-#define FSYS_SORT_CREATOR ((FSysSort) 512)
-#define FSYS_SORT_END ((FSysSort)1024)
-typedef ::std::vector< FSysSort > FSysSortList;
-
-// DirEntryFlag
-enum DirEntryFlag
-{
- FSYS_FLAG_NORMAL,
- FSYS_FLAG_VOLUME, // Dir( FSYS_FLAG_VOLUME ) and GetDevice()
- FSYS_FLAG_ABSROOT, // e.g. "a:\" or "\"
- FSYS_FLAG_RELROOT, // e.g. "a:", "a:." or "."
- FSYS_FLAG_CURRENT = FSYS_FLAG_RELROOT, // Synonym for FSYS_FLAG_RELROOT
- FSYS_FLAG_PARENT, // e.g. ".."
- FSYS_FLAG_INVALID
-};
-
-// FSysPathStyle
-enum FSysPathStyle
-{
- FSYS_STYLE_HOST,
- FSYS_STYLE_NTFS,
- FSYS_STYLE_BSD,
- FSYS_STYLE_UNX = FSYS_STYLE_BSD,
- FSYS_STYLE_DETECT,
-};
-
-// FSysAccess
-typedef int FSysAccess;
-#define FSYS_ACCESS_CACHED 2
-#define FSYS_ACCESS_FORCED 1
-#define FSYS_ACCESS_FLOPPY FSYS_ACCESS_FORCED
-
-// FSysAction
-typedef int FSysAction;
-#define FSYS_ACTION_RECURSIVE 0x02 // deep through dircetory structure
-#define FSYS_ACTION_USERECYCLEBIN 0x04 // move to recycle bin
-#define FSYS_ACTION_STANDARD 0
-
-// RFS
-#define RFS_IDENTIFIER "-rfs-"
-
-typedef sal_uIntPtr FSysError;
-
-// FileStat
-struct dirent;
-
-class TOOLS_DLLPUBLIC FileStat
-{
- friend class Dir;
- friend struct DirReader_Impl;
- friend void ImpInitFileStat( FileStat&, dirent* );
-
- sal_uIntPtr nError;
- DirEntryKind nKindFlags;
- sal_uIntPtr nSize;
- String aCreator;
- String aType;
- Date aDateCreated;
- Time aTimeCreated;
- Date aDateModified;
- Time aTimeModified;
- Date aDateAccessed;
- Time aTimeAccessed;
-
-private:
- TOOLS_DLLPRIVATE void ImpInit( void* );
-
-protected:
- // Implementation
- FileStat( SAL_UNUSED_PARAMETER const void *pInfo ); // CInfoPBRec
-
-public:
- FileStat( const DirEntry& rDirEntry,
- FSysAccess nAccess = FSYS_ACCESS_FLOPPY );
- sal_Bool Update( const DirEntry& rDirEntry,
- sal_Bool bForceAccess = sal_True );
-
- sal_uIntPtr GetError() const { return ERRCODE_TOERROR(nError); }
- sal_uIntPtr GetErrorCode() const { return nError; }
-
- sal_uIntPtr GetSize() const { return nSize; }
-
- DirEntryKind GetKind() const { return nKindFlags; }
- sal_Bool IsKind( DirEntryKind nKind ) const;
-
- String GetType() const { return aType; }
- String GetCreator() const { return aCreator; }
-
- Date DateCreated() const { return aDateCreated; }
- Time TimeCreated() const { return aTimeCreated; }
- Date DateModified() const { return aDateModified; }
- Time TimeModified() const { return aTimeModified; }
- Date DateAccessed() const { return aDateAccessed; }
- Time TimeAccessed() const { return aTimeAccessed; }
-
- static sal_uIntPtr SetReadOnlyFlag( const DirEntry &rEntry, sal_Bool bRO = sal_True );
- static sal_Bool GetReadOnlyFlag( const DirEntry &rEntry );
-};
-
-// DirEntry
-
-class DirEntryStack;
-
-const char* ImpCheckDirEntry( const void* p );
-
-class TOOLS_DLLPUBLIC DirEntry
-{
-friend struct DirReader_Impl;
-
- FileStat* pStat; // optional
-
- rtl::OString aName;
- DirEntry* pParent;
- sal_uIntPtr nError;
- DirEntryFlag eFlag;
-
-private:
- TOOLS_DLLPRIVATE DirEntry( const rtl::OString& rInitName,
- DirEntryFlag aDirFlag );
-
- friend class Dir;
- friend class FileStat;
- friend const char* ImpCheckDirEntry( const void* p );
-
- TOOLS_DLLPRIVATE FSysError ImpParseName( const rtl::OString& rIntiName );
- TOOLS_DLLPRIVATE const DirEntry* ImpGetTopPtr() const;
- TOOLS_DLLPRIVATE DirEntry* ImpGetTopPtr();
-
-protected:
- void ImpTrim();
- const rtl::OString& ImpTheName() const;
- DirEntryFlag ImpTheFlag() const { return eFlag; };
- DirEntry* ImpChangeParent( DirEntry* pNewParent, sal_Bool bNormalize = sal_True );
- DirEntry* ImpGetParent() { return pParent; }
-
- FileStat* ImpGetStat() const { return pStat; }
- void ImpSetStat( FileStat *p ) { pStat = p; }
-
-protected:
- void SetError( sal_uIntPtr nErr ) { nError = nErr; }
- DirEntry* GetParent() { return pParent; }
-
-public:
- DirEntry( DirEntryFlag aDirFlag = FSYS_FLAG_CURRENT );
- DirEntry( const DirEntry& rEntry );
- DirEntry( const rtl::OString& rInitName,
- FSysPathStyle eParser = FSYS_STYLE_HOST );
- DirEntry( const String& rInitName,
- FSysPathStyle eParser = FSYS_STYLE_HOST );
- ~DirEntry();
-
- sal_uIntPtr GetError() const { return nError; }
- sal_Bool IsValid() const;
- DirEntryFlag GetFlag() const { return eFlag; };
-
- void SetExtension( const String& rExt, char cSep = '.' );
- String GetExtension( char cSep = '.' ) const;
- void SetName( const String& rName, FSysPathStyle eFormatter = FSYS_STYLE_HOST );
- String GetName( FSysPathStyle eFormatter = FSYS_STYLE_HOST ) const;
- String CutName( FSysPathStyle eFormatter = FSYS_STYLE_HOST );
- String GetBase(char cSep = '.' ) const;
- DirEntry GetPath() const;
- DirEntry GetDevice() const;
- String GetVolume() const;
- String GetFull( FSysPathStyle eFormatter = FSYS_STYLE_HOST,
- sal_Bool bWithDelimiter = sal_False,
- sal_uInt16 nMaxChars = STRING_MAXLEN ) const;
-
- DirEntry TempName( DirEntryKind = FSYS_KIND_NONE ) const;
- sal_Bool MakeShortName( const String& rLongName,
- DirEntryKind eCreateKind = FSYS_KIND_NONE,
- sal_Bool bUseTilde = sal_True,
- FSysPathStyle eStyle = FSYS_STYLE_DETECT );
-
- bool IsAbs() const;
- sal_Bool ToAbs();
- sal_Bool Find( const String& rPfad, char cDelim = 0 );
-
- sal_Bool SetCWD( sal_Bool bSloppy = sal_False ) const;
- sal_Bool MakeDir( sal_Bool bSloppy = sal_False ) const;
- sal_Bool Exists( FSysAccess nAccess = FSYS_ACCESS_FLOPPY ) const;
- sal_Bool First();
-
- sal_uInt16 Level() const;
- const DirEntry& operator []( sal_uInt16 nParentLevel ) const;
- sal_Bool Contains( const DirEntry &rSubEntry ) const;
-
- FSysError Kill( FSysAction nActions = FSYS_ACTION_STANDARD ) const;
-
- DirEntry& operator =( const DirEntry& rOrigDir );
- DirEntry operator +( const DirEntry& rSubDir ) const;
- DirEntry& operator +=( const DirEntry& rSubDir );
- sal_Bool operator ==( const DirEntry& rAnotherDir ) const;
- sal_Bool operator !=( const DirEntry& rAnotherDir ) const
- { return !(DirEntry::operator==( rAnotherDir )); }
-
- inline sal_Int32 NameCompareDirect( const DirEntry &rWith ) const
- {
-#ifdef UNX
- return rWith.aName.compareTo(aName);
-#else
- rtl::OString aThis(rtl::OString(aName).toAsciiLowerCase());
- rtl::OString aWith(rtl::OString(rWith.aName).toAsciiLowerCase());
- return aWith.compareTo(aThis);
-#endif
- }
-
- static String GetAccessDelimiter( FSysPathStyle eFormatter = FSYS_STYLE_HOST );
- static String GetSearchDelimiter( FSysPathStyle eFormatter = FSYS_STYLE_HOST );
-};
-
-// Dir
-
-struct DirReader_Impl;
-class TOOLS_DLLPUBLIC Dir : public DirEntry
-{
- friend struct DirReader_Impl;
-
- DirReader_Impl* pReader; // is system-dependent
- DirEntryList* pLst;
- FSysSortList* pSortLst; // NULL if no sorting requested
- FileStatList* pStatLst; // NULL if no stats requested
- WildCard aNameMask;
- DirEntryKind eAttrMask;
-
-private:
- TOOLS_DLLPRIVATE Dir( const Dir& ); // not allowed
- TOOLS_DLLPRIVATE Dir& operator =( const Dir& ); // not allowed
-
-#ifdef _DIR_CXX
- TOOLS_DLLPRIVATE void Construct( DirEntryKind nKind = FSYS_KIND_DIR|FSYS_KIND_FILE );
-#endif
-
-#ifndef _TOOLS_HXX
-protected:
- sal_Bool ImpInsertPointReached( const DirEntry& rIsSmaller,
- const FileStat& rNewStat,
- size_t nCurPos,
- size_t nSortIndex ) const;
- void ImpSortedInsert( const DirEntry *pNewEntry,
- const FileStat *pNewStat );
-#endif
-
-public:
- Dir( const DirEntry& rDirEntry,
- DirEntryKind nKind = FSYS_KIND_ALL );
- ~Dir();
-
- void Reset();
- sal_uInt16 Scan( sal_uInt16 nCount = 5 );
- size_t Count( sal_Bool bUpdated = sal_True ) const;
-
- Dir& operator +=( const Dir& rDir );
- DirEntry& operator []( size_t nIndex ) const;
-};
-
-#if defined(DBG_UTIL)
-void FSysTest();
-#endif
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/tools/source/fsys/comdep.cxx b/tools/source/fsys/comdep.cxx
deleted file mode 100644
index 5366feb6191c..000000000000
--- a/tools/source/fsys/comdep.cxx
+++ /dev/null
@@ -1,32 +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 .
- */
-
-#include "comdep.hxx"
-#include <tools/debug.hxx>
-#include <tools/fsys.hxx>
-
-DBG_NAMEEX( DirEntry )
-
-#if defined UNX
-#include "unx.cxx"
-#elif defined WNT
-#include "wntmsc.cxx"
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/tools/source/fsys/comdep.hxx b/tools/source/fsys/comdep.hxx
deleted file mode 100644
index 2b1e135f394b..000000000000
--- a/tools/source/fsys/comdep.hxx
+++ /dev/null
@@ -1,98 +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 .
- */
-#ifndef _COMDEP_HXX
-#define _COMDEP_HXX
-
-#include <tools/fsys.hxx>
-
-#define ACCESSDELIM(e) ( ( e == FSYS_STYLE_NTFS ) ? "\\" : "/" )
-#define ACCESSDELIM_C(e)(char)\
- ( ( e == FSYS_STYLE_NTFS ) ? '\\' : '/' )
-#define SEARCHDELIM(e) ( (e == FSYS_STYLE_BSD) ? ":" : ";" )
-#define ACTPARENT(e) ".."
-#define ACTCURRENT(e) "."
-
-#if defined UNX
-#include "unx.hxx"
-#elif defined WNT
-#include "wntmsc.hxx"
-#endif
-
-#ifndef LINUX
-DIR *opendir( const char* pPfad );
-dirent *readdir( DIR *pDir );
-int closedir( DIR *pDir );
-char *volumeid( const char* pPfad );
-#endif
-
-struct DirReader_Impl
-{
- Dir* pDir;
- DIR* pDosDir;
- dirent* pDosEntry;
- DirEntry* pParent;
- String aPath;
- rtl::OString aBypass;
- sal_Bool bReady;
- sal_Bool bInUse;
-
- DirReader_Impl( Dir &rDir )
- : pDir( &rDir ),
- pDosEntry( 0 ),
- pParent( 0 ),
- aPath(rDir.GetFull()),
- bReady ( sal_False ),
- bInUse( sal_False )
- {
-
- // only use the String from Member-Var
-
-#if defined(UNX) // for further explanation see DirReader_Impl::Read() in unx.cxx
- pDosDir = NULL;
-#else
- aBypass = rtl::OUStringToOString(aPath, osl_getThreadTextEncoding());
- pDosDir = opendir( aBypass.getStr() );
-#endif
-
- // Determine parents for new DirEntries
- pParent = pDir->GetFlag() == FSYS_FLAG_NORMAL ||
- pDir->GetFlag() == FSYS_FLAG_ABSROOT
- ? pDir
- : pDir->GetParent();
-
- }
-
- ~DirReader_Impl()
- { if( pDosDir ) closedir( pDosDir ); }
-
- // Init and Read are system-independent
- sal_uInt16 Init(); ///< Initializes (and if necessary) reads devices
- sal_uInt16 Read(); ///< Reads one entry and appends it if ok
-};
-
-
-#if defined WNT
-sal_Bool IsRedirectable_Impl( const rtl::OString &rPath );
-#else
-#define IsRedirectable_Impl( rPath ) sal_True
-#endif
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/tools/source/fsys/dirent.cxx b/tools/source/fsys/dirent.cxx
deleted file mode 100644
index 4c42f478fb17..000000000000
--- a/tools/source/fsys/dirent.cxx
+++ /dev/null
@@ -1,1627 +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 .
- */
-
-#if !defined UNX
-#ifdef WNT
-#include <windows.h>
-#undef GetObject
-#endif
-#include <io.h>
-#include <process.h>
-#endif
-
-#if defined(UNX)
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#endif
-
-#include <ctype.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <tools/debug.hxx>
-#include "comdep.hxx"
-#include <tools/fsys.hxx>
-#include <tools/urlobj.hxx>
-#include <vector>
-
-#include <tools/stream.hxx>
-#include <osl/mutex.hxx>
-#include <osl/file.hxx>
-#include <rtl/instance.hxx>
-#include <comphelper/string.hxx>
-
-using namespace osl;
-using ::rtl::OUString;
-
-static rtl::OUString GetSystemTempDirPath_Impl()
-{
- rtl::OUString aTmpURL, aPath;
- osl::FileBase::getTempDirURL( aTmpURL );
- osl::FileBase::getSystemPathFromFileURL( aTmpURL, aPath );
- return aPath;
-}
-
-int Sys2SolarError_Impl( int nSysErr )
-{
- switch ( nSysErr )
- {
-#ifdef WNT
- case NO_ERROR: return ERRCODE_NONE;
- case ERROR_INVALID_FUNCTION: return ERRCODE_IO_GENERAL;
- 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_INVALID_HANDLE: return ERRCODE_IO_GENERAL;
- case ERROR_NOT_ENOUGH_MEMORY: return ERRCODE_IO_OUTOFMEMORY;
- case ERROR_INVALID_BLOCK: return ERRCODE_IO_GENERAL;
- case ERROR_BAD_FORMAT: return ERRCODE_IO_WRONGFORMAT;
- case ERROR_INVALID_ACCESS: return ERRCODE_IO_ACCESSDENIED;
- case ERROR_INVALID_DRIVE: return ERRCODE_IO_INVALIDDEVICE;
- case ERROR_CURRENT_DIRECTORY: return ERRCODE_IO_CURRENTDIR;
- case ERROR_NOT_SAME_DEVICE: return ERRCODE_IO_NOTSAMEDEVICE;
- case ERROR_WRITE_PROTECT: return ERRCODE_IO_CANTWRITE;
- case ERROR_BAD_UNIT: return ERRCODE_IO_INVALIDDEVICE;
- case ERROR_NOT_READY: return ERRCODE_IO_DEVICENOTREADY;
- case ERROR_BAD_COMMAND: return ERRCODE_IO_GENERAL;
- case ERROR_CRC: return ERRCODE_IO_BADCRC;
- case ERROR_BAD_LENGTH: return ERRCODE_IO_INVALIDLENGTH;
- case ERROR_SEEK: return ERRCODE_IO_CANTSEEK;
- case ERROR_NOT_DOS_DISK: return ERRCODE_IO_WRONGFORMAT;
- case ERROR_SECTOR_NOT_FOUND: return ERRCODE_IO_GENERAL;
- case ERROR_WRITE_FAULT: return ERRCODE_IO_CANTWRITE;
- case ERROR_READ_FAULT: return ERRCODE_IO_CANTREAD;
- case ERROR_GEN_FAILURE: return ERRCODE_IO_GENERAL;
- case ERROR_SHARING_VIOLATION: return ERRCODE_IO_LOCKVIOLATION;
- case ERROR_LOCK_VIOLATION: return ERRCODE_IO_LOCKVIOLATION;
- case ERROR_WRONG_DISK: return ERRCODE_IO_INVALIDDEVICE;
- case ERROR_NOT_SUPPORTED: return ERRCODE_IO_NOTSUPPORTED;
-#else
- case 0: return ERRCODE_NONE;
- case ENOENT: return ERRCODE_IO_NOTEXISTS;
- case EACCES: return ERRCODE_IO_ACCESSDENIED;
- case EEXIST: return ERRCODE_IO_ALREADYEXISTS;
- case EINVAL: return ERRCODE_IO_INVALIDPARAMETER;
- case EMFILE: return ERRCODE_IO_TOOMANYOPENFILES;
- case ENOMEM: return ERRCODE_IO_OUTOFMEMORY;
- case ENOSPC: return ERRCODE_IO_OUTOFSPACE;
-#endif
- }
-
- OSL_TRACE( "FSys: unknown system error %d occurred", nSysErr );
- return FSYS_ERR_UNKNOWN;
-}
-
-class DirEntryStack
-{
-private:
- ::std::vector< DirEntry* > maStack;
-
-public:
- DirEntryStack() {};
- ~DirEntryStack();
-
- inline void Push( DirEntry *pEntry );
- inline DirEntry* Pop();
- inline DirEntry* Top();
- inline DirEntry* Bottom();
- inline bool Empty();
- inline void Clear();
-};
-
-inline void DirEntryStack::Push( DirEntry *pEntry )
-{
- maStack.push_back( pEntry );
-}
-
-inline DirEntry* DirEntryStack::Pop()
-{
- DirEntry* pEntry = NULL;
- if ( !maStack.empty() ) {
- pEntry = maStack.back();
- maStack.pop_back();
- }
- return pEntry;
-}
-
-inline DirEntry* DirEntryStack::Top()
-{
- return maStack.empty() ? NULL : maStack.back();
-}
-
-inline DirEntry* DirEntryStack::Bottom()
-{
- return maStack.empty() ? NULL : maStack.front();
-}
-
-inline bool DirEntryStack::Empty()
-{
- return maStack.empty();
-}
-
-inline void DirEntryStack::Clear()
-{
- maStack.clear();
-}
-
-DBG_NAME( DirEntry );
-
-DirEntryStack::~DirEntryStack()
-{
- maStack.clear();
-}
-
-#ifdef DBG_UTIL
-/** Check DirEntry for DBG_UTIL
-
- @param p Pointer to DirEntry
- @return char* Error-TExtension or NULL
-*/
-const char* ImpCheckDirEntry( const void* p )
-{
- DirEntry* p0 = (DirEntry*)p;
-
- if ( p0->pParent )
- DBG_CHKOBJ( p0->pParent, DirEntry, ImpCheckDirEntry );
-
- return NULL;
-}
-#endif
-
-/** Insert "..." for max length of nMaxChars */
-rtl::OString ImplCutPath( const rtl::OString& rStr, sal_Int32 nMax, char cAccDel )
-{
- sal_Int32 nMaxPathLen = nMax;
- sal_Bool bInsertPrefix = sal_False;
- sal_Int32 nBegin = rStr.indexOf(cAccDel);
- rtl::OStringBuffer aCutPath(rStr);
-
- if( nBegin == -1 )
- nBegin = 0;
- else
- nMaxPathLen += 2; // Prefix <Disk>:
-
- while( aCutPath.getLength() > nMaxPathLen )
- {
- sal_Int32 nEnd = aCutPath.toString().indexOf(cAccDel, nBegin + 1);
- sal_Int32 nCount;
-
- if ( nEnd != -1 )
- {
- nCount = nEnd - nBegin;
- aCutPath.remove(nBegin, nCount);
- bInsertPrefix = sal_True;
- }
- else
- break;
- }
-
- if ( aCutPath.getLength() > nMaxPathLen )
- {
- for ( sal_Int32 n = nMaxPathLen; n > nMaxPathLen/2; --n )
- {
- if (!comphelper::string::isalnumAscii(aCutPath[n]))
- {
- comphelper::string::truncateToLength(aCutPath, n);
- aCutPath.append("...");
- break;
- }
- }
- }
-
- if ( bInsertPrefix )
- {
- rtl::OStringBuffer aIns;
- aIns.append(cAccDel).append("...");
- aCutPath.insert(nBegin, aIns.makeStringAndClear());
- }
-
- return aCutPath.makeStringAndClear();
-}
-
-FSysError DirEntry::ImpParseName( const rtl::OString& rPfad )
-{
-#if defined(WNT)
- DBG_CHKTHIS( DirEntry, ImpCheckDirEntry );
-
- // put single names onto stack
- String aPfad(rtl::OStringToOUString(rPfad, osl_getThreadTextEncoding()));
- DirEntryStack aStack;
-
- do
- {
- // split name before first "\\",
- // if '\\' is at beginning of string, name is set to '\\'.
- // ":" also splits the string and belongs to the name.
-
- // search first occurance of '\\', '/' or ':'
- sal_uInt16 nPos;
- for ( nPos = 0;
- nPos < aPfad.Len() && //?O
- aPfad.GetChar(nPos) != '\\' && aPfad.GetChar(nPos) != '/' && //?O
- aPfad.GetChar(nPos) != ':'; //?O
- nPos++ )
- /* do nothing */;
-
- // is the name a UNC pathname?
- if ( nPos == 0 && aPfad.Len() > 1 &&
- ( ( aPfad.GetChar(0) == '\\' && aPfad.GetChar(1) == '\\' ) ||
- ( aPfad.GetChar(0) == '/' && aPfad.GetChar(1) == '/' ) ) )
- {
- for ( nPos = 2; aPfad.Len() > nPos; ++nPos )
- if ( aPfad.GetChar(nPos) == '\\' || aPfad.GetChar(nPos) == '/' )
- break;
- aName = rtl::OUStringToOString(aPfad.Copy( 2, nPos-2 ), osl_getThreadTextEncoding());
- aStack.Push( new DirEntry( aName, FSYS_FLAG_ABSROOT ) );
- }
- // Is the name the root of the current drive?
- else if ( nPos == 0 && aPfad.Len() > 0 &&
- ( aPfad.GetChar(0) == '\\' || aPfad.GetChar(0) == '/' ) )
- {
- // Push root directory of current drive
- aStack.Push( new DirEntry( FSYS_FLAG_ABSROOT ) );
- }
- else
- {
- // Is the name itself a drive?
- if ( nPos < aPfad.Len() && aPfad.GetChar(nPos) == ':' )
- {
- aName = rtl::OUStringToOString(aPfad.Copy( 0, nPos + 1 ), osl_getThreadTextEncoding());
-
- // Is the name the root of a drive?
- if ( (nPos + 1) < aPfad.Len() &&
- ( aPfad.GetChar(nPos+1) == '\\' || aPfad.GetChar(nPos+1) == '/' ) )
- {
- // unsupported if stack not empty or is a Novell format (URL)
- if ( !aStack.Empty() || aName.getLength() > 2 )
- {
- aName = rPfad;
- return FSYS_ERR_MISPLACEDCHAR;
- }
- // Push as root directory of drive
- aStack.Push( new DirEntry( aName, FSYS_FLAG_ABSROOT ) );
- }
- else
- {
- // clear stack if another drive is currently on it
- if ( !aStack.Empty() )
- {
- rtl::OString aThis(aStack.Bottom()->aName);
- aThis = aThis.toAsciiLowerCase();
- rtl::OString aOther(aName);
- aOther = aOther.toAsciiLowerCase();
- if (aThis.compareTo(aOther) != 0)
- aStack.Clear();
- }
-
- if ( aStack.Empty() )
- aStack.Push( new DirEntry( aName, FSYS_FLAG_RELROOT ) );
- }
- }
- // Name is not a drive
- else
- {
- // split the name without seperator
- aName = rtl::OUStringToOString(aPfad.Copy( 0, nPos ), osl_getThreadTextEncoding());
-
- // Is the name the current directory?
- if ( aName == "." )
- /* do nothing */;
-
- // Is the name the parent directory?
- else if ( aName == ".." )
- {
- // Is the stack empty, or a parent (or relative root) on it?
- if ( ( aStack.Empty() ) ||
- ( aStack.Top()->eFlag == FSYS_FLAG_PARENT ) ||
- ( aStack.Top()->eFlag == FSYS_FLAG_RELROOT ) )
- // add leading parent to stack
- aStack.Push( new DirEntry( FSYS_FLAG_PARENT ) );
-
- // It's an absolute root path
- else if ( aStack.Top()->eFlag == FSYS_FLAG_ABSROOT )
- {
- // Then there is no parent directory
- aName = rPfad;
- return FSYS_ERR_NOTEXISTS;
- }
- else
- // Otherwise removee parent TOS
- delete aStack.Pop();
- }
-
- else
- {
- // add ordinary entries to the stack
- DirEntry *pNew = new DirEntry( aName, FSYS_FLAG_NORMAL );
- if ( !pNew->IsValid() )
- {
- aName = rPfad;
- ErrCode eErr = pNew->GetError();
- delete pNew;
- return eErr;
- }
- aStack.Push( pNew );
- }
- }
- }
-
- // determine remainder of path
- aPfad.Erase( 0, nPos + 1 );
- while ( aPfad.Len() && ( aPfad.GetChar(0) == '\\' || aPfad.GetChar(0) == '/' ) )
- aPfad.Erase( 0, 1 );
- }
- while ( aPfad.Len() );
-
- sal_uIntPtr nErr = ERRCODE_NONE;
- // Set the main entry itself
- if ( aStack.Empty() )
- {
- eFlag = FSYS_FLAG_CURRENT;
- aName = rtl::OString();
- }
- else
- {
- eFlag = aStack.Top()->eFlag;
- aName = aStack.Top()->aName;
- nErr = aStack.Top()->nError;
- delete aStack.Pop();
- }
-
- // pop parent entry from stack
- DirEntry** pTemp = &pParent;
- while ( !aStack.Empty() )
- {
- *pTemp = aStack.Pop();
-
- // set member pointer to the pParent of the member's own parent
- pTemp = &( (*pTemp)->pParent );
- }
-
- // Does this describe a volume?
- if ( !pParent && eFlag == FSYS_FLAG_RELROOT && !aName.isEmpty() )
- eFlag = FSYS_FLAG_VOLUME;
-
- // use full aName if error code was set
- if ( nErr )
- aName = rPfad;
- return nErr;
-#else
- DBG_CHKTHIS( DirEntry, ImpCheckDirEntry );
-
- // Add single names to the stack
- DirEntryStack aStack;
- rtl::OString aPfad(rPfad);
- do
- {
- // split names on the first occurance of "/",
- // if '/' starts the string, it itself becomes the name
-
- // search first occurance of "/"
- sal_uInt16 nPos;
- for ( nPos = 0;
- nPos < aPfad.getLength() && aPfad[nPos] != '/';
- nPos++ )
- /* do nothing */;
-
- // is the name the root of the current drive?
- if ( nPos == 0 && !aPfad.isEmpty() && ( aPfad[0] == '/' ) )
- {
- // push root directory of current drive to stack
- aStack.Push( new DirEntry( FSYS_FLAG_ABSROOT ) );
- }
- else
- {
- // split name without seperator
- aName = aPfad.copy(0, nPos);
-
- // Is the name the current directory?
- if ( aName == "." )
- /* do nothing */;
-
-#ifdef UNX
- // Is the name the user's home directory?
- else if ( aName == "~" )
- {
- DirEntry aHome( String( (const char *) getenv( "HOME" ), osl_getThreadTextEncoding()) );
- for ( sal_uInt16 n = aHome.Level(); n; --n )
- aStack.Push( new DirEntry( aHome[ (sal_uInt16) n-1 ] ) );
- }
-#endif
- // Is the name the current parent directory?
- else if ( aName == ".." )
- {
- // Is the stack empty, or a parent (or relative root) is on top?
- if ( ( aStack.Empty() ) || ( aStack.Top()->eFlag == FSYS_FLAG_PARENT ) )
- {
- // push leading parents to stack
- aStack.Push( new DirEntry(rtl::OString(), FSYS_FLAG_PARENT) );
- }
- // Is the name an absolute root?
- else if ( aStack.Top()->eFlag == FSYS_FLAG_ABSROOT )
- {
- // they do not have parent directories
- return FSYS_ERR_NOTEXISTS;
- }
- else
- // otherwise remove parent TOS from stack
- delete aStack.Pop();
- }
- else
- {
- DirEntry *pNew = NULL;
- // push ordinary entries on the stack
- pNew = new DirEntry( aName, FSYS_FLAG_NORMAL );
- if ( !pNew->IsValid() )
- {
- aName = rPfad;
- ErrCode eErr = pNew->GetError();
- delete pNew;
- return eErr;
- }
- aStack.Push( pNew );
- }
- }
-
- // get remainder of path
- aPfad = nPos < aPfad.getLength()
- ? aPfad.copy(nPos + 1) : rtl::OString();
- while ( !aPfad.isEmpty() && ( aPfad[0] == '/' ) )
- aPfad = aPfad.copy(1);
- }
- while (!aPfad.isEmpty());
-
- // insert main entry itself
- if ( aStack.Empty() )
- {
- eFlag = FSYS_FLAG_CURRENT;
- aName = rtl::OString();
- }
- else
- {
- eFlag = aStack.Top()->eFlag;
- aName = aStack.Top()->aName;
- delete aStack.Pop();
- }
-
- // Get parent entries from stack
- DirEntry** pTemp = &pParent;
- while ( !aStack.Empty() )
- {
- *pTemp = aStack.Pop();
- pTemp = &( (*pTemp)->pParent );
- }
-
- return FSYS_ERR_OK;
-#endif
-}
-
-static FSysPathStyle GetStyle( FSysPathStyle eStyle )
-{
- if ( eStyle == FSYS_STYLE_HOST || eStyle == FSYS_STYLE_DETECT )
- return DEFSTYLE;
- else
- return eStyle;
-}
-
-/** Convert name to match OS norm. */
-void DirEntry::ImpTrim()
-{
- // Do not trim wildcard characters
- if ( ( aName.indexOf( '*' ) != -1 ) ||
- ( aName.indexOf( '?' ) != -1 ) ||
- ( aName.indexOf( ';' ) != -1 ) )
- return;
-
-#if defined(WNT)
- if ( aName.getLength() > 254 )
- {
- nError = ERRCODE_IO_MISPLACEDCHAR|ERRCODE_WARNING_MASK;
- aName = aName.copy(254);
- }
-#else
- if ( aName.getLength() > 250 )
- {
- nError = ERRCODE_IO_MISPLACEDCHAR|ERRCODE_WARNING_MASK;
- aName = aName.copy(250);
- }
-#endif
-}
-
-DirEntry::DirEntry( const rtl::OString& rName, DirEntryFlag eDirFlag ) :
- pStat( 0 ),
- aName( rName )
-{
- DBG_CTOR( DirEntry, ImpCheckDirEntry );
-
- pParent = NULL;
- eFlag = eDirFlag;
- nError = FSYS_ERR_OK;
-
- ImpTrim();
-}
-
-DirEntry::DirEntry( const DirEntry& rOrig ) :
- pStat( rOrig.pStat ? new FileStat(*rOrig.pStat) : 0 ),
- aName( rOrig.aName )
-{
- DBG_CTOR( DirEntry, ImpCheckDirEntry );
-
- eFlag = rOrig.eFlag;
- nError = rOrig.nError;
-
- if ( rOrig.pParent )
- {
- pParent = new DirEntry( *rOrig.pParent );
- }
- else
- {
- pParent = NULL;
- }
-}
-
-DirEntry::DirEntry( const String& rInitName, FSysPathStyle eStyle ) :
- pStat( 0 )
-{
- DBG_CTOR( DirEntry, ImpCheckDirEntry );
-
- (void) eStyle; // only used for DBG_UTIL
-
- pParent = NULL;
-
- // faster check for empty string
- if ( !rInitName.Len())
- {
- eFlag = FSYS_FLAG_CURRENT;
- nError = FSYS_ERR_OK;
- return;
- }
-
- rtl::OString aTmpName(rtl::OUStringToOString(rInitName, osl_getThreadTextEncoding()));
- if (aTmpName.matchIgnoreAsciiCase(rtl::OString("file:")))
- {
- DBG_WARNING( "File URLs are not permitted but accepted" );
- aTmpName = rtl::OUStringToOString(INetURLObject( rInitName ).PathToFileName(), osl_getThreadTextEncoding());
-#ifdef DBG_UTIL
- eStyle = FSYS_STYLE_HOST;
-#endif
- }
- else
- {
- ::rtl::OUString aTmp;
- ::rtl::OUString aOInitName;
- if ( FileBase::getFileURLFromSystemPath( OUString( rInitName ), aTmp ) == FileBase::E_None )
- {
- aOInitName = OUString( rInitName );
- aTmpName = rtl::OUStringToOString(aOInitName, osl_getThreadTextEncoding());
- }
-
-#ifdef DBG_UTIL
- if (eStyle == FSYS_STYLE_HOST && aTmpName.indexOf( "://" ) != -1)
- {
- rtl::OStringBuffer aErr("DirEntries akzeptieren nur File URLS: ");
- aErr.append(aTmpName);
- DBG_WARNING(aErr.getStr());
- }
-#endif
- }
-
- nError = ImpParseName( aTmpName );
-
- if ( nError != FSYS_ERR_OK )
- eFlag = FSYS_FLAG_INVALID;
-}
-
-DirEntry::DirEntry( const rtl::OString& rInitName, FSysPathStyle eStyle ) :
- pStat( 0 )
-{
- DBG_CTOR( DirEntry, ImpCheckDirEntry );
-
- (void) eStyle; // only used for DBG_UTIL
-
- pParent = NULL;
-
- // faster check for empty string
- if ( rInitName.isEmpty() )
- {
- eFlag = FSYS_FLAG_CURRENT;
- nError = FSYS_ERR_OK;
- return;
- }
-
- rtl::OString aTmpName( rInitName );
- if (aTmpName.matchIgnoreAsciiCase(rtl::OString("file:")))
- {
- DBG_WARNING( "File URLs are not permitted but accepted" );
- aTmpName = rtl::OUStringToOString(INetURLObject( rInitName ).PathToFileName(), osl_getThreadTextEncoding());
-#ifdef DBG_UTIL
- eStyle = FSYS_STYLE_HOST;
-#endif
- }
-#ifdef DBG_UTIL
- else
- {
- if( eStyle == FSYS_STYLE_HOST && rInitName.indexOf("://") != -1 )
- {
- rtl::OStringBuffer aErr("DirEntries akzeptieren nur File URLS: ");
- aErr.append(rInitName);
- DBG_WARNING(aErr.getStr());
- }
- }
-#endif
-
- nError = ImpParseName( aTmpName );
-
- if ( nError != FSYS_ERR_OK )
- eFlag = FSYS_FLAG_INVALID;
-}
-
-DirEntry::DirEntry( DirEntryFlag eDirFlag ) :
- pStat( 0 )
-{
- DBG_CTOR( DirEntry, ImpCheckDirEntry );
-
- eFlag = eDirFlag;
- nError = ( eFlag == FSYS_FLAG_INVALID ) ? FSYS_ERR_UNKNOWN : FSYS_ERR_OK;
- pParent = NULL;
-}
-
-DirEntry::~DirEntry()
-{
- DBG_DTOR( DirEntry, ImpCheckDirEntry );
-
- delete pParent;
-
- delete pStat;
-}
-
-const DirEntry* DirEntry::ImpGetTopPtr() const
-{
- DBG_CHKTHIS( DirEntry, ImpCheckDirEntry );
-
- const DirEntry *pTemp = this;
- while ( pTemp->pParent )
- pTemp = pTemp->pParent;
-
- return pTemp;
-}
-
-DirEntry* DirEntry::ImpGetTopPtr()
-{
- DBG_CHKTHIS( DirEntry, ImpCheckDirEntry );
-
- DirEntry *pTemp = this;
- while ( pTemp->pParent )
- pTemp = pTemp->pParent;
-
- return pTemp;
-}
-
-DirEntry* DirEntry::ImpChangeParent( DirEntry* pNewParent, sal_Bool bNormalize )
-{
- DBG_CHKTHIS( DirEntry, ImpCheckDirEntry );
-
- DirEntry *pTemp = pParent;
- if ( bNormalize && pNewParent &&
- pNewParent->eFlag == FSYS_FLAG_RELROOT && pNewParent->aName.isEmpty() )
- {
- pParent = 0;
- delete pNewParent;
- }
- else
- pParent = pNewParent;
-
- return pTemp;
-}
-
-sal_Bool DirEntry::Exists( FSysAccess nAccess ) const
-{
- static osl::Mutex aLocalMutex;
- osl::MutexGuard aGuard( aLocalMutex );
- if ( !IsValid() )
- return sal_False;
-
-#if defined WNT
- // get special file names from system
- if ( aName.equalsIgnoreAsciiCase("CLOCK$") ||
- aName.equalsIgnoreAsciiCase("CON") ||
- aName.equalsIgnoreAsciiCase("AUX") ||
- aName.equalsIgnoreAsciiCase("COM1") ||
- aName.equalsIgnoreAsciiCase("COM2") ||
- aName.equalsIgnoreAsciiCase("COM3") ||
- aName.equalsIgnoreAsciiCase("COM4") ||
- aName.equalsIgnoreAsciiCase("LPT1") ||
- aName.equalsIgnoreAsciiCase("LPT2") ||
- aName.equalsIgnoreAsciiCase("LPT3") ||
- aName.equalsIgnoreAsciiCase("NUL") ||
- aName.equalsIgnoreAsciiCase("PRN") )
- return sal_True;
-#endif
-
- DirEntryKind eKind = FileStat( *this, nAccess ).GetKind();
- if ( eKind & ( FSYS_KIND_FILE | FSYS_KIND_DIR ) )
- {
- return sal_True;
- }
-
-#if defined WNT
- if ( 0 != ( eKind & FSYS_KIND_DEV ) )
- {
- return DRIVE_EXISTS( ImpGetTopPtr()->aName[0] );
- }
-#endif
-
- return 0 != ( eKind & ( FSYS_KIND_FILE | FSYS_KIND_DIR ) );
-}
-
-sal_Bool DirEntry::First()
-{
- String aUniPathName( GetPath().GetFull() );
- rtl::OString aPathName(rtl::OUStringToOString(aUniPathName, osl_getThreadTextEncoding()));
-
- DIR *pDir = opendir(aPathName.getStr());
- if ( pDir )
- {
- WildCard aWildeKarte(rtl::OStringToOUString(CMP_LOWER(aName), osl_getThreadTextEncoding()));
- for ( dirent* pEntry = readdir( pDir );
- pEntry;
- pEntry = readdir( pDir ) )
- {
- rtl::OString aFound(pEntry->d_name);
- if (aWildeKarte.Matches(rtl::OStringToOUString(CMP_LOWER(aFound), osl_getThreadTextEncoding())))
- {
- aName = aFound;
- closedir( pDir );
- return sal_True;
- }
- }
- closedir( pDir );
- }
- return sal_False;
-}
-
-String DirEntry::GetFull( FSysPathStyle eStyle, sal_Bool bWithDelimiter,
- sal_uInt16 nMaxChars ) const
-{
- DBG_CHKTHIS( DirEntry, ImpCheckDirEntry );
-
- rtl::OStringBuffer aBuf;
- eStyle = GetStyle( eStyle );
- if ( pParent )
- {
- if ( ( pParent->eFlag == FSYS_FLAG_ABSROOT ||
- pParent->eFlag == FSYS_FLAG_RELROOT ||
- pParent->eFlag == FSYS_FLAG_VOLUME ) )
- {
- aBuf.append(rtl::OUStringToOString(pParent->GetName( eStyle ), osl_getThreadTextEncoding()));
- aBuf.append(rtl::OUStringToOString(GetName( eStyle ), osl_getThreadTextEncoding()));
- }
- else
- {
- aBuf.append(rtl::OUStringToOString(pParent->GetFull( eStyle ), osl_getThreadTextEncoding()));
- aBuf.append(ACCESSDELIM_C(eStyle));
- aBuf.append(rtl::OUStringToOString(GetName( eStyle ), osl_getThreadTextEncoding()));
- }
- }
- else
- {
- aBuf.append(rtl::OUStringToOString(GetName(eStyle), osl_getThreadTextEncoding()));
- }
-
- //! Hack
- if ( bWithDelimiter )
- if ( aBuf[aBuf.getLength()-1] != ACCESSDELIM_C(eStyle) )
- aBuf.append(ACCESSDELIM_C(eStyle));
-
- rtl::OString aRet = aBuf.makeStringAndClear();
-
- // HACK
- if ( nMaxChars < STRING_MAXLEN )
- aRet = ImplCutPath( aRet, nMaxChars, ACCESSDELIM_C(eStyle) );
-
- return rtl::OStringToOUString(aRet, osl_getThreadTextEncoding());
-}
-
-DirEntry DirEntry::GetPath() const
-{
- DBG_CHKTHIS( DirEntry, ImpCheckDirEntry );
-
- if ( pParent )
- return DirEntry( *pParent );
-
- return DirEntry();
-}
-
-String DirEntry::GetExtension( char cSep ) const
-{
- DBG_CHKTHIS( DirEntry, ImpCheckDirEntry );
-
- const char *p0 = aName.getStr();
- const char *p1 = p0 + aName.getLength() - 1;
- while ( p1 >= p0 && *p1 != cSep )
- p1--;
-
- if ( p1 >= p0 )
- {
- // found a cSep at position p1
- return rtl::OStringToOUString(aName.copy(p1 - p0 + 1),
- osl_getThreadTextEncoding());
- }
-
- return String();
-}
-
-String DirEntry::GetBase( char cSep ) const
-{
- DBG_CHKTHIS( DirEntry, ImpCheckDirEntry );
-
- const char *p0 = aName.getStr();
- const char *p1 = p0 + aName.getLength() - 1;
- while ( p1 >= p0 && *p1 != cSep )
- p1--;
-
- if ( p1 >= p0 )
- {
- // found a cSep at position p1
- return rtl::OStringToOUString(aName.copy(0, p1 - p0),
- osl_getThreadTextEncoding());
-
- }
- // did not find a cSep
- return rtl::OStringToOUString(aName, osl_getThreadTextEncoding());
-}
-
-String DirEntry::GetName( FSysPathStyle eStyle ) const
-{
- DBG_CHKTHIS( DirEntry, ImpCheckDirEntry );
-
- rtl::OStringBuffer aRet;
- eStyle = GetStyle( eStyle );
-
- switch( eFlag )
- {
- case FSYS_FLAG_PARENT:
- aRet.append(ACTPARENT(eStyle));
- break;
-
- case FSYS_FLAG_ABSROOT:
- {
- aRet.append(aName);
- aRet.append(ACCESSDELIM_C(eStyle));
- break;
- }
-
- case FSYS_FLAG_INVALID:
- case FSYS_FLAG_VOLUME:
- {
- aRet.append(aName);
- break;
- }
-
- case FSYS_FLAG_RELROOT:
- if ( aName.isEmpty() )
- {
- aRet.append(ACTCURRENT(eStyle));
- break;
- }
-
- default:
- aRet.append(aName);
- break;
- }
-
- return rtl::OStringToOUString(aRet.makeStringAndClear(),
- osl_getThreadTextEncoding());
-}
-
-bool DirEntry::IsAbs() const
-{
- DBG_CHKTHIS( DirEntry, ImpCheckDirEntry );
-
-#ifdef UNX
- return ( pParent ? pParent->IsAbs() : eFlag == FSYS_FLAG_ABSROOT );
-#else
- return ( pParent ? pParent->IsAbs() : eFlag == FSYS_FLAG_ABSROOT && !aName.isEmpty() );
-#endif
-}
-
-String DirEntry::CutName( FSysPathStyle eStyle )
-{
- DBG_CHKTHIS( DirEntry, ImpCheckDirEntry );
-
- eStyle = GetStyle( eStyle );
-
- String aOldName( GetName( eStyle ) );
-
- if ( pParent )
- {
- DirEntry *pOldParent = pParent;
- if ( pOldParent )
- {
- pParent = pOldParent->pParent;
- eFlag = pOldParent->eFlag;
- aName = pOldParent->aName;
- pOldParent->pParent = NULL;
- delete pOldParent;
- }
- else
- {
- eFlag = FSYS_FLAG_CURRENT;
- aName = rtl::OString();
- }
- }
- else
- {
- eFlag = FSYS_FLAG_CURRENT;
- aName = rtl::OString();
- delete pParent;
- pParent = NULL;
- }
-
- return aOldName;
-}
-
-sal_Bool DirEntry::operator==( const DirEntry& rEntry ) const
-{
- DBG_CHKTHIS( DirEntry, ImpCheckDirEntry );
-
- // test whether the contents are textual the same
-
- if ( nError && ( nError == rEntry.nError ) )
- return sal_True;
- if ( nError || rEntry.nError ||
- ( eFlag == FSYS_FLAG_INVALID ) ||
- ( rEntry.eFlag == FSYS_FLAG_INVALID ) )
- return sal_False;
-
- const DirEntry *pThis = (DirEntry *)this;
- const DirEntry *pWith = (DirEntry *)&rEntry;
- while( pThis && pWith && (pThis->eFlag == pWith->eFlag) )
- {
- if ( CMP_LOWER(pThis->aName) != CMP_LOWER(pWith->aName) )
- break;
- pThis = pThis->pParent;
- pWith = pWith->pParent;
- }
-
- return ( !pThis && !pWith );
-}
-
-DirEntry& DirEntry::operator=( const DirEntry& rEntry )
-{
- DBG_CHKTHIS( DirEntry, ImpCheckDirEntry );
-
- if ( this == &rEntry )
- return *this;
- if ( rEntry.nError != FSYS_ERR_OK ) {
- OSL_FAIL("Zuweisung mit invalidem DirEntry");
- nError = rEntry.nError;
- return *this;
- }
-
- // set name and type, but keep refs
- aName = rEntry.aName;
- eFlag = rEntry.eFlag;
- nError = FSYS_ERR_OK;
-
- DirEntry *pOldParent = pParent;
- if ( rEntry.pParent )
- pParent = new DirEntry( *rEntry.pParent );
- else
- pParent = NULL;
-
- if ( pOldParent )
- delete pOldParent;
- return *this;
-}
-
-DirEntry DirEntry::operator+( const DirEntry& rEntry ) const
-{
- DBG_CHKTHIS( DirEntry, ImpCheckDirEntry );
-#ifdef DBG_UTIL
- static sal_Bool bTested = sal_False;
- if ( !bTested )
- {
- bTested = sal_True;
- FSysTest();
- }
-#endif
-
- const DirEntry *pEntryTop = rEntry.ImpGetTopPtr();
- const DirEntry *pThisTop = ImpGetTopPtr();
-
- if (
- (eFlag == FSYS_FLAG_RELROOT && aName.isEmpty()) ||
- (
- (!pEntryTop->aName.isEmpty() ||
- ((rEntry.Level()>1)?(rEntry[rEntry.Level()-2].aName.equalsIgnoreAsciiCase(RFS_IDENTIFIER)):sal_False))
- &&
- (pEntryTop->eFlag == FSYS_FLAG_ABSROOT ||
- pEntryTop->eFlag == FSYS_FLAG_RELROOT ||
- pEntryTop->eFlag == FSYS_FLAG_VOLUME)
- )
- )
- {
- return rEntry;
- }
-
- // something + "." (=> pEntryTop == &rEntry)
- if (pEntryTop->eFlag == FSYS_FLAG_RELROOT && pEntryTop->aName.isEmpty())
- {
- DBG_ASSERT( pEntryTop == &rEntry, "DirEntry::op+ buggy" );
- return *this;
- }
-
- // root += ".." (=> impossible)
- if ( pEntryTop->eFlag == FSYS_FLAG_PARENT && pThisTop == this &&
- ( eFlag == FSYS_FLAG_ABSROOT ) )
- return DirEntry( FSYS_FLAG_INVALID );
-
- // something += abs (=> only append device if existant)
- if ( pEntryTop->eFlag == FSYS_FLAG_ABSROOT )
- {
- rtl::OString aDevice;
- if ( pThisTop->eFlag == FSYS_FLAG_ABSROOT )
- aDevice = pThisTop->aName;
- DirEntry aRet = rEntry;
- if ( !aDevice.isEmpty() )
- aRet.ImpGetTopPtr()->aName = aDevice;
- return aRet;
- }
-
- // something += ".." (=> break apart)
- if ( eFlag == FSYS_FLAG_NORMAL && pEntryTop->eFlag == FSYS_FLAG_PARENT )
- {
- String aConcated( GetFull() );
- aConcated += ACCESSDELIM_C(FSYS_STYLE_HOST);
- aConcated += rEntry.GetFull();
- return DirEntry( aConcated );
- }
-
- // otherwise append consecutively
- DirEntry aRet( rEntry );
- DirEntry *pTop = aRet.ImpGetTopPtr();
- pTop->pParent = new DirEntry( *this );
-
- return aRet;
-}
-
-DirEntry &DirEntry::operator+=( const DirEntry& rEntry )
-{
- DBG_CHKTHIS( DirEntry, ImpCheckDirEntry );
-
- return *this = *this + rEntry;
-}
-
-String DirEntry::GetAccessDelimiter( FSysPathStyle eFormatter )
-{
- return rtl::OUString( ACCESSDELIM_C( GetStyle( eFormatter ) ) );
-}
-
-void DirEntry::SetExtension( const String& rExtension, char cSep )
-{
- DBG_CHKTHIS( DirEntry, ImpCheckDirEntry );
-
- // do not set extensions for drives
- if(eFlag == FSYS_FLAG_ABSROOT)
- {
- nError = FSYS_ERR_NOTSUPPORTED;
- return;
- }
-
- rtl::OStringBuffer aBuf(aName);
-
- // search cSep within aName
- const sal_Char *p0 = aBuf.getStr();
- const sal_Char *p1 = p0 + aBuf.getLength() - 1;
- while ( p1 >= p0 && *p1 != cSep )
- p1--;
- if ( p1 >= p0 )
- {
- // found a cSep on position p1
-
- sal_Int32 n = static_cast<sal_Int32>(
- p1 - p0 + 1 - ( rExtension.Len() ? 0 : 1 ));
-
- aBuf.remove(n, aBuf.getLength()-n);
- }
- else if ( rExtension.Len() )
- {
- // no cSep was found
- aBuf.append(cSep);
- }
-
- aBuf.append(rtl::OUStringToOString(rExtension,
- osl_getThreadTextEncoding()));
-
- aName = aBuf.makeStringAndClear();
-}
-
-void DirEntry::SetName( const String& rName, FSysPathStyle eFormatter )
-{
- DBG_CHKTHIS( DirEntry, ImpCheckDirEntry );
-
- if ( eFormatter == FSYS_STYLE_HOST || eFormatter == FSYS_STYLE_DETECT )
- eFormatter = DEFSTYLE;
- sal_Char cAccDelim(ACCESSDELIM_C(eFormatter));
-
- if ( (eFlag != FSYS_FLAG_NORMAL) ||
- (aName.indexOf(':') != -1) ||
- (aName.indexOf(cAccDelim) != -1) )
- {
- eFlag = FSYS_FLAG_INVALID;
- }
- else
- {
- aName = rtl::OUStringToOString(rName, osl_getThreadTextEncoding());
- }
-}
-
-sal_Bool DirEntry::Find( const String& rPfad, char cDelim )
-{
- DBG_CHKTHIS( DirEntry, ImpCheckDirEntry );
-
- if ( ImpGetTopPtr()->eFlag == FSYS_FLAG_ABSROOT )
- return sal_True;
-
- sal_Bool bWild = aName.indexOf( '*' ) != -1 ||
- aName.indexOf( '?' ) != -1;
-
- if ( !cDelim )
- cDelim = SEARCHDELIM(DEFSTYLE)[0];
-
- rtl::OString aThis = rtl::OStringBuffer()
- .append(ACCESSDELIM_C(DEFSTYLE))
- .append(rtl::OUStringToOString(GetFull(),
- osl_getThreadTextEncoding()))
- .makeStringAndClear();
- sal_Int32 nIndex = 0;
- do
- {
- rtl::OStringBuffer aPath(rtl::OUStringToOString(rPfad,
- osl_getThreadTextEncoding()).getToken( 0, cDelim, nIndex ));
-
- if ( aPath.getLength() )
- {
- if (aPath[aPath.getLength()-1] == ACCESSDELIM_C(DEFSTYLE))
- aPath.remove(aPath.getLength()-1, 1);
- aPath.append(aThis);
- DirEntry aEntry(rtl::OStringToOUString(
- aPath.makeStringAndClear(), osl_getThreadTextEncoding()));
- if ( aEntry.ToAbs() &&
- ( ( !bWild && aEntry.Exists() ) || ( bWild && aEntry.First() ) ) )
- {
- (*this) = aEntry;
- return sal_True;
- }
- }
- }
- while ( nIndex >= 0 );
- return sal_False;
-}
-
-#ifndef UNX
-DirEntry DirEntry::GetDevice() const
-{
- DBG_CHKTHIS( DirEntry, ImpCheckDirEntry );
-
- const DirEntry *pTop = ImpGetTopPtr();
-
- if ( ( pTop->eFlag == FSYS_FLAG_ABSROOT || pTop->eFlag == FSYS_FLAG_RELROOT ) &&
- !pTop->aName.isEmpty() )
- return DirEntry( pTop->aName, FSYS_FLAG_VOLUME );
- else
- return DirEntry( rtl::OString(), FSYS_FLAG_INVALID );
-}
-#endif
-
-String DirEntry::GetSearchDelimiter( FSysPathStyle eFormatter )
-{
- return rtl::OStringToOUString(rtl::OString(SEARCHDELIM(GetStyle(eFormatter))), osl_getThreadTextEncoding());
-}
-
-namespace
-{
- struct TempNameBase_Impl : public rtl::Static< DirEntry, TempNameBase_Impl > {};
-}
-
-DirEntry DirEntry::TempName( DirEntryKind eKind ) const
-{
- // use base-temp-dir if necessary
- const DirEntry &rEntry = TempNameBase_Impl::get();
- if ( !pParent && FSYS_FLAG_CURRENT != rEntry.eFlag && FSYS_FLAG_ABSROOT != eFlag )
- {
- DirEntry aFactory( rEntry );
- aFactory += GetName();
- return aFactory.TempName();
- }
-
- rtl::OString aDirName;
- char *ret_val;
- size_t i;
-
- // determine Directory, Prefix and Extension
- char pfx[6];
- char ext[5];
- const char *dir;
- const char *pWild = strchr( aName.getStr(), '*' );
- if ( !pWild )
- pWild = strchr( aName.getStr(), '?' );
-
- if ( pWild )
- {
- if ( pParent )
- aDirName = rtl::OUStringToOString(pParent->GetFull(), osl_getThreadTextEncoding());
- strncpy( pfx, aName.getStr(), Min( (int)5, (int)(pWild-aName.getStr()) ) );
- pfx[ pWild-aName.getStr() ] = 0;
- const char *pExt = strchr( pWild, '.' );
- if ( pExt )
- {
- strncpy( ext, pExt, 4 );
- ext[4] = 0;
- }
- else
- strcpy( ext, ".tmp" );
- }
- else
- {
- aDirName = rtl::OUStringToOString(GetFull(), osl_getThreadTextEncoding());
- strcpy( pfx, "lo" );
- strcpy( ext, ".tmp" );
- }
- dir = aDirName.getStr();
-
- OString sTempRoot;
- if ( eFlag == FSYS_FLAG_CURRENT || ( !pParent && pWild ) )
- {
- rtl::OUString aPath = GetSystemTempDirPath_Impl();
- sTempRoot = OUStringToOString( aPath, osl_getThreadTextEncoding() );
- dir = sTempRoot.getStr();
- }
-
- DirEntry aRet(FSYS_FLAG_INVALID);
- i = strlen(dir);
- // need to add ?\\? + prefix + number + pid + .ext + '\0'
-# define TMPNAME_SIZE ( 1 + 5 + 5 + 10 + 4 + 1 )
- ret_val = new char[i + TMPNAME_SIZE ];
- if (ret_val)
- {
- strcpy(ret_val,dir);
-
- /* Make sure directory ends with a separator */
-#if defined(WNT)
- if ( i>0 && ret_val[i-1] != '\\' && ret_val[i-1] != '/' &&
- ret_val[i-1] != ':')
- ret_val[i++] = '\\';
-#elif defined UNX
- if (i>0 && ret_val[i-1] != '/')
- ret_val[i++] = '/';
-#else
-#error unknown operating system
-#endif
-
- strncpy(ret_val + i, pfx, 5);
- ret_val[i + 5] = '\0'; /* strncpy doesn't put a 0 if more */
- i = strlen(ret_val); /* than 'n' chars. */
-
- /* Prefix can have 5 chars, leaving 3 for numbers. 26 ** 3 == 17576
- * Welcome to the 21st century, we can have longer filenames now ;)
- * New format: pfx + "5 char milli/micro second res" + "current pid" + ".tmp"
- */
-#ifdef _WIN32
- /* Milliseconds !! */
- static unsigned long u = GetTickCount();
- unsigned long mypid = static_cast<unsigned long>(_getpid());
-#else
- /* Microseconds !! */
- static unsigned long u = clock();
- unsigned long mypid = static_cast<unsigned long>(getpid());
-#endif
- for ( unsigned long nOld = u; ++u != nOld; ) /* Hae??? */
- {
- u %= 100000; /* on *NIX repeats every 100ms, maybe less if CLOCKS_PER_SEC > 10^6 */
- snprintf(ret_val+i, TMPNAME_SIZE, "%05lu%lu", u, mypid);
-
- strcat(ret_val,ext);
-
- if ( FSYS_KIND_FILE == eKind )
- {
- SvFileStream aStream( String( ret_val, osl_getThreadTextEncoding()),
- STREAM_WRITE|STREAM_SHARE_DENYALL );
- if ( aStream.IsOpen() )
- {
- aStream.Seek( STREAM_SEEK_TO_END );
- if ( 0 == aStream.Tell() )
- {
- aRet = DirEntry( String( ret_val, osl_getThreadTextEncoding()));
- break;
- }
- aStream.Close();
- }
- }
- else
- {
- // Redirect
- String aRetVal(ret_val, osl_getThreadTextEncoding());
- String aRedirected (aRetVal);
- if ( FSYS_KIND_DIR == eKind )
- {
- if (0 == _mkdir(rtl::OUStringToOString(aRedirected, osl_getThreadTextEncoding()).getStr()))
- {
- aRet = DirEntry( aRetVal );
- break;
- }
- }
- else
- {
-#if defined(UNX)
- if (access(rtl::OUStringToOString(aRedirected, osl_getThreadTextEncoding()).getStr(), F_OK))
- {
- aRet = DirEntry( aRetVal );
- break;
- }
-#else
- struct stat aStat;
- if (stat(rtl::OUStringToOString(aRedirected, osl_getThreadTextEncoding()).getStr(), &aStat))
- {
- aRet = DirEntry( aRetVal );
- break;
- }
-#endif
- }
- }
- }
-
- delete[] ret_val;
- ret_val = 0;
- }
-
- return aRet;
-}
-
-const DirEntry &DirEntry::operator[]( sal_uInt16 nParentLevel ) const
-{
- DBG_CHKTHIS( DirEntry, ImpCheckDirEntry );
-
- //TPF: maybe to be implemented (FastFSys)
-
- const DirEntry *pRes = this;
- while ( pRes && nParentLevel-- )
- pRes = pRes->pParent;
-
- return *pRes;
-}
-
-sal_Bool DirEntry::MakeDir( sal_Bool bSloppy ) const
-{
- DBG_CHKTHIS( DirEntry, ImpCheckDirEntry );
-
- // fast check if exists
- if ( FileStat( *this ).IsKind( FSYS_KIND_DIR ) )
- return sal_True;
- if ( bSloppy && pParent )
- if ( FileStat( *pParent ).IsKind( FSYS_KIND_DIR ) )
- return sal_True;
-
- const DirEntry *pNewDir = bSloppy ? pParent : this;
- if ( pNewDir )
- {
- // Create path to dir
- if ( pNewDir->pParent && !pNewDir->pParent->MakeDir(sal_False) )
- return sal_False;
-
- // create dir ourselves
- if ( pNewDir->eFlag == FSYS_FLAG_ABSROOT ||
- pNewDir->eFlag == FSYS_FLAG_VOLUME )
- return sal_True;
- else
- {
- //? nError = ???
- if ( FileStat( *pNewDir ).IsKind( FSYS_KIND_DIR ) )
- return sal_True;
- else
- {
- String aDirName(pNewDir->GetFull());
- rtl::OString bDirName(rtl::OUStringToOString(aDirName, osl_getThreadTextEncoding()));
-
-#ifdef WIN32
- SetLastError(0);
-#endif
- sal_Bool bResult = (0 == _mkdir(bDirName.getStr()));
- if ( !bResult )
- {
-#ifdef WIN32
- ((DirEntry *)this)->SetError( Sys2SolarError_Impl( GetLastError() ) );
-#else
- ((DirEntry *)this)->SetError( Sys2SolarError_Impl( errno ) );
-#endif
- }
-
- return bResult;
- }
- }
- }
- return sal_True;
-}
-
-FSysError DirEntry::Kill( FSysAction nActions ) const
-{
- DBG_CHKTHIS( DirEntry, ImpCheckDirEntry );
-
- FSysError eError = FSYS_ERR_OK;
-
- // Terminate name string with two '0'
- String aTmpName( GetFull() );
- rtl::OString bTmpName(rtl::OUStringToOString(aTmpName, osl_getThreadTextEncoding()));
-
- char *pName = new char[bTmpName.getLength()+2];
- strcpy( pName, bTmpName.getStr() );
- pName[bTmpName.getLength()+1] = (char) 0;
-
- // delete read-only files as well
- sal_Bool isReadOnly = FileStat::GetReadOnlyFlag(*this);
- if (isReadOnly)
- {
- FileStat::SetReadOnlyFlag(*this, sal_False);
- }
-
- // directory?
- if ( FileStat( *this ).IsKind(FSYS_KIND_DIR) )
- {
- // Delete recursively?
- if ( FSYS_ACTION_RECURSIVE == (nActions & FSYS_ACTION_RECURSIVE) )
- {
- Dir aDir( *this, FSYS_KIND_DIR|FSYS_KIND_FILE );
- for ( sal_uInt16 n = 0; eError == FSYS_ERR_OK && n < aDir.Count(); ++n )
- {
- const DirEntry &rSubDir = aDir[n];
- DirEntryFlag flag = rSubDir.GetFlag();
- if ( flag != FSYS_FLAG_CURRENT && flag != FSYS_FLAG_PARENT )
- eError = rSubDir.Kill(nActions);
- }
- }
-
- // remove Dir myself
-#ifdef WIN32
- SetLastError(0);
-#endif
- if ( eError == FSYS_ERR_OK && 0 != _rmdir( (char*) pName ) )
- {
- // Change CWD if deletion failed
-#ifdef WIN32
- eError = Sys2SolarError_Impl( GetLastError() );
-#else
- eError = Sys2SolarError_Impl( errno );
-#endif
- if ( eError )
- {
- GetPath().SetCWD();
-#ifdef WIN32
- SetLastError(0);
-#endif
- if (_rmdir( (char*) pName) != 0)
- {
-#ifdef WIN32
- eError = Sys2SolarError_Impl( GetLastError() );
-#else
- eError = Sys2SolarError_Impl( errno );
-#endif
- }
- else
- {
- eError = FSYS_ERR_OK;
- }
- }
- }
- }
- else
- {
- if ( FSYS_ACTION_USERECYCLEBIN == (nActions & FSYS_ACTION_USERECYCLEBIN) )
- {
-#if defined(WNT)
- SHFILEOPSTRUCT aOp;
- aOp.hwnd = 0;
- aOp.wFunc = FO_DELETE;
- aOp.pFrom = pName;
- aOp.pTo = 0;
- aOp.fFlags = FOF_ALLOWUNDO|FOF_SILENT|FOF_NOCONFIRMATION;
- aOp.hNameMappings = 0;
- aOp.lpszProgressTitle = 0;
- eError = Sys2SolarError_Impl( SHFileOperation( &aOp ) );
-#else
- eError = ERRCODE_IO_NOTSUPPORTED;
-#endif
- }
- else
- {
-#ifdef WIN32
- SetLastError(0);
-#endif
- if ( 0 != _unlink( (char*) pName ) )
- {
-#ifdef WIN32
- eError = Sys2SolarError_Impl( GetLastError() );
-#else
- eError = Sys2SolarError_Impl( errno );
-#endif
- }
- else
- {
- eError = ERRCODE_NONE;
- }
- }
- }
-
- // restore original read-only flag upon error
- if ( isReadOnly && (eError!=ERRCODE_NONE) )
- {
- FileStat::SetReadOnlyFlag(*this, isReadOnly);
- }
-
- delete[] pName;
- return eError;
-}
-
-/** Check if rSubEntry is (in)directly beneath *this */
-sal_Bool DirEntry::Contains( const DirEntry &rSubEntry ) const
-{
- DBG_ASSERT( IsAbs() && rSubEntry.IsAbs(), "must be absolute entries" );
-
- sal_uInt16 nThisLevel = Level();
- sal_uInt16 nSubLevel = rSubEntry.Level();
- if ( nThisLevel < nSubLevel )
- {
- for ( ; nThisLevel; --nThisLevel, --nSubLevel )
- if ( (*this)[nThisLevel-1] != rSubEntry[nSubLevel-1] )
- return sal_False;
- return sal_True;
- }
- return sal_False;
-}
-
-sal_uInt16 DirEntry::Level() const
-{
- DBG_CHKTHIS( DirEntry, ImpCheckDirEntry );
-
- sal_uInt16 nLevel = 0;
- const DirEntry *pRes = this;
- while ( pRes )
- {
- pRes = pRes->pParent;
- nLevel++;
- }
-
- return nLevel;
-}
-
-sal_Bool DirEntry::IsValid() const
-{
- return (nError == FSYS_ERR_OK);
-}
-
-#if defined(DBG_UTIL)
-void FSysTest()
-{
-}
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/tools/source/fsys/fstat.cxx b/tools/source/fsys/fstat.cxx
deleted file mode 100644
index a0bbae1159d7..000000000000
--- a/tools/source/fsys/fstat.cxx
+++ /dev/null
@@ -1,133 +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 UNX
-#include <errno.h>
-#endif
-
-#include <limits.h>
-#include <string.h>
-
-#include "comdep.hxx"
-#include <tools/fsys.hxx>
-
-FileStat::FileStat( const DirEntry& rDirEntry, FSysAccess nAccess )
-: // don't use Default-Ctors!
- aDateCreated( sal_uIntPtr(0) ),
- aTimeCreated( sal_uIntPtr(0) ),
- aDateModified( sal_uIntPtr(0) ),
- aTimeModified( sal_uIntPtr(0) ),
- aDateAccessed( sal_uIntPtr(0) ),
- aTimeAccessed( sal_uIntPtr(0) )
-{
- sal_Bool bCached = FSYS_ACCESS_CACHED == (nAccess & FSYS_ACCESS_CACHED);
- sal_Bool bFloppy = FSYS_ACCESS_FLOPPY == (nAccess & FSYS_ACCESS_FLOPPY);
-
- const FileStat *pStatFromDir = bCached ? rDirEntry.ImpGetStat() : 0;
- if ( pStatFromDir )
- {
- nError = pStatFromDir->nError;
- nKindFlags = pStatFromDir->nKindFlags;
- nSize = pStatFromDir->nSize;
- aCreator = pStatFromDir->aCreator;
- aType = pStatFromDir->aType;
- aDateCreated = pStatFromDir->aDateCreated;
- aTimeCreated = pStatFromDir->aTimeCreated;
- aDateModified = pStatFromDir->aDateModified;
- aTimeModified = pStatFromDir->aTimeModified;
- aDateAccessed = pStatFromDir->aDateAccessed;
- aTimeAccessed = pStatFromDir->aTimeAccessed;
- }
- else
-
- Update( rDirEntry, bFloppy );
-}
-
-sal_Bool FileStat::IsKind( DirEntryKind nKind ) const
-{
- sal_Bool bRet = ( ( nKind == FSYS_KIND_UNKNOWN ) &&
- ( nKindFlags == FSYS_KIND_UNKNOWN ) ) ||
- ( ( nKindFlags & nKind ) == nKind );
- return bRet;
-}
-
-sal_Bool FileStat::GetReadOnlyFlag( const DirEntry &rEntry )
-{
- rtl::OString aFPath(rtl::OUStringToOString(rEntry.GetFull(), osl_getThreadTextEncoding()));
-#if defined WNT
- DWORD nRes = GetFileAttributes( (LPCTSTR) aFPath.getStr() );
- return ULONG_MAX != nRes &&
- ( FILE_ATTRIBUTE_READONLY & nRes ) == FILE_ATTRIBUTE_READONLY;
-#elif defined UNX
- /* could we stat the object? */
- struct stat aBuf;
- if (stat(aFPath.getStr(), &aBuf))
- return sal_False;
- /* jupp, is writable for user? */
- return((aBuf.st_mode & S_IWUSR) != S_IWUSR);
-#else
- return sal_False;
-#endif
-}
-
-sal_uIntPtr FileStat::SetReadOnlyFlag( const DirEntry &rEntry, sal_Bool bRO )
-{
-
- rtl::OString aFPath(rtl::OUStringToOString(rEntry.GetFull(), osl_getThreadTextEncoding()));
-
-#if defined WNT
- DWORD nRes = GetFileAttributes( (LPCTSTR) aFPath.getStr() );
- if ( ULONG_MAX != nRes )
- nRes = SetFileAttributes( (LPCTSTR) aFPath.getStr(),
- ( nRes & ~FILE_ATTRIBUTE_READONLY ) |
- ( bRO ? FILE_ATTRIBUTE_READONLY : 0 ) );
- return ( ULONG_MAX == nRes ) ? ERRCODE_IO_UNKNOWN : 0;
-#elif defined UNX
- /* first, stat the object to get permissions */
- struct stat aBuf;
- if (stat(aFPath.getStr(), &aBuf))
- return ERRCODE_IO_NOTEXISTS;
- /* set or clear write bit for user */
- mode_t nMode;
- if (bRO)
- {
- nMode = aBuf.st_mode & ~(S_IWUSR | S_IWGRP | S_IWOTH);
- }
- else
- nMode = aBuf.st_mode | S_IWUSR;
- /* change it on fs */
- if (chmod(aFPath.getStr(), nMode))
- {
- switch (errno)
- {
- case EPERM :
- case EROFS :
- return ERRCODE_IO_ACCESSDENIED;
- default :
- return ERRCODE_IO_NOTEXISTS;
- }
- }
- else
- return ERRCODE_NONE;
-#else
- return ERRCODE_IO_NOTSUPPORTED;
-#endif
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/tools/source/fsys/tdir.cxx b/tools/source/fsys/tdir.cxx
deleted file mode 100644
index 5e6ed052f819..000000000000
--- a/tools/source/fsys/tdir.cxx
+++ /dev/null
@@ -1,416 +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 .
- */
-#define _DIR_CXX
-
-#include <stdlib.h>
-#include <cstdarg>
-#include <limits.h>
-#include <tools/debug.hxx>
-
-#include "comdep.hxx"
-#include <tools/fsys.hxx>
-
-DBG_NAME( Dir )
-
-/// determines whether insertion is required
-sal_Bool Dir::ImpInsertPointReached( const DirEntry& rNewEntry,
- const FileStat& rNewStat,
- size_t nCurPos, size_t nSortIndex ) const
-{
-#define VALUE( nKindFlags ) \
- ( ( FSYS_KIND_FILE | FSYS_KIND_DIR | FSYS_KIND_DEV | \
- FSYS_KIND_CHAR | FSYS_KIND_BLOCK ) & nKindFlags )
-
- if ( pLst->empty() )
- return sal_True;
-
- FSysSort nSort = (*pSortLst)[ nSortIndex ];
- FileStat *pOldStat = NULL;
- DirEntry *pCurLstObj = (*pLst)[ nCurPos ];
- if ( pStatLst )
- pOldStat = (*pStatLst)[ nCurPos ];
-
- switch( nSort )
- {
- case FSYS_SORT_NAME:
- case (FSYS_SORT_NAME | FSYS_SORT_ASCENDING):
- if ( pCurLstObj->aName > rNewEntry.aName )
- return sal_True;
- if ( !(pCurLstObj->aName == rNewEntry.aName) )
- return sal_False;
- break;
- case (FSYS_SORT_NAME | FSYS_SORT_DESCENDING):
- if ( pCurLstObj->aName < rNewEntry.aName )
- return sal_True;
- if ( !(pCurLstObj->aName == rNewEntry.aName) )
- return sal_False;
- break;
-
- case FSYS_SORT_EXT:
- case (FSYS_SORT_EXT | FSYS_SORT_ASCENDING):
- {
- if ( pCurLstObj->GetExtension() > rNewEntry.GetExtension() )
- return sal_True;
- if ( !(pCurLstObj->GetExtension() == rNewEntry.GetExtension()) )
- return sal_False;
- break;
- }
- case (FSYS_SORT_EXT | FSYS_SORT_DESCENDING):
- {
- if ( pCurLstObj->GetExtension() < rNewEntry.GetExtension() )
- return sal_True;
- if ( !(pCurLstObj->GetExtension() == rNewEntry.GetExtension()) )
- return sal_False;
- break;
- }
-
- case FSYS_SORT_KIND:
- case (FSYS_SORT_KIND | FSYS_SORT_ASCENDING ):
- if ( VALUE(pOldStat->nKindFlags) > VALUE(rNewStat.nKindFlags) )
- return sal_True;
- if ( !(VALUE(pOldStat->nKindFlags) == VALUE(rNewStat.nKindFlags)) )
- return sal_False;
- break;
- case (FSYS_SORT_KIND | FSYS_SORT_DESCENDING):
- if ( VALUE(pOldStat->nKindFlags) < VALUE(rNewStat.nKindFlags) )
- return sal_True;
- if ( !(VALUE(pOldStat->nKindFlags) == VALUE(rNewStat.nKindFlags)) )
- return sal_False;
- break;
-
- case FSYS_SORT_SIZE:
- case (FSYS_SORT_SIZE | FSYS_SORT_ASCENDING):
- if ( pOldStat->nSize > rNewStat.nSize )
- return sal_True;
- if ( !(pOldStat->nSize == rNewStat.nSize) )
- return sal_False;
- break;
- case (FSYS_SORT_SIZE | FSYS_SORT_DESCENDING):
- if ( pOldStat->nSize < rNewStat.nSize )
- return sal_True;
- if ( !(pOldStat->nSize == rNewStat.nSize) )
- return sal_False;
- break;
-
- case FSYS_SORT_MODIFYED:
- case (FSYS_SORT_MODIFYED | FSYS_SORT_ASCENDING):
- if ( (pOldStat->aDateModified >= rNewStat.aDateModified) &&
- (pOldStat->aTimeModified > rNewStat.aTimeModified) )
- return sal_True;
- if ( !((pOldStat->aDateModified == rNewStat.aDateModified) &&
- (pOldStat->aTimeModified == rNewStat.aTimeModified)) )
- return sal_False;
- break;
- case (FSYS_SORT_MODIFYED | FSYS_SORT_DESCENDING):
- if ( (pOldStat->aDateModified <= rNewStat.aDateModified) &&
- (pOldStat->aTimeModified < rNewStat.aTimeModified) )
- return sal_True;
- if ( !((pOldStat->aDateModified == rNewStat.aDateModified) &&
- (pOldStat->aTimeModified == rNewStat.aTimeModified)) )
- return sal_False;
- break;
-
- case FSYS_SORT_CREATED:
- case (FSYS_SORT_CREATED | FSYS_SORT_ASCENDING):
- if ( (pOldStat->aDateCreated >= rNewStat.aDateCreated) &&
- (pOldStat->aTimeCreated > rNewStat.aTimeCreated) )
- return sal_True;
- if ( !((pOldStat->aDateCreated == rNewStat.aDateCreated) &&
- (pOldStat->aTimeCreated == rNewStat.aTimeCreated)) )
- return sal_False;
- break;
- case (FSYS_SORT_CREATED | FSYS_SORT_DESCENDING):
- if ( (pOldStat->aDateCreated <= rNewStat.aDateCreated) &&
- (pOldStat->aTimeCreated < rNewStat.aTimeCreated) )
- return sal_True;
- if ( !((pOldStat->aDateCreated == rNewStat.aDateCreated) &&
- (pOldStat->aTimeCreated == rNewStat.aTimeCreated)) )
- return sal_False;
- break;
-
- case FSYS_SORT_ACCESSED:
- case (FSYS_SORT_ACCESSED | FSYS_SORT_ASCENDING):
- if ( (pOldStat->aDateAccessed >= rNewStat.aDateAccessed) &&
- (pOldStat->aTimeAccessed > rNewStat.aTimeAccessed) )
- return sal_True;
- if ( !((pOldStat->aDateAccessed == rNewStat.aDateAccessed) &&
- (pOldStat->aTimeAccessed == rNewStat.aTimeAccessed)) )
- return sal_False;
- break;
- case (FSYS_SORT_ACCESSED | FSYS_SORT_DESCENDING):
- if ( (pOldStat->aDateAccessed <= rNewStat.aDateAccessed) &&
- (pOldStat->aTimeAccessed < rNewStat.aTimeAccessed) )
- return sal_True;
- if ( !((pOldStat->aDateAccessed == rNewStat.aDateAccessed) &&
- (pOldStat->aTimeAccessed == rNewStat.aTimeAccessed)) )
- return sal_False;
- break;
- default: /* Kann nicht sein */;
- }
-
- if ( nSortIndex == ( pSortLst->size() - 1 ) )
- return sal_True;
- else
- return ImpInsertPointReached( rNewEntry, rNewStat,
- nCurPos, nSortIndex + 1 );
-#undef VALUE
-}
-
-/// Insert as sorted
-void Dir::ImpSortedInsert( const DirEntry *pNewEntry, const FileStat *pNewStat )
-{
- // special case: no sorting required
- if ( !pSortLst ) {
- pLst->push_back( (DirEntry*)pNewEntry );
- return;
- }
-
- for ( size_t i = 0, n = pLst->size(); i < n; ++i )
- {
- if ( ImpInsertPointReached( *pNewEntry, *pNewStat, i, 0 ) )
- {
- if ( pStatLst ) {
- FileStatList::iterator it = pStatLst->begin();
- ::std::advance( it, i );
- pStatLst->insert( it, (FileStat*)pNewStat );
- }
- DirEntryList::iterator it = pLst->begin();
- ::std::advance( it, i );
- pLst->insert( it, (DirEntry*)pNewEntry );
- return;
- }
- }
-
- if ( pStatLst )
- pStatLst->push_back( (FileStat*)pNewStat );
- pLst->push_back( (DirEntry*)pNewEntry );
-}
-
-/// shared implementation of CTORs
-void Dir::Construct( DirEntryKind nKindFlags )
-{
- pLst = NULL;
- pSortLst = NULL;
- pStatLst = NULL;
- eAttrMask = nKindFlags;
- rtl::OString aTempName(rtl::OUStringToOString(GetName(), osl_getThreadTextEncoding()));
- if (aTempName.indexOf('*') != -1 || aTempName.indexOf('?') != -1)
- {
-#if defined( WNT )
- rtl::OString aTStr(rtl::OUStringToOString(CutName(), osl_getThreadTextEncoding()));
- char* pBuffer = new char[aTStr.getLength()+1];
- strcpy( pBuffer, aTStr.getStr() );
- CharLowerBuff( pBuffer, aTStr.getLength() );
- aNameMask = WildCard( String(pBuffer, osl_getThreadTextEncoding()), ';' );
- delete [] pBuffer;
-#else
- aNameMask = WildCard( CutName(), ';' );
-#endif
- }
- else
- aNameMask.setGlob(rtl::OUString(static_cast<sal_Unicode>('*')));
-}
-
-void Dir::Reset()
-{
- // remove old Reader if necessary
- if ( pReader && pReader->bInUse )
- DELETEZ(pReader);
-
- // Remove all DirEntries from List and free memory
- if ( pLst )
- {
- for ( size_t i = 0, n = pLst->size(); i < n; ++i ) {
- delete (*pLst)[ i ];
- }
- pLst->clear();
- }
- else
- pLst = new DirEntryList();
-
- // Remove old File-Stats
- if ( pStatLst )
- {
- for ( size_t i = 0, n = pStatLst->size(); i < n; ++i ) {
- delete (*pStatLst)[ i ];
- }
- pStatLst->clear();
- delete pStatLst;
- pStatLst = NULL;
- }
-
- // Does sorting require FileStats?
- if ( pSortLst )
- {
- for ( size_t i = 0, n = pSortLst->size(); i < n; ++i ) {
- if ( (*pSortLst)[ i ]
- & ( FSYS_SORT_KIND | FSYS_SORT_SIZE | FSYS_SORT_CREATED
- | FSYS_SORT_MODIFYED | FSYS_SORT_ACCESSED
- )
- ) {
- pStatLst = new FileStatList();
- break;
- }
- }
- }
-
- // Create new reader if necessary
- if ( !pReader )
- pReader = new DirReader_Impl( *this );
-
- // Does the directory exist at all?
-#if !defined(UNX) //explanation: see DirReader_Impl::Read() in unx.cxx
- if( !pReader->pDosDir )
- {
- nError = FSYS_ERR_NOTADIRECTORY;
- DELETEZ( pReader );
- return;
- }
-#endif
-}
-
-sal_uInt16 Dir::Scan( sal_uInt16 nCount )
-{
-
- sal_uInt16 nRead = 0; // Number of read entries in this round
-
- // did not complete
- if ( pReader )
- {
- // is this a new reader?
- if ( pLst->empty() )
- {
- // Scan directories
- pReader->bInUse = sal_True;
- nRead = pReader->Init();
- }
-
- // continue reading
- while ( nRead <= nCount && !pReader->bReady )
- nRead = nRead + pReader->Read();
-
- // done?
- if ( pReader && pReader->bReady )
- DELETEZ( pReader );
- }
-
- // Return read entry count
- return nRead;
-}
-
-Dir::Dir( const DirEntry& rDirEntry, DirEntryKind nKindFlags ):
- DirEntry( rDirEntry ),
- pReader( 0 )
-{
- DBG_CTOR( Dir, NULL );
-
- Construct( nKindFlags );
- Reset();
-}
-
-Dir::~Dir()
-{
- DBG_DTOR( Dir, NULL );
-
- // Remove all DirEntries and free memory
- if ( pLst )
- {
- for ( size_t i = 0, n = pLst->size(); i < n; ++i ) {
- delete (*pLst)[ i ];
- }
- pLst->clear();
- delete pLst;
- }
-
- // Remove all Sorts from list and free memory
- if ( pSortLst )
- {
- pSortLst->clear();
- delete pSortLst;
- }
-
- // Remove all FileStats from list and free memory
- if ( pStatLst )
- {
- for ( size_t i = 0, n = pStatLst->size(); i < n; ++i ) {
- delete (*pStatLst)[ i ];
- }
- pStatLst->clear();
- delete pStatLst;
- }
-
- delete pReader;
-}
-
-DirEntry& Dir::operator[] ( size_t nIndex ) const
-{
- DBG_ASSERT( nIndex < Count(), "Dir::operator[] : nIndex > Count()" );
-
- DirEntry *pEntry = (*pLst)[ nIndex ];
- return *pEntry;
-}
-
-Dir& Dir::operator+=( const Dir& rDir )
-{
- // Read the rest of the directory
- if ( pReader )
- Scan( USHRT_MAX );
- DBG_ASSERT( !rDir.pReader, "Dir::+= with incomplete Dir" );
-
- if ( !pLst )
- pLst = new DirEntryList();
-
- // FileStats required by sorting criteria?
- sal_Bool bStat = sal_False;
- if ( pSortLst ) {
- for ( size_t i = 0, n = pSortLst->size(); i < n && !bStat; ++i ) {
- if ( (*pSortLst)[ i ]
- & ( FSYS_SORT_CREATED | FSYS_SORT_MODIFYED | FSYS_SORT_SIZE
- | FSYS_SORT_ACCESSED | FSYS_SORT_KIND
- )
- ) {
- bStat = sal_True;
- }
- }
- }
- FileStat* stat = NULL;
- for ( size_t nNr = 0; nNr < rDir.Count(); nNr++ )
- {
- if ( bStat )
- {
- if ( rDir.pStatLst )
- stat = new FileStat( *(*rDir.pStatLst)[ nNr ] );
- else
- stat = new FileStat( rDir[nNr] );
- }
- ImpSortedInsert( new DirEntry( rDir[nNr] ), stat );
- }
- return *this;
-}
-
-size_t Dir::Count( sal_Bool bUpdated ) const
-{
- // Read the rest of the directory
- if ( bUpdated && pReader )
- ((Dir*)this)->Scan( USHRT_MAX );
-
- return pLst == NULL ? 0 : pLst->size();
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/tools/source/fsys/tempfile.cxx b/tools/source/fsys/tempfile.cxx
index 24557f5e4366..46f1bedd53bf 100644
--- a/tools/source/fsys/tempfile.cxx
+++ b/tools/source/fsys/tempfile.cxx
@@ -18,7 +18,6 @@
*/
#include <tools/tempfile.hxx>
-#include "comdep.hxx"
#include <rtl/ustring.hxx>
#include <rtl/ustrbuf.hxx>
diff --git a/tools/source/fsys/unx.cxx b/tools/source/fsys/unx.cxx
deleted file mode 100644
index f26882cd0d5e..000000000000
--- a/tools/source/fsys/unx.cxx
+++ /dev/null
@@ -1,366 +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 .
- */
-
-#include <stdio.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <utime.h>
-
-#if defined LINUX || defined ANDROID
-#include <mntent.h>
-#define mnttab mntent
-#elif defined AIX
-#include <sys/mntctl.h>
-#include <sys/vmount.h>
-extern "C" int mntctl( int cmd, size_t size, char* buf );
-#elif defined(NETBSD)
-#include <sys/mount.h>
-#elif defined(FREEBSD) || defined(MACOSX) || defined(OPENBSD) || \
- defined(DRAGONFLY) || defined(IOS)
-struct mnttab
-{
- char *mnt_dir;
- char *mnt_fsname;
-};
-#else
-#include <sys/mnttab.h>
-#endif
-
-#ifndef MAXPATHLEN
-#define MAXPATHLEN 1024
-#endif
-
-#include <tools/debug.hxx>
-#include <tools/fsys.hxx>
-#include "comdep.hxx"
-#include <rtl/instance.hxx>
-
-#if defined SOLARIS
-#define MOUNTSPECIAL mnt_special
-#define MOUNTPOINT mnt_mountp
-#define MOUNTOPTS mnt_mntopts
-#define MOUNTFS mnt_fstype
-#else
-#define MOUNTSPECIAL mnt_fsname
-#define MOUNTPOINT mnt_dir
-#define MOUNTFS mnt_type
-#endif
-
-struct mymnttab
-{
- dev_t mountdevice;
- rtl::OString mountspecial;
- rtl::OString mountpoint;
- rtl::OString mymnttab_filesystem;
- mymnttab() { mountdevice = (dev_t) -1; }
-};
-
-#if defined(NETBSD) || defined(FREEBSD) || defined(MACOSX) || \
- defined(OPENBSD) || defined(DRAGONFLY) || defined(IOS)
-sal_Bool GetMountEntry(dev_t /* dev */, struct mymnttab * /* mytab */ )
-{
- DBG_WARNING( "Sorry, not implemented: GetMountEntry" );
- return sal_False;
-}
-#elif defined AIX
-sal_Bool GetMountEntry(dev_t dev, struct mymnttab *mytab)
-{
- int bufsize;
- if (mntctl (MCTL_QUERY, sizeof bufsize, (char*) &bufsize))
- return sal_False;
-
- char* buffer = (char *)malloc( bufsize * sizeof(char) );
- if (mntctl (MCTL_QUERY, bufsize, buffer) != -1)
- for ( char* vmt = buffer;
- vmt < buffer + bufsize;
- vmt += ((struct vmount*)vmt)->vmt_length)
- {
- struct stat buf;
- char *mountp = vmt2dataptr((struct vmount*)vmt, VMT_STUB);
- if ((stat (mountp, &buf) != -1) && (buf.st_dev == dev))
- {
- mytab->mountpoint = mountp;
- mytab->mountspecial
- = vmt2dataptr((struct vmount*)vmt, VMT_HOSTNAME);
- if (mytab->mountspecial.Len())
- mytab->mountspecial += ':';
- mytab->mountspecial
- += vmt2dataptr((struct vmount*)vmt, VMT_OBJECT);
- mytab->mountdevice = dev;
- free( buffer );
- return sal_True;
- }
- }
- free( buffer );
- return sal_False;
-}
-#else
-static sal_Bool GetMountEntry(dev_t dev, struct mymnttab *mytab)
-{
-#if defined SOLARIS
- FILE *fp = fopen (MNTTAB, "r");
- if (! fp)
- return sal_False;
- struct mnttab mnt[1];
- while (getmntent (fp, mnt) != -1)
-#elif defined AIX || defined ANDROID
- FILE *fp = NULL;
- if (! fp)
- return sal_False;
- struct mnttab mnt[1];
- while ( 0 )
-#else
- FILE *fp = setmntent (MOUNTED, "r");
- if (! fp)
- return sal_False;
- struct mnttab *mnt;
- while ((mnt = getmntent (fp)) != NULL)
-#endif
- {
-#ifdef SOLARIS
- char *devopt = NULL;
- if ( mnt->MOUNTOPTS != NULL )
- devopt = strstr (mnt->MOUNTOPTS, "dev=");
- if (devopt)
- {
- if (dev != (dev_t) strtoul (devopt+4, NULL, 16))
- continue;
- }
- else
-#endif
- {
- struct stat buf;
- if ((stat (mnt->MOUNTPOINT, &buf) == -1) || (buf.st_dev != dev))
- continue;
- }
-# ifdef LINUX
- // #61624# Opening file with setmntent and closing with fclose fails for glibc-2.1
- endmntent( fp );
-# else
- fclose (fp);
-# endif
- mytab->mountspecial = mnt->MOUNTSPECIAL;
- mytab->mountpoint = mnt->MOUNTPOINT;
- mytab->mountdevice = dev;
- mytab->mymnttab_filesystem = mnt->MOUNTFS;
-
- return sal_True;
- }
-# ifdef LINUX
- /* #61624# see above */
- endmntent( fp );
-# else
- fclose (fp);
-# endif
- return sal_False;
-}
-#endif
-
-sal_Bool DirEntry::ToAbs()
-{
- if ( FSYS_FLAG_VOLUME == eFlag )
- {
- eFlag = FSYS_FLAG_ABSROOT;
- return sal_True;
- }
-
- if ( IsAbs() )
- return sal_True;
-
- char sBuf[MAXPATHLEN + 1];
- *this = DirEntry( String( getcwd( sBuf, MAXPATHLEN ), osl_getThreadTextEncoding() ) ) + *this;
- return IsAbs();
-}
-
-namespace { struct mymnt : public rtl::Static< mymnttab, mymnt > {}; }
-
-String DirEntry::GetVolume() const
-{
- DBG_CHKTHIS( DirEntry, ImpCheckDirEntry );
-
- DirEntry aPath( *this );
- aPath.ToAbs();
-
- struct stat buf;
- while (stat(rtl::OUStringToOString(aPath.GetFull(), osl_getThreadTextEncoding()).getStr(), &buf))
- {
- if (aPath.Level() <= 1)
- return String();
- aPath = aPath [1];
- }
- mymnttab &rMnt = mymnt::get();
- return ((buf.st_dev == rMnt.mountdevice || GetMountEntry(buf.st_dev, &rMnt)) ?
- rtl::OStringToOUString(rMnt.mountspecial, osl_getThreadTextEncoding()) :
- rtl::OUString());
-}
-
-sal_Bool DirEntry::SetCWD( sal_Bool bSloppy ) const
-{
- DBG_CHKTHIS( DirEntry, ImpCheckDirEntry );
-
- rtl::OString aPath(rtl::OUStringToOString(GetFull(), osl_getThreadTextEncoding()));
- if (!chdir(aPath.getStr()))
- {
- return sal_True;
- }
- else
- {
- if (bSloppy && !chdir(aPath.getStr()))
- {
- return sal_True;
- }
- else
- {
- return sal_False;
- }
- }
-}
-
-sal_uInt16 DirReader_Impl::Init()
-{
- return 0;
-}
-
-sal_uInt16 DirReader_Impl::Read()
-{
- if (!pDosDir)
- {
- pDosDir = opendir(rtl::OUStringToOString(aPath, osl_getThreadTextEncoding()).getStr());
- }
-
- if (!pDosDir)
- {
- bReady = sal_True;
- return 0;
- }
-
- // List directories and dirs
- if ( ( pDir->eAttrMask & FSYS_KIND_DIR || pDir->eAttrMask & FSYS_KIND_FILE ) &&
- ( ( pDosEntry = readdir( pDosDir ) ) != NULL ) )
- {
- String aD_Name(pDosEntry->d_name, osl_getThreadTextEncoding());
- if ( pDir->aNameMask.Matches( aD_Name ) )
- {
- 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);
- if ( pParent )
- pTemp->ImpChangeParent( new DirEntry( *pParent ), sal_False);
- FileStat aStat( *pTemp );
- if ( ( ( ( pDir->eAttrMask & FSYS_KIND_DIR ) &&
- ( aStat.IsKind( FSYS_KIND_DIR ) ) ) ||
- ( ( pDir->eAttrMask & FSYS_KIND_FILE ) &&
- !( aStat.IsKind( FSYS_KIND_DIR ) ) ) ) &&
- !( pDir->eAttrMask & FSYS_KIND_VISIBLE &&
- pDosEntry->d_name[0] == '.' ) )
- {
- if ( pDir->pStatLst ) // Does sorting criteria require status?
- pDir->ImpSortedInsert( pTemp, new FileStat( aStat ) );
- else
- pDir->ImpSortedInsert( pTemp, NULL );
- return 1;
- }
- else
- delete pTemp;
- }
- }
- else
- bReady = sal_True;
- return 0;
-}
-
-sal_Bool FileStat::Update( const DirEntry& rDirEntry, SAL_UNUSED_PARAMETER sal_Bool )
-{
-
- 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_NOTEXISTS;
- return sal_False;
- }
-
- // Special case if DirEntry is root
- if ( rDirEntry.eFlag == FSYS_FLAG_ABSROOT )
- {
- nKindFlags = FSYS_KIND_DIR;
- nError = FSYS_ERR_OK;
- return sal_True;
- }
-
- struct stat aStat;
- rtl::OString aPath(rtl::OUStringToOString(rDirEntry.GetFull(), osl_getThreadTextEncoding()));
- if (stat(aPath.getStr(), &aStat))
- {
- // pl: #67851#
- // do this here, because an existing filename containing "wildcards"
- // should be handled as a file, not a wildcard
- // note that this is not a solution, since filenames containing special characters
- // are handled badly across the whole Office
-
- // special treatment if name contains wildcards
- rtl::OString aTempName(rtl::OUStringToOString(rDirEntry.GetName(), osl_getThreadTextEncoding()));
- if ( aTempName.indexOf('?') != -1 ||
- aTempName.indexOf('*') != -1 ||
- aTempName.indexOf(';') != -1 )
- {
- nKindFlags = FSYS_KIND_WILD;
- nError = FSYS_ERR_OK;
- return sal_True;
- }
-
- nError = FSYS_ERR_NOTEXISTS;
- return sal_False;
- }
-
- nError = FSYS_ERR_OK;
- nSize = aStat.st_size;
-
- nKindFlags = FSYS_KIND_UNKNOWN;
- if ( ( aStat.st_mode & S_IFDIR ) == S_IFDIR )
- nKindFlags = nKindFlags | FSYS_KIND_DIR;
- if ( ( aStat.st_mode & S_IFREG ) == S_IFREG )
- nKindFlags = nKindFlags | FSYS_KIND_FILE;
- if ( ( aStat.st_mode & S_IFCHR ) == S_IFCHR )
- nKindFlags = nKindFlags | FSYS_KIND_DEV | FSYS_KIND_CHAR;
- if ( ( aStat.st_mode & S_IFBLK ) == S_IFBLK )
- nKindFlags = nKindFlags | FSYS_KIND_DEV | FSYS_KIND_BLOCK;
- if ( nKindFlags == FSYS_KIND_UNKNOWN )
- nKindFlags = nKindFlags | FSYS_KIND_FILE;
-
- Unx2DateAndTime( aStat.st_ctime, aTimeCreated, aDateCreated );
- Unx2DateAndTime( aStat.st_mtime, aTimeModified, aDateModified );
- Unx2DateAndTime( aStat.st_atime, aTimeAccessed, aDateAccessed );
-
- return sal_True;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/tools/source/fsys/unx.hxx b/tools/source/fsys/unx.hxx
deleted file mode 100644
index bcc86ec16238..000000000000
--- a/tools/source/fsys/unx.hxx
+++ /dev/null
@@ -1,74 +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 .
- */
-#ifndef _unx_hxx
-#define _unx_hxx
-
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/param.h>
-#include <dirent.h>
-#include <unistd.h>
-
-#define _mkdir(p) mkdir(p, 0777)
-#define _rmdir rmdir
-#define _chdir chdir
-#define _unlink unlink
-#define _getcwd getcwd
-#define _access access
-
-#define DEFSTYLE FSYS_STYLE_BSD
-
-#define CMP_LOWER(s) (s)
-#define LOWER(aString) (aString.Lower())
-
-#include <time.h>
-
-inline Time Unx2Time( time_t nTime )
-{
- tm atm;
- tm *pTime;
- pTime = localtime_r( &nTime, &atm );
- return Time( pTime->tm_hour,
- pTime->tm_min,
- pTime->tm_sec );
-}
-
-inline Date Unx2Date( time_t nDate )
-{
- tm atm;
- tm *pTime;
- pTime = localtime_r( &nDate, &atm );
- return Date( pTime->tm_mday,
- pTime->tm_mon + 1,
- pTime->tm_year + 1900 );
-}
-
-inline void Unx2DateAndTime( time_t nDate, Time& rTime, Date& rDate )
-{
- tm atm;
- tm *pTime;
- pTime = localtime_r( &nDate, &atm );
- rTime = Time( pTime->tm_hour, pTime->tm_min, pTime->tm_sec );
- rDate = Date( pTime->tm_mday, pTime->tm_mon + 1, pTime->tm_year + 1900 );
-}
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
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: */
diff --git a/tools/source/fsys/wntmsc.hxx b/tools/source/fsys/wntmsc.hxx
deleted file mode 100644
index 734a68f0f2f1..000000000000
--- a/tools/source/fsys/wntmsc.hxx
+++ /dev/null
@@ -1,67 +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 .
- */
-#ifndef _dosmsc_hxx
-#define _dosmsc_hxx
-
-#include <string.h>
-
-#ifndef ICC
-#include <io.h>
-#endif
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <direct.h>
-#include <windows.h>
-#include <tools/solar.h>
-#include <rtl/strbuf.hxx>
-
-#define DOS_DIRECT _A_SUBDIR
-#define DOS_VOLUMEID 0x08
-
-#ifndef S_IFBLK
-#define S_IFBLK 0x6000
-#endif
-
-#define dirent _WIN32_FIND_DATAA
-#define d_name cFileName
-#define d_type dwFileAttributes
-
-typedef struct
-{
- _WIN32_FIND_DATAA aDirEnt;
- HANDLE h;
- const char *p;
-} DIR;
-
-#define DEFSTYLE FSYS_STYLE_NTFS
-#define MKDIR( p ) mkdir( p )
-#define CMP_LOWER(s) ( s.toAsciiLowerCase() )
-
-inline sal_Bool DRIVE_EXISTS(char c)
-{
- rtl::OStringBuffer aDriveRoot;
- aDriveRoot.append(c);
- aDriveRoot.append(":\\");
- return GetDriveType( aDriveRoot.getStr() ) > 1;
-}
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */