* update the guile-bindings and README a bit

This commit is contained in:
Dirk-Jan C. Binnema
2011-07-17 14:37:12 +03:00
parent 5695077514
commit 8b824da539
4 changed files with 132 additions and 32 deletions

View File

@ -76,26 +76,21 @@ SCM_DEFINE (msg_make_from_file, "mu:msg:make-from-file", 1, 0, 0,
#undef FUNC_NAME
static SCM
scm_from_string_or_null (const char *str)
{
return str ? scm_from_utf8_string (str) : SCM_UNSPECIFIED;
}
static SCM
msg_str_field (SCM msg_smob, MuMsgFieldId mfid)
{
const char *val, *endptr;
MuMsgWrapper *msgwrap;
msgwrap = (MuMsgWrapper*) SCM_CDR(msg_smob);
val = mu_msg_get_field_string(msgwrap->_msg, mfid);
if (val && !g_utf8_validate (val, -1, &endptr)) {
//return scm_from_utf8_string("<invalid>");
gchar *part;
SCM scm;
part = g_strndup (val, (endptr-val));
scm = scm_from_utf8_string(part);
g_free (part);
return scm;
} else
return val ? scm_from_utf8_string(val) : SCM_UNSPECIFIED;
return scm_from_string_or_null (
mu_msg_get_field_string(msgwrap->_msg, mfid));
}
static gint64
@ -240,9 +235,8 @@ contacts_to_list (MuMsgContact *contact, EachContactData *ecdata)
item = scm_list_1
(scm_list_2 (
name ? scm_from_utf8_string(name) : SCM_UNSPECIFIED,
addr ? scm_from_utf8_string(addr) : SCM_UNSPECIFIED));
scm_from_string_or_null(name),
scm_from_string_or_null(addr)));
ecdata->lst = scm_append_x (scm_list_2(ecdata->lst, item));
}
}
@ -357,7 +351,7 @@ SCM_DEFINE (msg_body, "mu:msg:body", 1, 1, 0,
else
val = mu_msg_get_body_text(msgwrap->_msg);
return val ? scm_from_utf8_string (val) : SCM_UNSPECIFIED;
return scm_from_string_or_null (val);
}
#undef FUNC_NAME
@ -377,7 +371,7 @@ SCM_DEFINE (msg_header, "mu:msg:header", 1, 1, 0,
header = scm_to_utf8_string (HEADER);
val = mu_msg_get_header(msgwrap->_msg, header);
return val ? scm_from_utf8_string(val) : SCM_UNDEFINED;
return val ? scm_from_string_or_null(val) : SCM_UNDEFINED;
}
#undef FUNC_NAME
@ -394,7 +388,8 @@ msg_string_list_field (SCM msg_smob, MuMsgFieldId mfid)
for (scmlst = SCM_EOL; lst;
lst = g_slist_next(lst)) {
SCM item;
item = scm_list_1 (scm_from_utf8_string((const char*)lst->data));
item = scm_list_1
(scm_from_string_or_null((const char*)lst->data));
scmlst = scm_append_x (scm_list_2(scmlst, item));
}

View File

@ -34,7 +34,7 @@ get_query (void)
err = NULL;
query = mu_query_new (mu_runtime_path(MU_RUNTIME_PATH_XAPIANDB), &err);
if (err) {
mu_guile_g_error ("<internal>", err);
mu_guile_g_error ("<internal error>", err);
g_error_free (err);
return NULL;
}
@ -53,7 +53,7 @@ get_query_iter (MuQuery *query, const char* expr)
iter = mu_query_run (query, expr,
FALSE, MU_MSG_FIELD_ID_NONE, TRUE, &err);
if (err) {
mu_guile_g_error ("<internal>", err);
mu_guile_g_error ("<internal error>", err);
g_error_free (err);
return NULL;
}
@ -62,7 +62,7 @@ get_query_iter (MuQuery *query, const char* expr)
}
SCM_DEFINE (store_foreach, "mu:store:foreach", 1, 1, 0,
SCM_DEFINE (store_foreach, "mu:store:for-each", 1, 1, 0,
(SCM FUNC, SCM EXPR),
"Call FUNC for each message in the store, or, if EXPR is specified, "
"for each message matching EXPR.\n")