本文整理汇总了Golang中C.CFTypeRef函数的典型用法代码示例。如果您正苦于以下问题:Golang CFTypeRef函数的具体用法?Golang CFTypeRef怎么用?Golang CFTypeRef使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了CFTypeRef函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: LoadInfoRaw
func LoadInfoRaw(kextID string) (map[interface{}]interface{}, error) {
cfKextID, err := StringToCFString(kextID)
if cfKextID != nil {
defer Release(C.CFTypeRef(cfKextID))
}
if err != nil {
return nil, err
}
cfKextIDs := ArrayToCFArray([]C.CFTypeRef{C.CFTypeRef(cfKextID)})
if cfKextIDs != nil {
defer Release(C.CFTypeRef(cfKextIDs))
}
cfDict := C.KextManagerCopyLoadedKextInfo(cfKextIDs, nil)
m, err := ConvertCFDictionary(cfDict)
if err != nil {
return nil, err
}
info, hasKey := m[kextID]
if !hasKey {
return nil, nil
}
var ret, cast = info.(map[interface{}]interface{})
if !cast {
return nil, fmt.Errorf("Unexpected value for kext info")
}
return ret, nil
}
示例2: NewFontWithName
// Given a PostScript font name the function will attempt to load a matching
// font and return a font object back to the caller.
//
// If no font with the given name is found a font that most closely resembles
// what was requested will be returned instead based on the platform's fallback
// mechanism.
// More details on the mechanism can be found at:
// https://developer.apple.com/library/mac/documentation/Carbon/Reference/CTFontRef/#//apple_ref/c/func/CTFontCreateWithName
//
// The function returns an error if loading the font failed for any reason.
func NewFontWithName(fontName string) (font *Font, err error) {
cfname := GoStringToCFString(fontName)
defer C.CFRelease(C.CFTypeRef(cfname))
font = &Font{
ref: C.CTFontCreateWithName(cfname, 0.0, nil),
}
if font.ref == nil {
err = fmt.Errorf("CoreText failed to craete a CTFontRef object with name '%s'", fontName)
return
}
runtime.SetFinalizer(font, (*Font).release)
name := C.CTFontCopyPostScriptName(font.ref)
defer C.CFRelease(C.CFTypeRef(name))
family := C.CTFontCopyFamilyName(font.ref)
defer C.CFRelease(C.CFTypeRef(family))
display := C.CTFontCopyDisplayName(font.ref)
defer C.CFRelease(C.CFTypeRef(display))
font.name = CFStringToGoString(name)
font.family = CFStringToGoString(family)
font.display = CFStringToGoString(display)
return
}
示例3: loadSystemRoots
func loadSystemRoots() (*CertPool, error) {
roots := NewCertPool()
var data C.CFDataRef = nil
var untrustedData C.CFDataRef = nil
err := C.FetchPEMRoots(&data, &untrustedData)
if err == -1 {
// TODO: better error message
return nil, errors.New("crypto/x509: failed to load darwin system roots with cgo")
}
defer C.CFRelease(C.CFTypeRef(data))
buf := C.GoBytes(unsafe.Pointer(C.CFDataGetBytePtr(data)), C.int(C.CFDataGetLength(data)))
roots.AppendCertsFromPEM(buf)
if untrustedData == nil {
return roots, nil
}
defer C.CFRelease(C.CFTypeRef(untrustedData))
buf = C.GoBytes(unsafe.Pointer(C.CFDataGetBytePtr(untrustedData)), C.int(C.CFDataGetLength(untrustedData)))
untrustedRoots := NewCertPool()
untrustedRoots.AppendCertsFromPEM(buf)
trustedRoots := NewCertPool()
for _, c := range roots.certs {
if !untrustedRoots.contains(c) {
trustedRoots.AddCert(c)
}
}
return trustedRoots, nil
}
示例4: ExportFromKeychain
// ExportFromKeychain ...
func ExportFromKeychain(itemRefsToExport []C.CFTypeRef, outputFilePath string, isAskForPassword bool) error {
passphraseCString := C.CString("")
defer C.free(unsafe.Pointer(passphraseCString))
var exportedData C.CFDataRef
var exportParams C.SecItemImportExportKeyParameters
exportParams.keyUsage = nil
exportParams.keyAttributes = nil
exportParams.version = C.SEC_KEY_IMPORT_EXPORT_PARAMS_VERSION
if isAskForPassword {
exportParams.flags = C.kSecKeySecurePassphrase
exportParams.passphrase = nil
exportParams.alertTitle = nil
promptText := C.CString("Enter a password which will be used to protect the exported items")
defer C.free(unsafe.Pointer(promptText))
exportParams.alertPrompt = convertCStringToCFString(promptText)
} else {
exportParams.flags = 0
exportParams.passphrase = (C.CFTypeRef)(convertCStringToCFString(passphraseCString))
exportParams.alertTitle = nil
exportParams.alertPrompt = nil
}
// create a C array from the input
ptr := (*unsafe.Pointer)(&itemRefsToExport[0])
cfArrayForExport := C.CFArrayCreate(
C.kCFAllocatorDefault,
ptr,
C.CFIndex(len(itemRefsToExport)),
&C.kCFTypeArrayCallBacks)
// do the export!
status := C.SecItemExport(C.CFTypeRef(cfArrayForExport),
C.kSecFormatPKCS12,
0, //C.kSecItemPemArmour, // Use kSecItemPemArmour to add PEM armour - the .p12 generated by Keychain Access.app does NOT have PEM armour
&exportParams,
&exportedData)
if status != C.errSecSuccess {
return fmt.Errorf("SecItemExport: error (OSStatus): %d", status)
}
// exportedData now contains your PKCS12 data
// make sure it'll be released properly!
defer C.CFRelease(C.CFTypeRef(exportedData))
dataBytes := convertCFDataRefToGoBytes(exportedData)
if dataBytes == nil || len(dataBytes) < 1 {
return errors.New("ExportFromKeychain: failed to convert export data - nil or empty")
}
if err := fileutil.WriteBytesToFile(outputFilePath, dataBytes); err != nil {
return fmt.Errorf("ExportFromKeychain: failed to write into file: %s", err)
}
log.Debug("Export - success")
return nil
}
示例5: convertBoolToCFBoolean
// ===== CFBoolean =====
func convertBoolToCFBoolean(b bool) C.CFBooleanRef {
// I don't think the CFBoolean constants have retain counts,
// but just in case lets call CFRetain on them
if b {
return C.CFBooleanRef(C.CFRetain(C.CFTypeRef(C.kCFBooleanTrue)))
}
return C.CFBooleanRef(C.CFRetain(C.CFTypeRef(C.kCFBooleanFalse)))
}
示例6: GetAllAccountNames
// GetAllAccountNames returns a list of all account names for the
// given service name in the default keychain.
func GetAllAccountNames(serviceName string) (accountNames []string, err error) {
var serviceNameString C.CFStringRef
if serviceNameString, err = _UTF8StringToCFString(serviceName); err != nil {
return
}
defer C.CFRelease(C.CFTypeRef(serviceNameString))
query := map[C.CFTypeRef]C.CFTypeRef{
secClass: secClassGenericPassword,
secAttrService: C.CFTypeRef(serviceNameString),
secMatchLimit: secMatchLimitAll,
secReturnAttributes: C.CFTypeRef(C.kCFBooleanTrue),
}
queryDict := mapToCFDictionary(query)
defer C.CFRelease(C.CFTypeRef(queryDict))
var resultsRef C.CFTypeRef
errCode := C.SecItemCopyMatching(queryDict, &resultsRef)
err = newKeychainError(errCode)
if err == ErrItemNotFound {
return []string{}, nil
} else if err != nil {
return nil, err
}
defer C.CFRelease(resultsRef)
// The resultsRef should always be an array (because kSecReturnAttributes is true)
// but it's a good sanity check and useful if want to support kSecReturnRef in the future.
typeID := C.CFGetTypeID(resultsRef)
if typeID != C.CFArrayGetTypeID() {
typeDesc := C.CFCopyTypeIDDescription(typeID)
defer C.CFRelease(C.CFTypeRef(typeDesc))
err = fmt.Errorf("Invalid result type: %s", _CFStringToUTF8String(typeDesc))
return
}
results := _CFArrayToArray(C.CFArrayRef(resultsRef))
for _, result := range results {
m := _CFDictionaryToMap(C.CFDictionaryRef(result))
resultServiceName := _CFStringToUTF8String(C.CFStringRef(m[secAttrService]))
if resultServiceName != serviceName {
err = fmt.Errorf("Expected service name %s, got %s", serviceName, resultServiceName)
return
}
accountName := _CFStringToUTF8String(C.CFStringRef(m[secAttrAccount]))
accountNames = append(accountNames, accountName)
}
return
}
示例7: UpdateItem
// UpdateItem updates the queryItem with the parameters from updateItem
func UpdateItem(queryItem Item, updateItem Item) error {
cfDict, err := ConvertMapToCFDictionary(queryItem.attr)
if err != nil {
return err
}
defer Release(C.CFTypeRef(cfDict))
cfDictUpdate, err := ConvertMapToCFDictionary(updateItem.attr)
if err != nil {
return err
}
defer Release(C.CFTypeRef(cfDictUpdate))
errCode := C.SecItemUpdate(cfDict, cfDictUpdate)
err = checkError(errCode)
return err
}
示例8: NewCFError
func NewCFError(c C.CFErrorRef) *CFError {
e := &CFError{
Domain: convertCFStringToString(C.CFErrorGetDomain(c)),
Code: int(C.CFErrorGetCode(c)),
}
cfDict := C.CFErrorCopyUserInfo(c)
defer C.CFRelease(C.CFTypeRef(cfDict))
if userInfo, err := convertCFDictionaryToMap(cfDict); err == nil {
// on error, skip user info
e.UserInfo = userInfo
}
cfStr := C.CFErrorCopyDescription(c)
defer C.CFRelease(C.CFTypeRef(cfStr))
e.Description = convertCFStringToString(cfStr)
return e
}
示例9: watchPath
func (w *Watcher) watchPath(path string, options *Options) error {
path, _ = filepath.Abs(path)
w.wmut.Lock()
_, found := w.watches[path]
w.wmut.Unlock()
if !found {
cPaths := C.ArrayCreateMutable(C.int(1))
defer C.CFRelease(C.CFTypeRef(cPaths))
cpath := C.CString(path)
defer C.free(unsafe.Pointer(cpath))
str := C.CFStringCreateWithCString(nil, cpath, C.kCFStringEncodingUTF8)
C.CFArrayAppendValue(cPaths, unsafe.Pointer(str))
context := C.FSEventStreamContext{info: unsafe.Pointer(&w.internalEvent)}
latency := C.CFTimeInterval(0)
if options != nil && options.Throttle {
latency = C.CFTimeInterval(options.ThrottleDuration / time.Second)
}
stream := C.EventStreamCreate(&context, cPaths, C.kFSEventStreamEventIdSinceNow+(1<<64), latency)
w.wmut.Lock()
w.watches[path] = stream
w.wmut.Unlock()
C.FSEventStreamScheduleWithRunLoop(stream, w.rlref, C.kCFRunLoopDefaultMode)
C.FSEventStreamStart(stream)
}
return nil
}
示例10: createEmptyAccess
// The returned SecAccessRef, if non-nil, must be released via CFRelease.
func createEmptyAccess(label string) (C.SecAccessRef, error) {
var err error
var labelRef C.CFStringRef
if labelRef, err = _UTF8StringToCFString(label); err != nil {
return nil, err
}
defer C.CFRelease(C.CFTypeRef(labelRef))
var access C.SecAccessRef
trustedApplicationsArray := arrayToCFArray([]C.CFTypeRef{})
defer C.CFRelease(C.CFTypeRef(trustedApplicationsArray))
if err = newKeychainError(C.SecAccessCreate(labelRef, trustedApplicationsArray, &access)); err != nil {
return nil, err
}
return access, nil
}
示例11: DeleteItem
// DeleteItem removes a Item
func DeleteItem(item Item) error {
cfDict, err := convertAttr(item.attr)
if err != nil {
return err
}
defer C.CFRelease(C.CFTypeRef(cfDict))
errCode := C.SecItemDelete(cfDict)
return checkError(errCode)
}
示例12: DeleteItem
// DeleteItem removes a Item
func DeleteItem(item Item) error {
cfDict, err := ConvertMapToCFDictionary(item.attr)
if err != nil {
return err
}
defer Release(C.CFTypeRef(cfDict))
errCode := C.SecItemDelete(cfDict)
return checkError(errCode)
}
示例13: addImage
func (self *Clipboard) addImage(img image.Image) (err error) {
var i C.CGImageRef
if i, err = CGImageCreateWithImage(img); err == nil {
C.Clipboard_AddImage(self.ref, i)
C.CFRelease(C.CFTypeRef(i))
}
return
}
示例14: AddItem
// AddItem adds a Item
func AddItem(item Item) error {
cfDict, err := convertAttr(item.attr)
if err != nil {
return err
}
defer C.CFRelease(C.CFTypeRef(cfDict))
errCode := C.SecItemAdd(cfDict, nil)
err = checkError(errCode)
return err
}
示例15: FindAndRemoveGenericPassword
// FindAndRemoveGenericPassword finds a generic password with the
// given attributes in the default keychain and removes it if
// found. If not found, an error is returned.
func FindAndRemoveGenericPassword(attributes *GenericPasswordAttributes) error {
itemRef, err := findGenericPasswordItem(attributes)
if err != nil {
return err
}
defer C.CFRelease(C.CFTypeRef(itemRef))
errCode := C.SecKeychainItemDelete(itemRef)
return newKeychainError(errCode)
}