xref: /aoo41x/main/sal/osl/w32/path_helper.hxx (revision 79e556ee)
1565d668cSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3565d668cSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4565d668cSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5565d668cSAndrew Rist  * distributed with this work for additional information
6565d668cSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7565d668cSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8565d668cSAndrew Rist  * "License"); you may not use this file except in compliance
9565d668cSAndrew Rist  * with the License.  You may obtain a copy of the License at
10565d668cSAndrew Rist  *
11565d668cSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12565d668cSAndrew Rist  *
13565d668cSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14565d668cSAndrew Rist  * software distributed under the License is distributed on an
15565d668cSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16565d668cSAndrew Rist  * KIND, either express or implied.  See the License for the
17565d668cSAndrew Rist  * specific language governing permissions and limitations
18565d668cSAndrew Rist  * under the License.
19565d668cSAndrew Rist  *
20565d668cSAndrew Rist  *************************************************************/
21565d668cSAndrew Rist 
22565d668cSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #ifdef _MSC_VER
25cdf0e10cSrcweir #pragma warning (disable : 4800)
26cdf0e10cSrcweir #endif
27cdf0e10cSrcweir 
28cdf0e10cSrcweir #ifndef _PATH_HELPER_HXX_
29cdf0e10cSrcweir #define _PATH_HELPER_HXX_
30cdf0e10cSrcweir 
31cdf0e10cSrcweir #include "path_helper.h"
32cdf0e10cSrcweir #include <rtl/ustring.hxx>
33*79e556eeSJuergen Schmidt #include <rtl/alloc.h>
34cdf0e10cSrcweir 
35cdf0e10cSrcweir namespace osl
36cdf0e10cSrcweir {
37cdf0e10cSrcweir 
38cdf0e10cSrcweir /*******************************************************************
39cdf0e10cSrcweir  osl_systemPathEnsureSeparator
40cdf0e10cSrcweir  Adds a trailing path separator to the given system path if not
41cdf0e10cSrcweir  already there and if the path is not the root path or a logical
42cdf0e10cSrcweir  drive alone
43cdf0e10cSrcweir  ******************************************************************/
44cdf0e10cSrcweir 
systemPathEnsureSeparator(rtl::OUString & Path)45cdf0e10cSrcweir inline void systemPathEnsureSeparator(/*inout*/ rtl::OUString& Path)
46cdf0e10cSrcweir {
47cdf0e10cSrcweir     osl_systemPathEnsureSeparator(&Path.pData);
48cdf0e10cSrcweir }
49cdf0e10cSrcweir 
50cdf0e10cSrcweir /*******************************************************************
51cdf0e10cSrcweir  osl_systemPathRemoveSeparator
52cdf0e10cSrcweir  Removes the last separator from the given system path if any and
53cdf0e10cSrcweir  if the path is not the root path '\'
54cdf0e10cSrcweir  ******************************************************************/
55cdf0e10cSrcweir 
systemPathRemoveSeparator(rtl::OUString & Path)56cdf0e10cSrcweir inline void systemPathRemoveSeparator(/*inout*/ rtl::OUString& Path)
57cdf0e10cSrcweir {
58cdf0e10cSrcweir     osl_systemPathRemoveSeparator(&Path.pData);
59cdf0e10cSrcweir }
60cdf0e10cSrcweir 
61cdf0e10cSrcweir /*******************************************************************
62cdf0e10cSrcweir  osl_systemPathIsLogicalDrivePattern
63cdf0e10cSrcweir  ******************************************************************/
64cdf0e10cSrcweir 
systemPathIsLogicalDrivePattern(const rtl::OUString & path)65cdf0e10cSrcweir inline bool systemPathIsLogicalDrivePattern(/*in*/ const rtl::OUString& path)
66cdf0e10cSrcweir {
67cdf0e10cSrcweir     return osl_systemPathIsLogicalDrivePattern(path.pData);
68cdf0e10cSrcweir }
69cdf0e10cSrcweir 
70cdf0e10cSrcweir /*******************************************************************
71cdf0e10cSrcweir  LongPathBuffer
72cdf0e10cSrcweir  ******************************************************************/
73cdf0e10cSrcweir template< class T >
74cdf0e10cSrcweir class LongPathBuffer
75cdf0e10cSrcweir {
76cdf0e10cSrcweir     T* m_pBuffer;
77cdf0e10cSrcweir     sal_uInt32 m_nCharNum;
78cdf0e10cSrcweir 
79cdf0e10cSrcweir     LongPathBuffer();
80cdf0e10cSrcweir     LongPathBuffer( const LongPathBuffer& );
81cdf0e10cSrcweir     LongPathBuffer& operator=( const LongPathBuffer& );
82cdf0e10cSrcweir 
83cdf0e10cSrcweir public:
LongPathBuffer(sal_uInt32 nCharNum)84cdf0e10cSrcweir     LongPathBuffer( sal_uInt32 nCharNum )
85cdf0e10cSrcweir     : m_pBuffer( reinterpret_cast<T*>( rtl_allocateMemory( nCharNum * sizeof( T ) ) ) )
86cdf0e10cSrcweir     , m_nCharNum( nCharNum )
87cdf0e10cSrcweir     {
88cdf0e10cSrcweir         OSL_ENSURE( m_pBuffer, "Can not allocate the buffer!" );
89cdf0e10cSrcweir     }
90cdf0e10cSrcweir 
~LongPathBuffer()91cdf0e10cSrcweir     ~LongPathBuffer()
92cdf0e10cSrcweir     {
93cdf0e10cSrcweir         if ( m_pBuffer )
94cdf0e10cSrcweir             rtl_freeMemory( m_pBuffer );
95cdf0e10cSrcweir         m_pBuffer = 0;
96cdf0e10cSrcweir     }
97cdf0e10cSrcweir 
getBufSizeInSymbols()98cdf0e10cSrcweir     sal_uInt32 getBufSizeInSymbols()
99cdf0e10cSrcweir     {
100cdf0e10cSrcweir         return m_nCharNum;
101cdf0e10cSrcweir     }
102cdf0e10cSrcweir 
operator T*()103cdf0e10cSrcweir     operator T* ()
104cdf0e10cSrcweir     {
105cdf0e10cSrcweir         return m_pBuffer;
106cdf0e10cSrcweir     }
107cdf0e10cSrcweir 
108cdf0e10cSrcweir };
109cdf0e10cSrcweir 
mingw_reinterpret_cast(LongPathBuffer<T> & a)110cdf0e10cSrcweir     template< class U, class T > U mingw_reinterpret_cast(LongPathBuffer<T>& a) { return reinterpret_cast<U>(static_cast<T*>(a)); }
111cdf0e10cSrcweir 
112cdf0e10cSrcweir } // end namespace osl
113cdf0e10cSrcweir 
114cdf0e10cSrcweir #endif
115