@@ -1058,14 +1058,28 @@ CF_PRIVATE void _CFIterateDirectory(CFStringRef directoryPath, Boolean appendSla
1058
1058
continue ;
1059
1059
}
1060
1060
1061
- assert (!stuffToPrefix && "prefix not yet implemented" );
1061
+ const UniChar kSlash = CFPreferredSlash ;
1062
+
1063
+ CFStringAppendBuffer buffer ;
1064
+ CFStringInitAppendBuffer (kCFAllocatorSystemDefault , & buffer );
1065
+
1066
+ if (stuffToPrefix ) {
1067
+ for (CFIndex i = 0 , e = CFArrayGetCount (stuffToPrefix ); i < e ; i ++ ) {
1068
+ CFStringRef entry = CFArrayGetValueAtIndex (stuffToPrefix , i );
1069
+ CFStringAppendStringToAppendBuffer (& buffer , entry );
1070
+ if (CFStringGetCharacterAtIndex (entry , CFStringGetLength (entry ) - 1 ) != _CFGetSlash ()) {
1071
+ CFStringAppendCharactersToAppendBuffer (& buffer , & kSlash , 1 );
1072
+ }
1073
+ }
1074
+ }
1075
+
1076
+ CFStringAppendStringToAppendBuffer (& buffer , fileName );
1062
1077
Boolean isDirectory = file .dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ;
1063
- CFMutableStringRef filePath = CFStringCreateMutableCopy (kCFAllocatorSystemDefault , nameLen + 1 , fileName );
1064
1078
if (appendSlashForDirectories && isDirectory ) {
1065
- UniChar slash = CFPreferredSlash ;
1066
- CFStringAppendCharacters (filePath , & slash , 1 );
1079
+ CFStringAppendCharactersToAppendBuffer (& buffer , & kSlash , 1 );
1067
1080
}
1068
1081
1082
+ CFMutableStringRef filePath = CFStringCreateMutableWithAppendBuffer (& buffer );
1069
1083
Boolean result = fileHandler (fileName , filePath , isDirectory ? DT_DIR : DT_REG );
1070
1084
CFRelease (fileName );
1071
1085
CFRelease (filePath );
0 commit comments