[Pkg-owncloud-commits] [qtkeychain] 04/115: improve error strings
Sandro Knauß
hefee-guest at moszumanska.debian.org
Sat Mar 15 19:25:42 UTC 2014
This is an automated email from the git hooks/post-receive script.
hefee-guest pushed a commit to branch master
in repository qtkeychain.
commit 6bc7b818152e43136d1f0970d47993db6ccffc90
Author: Frank Osterfeld <frank.osterfeld at kdab.com>
Date: Thu Oct 27 21:01:42 2011 +0200
improve error strings
---
keychain_mac.cpp | 36 +++++++++++++++++++++++++++++-------
1 file changed, 29 insertions(+), 7 deletions(-)
diff --git a/keychain_mac.cpp b/keychain_mac.cpp
index 860174f..41e0e2b 100644
--- a/keychain_mac.cpp
+++ b/keychain_mac.cpp
@@ -10,10 +10,26 @@
#include <CoreFoundation/CoreFoundation.h>
#include <Security/Security.h>
-#include <CoreServices/CoreServices.h>
-
#include <QDebug>
+template <typename T>
+struct Releaser {
+ explicit Releaser( const T& v ) : value( v ) {}
+ ~Releaser() {
+ CFRelease( value );
+ }
+
+ const T value;
+};
+
+static QString strForStatus( OSStatus os ) {
+ const Releaser<CFStringRef> str( SecCopyErrorMessageString( os, 0 ) );
+ const char * const buf = CFStringGetCStringPtr( str.value, kCFStringEncodingUTF8 );
+ if ( !buf )
+ return QString();
+ return QString::fromUtf8( buf, strlen( buf ) );
+}
+
static OSStatus readPw( QString* pw,
const QString& service,
const QString& account,
@@ -37,6 +53,8 @@ static OSStatus readPw( QString* pw,
if ( ret == noErr ) {
*pw = QString::fromUtf8( reinterpret_cast<const char*>( data ), len );
const OSStatus ret2 = SecKeychainItemFreeContent ( 0, data );
+ if ( ret2 != noErr )
+ qWarning() << "Could not free item content: " << strForStatus( ret2 );
}
return ret;
}
@@ -55,7 +73,7 @@ Keychain::Error Keychain::Private::readPasswordImpl( QString* pw,
*err = tr("Password not found");
return PasswordNotFound;
default:
- *err = QString::number( ret );
+ *err = strForStatus( ret );
return OtherError;
}
}
@@ -93,7 +111,7 @@ Keychain::Error Keychain::Private::writePasswordImpl( const QString& account,
return writePasswordImpl( account, password, ov, err );
}
default:
- *err = QString::number( ret );
+ *err = strForStatus( ret );
return OtherError;
}
}
@@ -102,21 +120,25 @@ Keychain::Error Keychain::Private::writePasswordImpl( const QString& account,
}
Keychain::Error Keychain::Private::deletePasswordImpl( const QString& account,
- QString* errorString ) {
+ QString* err ) {
SecKeychainItemRef ref;
QString pw;
const OSStatus ret1 = readPw( &pw, service, account, &ref );
if ( ret1 == errSecItemNotFound )
return NoError; // No item stored, we're done
if ( ret1 != noErr ) {
+ *err = strForStatus( ret1 );
//TODO map error code, set errstr
return OtherError;
}
+ const Releaser<SecKeychainItemRef> releaser( ref );
+
const OSStatus ret2 = SecKeychainItemDelete( ref );
- CFRelease(ref);
+
if ( ret2 == noErr )
return NoError;
- //TODO map error code, set errstr
+ //TODO map error code
+ *err = strForStatus( ret2 );
return CouldNotDeletePassword;
}
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/qtkeychain.git
More information about the Pkg-owncloud-commits
mailing list