From b23dbcc068e12130fdf013b977856fabfbb86ff1 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Fri, 17 Oct 2008 05:26:25 +0000 Subject: ** Fix for bug #511918 2008-10-17 Milan Crha ** Fix for bug #511918 * tools/evolution-addressbook-export-list-cards.c: (struct _EContactCSVFieldData), (csv_field_data[]), (e_contact_csv_get_data_type), (e_contact_csv_get): Use TRUE/FALSE texts for boolean values and do not free returned value for them, otherwise it crashes. svn path=/trunk/; revision=36632 --- addressbook/ChangeLog | 10 ++ .../evolution-addressbook-export-list-cards.c | 181 ++++++++++----------- 2 files changed, 95 insertions(+), 96 deletions(-) (limited to 'addressbook') diff --git a/addressbook/ChangeLog b/addressbook/ChangeLog index c4d5395677..46f6de9bd2 100644 --- a/addressbook/ChangeLog +++ b/addressbook/ChangeLog @@ -1,3 +1,13 @@ +2008-10-17 Milan Crha + + ** Fix for bug #511918 + + * tools/evolution-addressbook-export-list-cards.c: + (struct _EContactCSVFieldData), (csv_field_data[]), + (e_contact_csv_get_data_type), (e_contact_csv_get): + Use TRUE/FALSE texts for boolean values and do not + free returned value for them, otherwise it crashes. + 2008-10-14 Sankar P License Changes diff --git a/addressbook/tools/evolution-addressbook-export-list-cards.c b/addressbook/tools/evolution-addressbook-export-list-cards.c index 285f1dc9bc..4b98bc77ac 100644 --- a/addressbook/tools/evolution-addressbook-export-list-cards.c +++ b/addressbook/tools/evolution-addressbook-export-list-cards.c @@ -139,115 +139,96 @@ enum _EContactFieldCSV E_CONTACT_CSV_LAST }; +typedef enum { + DT_STRING, + DT_BOOLEAN +} EContactCSVDataType; + struct _EContactCSVFieldData { gint csv_field; gint contact_field; gchar *csv_name; + EContactCSVDataType data_type; }; #define NOMAP -1 static EContactCSVFieldData csv_field_data[] = { - {E_CONTACT_CSV_FILE_AS, E_CONTACT_FILE_AS, ""}, - {E_CONTACT_CSV_FULL_NAME, E_CONTACT_CSV_FULL_NAME, ""}, - {E_CONTACT_CSV_EMAIL_1, E_CONTACT_EMAIL_1, ""}, - {E_CONTACT_CSV_EMAIL_2, E_CONTACT_EMAIL_2, ""}, - {E_CONTACT_CSV_EMAIL_3, E_CONTACT_EMAIL_3, ""}, - {E_CONTACT_CSV_EMAIL_4, E_CONTACT_EMAIL_4, ""}, - {E_CONTACT_CSV_PHONE_PRIMARY, E_CONTACT_PHONE_PRIMARY, - ""}, - {E_CONTACT_CSV_PHONE_ASSISTANT, - E_CONTACT_PHONE_ASSISTANT, ""}, - {E_CONTACT_CSV_PHONE_BUSINESS, - E_CONTACT_PHONE_BUSINESS, ""}, - {E_CONTACT_CSV_PHONE_CALLBACK, - E_CONTACT_PHONE_CALLBACK, ""}, - {E_CONTACT_CSV_PHONE_COMPANY, E_CONTACT_PHONE_COMPANY, - ""}, - {E_CONTACT_CSV_PHONE_HOME, E_CONTACT_PHONE_HOME, ""}, - {E_CONTACT_CSV_ORG, E_CONTACT_ORG, ""}, + {E_CONTACT_CSV_FILE_AS, E_CONTACT_FILE_AS, "", DT_STRING}, + {E_CONTACT_CSV_FULL_NAME, E_CONTACT_CSV_FULL_NAME, "", DT_STRING}, + {E_CONTACT_CSV_EMAIL_1, E_CONTACT_EMAIL_1, "", DT_STRING}, + {E_CONTACT_CSV_EMAIL_2, E_CONTACT_EMAIL_2, "", DT_STRING}, + {E_CONTACT_CSV_EMAIL_3, E_CONTACT_EMAIL_3, "", DT_STRING}, + {E_CONTACT_CSV_EMAIL_4, E_CONTACT_EMAIL_4, "", DT_STRING}, + {E_CONTACT_CSV_PHONE_PRIMARY, E_CONTACT_PHONE_PRIMARY, "", DT_STRING}, + {E_CONTACT_CSV_PHONE_ASSISTANT, E_CONTACT_PHONE_ASSISTANT, "", DT_STRING}, + {E_CONTACT_CSV_PHONE_BUSINESS, E_CONTACT_PHONE_BUSINESS, "", DT_STRING}, + {E_CONTACT_CSV_PHONE_CALLBACK, E_CONTACT_PHONE_CALLBACK, "", DT_STRING}, + {E_CONTACT_CSV_PHONE_COMPANY, E_CONTACT_PHONE_COMPANY, "", DT_STRING}, + {E_CONTACT_CSV_PHONE_HOME, E_CONTACT_PHONE_HOME, "", DT_STRING}, + {E_CONTACT_CSV_ORG, E_CONTACT_ORG, "", DT_STRING}, /*E_CONTACT_CSV_ADDRESS_BUSINESS, */ - {E_CONTACT_CSV_ADDRESS_BUSINESS_STREET, NOMAP, - "Business Address"}, - {E_CONTACT_CSV_ADDRESS_BUSINESS_EXT, NOMAP, - "Business Address2"}, - {E_CONTACT_CSV_ADDRESS_BUSINESS_CITY, NOMAP, - "Business Address City"}, - {E_CONTACT_CSV_ADDRESS_BUSINESS_REGION, NOMAP, - "Business Address State"}, - {E_CONTACT_CSV_ADDRESS_BUSINESS_POSTCODE, NOMAP, - "Business Address PostCode"}, - {E_CONTACT_CSV_ADDRESS_BUSINESS_COUNTRY, NOMAP, - "Business Address Country"}, + {E_CONTACT_CSV_ADDRESS_BUSINESS_STREET, NOMAP, "Business Address", DT_STRING}, + {E_CONTACT_CSV_ADDRESS_BUSINESS_EXT, NOMAP, "Business Address2", DT_STRING}, + {E_CONTACT_CSV_ADDRESS_BUSINESS_CITY, NOMAP, "Business Address City", DT_STRING}, + {E_CONTACT_CSV_ADDRESS_BUSINESS_REGION, NOMAP, "Business Address State", DT_STRING}, + {E_CONTACT_CSV_ADDRESS_BUSINESS_POSTCODE, NOMAP, "Business Address PostCode", DT_STRING}, + {E_CONTACT_CSV_ADDRESS_BUSINESS_COUNTRY, NOMAP, "Business Address Country", DT_STRING}, /*E_CONTACT_CSV_ADDRESS_HOME, */ - {E_CONTACT_CSV_ADDRESS_HOME_STREET, NOMAP, "Home Address"}, - {E_CONTACT_CSV_ADDRESS_HOME_EXT, NOMAP, "Home Address2"}, - {E_CONTACT_CSV_ADDRESS_HOME_CITY, NOMAP, "Home Address City"}, - {E_CONTACT_CSV_ADDRESS_HOME_REGION, NOMAP, - "Home Address State"}, - {E_CONTACT_CSV_ADDRESS_HOME_POSTCODE, NOMAP, - "Home Address PostCode"}, - {E_CONTACT_CSV_ADDRESS_HOME_COUNTRY, NOMAP, - "Home Address Country"}, - {E_CONTACT_CSV_PHONE_MOBILE, E_CONTACT_PHONE_MOBILE, - ""}, - {E_CONTACT_CSV_PHONE_CAR, E_CONTACT_PHONE_CAR, ""}, - {E_CONTACT_CSV_PHONE_BUSINESS_FAX, - E_CONTACT_PHONE_BUSINESS_FAX, ""}, - {E_CONTACT_CSV_PHONE_HOME_FAX, - E_CONTACT_PHONE_HOME_FAX, ""}, - {E_CONTACT_CSV_PHONE_BUSINESS_2, - E_CONTACT_PHONE_BUSINESS_2, ""}, - {E_CONTACT_CSV_PHONE_HOME_2, E_CONTACT_PHONE_HOME_2, - ""}, - {E_CONTACT_CSV_PHONE_ISDN, E_CONTACT_PHONE_ISDN, ""}, - {E_CONTACT_CSV_PHONE_OTHER, E_CONTACT_PHONE_OTHER, ""}, - {E_CONTACT_CSV_PHONE_OTHER_FAX, - E_CONTACT_PHONE_OTHER_FAX, ""}, - {E_CONTACT_CSV_PHONE_PAGER, E_CONTACT_PHONE_PAGER, ""}, - {E_CONTACT_CSV_PHONE_RADIO, E_CONTACT_PHONE_RADIO, ""}, - {E_CONTACT_CSV_PHONE_TELEX, E_CONTACT_PHONE_TELEX, ""}, - {E_CONTACT_CSV_PHONE_TTYTDD, E_CONTACT_PHONE_TTYTDD, - ""}, + {E_CONTACT_CSV_ADDRESS_HOME_STREET, NOMAP, "Home Address", DT_STRING}, + {E_CONTACT_CSV_ADDRESS_HOME_EXT, NOMAP, "Home Address2", DT_STRING}, + {E_CONTACT_CSV_ADDRESS_HOME_CITY, NOMAP, "Home Address City", DT_STRING}, + {E_CONTACT_CSV_ADDRESS_HOME_REGION, NOMAP, "Home Address State", DT_STRING}, + {E_CONTACT_CSV_ADDRESS_HOME_POSTCODE, NOMAP, "Home Address PostCode", DT_STRING}, + {E_CONTACT_CSV_ADDRESS_HOME_COUNTRY, NOMAP, "Home Address Country", DT_STRING}, + {E_CONTACT_CSV_PHONE_MOBILE, E_CONTACT_PHONE_MOBILE, "", DT_STRING}, + {E_CONTACT_CSV_PHONE_CAR, E_CONTACT_PHONE_CAR, "", DT_STRING}, + {E_CONTACT_CSV_PHONE_BUSINESS_FAX, E_CONTACT_PHONE_BUSINESS_FAX, "", DT_STRING}, + {E_CONTACT_CSV_PHONE_HOME_FAX, E_CONTACT_PHONE_HOME_FAX, "", DT_STRING}, + {E_CONTACT_CSV_PHONE_BUSINESS_2, E_CONTACT_PHONE_BUSINESS_2, "", DT_STRING}, + {E_CONTACT_CSV_PHONE_HOME_2, E_CONTACT_PHONE_HOME_2, "", DT_STRING}, + {E_CONTACT_CSV_PHONE_ISDN, E_CONTACT_PHONE_ISDN, "", DT_STRING}, + {E_CONTACT_CSV_PHONE_OTHER, E_CONTACT_PHONE_OTHER, "", DT_STRING}, + {E_CONTACT_CSV_PHONE_OTHER_FAX, E_CONTACT_PHONE_OTHER_FAX, "", DT_STRING}, + {E_CONTACT_CSV_PHONE_PAGER, E_CONTACT_PHONE_PAGER, "", DT_STRING}, + {E_CONTACT_CSV_PHONE_RADIO, E_CONTACT_PHONE_RADIO, "", DT_STRING}, + {E_CONTACT_CSV_PHONE_TELEX, E_CONTACT_PHONE_TELEX, "", DT_STRING}, + {E_CONTACT_CSV_PHONE_TTYTDD, E_CONTACT_PHONE_TTYTDD, "", DT_STRING}, /*E_CONTACT_CSV_ADDRESS_OTHER, */ - {E_CONTACT_CSV_ADDRESS_OTHER_STREET, NOMAP, "Other Address"}, - {E_CONTACT_CSV_ADDRESS_OTHER_EXT, NOMAP, "Other Address2"}, - {E_CONTACT_CSV_ADDRESS_OTHER_CITY, NOMAP, - "Other Address City"}, - {E_CONTACT_CSV_ADDRESS_OTHER_REGION, NOMAP, - "Other Address State"}, - {E_CONTACT_CSV_ADDRESS_OTHER_POSTCODE, NOMAP, - "Other Address PostCode"}, - {E_CONTACT_CSV_ADDRESS_OTHER_COUNTRY, NOMAP, - "Other Address Country"}, - {E_CONTACT_CSV_HOMEPAGE_URL, E_CONTACT_HOMEPAGE_URL, ""}, - {E_CONTACT_CSV_ORG_UNIT, E_CONTACT_ORG_UNIT, ""}, - {E_CONTACT_CSV_OFFICE, E_CONTACT_OFFICE, ""}, - {E_CONTACT_CSV_TITLE, E_CONTACT_TITLE, ""}, - {E_CONTACT_CSV_ROLE, E_CONTACT_ROLE, ""}, - {E_CONTACT_CSV_MANAGER, E_CONTACT_MANAGER, ""}, - {E_CONTACT_CSV_ASSISTANT, E_CONTACT_ASSISTANT, ""}, - {E_CONTACT_CSV_NICKNAME, E_CONTACT_NICKNAME, ""}, - {E_CONTACT_CSV_SPOUSE, E_CONTACT_SPOUSE, ""}, - {E_CONTACT_CSV_NOTE, E_CONTACT_NOTE, ""}, - {E_CONTACT_CSV_CALENDAR_URI, E_CONTACT_CALENDAR_URI, ""}, - {E_CONTACT_CSV_FREEBUSY_URL, E_CONTACT_FREEBUSY_URL, ""}, + {E_CONTACT_CSV_ADDRESS_OTHER_STREET, NOMAP, "Other Address", DT_STRING}, + {E_CONTACT_CSV_ADDRESS_OTHER_EXT, NOMAP, "Other Address2", DT_STRING}, + {E_CONTACT_CSV_ADDRESS_OTHER_CITY, NOMAP, "Other Address City", DT_STRING}, + {E_CONTACT_CSV_ADDRESS_OTHER_REGION, NOMAP, "Other Address State", DT_STRING}, + {E_CONTACT_CSV_ADDRESS_OTHER_POSTCODE, NOMAP, "Other Address PostCode", DT_STRING}, + {E_CONTACT_CSV_ADDRESS_OTHER_COUNTRY, NOMAP, "Other Address Country", DT_STRING}, + {E_CONTACT_CSV_HOMEPAGE_URL, E_CONTACT_HOMEPAGE_URL, "", DT_STRING}, + {E_CONTACT_CSV_ORG_UNIT, E_CONTACT_ORG_UNIT, "", DT_STRING}, + {E_CONTACT_CSV_OFFICE, E_CONTACT_OFFICE, "", DT_STRING}, + {E_CONTACT_CSV_TITLE, E_CONTACT_TITLE, "", DT_STRING}, + {E_CONTACT_CSV_ROLE, E_CONTACT_ROLE, "", DT_STRING}, + {E_CONTACT_CSV_MANAGER, E_CONTACT_MANAGER, "", DT_STRING}, + {E_CONTACT_CSV_ASSISTANT, E_CONTACT_ASSISTANT, "", DT_STRING}, + {E_CONTACT_CSV_NICKNAME, E_CONTACT_NICKNAME, "", DT_STRING}, + {E_CONTACT_CSV_SPOUSE, E_CONTACT_SPOUSE, "", DT_STRING}, + {E_CONTACT_CSV_NOTE, E_CONTACT_NOTE, "", DT_STRING}, + {E_CONTACT_CSV_CALENDAR_URI, E_CONTACT_CALENDAR_URI, "", DT_STRING}, + {E_CONTACT_CSV_FREEBUSY_URL, E_CONTACT_FREEBUSY_URL, "", DT_STRING}, /*E_CONTACT_ANNIVERSARY, */ - {E_CONTACT_CSV_ANNIVERSARY_YEAR, NOMAP, "Anniversary Year"}, - {E_CONTACT_CSV_ANNIVERSARY_MONTH, NOMAP, "Anniversary Month"}, - {E_CONTACT_CSV_ANNIVERSARY_DAY, NOMAP, "Anniversary Day"}, + {E_CONTACT_CSV_ANNIVERSARY_YEAR, NOMAP, "Anniversary Year", DT_STRING}, + {E_CONTACT_CSV_ANNIVERSARY_MONTH, NOMAP, "Anniversary Month", DT_STRING}, + {E_CONTACT_CSV_ANNIVERSARY_DAY, NOMAP, "Anniversary Day", DT_STRING}, /*E_CONTACT_BIRTH_DATE, */ - {E_CONTACT_CSV_BIRTH_DATE_YEAR, NOMAP, "Birth Year"}, - {E_CONTACT_CSV_BIRTH_DATE_MONTH, NOMAP, "Birth Month"}, - {E_CONTACT_CSV_BIRTH_DATE_DAY, NOMAP, "Birth Day"}, - {E_CONTACT_CSV_MAILER, E_CONTACT_MAILER, ""}, - {E_CONTACT_CSV_NAME_OR_ORG, E_CONTACT_NAME_OR_ORG, ""}, - {E_CONTACT_CSV_CATEGORIES, E_CONTACT_CATEGORIES, ""}, - {E_CONTACT_CSV_FAMILY_NAME, E_CONTACT_FAMILY_NAME, ""}, - {E_CONTACT_CSV_GIVEN_NAME, E_CONTACT_GIVEN_NAME, ""}, - {E_CONTACT_CSV_WANTS_HTML, E_CONTACT_WANTS_HTML, ""}, - {E_CONTACT_CSV_IS_LIST, E_CONTACT_IS_LIST, ""}, - {E_CONTACT_CSV_LAST, NOMAP, ""} + {E_CONTACT_CSV_BIRTH_DATE_YEAR, NOMAP, "Birth Year", DT_STRING}, + {E_CONTACT_CSV_BIRTH_DATE_MONTH, NOMAP, "Birth Month", DT_STRING}, + {E_CONTACT_CSV_BIRTH_DATE_DAY, NOMAP, "Birth Day", DT_STRING}, + {E_CONTACT_CSV_MAILER, E_CONTACT_MAILER, "", DT_STRING}, + {E_CONTACT_CSV_NAME_OR_ORG, E_CONTACT_NAME_OR_ORG, "", DT_STRING}, + {E_CONTACT_CSV_CATEGORIES, E_CONTACT_CATEGORIES, "", DT_STRING}, + {E_CONTACT_CSV_FAMILY_NAME, E_CONTACT_FAMILY_NAME, "", DT_STRING}, + {E_CONTACT_CSV_GIVEN_NAME, E_CONTACT_GIVEN_NAME, "", DT_STRING}, + {E_CONTACT_CSV_WANTS_HTML, E_CONTACT_WANTS_HTML, "", DT_BOOLEAN}, + {E_CONTACT_CSV_IS_LIST, E_CONTACT_IS_LIST, "", DT_BOOLEAN}, + {E_CONTACT_CSV_LAST, NOMAP, "", DT_STRING} }; @@ -276,6 +257,12 @@ e_contact_csv_get_contact_field (EContactFieldCSV csv_field) return csv_field_data[csv_field].contact_field; } +static EContactCSVDataType +e_contact_csv_get_data_type (EContactFieldCSV csv_field) +{ + return csv_field_data[csv_field].data_type; +} + gchar * e_contact_csv_get_name (EContactFieldCSV csv_field) { @@ -310,8 +297,10 @@ e_contact_csv_get (EContact * contact, EContactFieldCSV csv_field) if (contact_field != NOMAP) { field_value = e_contact_get (contact, contact_field); + if (e_contact_csv_get_data_type (csv_field) == DT_BOOLEAN) { + field_value = g_strdup ((GPOINTER_TO_INT (field_value)) ? "TRUE" : "FALSE"); + } } else { - switch (csv_field) { case E_CONTACT_CSV_ADDRESS_HOME_STREET: delivery_address = e_contact_get (contact, E_CONTACT_ADDRESS_HOME); -- cgit v1.2.3