@@ -47,7 +47,7 @@ SecretSchema BuildSchema(const char key_namespace[]) {
47
47
48
48
UserSecureLinuxInternal::UserSecureLinuxInternal (const char * domain,
49
49
const char * key_namespace)
50
- : domain_(domain), key_namespace_(key_namespace) {
50
+ : domain_(domain), key_namespace_(key_namespace), known_error_code_( 0 ) {
51
51
storage_schema_ = BuildSchema (key_namespace_.c_str ());
52
52
}
53
53
@@ -68,14 +68,8 @@ std::string UserSecureLinuxInternal::LoadUserData(const std::string& app_name) {
68
68
/* key1= */ kAppNameKey ,
69
69
/* value1= */ app_name.c_str (), /* key2= */ kStorageDomainKey ,
70
70
/* value2= */ domain_.c_str (), nullptr );
71
- if (error) {
72
- g_error_free (error);
73
- LogWarning (" Secret lookup failed, please make sure libsecret is "
74
- " installed." );
75
- return empty_str;
76
- }
77
71
78
- if (result == nullptr ) {
72
+ if (CheckForError (&error, " lookup " ) || result == nullptr ) {
79
73
return empty_str;
80
74
}
81
75
std::string str_result (result);
@@ -97,10 +91,7 @@ void UserSecureLinuxInternal::SaveUserData(const std::string& app_name,
97
91
/* value1= */ app_name.c_str (),
98
92
/* key2= */ kStorageDomainKey , /* value2= */ domain_.c_str (), nullptr );
99
93
100
- if (error) {
101
- g_error_free (error);
102
- LogWarning (" Secret store failed, please make sure libsecret is installed." );
103
- }
94
+ CheckForError (&error, " store" );
104
95
}
105
96
106
97
void UserSecureLinuxInternal::DeleteUserData (const std::string& app_name) {
@@ -115,10 +106,7 @@ void UserSecureLinuxInternal::DeleteUserData(const std::string& app_name) {
115
106
/* key2= */ kStorageDomainKey ,
116
107
/* value2= */ domain_.c_str (), nullptr );
117
108
118
- if (error) {
119
- g_error_free (error);
120
- LogWarning (" Secret clear failed, please make sure libsecret is installed." );
121
- }
109
+ CheckForError (&error, " clear" );
122
110
}
123
111
124
112
void UserSecureLinuxInternal::DeleteAllData () {
@@ -130,10 +118,20 @@ void UserSecureLinuxInternal::DeleteAllData() {
130
118
/* error= */ &error,
131
119
/* key2= */ kStorageDomainKey ,
132
120
/* value2= */ domain_.c_str (), nullptr );
133
- if (error) {
134
- g_error_free (error);
135
- LogWarning (" Secret clear failed, please make sure libsecret is installed." );
121
+ CheckForError (&error, " clear" );
122
+ }
123
+
124
+ bool UserSecureLinuxInternal::CheckForError (GError** error,
125
+ const char * function_name) {
126
+ if (error == nullptr || *error == nullptr ) return false ;
127
+ if ((*error)->code != known_error_code_) {
128
+ LogWarning (" Secret %s failed. Error %d: %s" , function_name, (*error)->code ,
129
+ (*error)->message );
130
+ known_error_code_ = (*error)->code ;
136
131
}
132
+ g_error_free (*error);
133
+ *error = nullptr ;
134
+ return true ;
137
135
}
138
136
139
137
} // namespace secure
0 commit comments