1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 #ifdef _MSC_VER 29 #pragma warning (disable : 4800) 30 #endif 31 32 #ifndef _PATH_HELPER_HXX_ 33 #define _PATH_HELPER_HXX_ 34 35 #include "path_helper.h" 36 #include <rtl/ustring.hxx> 37 #include <rtl/allocator.hxx> 38 39 namespace osl 40 { 41 42 /******************************************************************* 43 osl_systemPathEnsureSeparator 44 Adds a trailing path separator to the given system path if not 45 already there and if the path is not the root path or a logical 46 drive alone 47 ******************************************************************/ 48 49 inline void systemPathEnsureSeparator(/*inout*/ rtl::OUString& Path) 50 { 51 osl_systemPathEnsureSeparator(&Path.pData); 52 } 53 54 /******************************************************************* 55 osl_systemPathRemoveSeparator 56 Removes the last separator from the given system path if any and 57 if the path is not the root path '\' 58 ******************************************************************/ 59 60 inline void systemPathRemoveSeparator(/*inout*/ rtl::OUString& Path) 61 { 62 osl_systemPathRemoveSeparator(&Path.pData); 63 } 64 65 /******************************************************************* 66 osl_systemPathIsLogicalDrivePattern 67 ******************************************************************/ 68 69 inline bool systemPathIsLogicalDrivePattern(/*in*/ const rtl::OUString& path) 70 { 71 return osl_systemPathIsLogicalDrivePattern(path.pData); 72 } 73 74 /******************************************************************* 75 LongPathBuffer 76 ******************************************************************/ 77 template< class T > 78 class LongPathBuffer 79 { 80 T* m_pBuffer; 81 sal_uInt32 m_nCharNum; 82 83 LongPathBuffer(); 84 LongPathBuffer( const LongPathBuffer& ); 85 LongPathBuffer& operator=( const LongPathBuffer& ); 86 87 public: 88 LongPathBuffer( sal_uInt32 nCharNum ) 89 : m_pBuffer( reinterpret_cast<T*>( rtl_allocateMemory( nCharNum * sizeof( T ) ) ) ) 90 , m_nCharNum( nCharNum ) 91 { 92 OSL_ENSURE( m_pBuffer, "Can not allocate the buffer!" ); 93 } 94 95 ~LongPathBuffer() 96 { 97 if ( m_pBuffer ) 98 rtl_freeMemory( m_pBuffer ); 99 m_pBuffer = 0; 100 } 101 102 sal_uInt32 getBufSizeInSymbols() 103 { 104 return m_nCharNum; 105 } 106 107 operator T* () 108 { 109 return m_pBuffer; 110 } 111 112 }; 113 114 template< class U, class T > U mingw_reinterpret_cast(LongPathBuffer<T>& a) { return reinterpret_cast<U>(static_cast<T*>(a)); } 115 116 } // end namespace osl 117 118 #endif 119