]>
git.saurik.com Git - apple/libsecurity_codesigning.git/blob - lib/renum.cpp
2 * Copyright (c) 2006 Apple Computer, Inc. All Rights Reserved.
4 * @APPLE_LICENSE_HEADER_START@
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
21 * @APPLE_LICENSE_HEADER_END@
25 // renum - enumerator for code (usually bundle) resources
28 #include <security_utilities/unix++.h>
29 #include <security_utilities/debugging.h>
32 namespace CodeSigning
{
34 using namespace UnixPlusPlus
;
37 ResourceEnumerator::ResourceEnumerator(string path
)
40 assert(!mPath
.empty());
41 const char * paths
[2] = { path
.c_str(), NULL
};
42 mFTS
= fts_open((char * const *)paths
, FTS_PHYSICAL
| FTS_COMFOLLOW
| FTS_NOCHDIR
, NULL
);
47 ResourceEnumerator::~ResourceEnumerator()
49 checkError(fts_close(mFTS
));
53 FTSENT
*ResourceEnumerator::next(string
&path
)
55 while (FTSENT
*ent
= fts_read(mFTS
)) {
56 switch (ent
->fts_info
) {
58 path
= ent
->fts_path
+ mPath
.size() + 1; // skip prefix + "/"
61 secdebug("rdirenum", "entering %s", ent
->fts_path
);
64 secdebug("rdirenum", "leaving %s", ent
->fts_path
);
67 secdebug("rdirenum", "symlink ignored: %s", ent
->fts_path
);
70 secdebug("rdirenum", "type %d (errno %d): %s",
71 ent
->fts_info
, ent
->fts_errno
, ent
->fts_path
);
79 } // end namespace CodeSigning
80 } // end namespace Security