On Tue, May 03, 2011 at 10:21:18AM +0200, Francois Tigeot wrote:
On Tue, May 03, 2011 at 02:06:24AM -0600, Tor Lillqvist wrote:
I mean, if we have code in there that assumes NTFS (and SMB) volumes are case insensitive (at
least when accessed from Windows), we should definitely keep it that way, even if somebody
might have toggled a registry value to change it. If somebody does that, they deserve what they
get.
The code is overly complex and wrong in some cases. I was thinking of
simplifying it by doing a simple compile-time check for WNT but this may not be
the best way.
Following a short discussion on IRC, I've decided to remove the bulk of the
code and use a single #if defined(WNT) check instead.
The attached patch is relative to libs-gui.
--
Francois Tigeot
diff --git a/tools/inc/tools/fsys.hxx b/tools/inc/tools/fsys.hxx
index 47ce264..e4ab76b 100644
--- a/tools/inc/tools/fsys.hxx
+++ b/tools/inc/tools/fsys.hxx
@@ -296,8 +296,6 @@ public:
FSysPathStyle eParser = FSYS_STYLE_HOST );
~DirEntry();
- sal_Bool IsCaseSensitive (FSysPathStyle eFormatter =
FSYS_STYLE_HOST) const;
-
sal_uIntPtr GetError() const { return nError; }
sal_Bool IsValid() const;
DirEntryFlag GetFlag() const { return eFlag; };
diff --git a/tools/source/fsys/dirent.cxx b/tools/source/fsys/dirent.cxx
index a557edb..625fc48 100644
--- a/tools/source/fsys/dirent.cxx
+++ b/tools/source/fsys/dirent.cxx
@@ -1662,13 +1662,12 @@ sal_Bool DirEntry::ImpToRel( String aCurStr )
aThis.ToAbs();
String aThisStr( aThis.GetFull( FSYS_STYLE_HPFS ) );
- // #109512 preserve case of path even if caseinsensitive
+ // preserve case of path even if caseinsensitive
String aThisCompareStr( aThisStr ), aCurCompareStr( aCurStr );
- if ( ! IsCaseSensitive() )
- {
+ #if defined(WNT)
aThisCompareStr.ToLowerAscii();
aCurCompareStr.ToLowerAscii();
- }
+ #endif
// "Ubereinstimmung pr"ufen
sal_uInt16 nPos = aThisCompareStr.Match( aCurCompareStr );
diff --git a/tools/source/fsys/unx.cxx b/tools/source/fsys/unx.cxx
index a2eba54..90c7a94 100644
--- a/tools/source/fsys/unx.cxx
+++ b/tools/source/fsys/unx.cxx
@@ -191,81 +191,6 @@ static sal_Bool GetMountEntry(dev_t dev, struct mymnttab *mytab)
#endif
-/************************************************************************
-|*
-|* DirEntry::IsCaseSensitive()
-|*
-*************************************************************************/
-
-sal_Bool DirEntry::IsCaseSensitive( FSysPathStyle eFormatter ) const
-{
-
- if (eFormatter==FSYS_STYLE_HOST)
- {
-#if defined(NETBSD) || defined(DRAGONFLY)
- return sal_True;
-#else
- struct stat buf;
- DirEntry aPath(*this);
- aPath.ToAbs();
-
- while (stat (ByteString(aPath.GetFull(), osl_getThreadTextEncoding()).GetBuffer(), &buf))
- {
- if (aPath.Level() == 1)
- {
- return sal_True; // ich bin unter UNIX, also ist der default im Zweifelsfall
case sensitiv
- }
- aPath = aPath [1];
- }
-
- struct mymnttab fsmnt;
- GetMountEntry(buf.st_dev, &fsmnt);
- if ((fsmnt.mymnttab_filesystem.CompareTo("msdos")==COMPARE_EQUAL) ||
- (fsmnt.mymnttab_filesystem.CompareTo("umsdos")==COMPARE_EQUAL) ||
- (fsmnt.mymnttab_filesystem.CompareTo("vfat")==COMPARE_EQUAL) ||
- (fsmnt.mymnttab_filesystem.CompareTo("hpfs")==COMPARE_EQUAL) ||
- (fsmnt.mymnttab_filesystem.CompareTo("smb") ==COMPARE_EQUAL) ||
- (fsmnt.mymnttab_filesystem.CompareTo("ncpfs")==COMPARE_EQUAL))
- {
- return sal_False;
- }
- else
- {
- return sal_True;
- }
-#endif
- }
- else
- {
- sal_Bool isCaseSensitive = sal_True; // ich bin unter UNIX, also ist der default im
Zweifelsfall case sensitiv
- switch ( eFormatter )
- {
- case FSYS_STYLE_MAC:
- case FSYS_STYLE_FAT:
- case FSYS_STYLE_VFAT:
- case FSYS_STYLE_NTFS:
- case FSYS_STYLE_NWFS:
- case FSYS_STYLE_HPFS:
- {
- isCaseSensitive = sal_False;
- break;
- }
- case FSYS_STYLE_SYSV:
- case FSYS_STYLE_BSD:
- case FSYS_STYLE_DETECT:
- {
- isCaseSensitive = sal_True;
- break;
- }
- default:
- {
- isCaseSensitive = sal_True; // ich bin unter UNIX, also ist der default
im Zweifelsfall case sensitiv
- break;
- }
- }
- return isCaseSensitive;
- }
-}
/************************************************************************
|*
diff --git a/tools/source/fsys/wntmsc.cxx b/tools/source/fsys/wntmsc.cxx
index cfe64bea..bfe7a3c 100644
--- a/tools/source/fsys/wntmsc.cxx
+++ b/tools/source/fsys/wntmsc.cxx
@@ -169,91 +169,6 @@ FSysPathStyle DirEntry::GetPathStyle( const String &rDevice )
/*************************************************************************
|*
-|* DirEntry::IsCaseSensitive()
-|*
-*************************************************************************/
-
-sal_Bool DirEntry::IsCaseSensitive( FSysPathStyle eFormatter ) const
-{
-
- if (eFormatter==FSYS_STYLE_HOST)
- {
-/*
- DirEntry aRoot(*this);
- aRoot.ToAbs();
- aRoot = aRoot[Level()-1];
- String aRootDir = aRoot.GetFull(FSYS_STYLE_HOST, sal_True);
-
- char sVolumeName[256];
- DWORD nVolumeSerial;
- DWORD nMaxCompLen;
- DWORD nFlags;
- char sFileSysName[16];
-
- if ( GetVolumeInformation( (char*) aRootDir.GetStr(),
- sVolumeName,
- 256,
- (LPDWORD) &nVolumeSerial,
- (LPDWORD) &nMaxCompLen,
- (LPDWORD) &nFlags,
- sFileSysName,
- 16 ))
- {
- return (nFlags & FS_CASE_SENSITIVE) ? sal_True : sal_False;
- }
- else
- {
- return sal_False;
- }
-*/
- //
- // guter versuch, aber FS_CASE_SENSITIVE ist D?nnsinn in T?ten:
- //
- // sFileSysName FS_CASE_SENSITIVE
- // FAT sal_False
- // NTFS sal_True !!!
- // NWCompat sal_False
- // Samba sal_False
- //
- // NT spricht auch NTFS lediglich case preserving an, also ist unter NT alles case
insensitiv
- //
-
- return sal_False;
- }
- else
- {
- sal_Bool isCaseSensitive = sal_False; // ich bin unter win32, also ist der default case
insensitiv
- switch ( eFormatter )
- {
- case FSYS_STYLE_MAC:
- case FSYS_STYLE_FAT:
- case FSYS_STYLE_VFAT:
- case FSYS_STYLE_NTFS:
- case FSYS_STYLE_NWFS:
- case FSYS_STYLE_HPFS:
- case FSYS_STYLE_DETECT:
- {
- isCaseSensitive = sal_False;
- break;
- }
- case FSYS_STYLE_SYSV:
- case FSYS_STYLE_BSD:
- {
- isCaseSensitive = sal_True;
- break;
- }
- default:
- {
- isCaseSensitive = sal_False; // ich bin unter win32, also ist der default
case insensitiv
- break;
- }
- }
- return isCaseSensitive;
- }
-}
-
-/*************************************************************************
-|*
|* DirEntry::ToAbs()
|*
*************************************************************************/
Context
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.