[Libpst-commits] r68 - trunk

Joseph Nahmias jello at alioth.debian.org
Wed Dec 13 22:14:29 CET 2006


Author: jello
Date: 2006-12-13 22:14:28 +0100 (Wed, 13 Dec 2006)
New Revision: 68

Modified:
   trunk/readpst.c
Log:
readpst: rework generation of VCARD name & addresses because rfc2426_escape uses a static buffer.
Thanks to Nigel Horne for the pointer.


Index: trunk/readpst.c
===================================================================
--- trunk/readpst.c	(revision 67)
+++ trunk/readpst.c	(revision 68)
@@ -479,12 +479,25 @@ int main(int argc, char** argv) {
 	    // the specification I am following is (hopefully) RFC2426 vCard Mime Directory Profile
 	    fprintf(f->output, "BEGIN:VCARD\n");
 	    fprintf(f->output, "FN:%s\n", rfc2426_escape(item->contact->fullname));
-	    fprintf(f->output, "N:%s;%s;%s;%s;%s\n",
-		    rfc2426_escape((item->contact->surname==NULL?"":item->contact->surname)),
-		    rfc2426_escape((item->contact->first_name==NULL?"":item->contact->first_name)),
-		    rfc2426_escape((item->contact->middle_name==NULL?"":item->contact->middle_name)),
-		    rfc2426_escape((item->contact->display_name_prefix==NULL?"":item->contact->display_name_prefix)),
-		    rfc2426_escape((item->contact->suffix==NULL?"":item->contact->suffix)));
+
+      // Print name in parts...
+	    fprintf(f->output, "N:");
+      if (item->contact->surname != NULL)
+        fprintf(f->output, "%s", rfc2426_escape(item->contact->surname));
+	    fprintf(f->output, ";");
+      if (item->contact->first_name != NULL)
+	      fprintf(f->output, "%s", rfc2426_escape(item->contact->first_name));
+	    fprintf(f->output, ";");
+      if (item->contact->middle_name != NULL)
+	      fprintf(f->output, "%s", rfc2426_escape(item->contact->middle_name));
+	    fprintf(f->output, ";");
+      if (item->contact->display_name_prefix != NULL)
+	      fprintf(f->output, "%s", rfc2426_escape(item->contact->display_name_prefix));
+	    fprintf(f->output, ";");
+      if (item->contact->suffix != NULL)
+	      fprintf(f->output, "%s", rfc2426_escape(item->contact->suffix));
+	    fprintf(f->output, "\n");
+
 	    if (item->contact->nickname != NULL)
 	      fprintf(f->output, "NICKNAME:%s\n", rfc2426_escape(item->contact->nickname));
 	    if (item->contact->address1 != NULL)
@@ -496,37 +509,76 @@ int main(int argc, char** argv) {
 	    if (item->contact->birthday != NULL)
 	      fprintf(f->output, "BDAY:%s\n", rfc2425_datetime_format(item->contact->birthday));
 	    if (item->contact->home_address != NULL) {
-	      fprintf(f->output, "ADR;TYPE=home:%s;%s;%s;%s;%s;%s;%s\n",
-		      rfc2426_escape((item->contact->home_po_box!=NULL?item->contact->home_po_box:"")),
-		      "", // extended Address
-		      rfc2426_escape((item->contact->home_street!=NULL?item->contact->home_street:"")),
-		      rfc2426_escape((item->contact->home_city!=NULL?item->contact->home_city:"")),
-		      rfc2426_escape((item->contact->home_state!=NULL?item->contact->home_state:"")),
-		      rfc2426_escape((item->contact->home_postal_code!=NULL?item->contact->home_postal_code:"")),
-		      rfc2426_escape((item->contact->home_country!=NULL?item->contact->home_country:"")));
+	      fprintf(f->output, "ADR;TYPE=home:");
+        if (item->contact->home_po_box != NULL)
+		      fprintf(f->output, "%s", rfc2426_escape(item->contact->home_po_box));
+	      fprintf(f->output, ";");
+		      // extended Address
+	      fprintf(f->output, ";");
+        if (item->contact->home_street != NULL)
+		      fprintf(f->output, "%s", rfc2426_escape(item->contact->home_street));
+	      fprintf(f->output, ";");
+        if (item->contact->home_city != NULL)
+		      fprintf(f->output, "%s", rfc2426_escape(item->contact->home_city));
+	      fprintf(f->output, ";");
+        if (item->contact->home_state != NULL)
+		      fprintf(f->output, "%s", rfc2426_escape(item->contact->home_state));
+	      fprintf(f->output, ";");
+        if (item->contact->home_postal_code != NULL)
+		      fprintf(f->output, "%s", rfc2426_escape(item->contact->home_postal_code));
+	      fprintf(f->output, ";");
+        if (item->contact->home_country != NULL)
+		      fprintf(f->output, "%s", rfc2426_escape(item->contact->home_country));
+	      fprintf(f->output, "\n");
 	      fprintf(f->output, "LABEL;TYPE=home:%s\n", rfc2426_escape(item->contact->home_address));
 	    }
 	    if (item->contact->business_address != NULL) {
-	      fprintf(f->output, "ADR;TYPE=work:%s;%s;%s;%s;%s;%s;%s\n",
-		      rfc2426_escape((item->contact->business_po_box!=NULL?item->contact->business_po_box:"")),
-		      "", // extended Address
-		      rfc2426_escape((item->contact->business_street!=NULL?item->contact->business_street:"")),
-		      rfc2426_escape((item->contact->business_city!=NULL?item->contact->business_city:"")),
-		      rfc2426_escape((item->contact->business_state!=NULL?item->contact->business_state:"")),
-		      rfc2426_escape((item->contact->business_postal_code!=NULL?item->contact->business_postal_code:"")),
-		      rfc2426_escape((item->contact->business_country!=NULL?item->contact->business_country:"")));
+	      fprintf(f->output, "ADR;TYPE=work:");
+        if (item->contact->business_po_box != NULL)
+		      fprintf(f->output, "%s", rfc2426_escape(item->contact->business_po_box));
+	      fprintf(f->output, ";");
+		      // extended Address
+	      fprintf(f->output, ";");
+        if (item->contact->business_street != NULL)
+		      fprintf(f->output, "%s", rfc2426_escape(item->contact->business_street));
+	      fprintf(f->output, ";");
+        if (item->contact->business_city != NULL)
+		      fprintf(f->output, "%s", rfc2426_escape(item->contact->business_city));
+	      fprintf(f->output, ";");
+        if (item->contact->business_state != NULL)
+		      fprintf(f->output, "%s", rfc2426_escape(item->contact->business_state));
+	      fprintf(f->output, ";");
+        if (item->contact->business_postal_code != NULL)
+		      fprintf(f->output, "%s", rfc2426_escape(item->contact->business_postal_code));
+	      fprintf(f->output, ";");
+        if (item->contact->business_country != NULL)
+		      fprintf(f->output, "%s", rfc2426_escape(item->contact->business_country));
+	      fprintf(f->output, "\n");
 	      fprintf(f->output, "LABEL;TYPE=work:%s\n", rfc2426_escape(item->contact->business_address));
 	    }
 	    if (item->contact->other_address != NULL) {
-	      fprintf(f->output, "ADR;TYPE=postal:%s;%s;%s;%s;%s;%s;%s\n",
-		      rfc2426_escape((item->contact->other_po_box!=NULL?item->contact->business_po_box:"")),
-		      "", // extended Address
-		      rfc2426_escape((item->contact->other_street!=NULL?item->contact->other_street:"")),
-		      rfc2426_escape((item->contact->other_city!=NULL?item->contact->other_city:"")),
-		      rfc2426_escape((item->contact->other_state!=NULL?item->contact->other_state:"")),
-		      rfc2426_escape((item->contact->other_postal_code!=NULL?item->contact->other_postal_code:"")),
-		      rfc2426_escape((item->contact->other_country!=NULL?item->contact->other_country:"")));
-	      fprintf(f->output, "ADR;TYPE=postal:%s\n", rfc2426_escape(item->contact->other_address));
+	      fprintf(f->output, "ADR;TYPE=postal:");
+        if (item->contact->other_po_box != NULL)
+		      fprintf(f->output, "%s", rfc2426_escape(item->contact->other_po_box));
+	      fprintf(f->output, ";");
+		      // extended Address
+	      fprintf(f->output, ";");
+        if (item->contact->other_street != NULL)
+		      fprintf(f->output, "%s", rfc2426_escape(item->contact->other_street));
+	      fprintf(f->output, ";");
+        if (item->contact->other_city != NULL)
+		      fprintf(f->output, "%s", rfc2426_escape(item->contact->other_city));
+	      fprintf(f->output, ";");
+        if (item->contact->other_state != NULL)
+		      fprintf(f->output, "%s", rfc2426_escape(item->contact->other_state));
+	      fprintf(f->output, ";");
+        if (item->contact->other_postal_code != NULL)
+		      fprintf(f->output, "%s", rfc2426_escape(item->contact->other_postal_code));
+	      fprintf(f->output, ";");
+        if (item->contact->other_country != NULL)
+		      fprintf(f->output, "%s", rfc2426_escape(item->contact->other_country));
+	      fprintf(f->output, "\n");
+	      fprintf(f->output, "LABEL;TYPE=postal:%s\n", rfc2426_escape(item->contact->other_address));
 	    }
 	    if (item->contact->business_fax != NULL)
 	      fprintf(f->output, "TEL;TYPE=work,fax:%s\n", rfc2426_escape(item->contact->business_fax));



More information about the libpst-commits mailing list