Re: NSFileManager destroying target of symlink at changefileattributes
Re: NSFileManager destroying target of symlink at changefileattributes
- Subject: Re: NSFileManager destroying target of symlink at changefileattributes
- From: thomas bauer <email@hidden>
- Date: Sun, 18 Nov 2007 22:29:23 +0100
dear list,
sorry. in my confustion i forgot the question (although obvious):
what is going on? why cannot i use a modified copy of attributes
on the target symlink file?
how am i supposed to modify a symlinks attributes?
is writing of attributes to symlinks not supported by nsfilemanager?
any hint is appreciated....
regards
thomas bauer
Begin forwarded message:
From: thomas bauer <email@hidden>
Date: 18. November 2007 20:39:29 GMT+01:00
To: email@hidden
Subject: NSFileManager destroying target of symlink at
changefileattributes
dear list,
following code is executed as root in a test foundation tool.
it simply copies the localtime symlink (/etc/localtime) to another
partition and then tries to clone
its fileattributes. if a copy of the source fileattributes
dictionary is used
instead of the original one, the changefileattributes call damages
the target
of the symlink replacing it with a broken symlink.
(ie /usr/share/zoneinfo/yourzone will be damaged, destroying your
timezone setting.
make a copy before testing this!)
if the original dict is used, everything is fine.
i nslogged both dicts and both are identical.
(only in this example code i use a trivial copy of the attributes
dict. the original code has to use
a mutable copy to alter the permission flags between source and
target. since this modification
is not related to the issue i have altered the testcode to just use
a trivial copy)
thanks and regards
thomas bauer - freeridecoding
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSFileManager *fm = [NSFileManager defaultManager];
[fm copyPath:@"/private/etc/localtime" toPath:@"/Volumes/tigerclone/
localtime" handler:nil];
NSDictionary *sourceAttributes = [fm fileAttributesAtPath:@"/
private/etc/localtime" traverseLink:NO];
NSDictionary *copyattrs= [NSDictionary
dictionaryWithDictionary:sourceAttributes];
// [fm changeFileAttributes:copyattrs atPath:@"/Volumes/tigerclone/
localtime"]; // THIS BREAKS TARGET OF SOURCE SYMLINK
[fm changeFileAttributes:sourceAttributes atPath:@"/Volumes/
tigerclone/localtime"]; //THIS IS OK
[pool release];
return 0;
}
d
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden