@@ -1224,11 +1224,11 @@ CFArrayRef _CFXDGCreateDataDirectoriesPaths(void) {
1224
1224
if ((dataDirectoriesPaths == NULL ) || (dataDirectoriesPaths [0 ] == '\0' )) {
1225
1225
// Environmental variable not set. Return default value.
1226
1226
CFStringRef defaultPath [2 ];
1227
- defaultPath [0 ] = CFStringCreateWithCString ( kCFAllocatorSystemDefault , "/usr/local/share/" , _kCFXDGStringEncoding );
1228
- defaultPath [1 ] = CFStringCreateWithCString ( kCFAllocatorSystemDefault , "/usr/share/" , _kCFXDGStringEncoding );
1227
+ defaultPath [0 ] = CFSTR ( "/usr/local/share/" );
1228
+ defaultPath [1 ] = CFSTR ( "/usr/share/" );
1229
1229
return CFArrayCreate (kCFAllocatorSystemDefault , (const void * * )defaultPath , 2 , & kCFTypeArrayCallBacks );
1230
1230
}
1231
- return _CFTokenizeStringToCFArrayOfCFStrings (dataDirectoriesPaths , ':' );
1231
+ return _CFCreateCFArrayByTokenizingString (dataDirectoriesPaths , ':' );
1232
1232
}
1233
1233
1234
1234
@@ -1241,10 +1241,10 @@ CFArrayRef _CFXDGCreateConfigDirectoriesPaths(void) {
1241
1241
if ((configDirectoriesPaths == NULL ) || (configDirectoriesPaths [0 ] == '\0' )) {
1242
1242
//Environmental variable not set. Return default value.
1243
1243
CFStringRef defaultPath [1 ];
1244
- defaultPath [0 ] = CFStringCreateWithCString ( kCFAllocatorSystemDefault , "/etc/xdg" , _kCFXDGStringEncoding );
1244
+ defaultPath [0 ] = CFSTR ( "/etc/xdg" );
1245
1245
return CFArrayCreate (kCFAllocatorSystemDefault , (const void * * )defaultPath , 1 , & kCFTypeArrayCallBacks );
1246
1246
}
1247
- return _CFTokenizeStringToCFArrayOfCFStrings (configDirectoriesPaths , ':' );
1247
+ return _CFCreateCFArrayByTokenizingString (configDirectoriesPaths , ':' );
1248
1248
}
1249
1249
1250
1250
/// a single base directory relative to which user-specific non-essential (cached) data should be written. This directory is defined by the environment variable $XDG_CACHE_HOME.
@@ -1276,7 +1276,7 @@ CFStringRef _CFXDGCreateRuntimeDirectoryPath(void) {
1276
1276
}
1277
1277
1278
1278
1279
- CF_PRIVATE CFArrayRef _CFTokenizeStringToCFArrayOfCFStrings (const char * values , char delimiter ) {
1279
+ CF_PRIVATE CFArrayRef _CFCreateCFArrayByTokenizingString (const char * values , char delimiter ) {
1280
1280
size_t pathCount = 0 ;
1281
1281
char * tmpDirectoriesPaths = (char * )values ;
1282
1282
char * last_colon = 0 ;
@@ -1304,16 +1304,23 @@ CF_PRIVATE CFArrayRef _CFTokenizeStringToCFArrayOfCFStrings(const char *values,
1304
1304
while (path )
1305
1305
{
1306
1306
assert (validPathCount < pathCount );
1307
- CFStringRef dirPath = CFStringCreateWithCString (kCFAllocatorSystemDefault , strdup (path ), _kCFXDGStringEncoding );
1307
+ char * pathString = strdup (path );
1308
+ CFStringRef dirPath = CFStringCreateWithCString (kCFAllocatorSystemDefault , pathString , _kCFXDGStringEncoding );
1308
1309
CFStringRef slash = CFSTR ("/" );
1309
1310
CFStringRef tilde = CFSTR ("~" );
1310
1311
// Check for absolutePath, if not ignore.
1311
1312
if (CFStringHasPrefix (dirPath , slash ) || CFStringHasPrefix (dirPath , tilde ) ) {
1312
1313
pathList [validPathCount ++ ] = dirPath ;
1313
1314
}
1314
- path = strtok (0 , delimiterStr );
1315
+ path = strtok (NULL , delimiterStr );
1316
+ free (pathString );
1315
1317
}
1316
- return CFArrayCreate (kCFAllocatorSystemDefault , (const void * * )pathList , validPathCount , & kCFTypeArrayCallBacks );
1318
+ free (copyDirPath );
1319
+ CFArrayRef pathArray = CFArrayCreate (kCFAllocatorSystemDefault , (const void * * )pathList , validPathCount , & kCFTypeArrayCallBacks );
1320
+ for (int i = 0 ; i < pathCount ; i ++ ) {
1321
+ CFRelease (pathList [i ]);
1322
+ }
1323
+ return pathArray ;
1317
1324
}
1318
1325
return CFArrayCreate (kCFAllocatorSystemDefault , NULL , 0 , & kCFTypeArrayCallBacks );
1319
1326
}
0 commit comments