[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [60729] trunk/blender/source/blender/ editors/space_file/fsmenu.c: OSX: Get mounted volumes better method by using volume enums
jens verwiebe
info at jensverwiebe.de
Sun Oct 13 19:12:37 CEST 2013
Revision: 60729
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=60729
Author: jensverwiebe
Date: 2013-10-13 17:12:36 +0000 (Sun, 13 Oct 2013)
Log Message:
-----------
OSX: Get mounted volumes better method by using volume enums
Modified Paths:
--------------
trunk/blender/source/blender/editors/space_file/fsmenu.c
Modified: trunk/blender/source/blender/editors/space_file/fsmenu.c
===================================================================
--- trunk/blender/source/blender/editors/space_file/fsmenu.c 2013-10-13 14:15:32 UTC (rev 60728)
+++ trunk/blender/source/blender/editors/space_file/fsmenu.c 2013-10-13 17:12:36 UTC (rev 60729)
@@ -425,43 +425,30 @@
if (err != noErr)
continue;
- pathString = CFURLCopyFileSystemPath(cfURL, kCFURLPOSIXPathStyle);
+ /* Get mounted volumes better method see: */
+ /*https://developer.apple.com/library/mac/#documentation/CoreFOundation/Reference/CFURLRef/Reference/reference.html*/
+ /* we get all volumes here including network and do not relay on user-defined finder visibility anymore -> less confusing */
+ /* TODO: find out why network volumes only show up when "touched" once and implement a "mount" perhaps */
+
+ CFURLEnumeratorResult result = kCFURLEnumeratorSuccess;
+ CFURLEnumeratorRef volEnum = CFURLEnumeratorCreateForMountedVolumes(NULL, kCFURLEnumeratorSkipInvisibles, NULL);
- if (!CFStringGetCString(pathString, line, sizeof(line), kCFStringEncodingASCII))
- continue;
- fsmenu_insert_entry(fsmenu, FS_CATEGORY_SYSTEM, line, FS_INSERT_SORTED);
-
- CFRelease(pathString);
- CFRelease(cfURL);
+ while (result != kCFURLEnumeratorEnd) {
+ unsigned char defPath[FILE_MAX];
+
+ result = CFURLEnumeratorGetNextURL(volEnum, &cfURL, NULL);
+ if (result != kCFURLEnumeratorSuccess)
+ continue;
+
+ CFURLGetFileSystemRepresentation(cfURL, false, (UInt8*)defPath, FILE_MAX);
+ fsmenu_insert_entry(fsmenu, FS_CATEGORY_SYSTEM, (char *)defPath, FS_INSERT_SORTED);
+ }
+ CFRelease(volEnum);
}
CFRelease(pathesArray);
CFRelease(list);
- /* Then get network volumes */
- err = noErr;
- for (i = 1; err != nsvErr; i++) {
- FSRef dir;
- FSVolumeRefNum volRefNum;
- struct GetVolParmsInfoBuffer volParmsBuffer;
- unsigned char path[FILE_MAX];
-
- err = FSGetVolumeInfo(kFSInvalidVolumeRefNum, i, &volRefNum, kFSVolInfoNone, NULL, NULL, &dir);
- if (err != noErr)
- continue;
-
- err = FSGetVolumeParms(volRefNum, &volParmsBuffer, sizeof(volParmsBuffer));
- if ((err != noErr) || (volParmsBuffer.vMServerAdr == 0)) /* Exclude local devices */
- continue;
-
-
- FSRefMakePath(&dir, path, FILE_MAX);
- if (strcmp((char *)path, "/home") && strcmp((char *)path, "/net")) {
- /* /net and /home are meaningless on OSX, home folders are stored in /Users */
- fsmenu_insert_entry(fsmenu, FS_CATEGORY_SYSTEM, (char *)path, FS_INSERT_SORTED);
- }
- }
-
/* Finally get user favorite places */
if (read_bookmarks) {
list = LSSharedFileListCreate(NULL, kLSSharedFileListFavoriteItems, NULL);
More information about the Bf-blender-cvs
mailing list