1*11c03c6dSDamjan Jovanovic /**************************************************************
2*11c03c6dSDamjan Jovanovic *
3*11c03c6dSDamjan Jovanovic * Licensed to the Apache Software Foundation (ASF) under one
4*11c03c6dSDamjan Jovanovic * or more contributor license agreements. See the NOTICE file
5*11c03c6dSDamjan Jovanovic * distributed with this work for additional information
6*11c03c6dSDamjan Jovanovic * regarding copyright ownership. The ASF licenses this file
7*11c03c6dSDamjan Jovanovic * to you under the Apache License, Version 2.0 (the
8*11c03c6dSDamjan Jovanovic * "License"); you may not use this file except in compliance
9*11c03c6dSDamjan Jovanovic * with the License. You may obtain a copy of the License at
10*11c03c6dSDamjan Jovanovic *
11*11c03c6dSDamjan Jovanovic * http://www.apache.org/licenses/LICENSE-2.0
12*11c03c6dSDamjan Jovanovic *
13*11c03c6dSDamjan Jovanovic * Unless required by applicable law or agreed to in writing,
14*11c03c6dSDamjan Jovanovic * software distributed under the License is distributed on an
15*11c03c6dSDamjan Jovanovic * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*11c03c6dSDamjan Jovanovic * KIND, either express or implied. See the License for the
17*11c03c6dSDamjan Jovanovic * specific language governing permissions and limitations
18*11c03c6dSDamjan Jovanovic * under the License.
19*11c03c6dSDamjan Jovanovic *
20*11c03c6dSDamjan Jovanovic *************************************************************/
21*11c03c6dSDamjan Jovanovic
22*11c03c6dSDamjan Jovanovic
23*11c03c6dSDamjan Jovanovic
24*11c03c6dSDamjan Jovanovic #include <precomp.h>
25*11c03c6dSDamjan Jovanovic #include <cosv/ploc_dir.hxx>
26*11c03c6dSDamjan Jovanovic
27*11c03c6dSDamjan Jovanovic // NOT FULLY DECLARED SERVICES
28*11c03c6dSDamjan Jovanovic #include <cosv/ploc.hxx>
29*11c03c6dSDamjan Jovanovic
30*11c03c6dSDamjan Jovanovic
31*11c03c6dSDamjan Jovanovic namespace csv
32*11c03c6dSDamjan Jovanovic {
33*11c03c6dSDamjan Jovanovic namespace ploc
34*11c03c6dSDamjan Jovanovic {
35*11c03c6dSDamjan Jovanovic
Directory()36*11c03c6dSDamjan Jovanovic Directory::Directory()
37*11c03c6dSDamjan Jovanovic {
38*11c03c6dSDamjan Jovanovic }
39*11c03c6dSDamjan Jovanovic
Directory(const Path & i_rPath)40*11c03c6dSDamjan Jovanovic Directory::Directory( const Path & i_rPath )
41*11c03c6dSDamjan Jovanovic : aPath(i_rPath)
42*11c03c6dSDamjan Jovanovic // sPath
43*11c03c6dSDamjan Jovanovic {
44*11c03c6dSDamjan Jovanovic }
45*11c03c6dSDamjan Jovanovic
Directory(const Directory & i_rDir)46*11c03c6dSDamjan Jovanovic Directory::Directory( const Directory & i_rDir )
47*11c03c6dSDamjan Jovanovic : Persistent(), aPath(i_rDir.aPath)
48*11c03c6dSDamjan Jovanovic // sPath
49*11c03c6dSDamjan Jovanovic {
50*11c03c6dSDamjan Jovanovic }
51*11c03c6dSDamjan Jovanovic
Directory(const char * i_rLocation)52*11c03c6dSDamjan Jovanovic Directory::Directory( const char * i_rLocation )
53*11c03c6dSDamjan Jovanovic : aPath(i_rLocation, true)
54*11c03c6dSDamjan Jovanovic {
55*11c03c6dSDamjan Jovanovic }
56*11c03c6dSDamjan Jovanovic
Directory(const String & i_rLocation)57*11c03c6dSDamjan Jovanovic Directory::Directory( const String & i_rLocation )
58*11c03c6dSDamjan Jovanovic : aPath(i_rLocation.c_str(), true)
59*11c03c6dSDamjan Jovanovic {
60*11c03c6dSDamjan Jovanovic }
61*11c03c6dSDamjan Jovanovic
~Directory()62*11c03c6dSDamjan Jovanovic Directory::~Directory()
63*11c03c6dSDamjan Jovanovic {
64*11c03c6dSDamjan Jovanovic }
65*11c03c6dSDamjan Jovanovic
66*11c03c6dSDamjan Jovanovic Directory &
operator +=(const String & i_sName)67*11c03c6dSDamjan Jovanovic Directory::operator+=( const String & i_sName )
68*11c03c6dSDamjan Jovanovic {
69*11c03c6dSDamjan Jovanovic InvalidatePath();
70*11c03c6dSDamjan Jovanovic aPath.DirChain() += i_sName;
71*11c03c6dSDamjan Jovanovic return *this;
72*11c03c6dSDamjan Jovanovic }
73*11c03c6dSDamjan Jovanovic
74*11c03c6dSDamjan Jovanovic Directory &
operator +=(const DirectoryChain & i_sDirChain)75*11c03c6dSDamjan Jovanovic Directory::operator+=( const DirectoryChain & i_sDirChain )
76*11c03c6dSDamjan Jovanovic {
77*11c03c6dSDamjan Jovanovic InvalidatePath();
78*11c03c6dSDamjan Jovanovic aPath.DirChain() += i_sDirChain;
79*11c03c6dSDamjan Jovanovic return *this;
80*11c03c6dSDamjan Jovanovic }
81*11c03c6dSDamjan Jovanovic
82*11c03c6dSDamjan Jovanovic Directory &
operator -=(uintt i_nLevels)83*11c03c6dSDamjan Jovanovic Directory::operator-=( uintt i_nLevels )
84*11c03c6dSDamjan Jovanovic {
85*11c03c6dSDamjan Jovanovic InvalidatePath();
86*11c03c6dSDamjan Jovanovic aPath.DirChain().PopBack(i_nLevels);
87*11c03c6dSDamjan Jovanovic return *this;
88*11c03c6dSDamjan Jovanovic }
89*11c03c6dSDamjan Jovanovic
90*11c03c6dSDamjan Jovanovic bool
PhysicalCreate(bool i_bCreateParentsIfNecessary) const91*11c03c6dSDamjan Jovanovic Directory::PhysicalCreate( bool i_bCreateParentsIfNecessary ) const
92*11c03c6dSDamjan Jovanovic {
93*11c03c6dSDamjan Jovanovic bool ret = PhysicalCreate_Dir( StrPath() );
94*11c03c6dSDamjan Jovanovic if ( ret OR NOT i_bCreateParentsIfNecessary )
95*11c03c6dSDamjan Jovanovic return ret;
96*11c03c6dSDamjan Jovanovic
97*11c03c6dSDamjan Jovanovic ret = Check_Parent();
98*11c03c6dSDamjan Jovanovic if (ret)
99*11c03c6dSDamjan Jovanovic ret = PhysicalCreate_Dir( StrPath() );
100*11c03c6dSDamjan Jovanovic return ret;
101*11c03c6dSDamjan Jovanovic }
102*11c03c6dSDamjan Jovanovic
103*11c03c6dSDamjan Jovanovic bool
Check_Parent() const104*11c03c6dSDamjan Jovanovic Directory::Check_Parent() const
105*11c03c6dSDamjan Jovanovic {
106*11c03c6dSDamjan Jovanovic // There is no parent of root directories:
107*11c03c6dSDamjan Jovanovic if ( aPath.DirChain().Size() == 0 )
108*11c03c6dSDamjan Jovanovic return false;
109*11c03c6dSDamjan Jovanovic
110*11c03c6dSDamjan Jovanovic // Become my own parent:
111*11c03c6dSDamjan Jovanovic String sLastToken = aPath.DirChain().Back();
112*11c03c6dSDamjan Jovanovic const_cast< Directory* >(this)->operator-=(1);
113*11c03c6dSDamjan Jovanovic
114*11c03c6dSDamjan Jovanovic // Begin behaving as parent:
115*11c03c6dSDamjan Jovanovic bool ret = Exists();
116*11c03c6dSDamjan Jovanovic if (NOT ret)
117*11c03c6dSDamjan Jovanovic {
118*11c03c6dSDamjan Jovanovic ret = Check_Parent();
119*11c03c6dSDamjan Jovanovic if (ret)
120*11c03c6dSDamjan Jovanovic ret = PhysicalCreate_Dir( StrPath() );
121*11c03c6dSDamjan Jovanovic }
122*11c03c6dSDamjan Jovanovic // End behaving as parent.
123*11c03c6dSDamjan Jovanovic
124*11c03c6dSDamjan Jovanovic // Become myself again:
125*11c03c6dSDamjan Jovanovic const_cast< Directory* >(this)->operator+=(sLastToken);
126*11c03c6dSDamjan Jovanovic return ret;
127*11c03c6dSDamjan Jovanovic }
128*11c03c6dSDamjan Jovanovic
129*11c03c6dSDamjan Jovanovic } // namespace ploc
130*11c03c6dSDamjan Jovanovic } // namespace csv
131*11c03c6dSDamjan Jovanovic
132*11c03c6dSDamjan Jovanovic
133*11c03c6dSDamjan Jovanovic #ifdef WNT
134*11c03c6dSDamjan Jovanovic #include <direct.h>
135*11c03c6dSDamjan Jovanovic #include <io.h>
136*11c03c6dSDamjan Jovanovic
137*11c03c6dSDamjan Jovanovic namespace csv
138*11c03c6dSDamjan Jovanovic {
139*11c03c6dSDamjan Jovanovic namespace ploc
140*11c03c6dSDamjan Jovanovic {
141*11c03c6dSDamjan Jovanovic
142*11c03c6dSDamjan Jovanovic bool
PhysicalCreate_Dir(const char * i_sStr) const143*11c03c6dSDamjan Jovanovic Directory::PhysicalCreate_Dir( const char * i_sStr ) const
144*11c03c6dSDamjan Jovanovic {
145*11c03c6dSDamjan Jovanovic return mkdir( i_sStr ) == 0;
146*11c03c6dSDamjan Jovanovic }
147*11c03c6dSDamjan Jovanovic
148*11c03c6dSDamjan Jovanovic void
GetContainedDirectories(StringVector & o_rResult) const149*11c03c6dSDamjan Jovanovic Directory::GetContainedDirectories( StringVector & o_rResult ) const
150*11c03c6dSDamjan Jovanovic {
151*11c03c6dSDamjan Jovanovic const char * c_sANYDIR = "\\*.*";
152*11c03c6dSDamjan Jovanovic String sNew;
153*11c03c6dSDamjan Jovanovic
154*11c03c6dSDamjan Jovanovic StreamStr sFilter(200);
155*11c03c6dSDamjan Jovanovic sFilter << StrPath()
156*11c03c6dSDamjan Jovanovic << c_sANYDIR;
157*11c03c6dSDamjan Jovanovic
158*11c03c6dSDamjan Jovanovic struct _finddata_t
159*11c03c6dSDamjan Jovanovic aEntry;
160*11c03c6dSDamjan Jovanovic long hFile = _findfirst( sFilter.c_str(), &aEntry );
161*11c03c6dSDamjan Jovanovic
162*11c03c6dSDamjan Jovanovic for ( int bFindMore = (hFile == -1 ? 1 : 0);
163*11c03c6dSDamjan Jovanovic bFindMore == 0;
164*11c03c6dSDamjan Jovanovic bFindMore = _findnext( hFile, &aEntry ) )
165*11c03c6dSDamjan Jovanovic {
166*11c03c6dSDamjan Jovanovic if ( (aEntry.attrib & _A_SUBDIR) AND *aEntry.name != '.' )
167*11c03c6dSDamjan Jovanovic {
168*11c03c6dSDamjan Jovanovic sNew = aEntry.name;
169*11c03c6dSDamjan Jovanovic o_rResult.push_back( sNew );
170*11c03c6dSDamjan Jovanovic }
171*11c03c6dSDamjan Jovanovic } // end for
172*11c03c6dSDamjan Jovanovic _findclose(hFile);
173*11c03c6dSDamjan Jovanovic }
174*11c03c6dSDamjan Jovanovic
175*11c03c6dSDamjan Jovanovic void
GetContainedFiles(StringVector & o_rResult,const char * i_sFilter,E_Recursivity i_eRecursivity) const176*11c03c6dSDamjan Jovanovic Directory::GetContainedFiles( StringVector & o_rResult,
177*11c03c6dSDamjan Jovanovic const char * i_sFilter,
178*11c03c6dSDamjan Jovanovic E_Recursivity i_eRecursivity ) const
179*11c03c6dSDamjan Jovanovic {
180*11c03c6dSDamjan Jovanovic StreamStr sNew(240);
181*11c03c6dSDamjan Jovanovic sNew << aPath;
182*11c03c6dSDamjan Jovanovic StreamStr::size_type
183*11c03c6dSDamjan Jovanovic nStartFilename = sNew.tellp();
184*11c03c6dSDamjan Jovanovic
185*11c03c6dSDamjan Jovanovic StreamStr sFilter(200);
186*11c03c6dSDamjan Jovanovic sFilter << StrPath()
187*11c03c6dSDamjan Jovanovic << "\\"
188*11c03c6dSDamjan Jovanovic << i_sFilter;
189*11c03c6dSDamjan Jovanovic
190*11c03c6dSDamjan Jovanovic struct _finddata_t
191*11c03c6dSDamjan Jovanovic aEntry;
192*11c03c6dSDamjan Jovanovic long hFile = _findfirst( sFilter.c_str(), &aEntry );
193*11c03c6dSDamjan Jovanovic for ( int bFindMore = (hFile == -1 ? 1 : 0);
194*11c03c6dSDamjan Jovanovic bFindMore == 0;
195*11c03c6dSDamjan Jovanovic bFindMore = _findnext( hFile, &aEntry ) )
196*11c03c6dSDamjan Jovanovic {
197*11c03c6dSDamjan Jovanovic sNew.seekp(nStartFilename);
198*11c03c6dSDamjan Jovanovic sNew << aEntry.name;
199*11c03c6dSDamjan Jovanovic String sNewAsString( sNew.c_str() );
200*11c03c6dSDamjan Jovanovic o_rResult.push_back(sNewAsString);
201*11c03c6dSDamjan Jovanovic } // end for
202*11c03c6dSDamjan Jovanovic
203*11c03c6dSDamjan Jovanovic _findclose(hFile);
204*11c03c6dSDamjan Jovanovic if ( i_eRecursivity == flat )
205*11c03c6dSDamjan Jovanovic return;
206*11c03c6dSDamjan Jovanovic
207*11c03c6dSDamjan Jovanovic // gathering from subdirectories:
208*11c03c6dSDamjan Jovanovic StringVector aSubDirectories;
209*11c03c6dSDamjan Jovanovic GetContainedDirectories( aSubDirectories );
210*11c03c6dSDamjan Jovanovic
211*11c03c6dSDamjan Jovanovic StringVector::const_iterator dEnd = aSubDirectories.end();
212*11c03c6dSDamjan Jovanovic for ( StringVector::const_iterator d = aSubDirectories.begin();
213*11c03c6dSDamjan Jovanovic d != dEnd;
214*11c03c6dSDamjan Jovanovic ++d )
215*11c03c6dSDamjan Jovanovic {
216*11c03c6dSDamjan Jovanovic Directory aSub(*this);
217*11c03c6dSDamjan Jovanovic aSub += *d;
218*11c03c6dSDamjan Jovanovic aSub.GetContainedFiles( o_rResult,
219*11c03c6dSDamjan Jovanovic i_sFilter,
220*11c03c6dSDamjan Jovanovic i_eRecursivity );
221*11c03c6dSDamjan Jovanovic }
222*11c03c6dSDamjan Jovanovic }
223*11c03c6dSDamjan Jovanovic
224*11c03c6dSDamjan Jovanovic } // namespace ploc
225*11c03c6dSDamjan Jovanovic } // namespace csv
226*11c03c6dSDamjan Jovanovic
227*11c03c6dSDamjan Jovanovic
228*11c03c6dSDamjan Jovanovic #elif defined(UNX)
229*11c03c6dSDamjan Jovanovic #include <sys/types.h>
230*11c03c6dSDamjan Jovanovic #include <sys/stat.h>
231*11c03c6dSDamjan Jovanovic #include <dirent.h>
232*11c03c6dSDamjan Jovanovic
233*11c03c6dSDamjan Jovanovic namespace csv
234*11c03c6dSDamjan Jovanovic {
235*11c03c6dSDamjan Jovanovic namespace ploc
236*11c03c6dSDamjan Jovanovic {
237*11c03c6dSDamjan Jovanovic
238*11c03c6dSDamjan Jovanovic bool
PhysicalCreate_Dir(const char * i_sStr) const239*11c03c6dSDamjan Jovanovic Directory::PhysicalCreate_Dir( const char * i_sStr ) const
240*11c03c6dSDamjan Jovanovic {
241*11c03c6dSDamjan Jovanovic return mkdir( i_sStr, 00777 ) == 0;
242*11c03c6dSDamjan Jovanovic }
243*11c03c6dSDamjan Jovanovic
244*11c03c6dSDamjan Jovanovic void
GetContainedDirectories(StringVector & o_rResult) const245*11c03c6dSDamjan Jovanovic Directory::GetContainedDirectories( StringVector & o_rResult ) const
246*11c03c6dSDamjan Jovanovic {
247*11c03c6dSDamjan Jovanovic StreamStr sNew(240);
248*11c03c6dSDamjan Jovanovic sNew << aPath;
249*11c03c6dSDamjan Jovanovic StreamStr::size_type
250*11c03c6dSDamjan Jovanovic nStartFilename = sNew.tellp();
251*11c03c6dSDamjan Jovanovic
252*11c03c6dSDamjan Jovanovic DIR * pDir = opendir( StrPath() );
253*11c03c6dSDamjan Jovanovic dirent * pEntry = 0;
254*11c03c6dSDamjan Jovanovic struct stat aEntryStatus;
255*11c03c6dSDamjan Jovanovic
256*11c03c6dSDamjan Jovanovic while ( (pEntry = readdir(pDir)) != 0 )
257*11c03c6dSDamjan Jovanovic {
258*11c03c6dSDamjan Jovanovic sNew.seekp(nStartFilename);
259*11c03c6dSDamjan Jovanovic sNew << pEntry->d_name;
260*11c03c6dSDamjan Jovanovic
261*11c03c6dSDamjan Jovanovic stat(sNew.c_str(), &aEntryStatus);
262*11c03c6dSDamjan Jovanovic if ( (aEntryStatus.st_mode & S_IFDIR) == S_IFDIR
263*11c03c6dSDamjan Jovanovic AND *pEntry->d_name != '.' )
264*11c03c6dSDamjan Jovanovic {
265*11c03c6dSDamjan Jovanovic String sNew2(pEntry->d_name);
266*11c03c6dSDamjan Jovanovic o_rResult.push_back(sNew2);
267*11c03c6dSDamjan Jovanovic } // endif (aEntry.attrib == _A_SUBDIR)
268*11c03c6dSDamjan Jovanovic } // end while
269*11c03c6dSDamjan Jovanovic closedir( pDir );
270*11c03c6dSDamjan Jovanovic }
271*11c03c6dSDamjan Jovanovic
272*11c03c6dSDamjan Jovanovic void
GetContainedFiles(StringVector & o_rResult,const char * i_sFilter,E_Recursivity i_eRecursivity) const273*11c03c6dSDamjan Jovanovic Directory::GetContainedFiles( StringVector & o_rResult,
274*11c03c6dSDamjan Jovanovic const char * i_sFilter,
275*11c03c6dSDamjan Jovanovic E_Recursivity i_eRecursivity ) const
276*11c03c6dSDamjan Jovanovic {
277*11c03c6dSDamjan Jovanovic StreamStr sNew(240);
278*11c03c6dSDamjan Jovanovic sNew << aPath;
279*11c03c6dSDamjan Jovanovic StreamStr::size_type
280*11c03c6dSDamjan Jovanovic nStartFilename = sNew.tellp();
281*11c03c6dSDamjan Jovanovic
282*11c03c6dSDamjan Jovanovic bool bUseFilter = strcmp( i_sFilter, "*.*" ) != 0
283*11c03c6dSDamjan Jovanovic AND strncmp( i_sFilter, "*.", 2) == 0;
284*11c03c6dSDamjan Jovanovic
285*11c03c6dSDamjan Jovanovic DIR * pDir = opendir( StrPath() );
286*11c03c6dSDamjan Jovanovic dirent * pEntry = 0;
287*11c03c6dSDamjan Jovanovic struct stat aEntryStatus;
288*11c03c6dSDamjan Jovanovic
289*11c03c6dSDamjan Jovanovic while ( (pEntry = readdir(pDir)) != 0 )
290*11c03c6dSDamjan Jovanovic {
291*11c03c6dSDamjan Jovanovic sNew.seekp(nStartFilename);
292*11c03c6dSDamjan Jovanovic sNew << pEntry->d_name;
293*11c03c6dSDamjan Jovanovic
294*11c03c6dSDamjan Jovanovic stat(sNew.c_str(), &aEntryStatus);
295*11c03c6dSDamjan Jovanovic if ( (aEntryStatus.st_mode & S_IFDIR) == S_IFDIR )
296*11c03c6dSDamjan Jovanovic continue; // Don't gather directories.
297*11c03c6dSDamjan Jovanovic
298*11c03c6dSDamjan Jovanovic if ( bUseFilter )
299*11c03c6dSDamjan Jovanovic {
300*11c03c6dSDamjan Jovanovic const char * pEnding = strrchr(pEntry->d_name,'.');
301*11c03c6dSDamjan Jovanovic if (pEnding == 0)
302*11c03c6dSDamjan Jovanovic continue;
303*11c03c6dSDamjan Jovanovic if ( strcasecmp( pEnding + 1, i_sFilter + 2 ) != 0 )
304*11c03c6dSDamjan Jovanovic continue;
305*11c03c6dSDamjan Jovanovic }
306*11c03c6dSDamjan Jovanovic
307*11c03c6dSDamjan Jovanovic sNew.seekp(nStartFilename);
308*11c03c6dSDamjan Jovanovic sNew << pEntry->d_name;
309*11c03c6dSDamjan Jovanovic String sNewAsString( sNew.c_str() );
310*11c03c6dSDamjan Jovanovic o_rResult.push_back(sNewAsString);
311*11c03c6dSDamjan Jovanovic } // end while
312*11c03c6dSDamjan Jovanovic
313*11c03c6dSDamjan Jovanovic closedir( pDir );
314*11c03c6dSDamjan Jovanovic if ( i_eRecursivity == flat )
315*11c03c6dSDamjan Jovanovic return;
316*11c03c6dSDamjan Jovanovic
317*11c03c6dSDamjan Jovanovic // gathering from subdirectories:
318*11c03c6dSDamjan Jovanovic StringVector aSubDirectories;
319*11c03c6dSDamjan Jovanovic GetContainedDirectories( aSubDirectories );
320*11c03c6dSDamjan Jovanovic
321*11c03c6dSDamjan Jovanovic StringVector::const_iterator dEnd = aSubDirectories.end();
322*11c03c6dSDamjan Jovanovic for ( StringVector::const_iterator d = aSubDirectories.begin();
323*11c03c6dSDamjan Jovanovic d != dEnd;
324*11c03c6dSDamjan Jovanovic ++d )
325*11c03c6dSDamjan Jovanovic {
326*11c03c6dSDamjan Jovanovic Directory aSub(*this);
327*11c03c6dSDamjan Jovanovic aSub += *d;
328*11c03c6dSDamjan Jovanovic aSub.GetContainedFiles( o_rResult,
329*11c03c6dSDamjan Jovanovic i_sFilter,
330*11c03c6dSDamjan Jovanovic i_eRecursivity );
331*11c03c6dSDamjan Jovanovic }
332*11c03c6dSDamjan Jovanovic }
333*11c03c6dSDamjan Jovanovic
334*11c03c6dSDamjan Jovanovic } // namespace ploc
335*11c03c6dSDamjan Jovanovic } // namespace csv
336*11c03c6dSDamjan Jovanovic
337*11c03c6dSDamjan Jovanovic
338*11c03c6dSDamjan Jovanovic #else
339*11c03c6dSDamjan Jovanovic #error For using csv::ploc there has to be defined: WNT or UNX.
340*11c03c6dSDamjan Jovanovic #endif
341*11c03c6dSDamjan Jovanovic
342*11c03c6dSDamjan Jovanovic
343*11c03c6dSDamjan Jovanovic namespace csv
344*11c03c6dSDamjan Jovanovic {
345*11c03c6dSDamjan Jovanovic namespace ploc
346*11c03c6dSDamjan Jovanovic {
347*11c03c6dSDamjan Jovanovic
348*11c03c6dSDamjan Jovanovic const Path &
inq_MyPath() const349*11c03c6dSDamjan Jovanovic Directory::inq_MyPath() const
350*11c03c6dSDamjan Jovanovic {
351*11c03c6dSDamjan Jovanovic return aPath;
352*11c03c6dSDamjan Jovanovic }
353*11c03c6dSDamjan Jovanovic
354*11c03c6dSDamjan Jovanovic
355*11c03c6dSDamjan Jovanovic
356*11c03c6dSDamjan Jovanovic } // namespace ploc
357*11c03c6dSDamjan Jovanovic } // namespace csv
358