195 lines
6.8 KiB
Rust
195 lines
6.8 KiB
Rust
// Copyright 2013 The Servo Project Developers. See the COPYRIGHT
|
|
// file at the top-level directory of this distribution.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
|
// option. This file may not be copied, modified, or distributed
|
|
// except according to those terms.
|
|
|
|
//! A URL type for Core Foundation.
|
|
|
|
#![allow(non_uppercase_statics)]
|
|
|
|
use base::{CFOptionFlags, CFRelease, CFTypeID, TCFType};
|
|
use std::fmt;
|
|
use string::{CFString, CFStringRef};
|
|
|
|
struct __CFURL;
|
|
|
|
pub type CFURLRef = *__CFURL;
|
|
|
|
pub struct CFURL {
|
|
obj: CFURLRef,
|
|
}
|
|
|
|
impl Drop for CFURL {
|
|
fn drop(&mut self) {
|
|
unsafe {
|
|
CFRelease(self.as_CFTypeRef())
|
|
}
|
|
}
|
|
}
|
|
|
|
impl TCFType<CFURLRef> for CFURL {
|
|
fn as_concrete_TypeRef(&self) -> CFURLRef {
|
|
self.obj
|
|
}
|
|
|
|
unsafe fn wrap_under_create_rule(obj: CFURLRef) -> CFURL {
|
|
CFURL {
|
|
obj: obj,
|
|
}
|
|
}
|
|
|
|
#[inline]
|
|
fn type_id(_: Option<CFURL>) -> CFTypeID {
|
|
unsafe {
|
|
CFURLGetTypeID()
|
|
}
|
|
}
|
|
}
|
|
|
|
impl fmt::Show for CFURL {
|
|
#[inline]
|
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
|
unsafe {
|
|
let string: CFString = TCFType::wrap_under_get_rule(CFURLGetString(self.obj));
|
|
let s: ~str = string.to_str();
|
|
write!(f.buf, "{}", s)
|
|
}
|
|
}
|
|
}
|
|
|
|
type CFURLBookmarkCreationOptions = CFOptionFlags;
|
|
|
|
// static kCFURLBookmarkCreationPreferFileIDResolutionMask: CFURLBookmarkCreationOptions =
|
|
// (1 << 8) as u32;
|
|
// static kCFURLBookmarkCreationMinimalBookmarkMask: CFURLBookmarkCreationOptions =
|
|
// (1 << 9) as u32;
|
|
// static kCFURLBookmarkCreationSuitableForBookmarkFile: CFURLBookmarkCreationOptions =
|
|
// (1 << 10) as u32;
|
|
// static kCFURLBookmarkCreationWithSecurityScope: CFURLBookmarkCreationOptions =
|
|
// (1 << 11) as u32;
|
|
// static kCFURLBookmarkCreationSecurityScopeAllowOnlyReadAccess: CFURLBookmarkCreationOptions =
|
|
// (1 << 12) as u32;
|
|
|
|
// TODO: there are a lot of missing keys and constants. Add if you are bored or need them.
|
|
|
|
#[link(name = "CoreFoundation", kind = "framework")]
|
|
extern {
|
|
/*
|
|
* CFURL.h
|
|
*/
|
|
|
|
/* Common File System Resource Keys */
|
|
// static kCFURLAttributeModificationDateKey: CFStringRef;
|
|
// static kCFURLContentAccessDateKey: CFStringRef;
|
|
// static kCFURLContentModificationDateKey: CFStringRef;
|
|
// static kCFURLCreationDateKey: CFStringRef;
|
|
// static kCFURLCustomIconKey: CFStringRef;
|
|
// static kCFURLEffectiveIconKey: CFStringRef;
|
|
// static kCFURLFileResourceIdentifierKey: CFStringRef;
|
|
// static kCFURLFileSecurityKey: CFStringRef;
|
|
// static kCFURLHasHiddenExtensionKey: CFStringRef;
|
|
// static kCFURLIsDirectoryKey: CFStringRef;
|
|
// static kCFURLIsExecutableKey: CFStringRef;
|
|
// static kCFURLIsHiddenKey: CFStringRef;
|
|
// static kCFURLIsPackageKey: CFStringRef;
|
|
// static kCFURLIsReadableKey: CFStringRef;
|
|
// static kCFURLIsRegularFileKey: CFStringRef;
|
|
// static kCFURLIsSymbolicLinkKey: CFStringRef;
|
|
// static kCFURLIsSystemImmutableKey: CFStringRef;
|
|
// static kCFURLIsUserImmutableKey: CFStringRef;
|
|
// static kCFURLIsVolumeKey: CFStringRef;
|
|
// static kCFURLIsWritableKey: CFStringRef;
|
|
// static kCFURLLabelColorKey: CFStringRef;
|
|
// static kCFURLLabelNumberKey: CFStringRef;
|
|
// static kCFURLLinkCountKey: CFStringRef;
|
|
// static kCFURLLocalizedLabelKey: CFStringRef;
|
|
// static kCFURLLocalizedNameKey: CFStringRef;
|
|
// static kCFURLLocalizedTypeDescriptionKey: CFStringRef;
|
|
// static kCFURLNameKey: CFStringRef;
|
|
// static kCFURLParentDirectoryURLKey: CFStringRef;
|
|
// static kCFURLPreferredIOBlockSizeKey: CFStringRef;
|
|
// static kCFURLTypeIdentifierKey: CFStringRef;
|
|
// static kCFURLVolumeIdentifierKey: CFStringRef;
|
|
// static kCFURLVolumeURLKey: CFStringRef;
|
|
// static kCFURLIsExcludedFromBackupKey: CFStringRef;
|
|
// static kCFURLFileResourceTypeKey: CFStringRef;
|
|
|
|
/* Creating a CFURL */
|
|
//fn CFURLCopyAbsoluteURL
|
|
//fn CFURLCreateAbsoluteURLWithBytes
|
|
//fn CFURLCreateByResolvingBookmarkData
|
|
//fn CFURLCreateCopyAppendingPathComponent
|
|
//fn CFURLCreateCopyAppendingPathExtension
|
|
//fn CFURLCreateCopyDeletingLastPathComponent
|
|
//fn CFURLCreateCopyDeletingPathExtension
|
|
//fn CFURLCreateFilePathURL
|
|
//fn CFURLCreateFileReferenceURL
|
|
//fn CFURLCreateFromFileSystemRepresentation
|
|
//fn CFURLCreateFromFileSystemRepresentationRelativeToBase
|
|
//fn CFURLCreateFromFSRef
|
|
//fn CFURLCreateWithBytes
|
|
//fn CFURLCreateWithFileSystemPath
|
|
//fn CFURLCreateWithFileSystemPathRelativeToBase
|
|
//fn CFURLCreateWithString(allocator: CFAllocatorRef, urlString: CFStringRef,
|
|
// baseURL: CFURLRef) -> CFURLRef;
|
|
|
|
/* Accessing the Parts of a URL */
|
|
//fn CFURLCanBeDecomposed
|
|
//fn CFURLCopyFileSystemPath
|
|
//fn CFURLCopyFragment
|
|
//fn CFURLCopyHostName
|
|
//fn CFURLCopyLastPathComponent
|
|
//fn CFURLCopyNetLocation
|
|
//fn CFURLCopyParameterString
|
|
//fn CFURLCopyPassword
|
|
//fn CFURLCopyPath
|
|
//fn CFURLCopyPathExtension
|
|
//fn CFURLCopyQueryString
|
|
//fn CFURLCopyResourceSpecifier
|
|
//fn CFURLCopyScheme
|
|
//fn CFURLCopyStrictPath
|
|
//fn CFURLCopyUserName
|
|
//fn CFURLGetPortNumber
|
|
//fn CFURLHasDirectoryPath
|
|
|
|
/* Converting URLs to Other Representations */
|
|
//fn CFURLCreateData(allocator: CFAllocatorRef, url: CFURLRef,
|
|
// encoding: CFStringEncoding, escapeWhitespace: bool) -> CFDataRef;
|
|
//fn CFURLCreateStringByAddingPercentEscapes
|
|
//fn CFURLCreateStringByReplacingPercentEscapes
|
|
//fn CFURLCreateStringByReplacingPercentEscapesUsingEncoding
|
|
//fn CFURLGetFileSystemRepresentation
|
|
//fn CFURLGetFSRef
|
|
fn CFURLGetString(anURL: CFURLRef) -> CFStringRef;
|
|
|
|
/* Getting URL Properties */
|
|
//fn CFURLGetBaseURL(anURL: CFURLRef) -> CFURLRef;
|
|
//fn CFURLGetBytes
|
|
//fn CFURLGetByteRangeForComponent
|
|
fn CFURLGetTypeID() -> CFTypeID;
|
|
//fn CFURLResourceIsReachable
|
|
|
|
/* Getting and Setting File System Resource Properties */
|
|
//fn CFURLClearResourcePropertyCache
|
|
//fn CFURLClearResourcePropertyCacheForKey
|
|
//fn CFURLCopyResourcePropertiesForKeys
|
|
//fn CFURLCopyResourcePropertyForKey
|
|
//fn CFURLCreateResourcePropertiesForKeysFromBookmarkData
|
|
//fn CFURLCreateResourcePropertyForKeyFromBookmarkData
|
|
//fn CFURLSetResourcePropertiesForKeys
|
|
//fn CFURLSetResourcePropertyForKey
|
|
//fn CFURLSetTemporaryResourcePropertyForKey
|
|
|
|
/* Working with Bookmark Data */
|
|
//fn CFURLCreateBookmarkData
|
|
//fn CFURLCreateBookmarkDataFromAliasRecord
|
|
//fn CFURLCreateBookmarkDataFromFile
|
|
//fn CFURLWriteBookmarkDataToFile
|
|
//fn CFURLStartAccessingSecurityScopedResource
|
|
//fn CFURLStopAccessingSecurityScopedResource
|
|
}
|