1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _NSSTRING_OOOADDITIONS_HXX_
25 #include "NSString_OOoAdditions.hxx"
26 #endif
27 
28 #include "NSURL_OOoAdditions.hxx"
29 
30 @implementation NSURL (OOoAdditions)
31 - (rtl::OUString) OUStringForInfo:(InfoType)info
32 {
33     NSAutoreleasePool *pool = [NSAutoreleasePool new];
34 
35     NSString *sURLString = nil;
36 
37     switch(info) {
38         case FULLPATH:
39             OSL_TRACE("Extracting the full path of an item");
40             sURLString = [self absoluteString];
41             [sURLString retain];
42             break;
43         case FILENAME: {
44             OSL_TRACE("Extracting the file name of an item");
45             NSString* path = [self path];
46             if (path == nil) {
47                 sURLString = @"";
48             }
49             else {
50                 sURLString = [path lastPathComponent];
51             }
52             [sURLString retain];
53             } break;
54         case PATHWITHOUTLASTCOMPONENT: {
55             OSL_TRACE("Extracting the last but one component of an item's path");
56             NSString* path = [self absoluteString];
57             if (path == nil) {
58                 sURLString = @"";
59             }
60             else {
61                 NSString* lastComponent = [path lastPathComponent];
62                 unsigned int lastLength = [lastComponent length];
63                 sURLString = [path substringToIndex:([path length] - lastLength)];
64             }
65             [sURLString retain];
66             } break;
67         default:
68             break;
69     }
70 
71     rtl::OUString sResult = [sURLString OUString];
72     [sURLString release];
73 
74     [pool release];
75 
76     return sResult;
77 }
78 @end
79 
resolveAlias(NSString * i_pSystemPath)80 NSString* resolveAlias( NSString* i_pSystemPath )
81 {
82     NSString* pResolvedPath = nil;
83     CFURLRef rUrl = CFURLCreateWithFileSystemPath( kCFAllocatorDefault,
84                                                    (CFStringRef)i_pSystemPath,
85                                                    kCFURLPOSIXPathStyle, false);
86     if( rUrl != NULL )
87     {
88         FSRef rFS;
89         if( CFURLGetFSRef( rUrl, &rFS ) )
90         {
91             Boolean bIsFolder = false;
92             Boolean bAlias = false;
93             OSErr err = FSResolveAliasFile( &rFS, true, &bIsFolder, &bAlias);
94             if( (err == noErr) && bAlias )
95             {
96                 CFURLRef rResolvedUrl = CFURLCreateFromFSRef( kCFAllocatorDefault, &rFS );
97                 if( rResolvedUrl != NULL )
98                 {
99                     pResolvedPath = (NSString*)CFURLCopyFileSystemPath( rResolvedUrl, kCFURLPOSIXPathStyle );
100                     CFRelease( rResolvedUrl );
101                 }
102             }
103         }
104         CFRelease( rUrl );
105     }
106 
107     return pResolvedPath;
108 }
109