return update_svc(svcinfo, svc_name, errbuf, errbuflen);
}
-const char *
+/* Return value must be free(3)'d. */
+char *
mh_oauth_cred_fn(const char *svc)
{
- char *result, *result_if_allocated;
-
- char *component = mh_oauth_node_name_for_svc("credential-file", svc);
- result = context_find(component);
- free(component);
-
- if (result == NULL) {
- result = concat("oauth-", svc, NULL);
- result_if_allocated = result;
- } else {
- result_if_allocated = NULL;
- }
-
- if (result[0] != '/') {
- const char *tmp = m_maildir(result);
- free(result_if_allocated);
- result = getcpy(tmp);
- }
-
- return result;
+ char *key = mh_oauth_node_name_for_svc("credential-file", svc);
+ char *value = context_find(key);
+ free(key);
+
+ bool found = value;
+ if (found) {
+ if (*value == '/')
+ return mh_xstrdup(value);
+ } else
+ value = concat("oauth-", svc, NULL);
+
+ const char *md = m_maildir(value);
+ if (!found)
+ free(value);
+
+ return mh_xstrdup(md);
}
#endif