* fix CSV quoting (fields with commas)

This commit is contained in:
djcb
2013-05-27 04:23:49 -07:00
parent f4d3eb2d7a
commit c50c0695e4
3 changed files with 45 additions and 5 deletions

View File

@ -231,6 +231,38 @@ each_contact_org_contact (const char *email, const char *name)
name, email);
}
static void
print_csv_field (const char *str)
{
char *s;
if (!str)
return;
s = mu_str_replace (str, "\"", "\"\"");
if (strchr (s, ','))
mu_util_print_encoded ("\"%s\"", s);
else
mu_util_print_encoded ("%s", s);
g_free (s);
}
static void
each_contact_csv (const char *email, const char *name)
{
print_csv_field (name);
mu_util_print_encoded (",");
print_csv_field (email);
mu_util_print_encoded ("\n");
}
static void
print_plain (const char *email, const char *name, gboolean color)
{
@ -259,6 +291,7 @@ struct _ECData {
typedef struct _ECData ECData;
static void
each_contact (const char *email, const char *name, gboolean personal,
time_t tstamp, ECData *ecdata)
@ -287,7 +320,7 @@ each_contact (const char *email, const char *name, gboolean personal,
each_contact_bbdb (email, name, tstamp);
break;
case MU_CONFIG_FORMAT_CSV:
mu_util_print_encoded ("%s,%s\n", name ? name : "", email);
each_contact_csv (email, name);
break;
default:
print_plain (email, name, ecdata->color);