PrefExt() : Preference(this) {
}
+ ~PrefExt() {
+ _I("");
+ }
+
int AddWatch(const char* key, preference_changed_cb cb, void* user_data) {
std::lock_guard<std::recursive_mutex> lock(GetMutex());
if (Preference::AddWatch(key) < 0)
mutable std::recursive_mutex mutex_;
};
-PrefExt pref;
+PrefExt* pref = new PrefExt();
+
+__attribute__((destructor)) static void destructor() {
+ delete pref;
+ pref = nullptr;
+}
} // namespace
return PREFERENCE_ERROR_INVALID_PARAMETER;
}
- int ret = pref.SetInt(key, intval);
+ if (pref == nullptr) {
+ _E("global resource was destroyed");
+ return PREFERENCE_ERROR_IO_ERROR;
+ }
+
+ int ret = pref->SetInt(key, intval);
if (ret < 0) {
_E("Failed to set integer value");
return PREFERENCE_ERROR_IO_ERROR;
return PREFERENCE_ERROR_INVALID_PARAMETER;
}
- int ret = pref.SetBoolean(key, boolval);
+ if (pref == nullptr) {
+ _E("global resource was destroyed");
+ return PREFERENCE_ERROR_IO_ERROR;
+ }
+
+ int ret = pref->SetBoolean(key, boolval);
if (ret < 0) {
_E("Failed to set boolean value");
return PREFERENCE_ERROR_IO_ERROR;
return PREFERENCE_ERROR_INVALID_PARAMETER;
}
- int ret = pref.SetDouble(key, dblval);
+ if (pref == nullptr) {
+ _E("global resource was destroyed");
+ return PREFERENCE_ERROR_IO_ERROR;
+ }
+
+ int ret = pref->SetDouble(key, dblval);
if (ret < 0) {
_E("Failed to set double value");
return PREFERENCE_ERROR_IO_ERROR;
return PREFERENCE_ERROR_INVALID_PARAMETER;
}
- int ret = pref.SetString(key, strval);
+ if (pref == nullptr) {
+ _E("global resource was destroyed");
+ return PREFERENCE_ERROR_IO_ERROR;
+ }
+
+ int ret = pref->SetString(key, strval);
if (ret < 0) {
_E("Failed to set string value");
return PREFERENCE_ERROR_IO_ERROR;
return PREFERENCE_ERROR_INVALID_PARAMETER;
}
- if (!pref.IsExisting(key))
+ if (pref == nullptr) {
+ _E("global resource was destroyed");
+ return PREFERENCE_ERROR_IO_ERROR;
+ }
+
+ if (!pref->IsExisting(key))
return PREFERENCE_ERROR_NO_KEY;
try {
- *intval = pref.GetInt(key);
+ *intval = pref->GetInt(key);
} catch (const preference::internal::Exception& e) {
return e.GetErrorCode();
}
return PREFERENCE_ERROR_INVALID_PARAMETER;
}
- if (!pref.IsExisting(key))
+ if (pref == nullptr) {
+ _E("global resource was destroyed");
+ return PREFERENCE_ERROR_IO_ERROR;
+ }
+
+ if (!pref->IsExisting(key))
return PREFERENCE_ERROR_NO_KEY;
try {
- *boolval = pref.GetBoolean(key);
+ *boolval = pref->GetBoolean(key);
} catch (const preference::internal::Exception& e) {
return e.GetErrorCode();
}
return PREFERENCE_ERROR_INVALID_PARAMETER;
}
- if (!pref.IsExisting(key))
+ if (pref == nullptr) {
+ _E("global resource was destroyed");
+ return PREFERENCE_ERROR_IO_ERROR;
+ }
+
+ if (!pref->IsExisting(key))
return PREFERENCE_ERROR_NO_KEY;
try {
- *dblval = pref.GetDouble(key);
+ *dblval = pref->GetDouble(key);
} catch (const preference::internal::Exception& e) {
return e.GetErrorCode();
}
return PREFERENCE_ERROR_INVALID_PARAMETER;
}
- if (!pref.IsExisting(key))
+ if (pref == nullptr) {
+ _E("global resource was destroyed");
+ return PREFERENCE_ERROR_IO_ERROR;
+ }
+
+ if (!pref->IsExisting(key))
return PREFERENCE_ERROR_NO_KEY;
try {
- *value = strdup(pref.GetString(key).c_str());
+ *value = strdup(pref->GetString(key).c_str());
} catch (const preference::internal::Exception& e) {
return e.GetErrorCode();
}
return PREFERENCE_ERROR_INVALID_PARAMETER;
}
- if (!pref.IsExisting(key)) {
+ if (pref == nullptr) {
+ _E("global resource was destroyed");
+ return PREFERENCE_ERROR_IO_ERROR;
+ }
+
+ if (!pref->IsExisting(key)) {
_E("%s doesn't exist", key);
return PREFERENCE_ERROR_NO_KEY;
}
- int ret = pref.Remove(key);
+ int ret = pref->Remove(key);
if (ret < 0) {
_E("Failed to remove key(%s)", key);
return PREFERENCE_ERROR_IO_ERROR;
return PREFERENCE_ERROR_INVALID_PARAMETER;
}
- *exist = pref.IsExisting(key);
+ if (pref == nullptr) {
+ _E("global resource was destroyed");
+ return PREFERENCE_ERROR_IO_ERROR;
+ }
+
+ *exist = pref->IsExisting(key);
SECURE_LOGD("key(%s), existence(%d)", key, *exist);
return PREFERENCE_ERROR_NONE;
}
extern "C" API int preference_remove_all(void) {
- int ret = pref.RemoveAll();
+ if (pref == nullptr) {
+ _E("global resource was destroyed");
+ return PREFERENCE_ERROR_IO_ERROR;
+ }
+
+ int ret = pref->RemoveAll();
if (ret < 0) {
_E("Failed to delete all keys");
return PREFERENCE_ERROR_IO_ERROR;
return PREFERENCE_ERROR_INVALID_PARAMETER;
}
- if (!pref.IsExisting(key)) {
+ if (pref == nullptr) {
+ _E("global resource was destroyed");
+ return PREFERENCE_ERROR_IO_ERROR;
+ }
+
+ if (!pref->IsExisting(key)) {
_E("Failed to find key(%s)", key);
return PREFERENCE_ERROR_NO_KEY;
}
- int ret = pref.AddWatch(key, callback, user_data);
+ int ret = pref->AddWatch(key, callback, user_data);
if (ret < 0) {
_E("Failed to add watch");
return PREFERENCE_ERROR_OUT_OF_MEMORY;
return PREFERENCE_ERROR_INVALID_PARAMETER;
}
- if (!pref.IsExisting(key)) {
+ if (pref == nullptr) {
+ _E("global resource was destroyed");
+ return PREFERENCE_ERROR_IO_ERROR;
+ }
+
+ if (!pref->IsExisting(key)) {
_E("Failed to find key(%s)", key);
return PREFERENCE_ERROR_NO_KEY;
}
- int ret = pref.RemoveWatch(key);
+ int ret = pref->RemoveWatch(key);
if (ret < 0) {
_E("Failed to remove watch");
return PREFERENCE_ERROR_NO_KEY;
return PREFERENCE_ERROR_INVALID_PARAMETER;
}
- auto keys = pref.GetKeys();
+ if (pref == nullptr) {
+ _E("global resource was destroyed");
+ return PREFERENCE_ERROR_IO_ERROR;
+ }
+
+ auto keys = pref->GetKeys();
for (auto& i : keys) {
if (!callback(i.c_str(), user_data))
break;
return PREFERENCE_ERROR_INVALID_PARAMETER;
}
- if (!pref.IsExisting(key)) {
+ if (pref == nullptr) {
+ _E("global resource was destroyed");
+ return PREFERENCE_ERROR_IO_ERROR;
+ }
+
+ if (!pref->IsExisting(key)) {
*type = PREFERENCE_TYPE_NONE;
return PREFERENCE_ERROR_NONE;
}
- *type = static_cast<preference_type_e>(pref.GetType(key));
+ *type = static_cast<preference_type_e>(pref->GetType(key));
SECURE_LOGD("key(%s), type(%d)", key, *type);
return PREFERENCE_ERROR_NONE;
}