Free memory of service descriptor and fix possible crashes
This commit is contained in:
parent
adbf8495c6
commit
b089ba2e04
|
@ -41,17 +41,17 @@ iMobileDeviceConnection::iMobileDeviceConnection(const QString &uuid) : device_(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
lockdownd_client_t lockdown;
|
QByteArray label_ascii = QCoreApplication::applicationName().toUtf8();
|
||||||
lockdownd_service_descriptor_t lockdown_service_desc;
|
|
||||||
|
|
||||||
QByteArray label_ascii = QCoreApplication::applicationName().toLatin1();
|
|
||||||
const char *label = label_ascii.constData();
|
const char *label = label_ascii.constData();
|
||||||
|
|
||||||
|
lockdownd_client_t lockdown;
|
||||||
lockdownd_error_t lockdown_err = lockdownd_client_new_with_handshake(device_, &lockdown, label);
|
lockdownd_error_t lockdown_err = lockdownd_client_new_with_handshake(device_, &lockdown, label);
|
||||||
if (lockdown_err != LOCKDOWN_E_SUCCESS) {
|
if (lockdown_err != LOCKDOWN_E_SUCCESS) {
|
||||||
qLog(Warning) << "lockdown error:" << lockdown_err;
|
qLog(Warning) << "lockdown error:" << lockdown_err;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lockdownd_service_descriptor_t lockdown_service_desc;
|
||||||
lockdown_err = lockdownd_start_service(lockdown, "com.apple.afc", &lockdown_service_desc);
|
lockdown_err = lockdownd_start_service(lockdown, "com.apple.afc", &lockdown_service_desc);
|
||||||
if (lockdown_err != LOCKDOWN_E_SUCCESS) {
|
if (lockdown_err != LOCKDOWN_E_SUCCESS) {
|
||||||
qLog(Warning) << "lockdown error:" << lockdown_err;
|
qLog(Warning) << "lockdown error:" << lockdown_err;
|
||||||
|
@ -62,10 +62,12 @@ iMobileDeviceConnection::iMobileDeviceConnection(const QString &uuid) : device_(
|
||||||
afc_error_t afc_err = afc_client_new(device_, lockdown_service_desc, &afc_);
|
afc_error_t afc_err = afc_client_new(device_, lockdown_service_desc, &afc_);
|
||||||
if (afc_err != 0) {
|
if (afc_err != 0) {
|
||||||
qLog(Warning) << "afc error:" << afc_err;
|
qLog(Warning) << "afc error:" << afc_err;
|
||||||
|
lockdownd_service_descriptor_free(lockdown_service_desc);
|
||||||
lockdownd_client_free(lockdown);
|
lockdownd_client_free(lockdown);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lockdownd_service_descriptor_free(lockdown_service_desc);
|
||||||
lockdownd_client_free(lockdown);
|
lockdownd_client_free(lockdown);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -90,8 +92,10 @@ T GetPListValue(plist_t node, F f) {
|
||||||
|
|
||||||
QVariant iMobileDeviceConnection::GetProperty(const QString &property, const QString &domain) {
|
QVariant iMobileDeviceConnection::GetProperty(const QString &property, const QString &domain) {
|
||||||
|
|
||||||
|
if (!device_) return QVariant();
|
||||||
|
|
||||||
lockdownd_client_t lockdown;
|
lockdownd_client_t lockdown;
|
||||||
QByteArray label_ascii = QCoreApplication::applicationName().toLatin1();
|
QByteArray label_ascii = QCoreApplication::applicationName().toUtf8();
|
||||||
const char *label = label_ascii.constData();
|
const char *label = label_ascii.constData();
|
||||||
|
|
||||||
lockdownd_error_t lockdown_err = lockdownd_client_new_with_handshake(device_, &lockdown, label);
|
lockdownd_error_t lockdown_err = lockdownd_client_new_with_handshake(device_, &lockdown, label);
|
||||||
|
@ -101,10 +105,10 @@ QVariant iMobileDeviceConnection::GetProperty(const QString &property, const QSt
|
||||||
}
|
}
|
||||||
|
|
||||||
plist_t node = NULL;
|
plist_t node = NULL;
|
||||||
QByteArray domain_ascii = domain.toLatin1();
|
QByteArray domain_ascii = domain.toUtf8();
|
||||||
const char *d = domain_ascii.isEmpty() ? NULL : domain_ascii.constData();
|
const char *d = domain_ascii.isEmpty() ? NULL : domain_ascii.constData();
|
||||||
//const char *d = domain.isEmpty() ? NULL : "com.apple.disk_usage";
|
//const char *d = domain.isEmpty() ? NULL : "com.apple.disk_usage";
|
||||||
lockdownd_get_value(lockdown, d, property.toLatin1().constData(), &node);
|
lockdownd_get_value(lockdown, d, property.toUtf8().constData(), &node);
|
||||||
lockdownd_client_free(lockdown);
|
lockdownd_client_free(lockdown);
|
||||||
|
|
||||||
if (!node) {
|
if (!node) {
|
||||||
|
@ -135,6 +139,8 @@ QVariant iMobileDeviceConnection::GetProperty(const QString &property, const QSt
|
||||||
|
|
||||||
QStringList iMobileDeviceConnection::ReadDirectory(const QString &path, QDir::Filters filters) {
|
QStringList iMobileDeviceConnection::ReadDirectory(const QString &path, QDir::Filters filters) {
|
||||||
|
|
||||||
|
if (!afc_) return QStringList();
|
||||||
|
|
||||||
char **list = NULL;
|
char **list = NULL;
|
||||||
afc_error_t err = afc_read_directory(afc_, path.toUtf8().constData(), &list);
|
afc_error_t err = afc_read_directory(afc_, path.toUtf8().constData(), &list);
|
||||||
if (err != AFC_E_SUCCESS || !list) {
|
if (err != AFC_E_SUCCESS || !list) {
|
||||||
|
@ -166,12 +172,17 @@ QStringList iMobileDeviceConnection::ReadDirectory(const QString &path, QDir::Fi
|
||||||
}
|
}
|
||||||
|
|
||||||
bool iMobileDeviceConnection::MkDir(const QString &path) {
|
bool iMobileDeviceConnection::MkDir(const QString &path) {
|
||||||
|
|
||||||
|
if (!afc_) return false;
|
||||||
|
|
||||||
afc_error_t err = afc_make_directory(afc_, path.toUtf8().constData());
|
afc_error_t err = afc_make_directory(afc_, path.toUtf8().constData());
|
||||||
return err == AFC_E_SUCCESS;
|
return err == AFC_E_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString iMobileDeviceConnection::GetFileInfo(const QString &path, const QString &key) {
|
QString iMobileDeviceConnection::GetFileInfo(const QString &path, const QString &key) {
|
||||||
|
|
||||||
|
if (!afc_) return QString();
|
||||||
|
|
||||||
QString ret;
|
QString ret;
|
||||||
char **infolist = NULL;
|
char **infolist = NULL;
|
||||||
afc_error_t err = afc_get_file_info(afc_, path.toUtf8().constData(), &infolist);
|
afc_error_t err = afc_get_file_info(afc_, path.toUtf8().constData(), &infolist);
|
||||||
|
|
Loading…
Reference in New Issue