On Mar 15, 2008, at 12:04 PM, Kevin Dixon wrote:

I'm trying to write a method that will convert a NSString containing a
file system URL to an FSRef with the following code

- (FSRef)stringToFSRef: (NSString*)filePath {
        FSRef output;

        CFStringRef cfFilePath = CFStringCreateWithCString(NULL, [filePath
cString], (CFStringEncoding)8);

-cString has been deprecated for a very long time; it's better to use UTF8String. In this case, however, you can cast (NSString *) to CFStringRef. Check the docs on toll-free bridging.

        CFURLRef url = CFCreateURLWithString(NULL, cfFilePath, NULL);

        CFURLGetFSRef(url, &output);

        return output;
}

I am getting a warning on the CFCreateURLWithString, saying
"initialization makes pointer from integer without a cast"

There's no such function. You probably meant CFURLCreate... instead. For an easier solution, try this:

NSURL *aURL = [NSURL fileURLWithPath:filePath];
CFURLGetFSRef((CFURLRef)aURL, &output);

which also fixes your CFString and CFURL leaks.

Another problem is that you have no way of returning an error in case CFURLGetFSRef fails, so you might want to either return the FSRef by reference and return a BOOL or pass in a BOOL * to return a failure value by reference.

hth,
Adam
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]

Reply via email to