| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| #include <osl/diagnose.h> |
| #include "CFStringUtilities.hxx" |
| |
| rtl::OUString CFStringToOUString(const CFStringRef sOrig) { |
| //DBG_PRINT_ENTRY("CFStringUtilities", __func__, "sOrig", sOrig); |
| |
| if (NULL == sOrig) { |
| return rtl::OUString(); |
| } |
| |
| CFRetain(sOrig); |
| CFIndex nFileNameLength = CFStringGetLength(sOrig); |
| //OSL_TRACE("FH: string length: %d", (int)(nFileNameLength)); |
| UniChar unichars[nFileNameLength+1]; |
| //'close' the string buffer correctly |
| unichars[nFileNameLength] = '\0'; |
| |
| CFStringGetCharacters (sOrig, CFRangeMake(0,nFileNameLength), unichars); |
| |
| //we no longer need the original string |
| CFRelease(sOrig); |
| |
| //DBG_PRINT_EXIT("CFStringUtilities", __func__, unichars); |
| |
| return rtl::OUString(unichars); |
| } |
| |
| CFStringRef CFStringCreateWithOUString(const rtl::OUString& aString) { |
| //DBG_PRINT_ENTRY("CFStringUtilities", __func__); |
| |
| CFStringRef ref = CFStringCreateWithCharacters(kCFAllocatorDefault, aString.getStr(), aString.getLength()); |
| |
| //DBG_PRINT_EXIT("CFStringUtilities", __func__, ref); |
| |
| return ref; |
| } |
| |
| rtl::OUString FSRefToOUString(FSRef fsRef, InfoType info) |
| { |
| //DBG_PRINT_ENTRY("CFStringUtilities", __func__); |
| |
| CFURLRef aUrlRef = CFURLCreateFromFSRef(NULL, &fsRef); |
| |
| rtl::OUString sResult = CFURLRefToOUString(aUrlRef, info); |
| |
| //we no longer need the CFURLRef |
| CFRelease(aUrlRef); |
| |
| //DBG_PRINT_EXIT("CFStringUtilities", __func__, OUStringToOString(sResult, RTL_TEXTENCODING_UTF8).getStr()); |
| |
| return sResult; |
| } |
| |
| rtl::OUString CFURLRefToOUString(CFURLRef aUrlRef, InfoType info) |
| { |
| //DBG_PRINT_ENTRY("CFStringUtilities", __func__); |
| |
| CFStringRef sURLString = NULL; |
| |
| switch(info) { |
| case FULLPATH: |
| OSL_TRACE("Extracting the full path of an item"); |
| sURLString = CFURLGetString(aUrlRef); |
| CFRetain(sURLString); |
| break; |
| case FILENAME: { |
| OSL_TRACE("Extracting the file name of an item"); |
| CFStringRef fullString = CFURLGetString(aUrlRef); |
| CFURLRef dirRef = CFURLCreateCopyDeletingLastPathComponent(NULL,aUrlRef); |
| CFIndex dirLength = CFStringGetLength(CFURLGetString(dirRef)); |
| CFRelease(dirRef); |
| CFIndex fullLength = CFStringGetLength(fullString); |
| CFRange substringRange = CFRangeMake(dirLength, fullLength - dirLength); |
| sURLString = CFStringCreateWithSubstring(NULL, fullString, substringRange); |
| } break; |
| case PATHWITHOUTLASTCOMPONENT: { |
| OSL_TRACE("Extracting the last but one component of an item's path"); |
| CFURLRef directoryRef = CFURLCreateCopyDeletingLastPathComponent(NULL,aUrlRef); |
| sURLString = CFURLGetString(directoryRef); |
| CFRetain(sURLString); |
| CFRelease(directoryRef); |
| } break; |
| default: |
| break; |
| } |
| |
| rtl::OUString sResult = CFStringToOUString(sURLString); |
| |
| CFRelease(sURLString); |
| |
| //DBG_PRINT_EXIT("CFStringUtilities", __func__, OUStringToOString(sResult, RTL_TEXTENCODING_UTF8).getStr()); |
| |
| return sResult; |
| } |