dmalcolm be5790
--- evolution-2.5.4/addressbook/conduit/address-conduit.c.fix-conduits	2005-12-08 03:15:02.000000000 -0500
dmalcolm be5790
+++ evolution-2.5.4/addressbook/conduit/address-conduit.c	2006-01-10 19:33:44.000000000 -0500
dmalcolm be5790
@@ -462,14 +462,19 @@
dmalcolm be5790
 {
dmalcolm be5790
 	static char buff[ 4096 ];
dmalcolm be5790
 	struct Address addr;
dmalcolm be5790
+	pi_buffer_t piBuf;
dmalcolm be5790
 
dmalcolm be5790
 	if (remote == NULL) {
dmalcolm be5790
 		sprintf (buff, "[NULL]");
dmalcolm be5790
 		return buff;
dmalcolm be5790
 	}
dmalcolm be5790
 
dmalcolm be5790
+	piBuf.data = remote->record;
dmalcolm be5790
+	piBuf.allocated = remote->length;
dmalcolm be5790
+	piBuf.used = remote->length;
dmalcolm be5790
+
dmalcolm be5790
 	memset (&addr, 0, sizeof (struct Address));
dmalcolm be5790
-	unpack_Address (&addr, remote->record, remote->length);
dmalcolm be5790
+	unpack_Address (&addr, &piBuf, address_v1);
dmalcolm be5790
 
dmalcolm be5790
 	g_snprintf (buff, 4096, "['%s' '%s' '%s']",
dmalcolm be5790
 		    addr.entry[entryLastname] ?
dmalcolm be5790
@@ -791,7 +796,8 @@
dmalcolm be5790
 			      EAddrConduitContext *ctxt)
dmalcolm be5790
 {
dmalcolm be5790
 	GnomePilotRecord p;
dmalcolm be5790
-	static char record[0xffff];
dmalcolm be5790
+	static unsigned char record[0xffff];
dmalcolm be5790
+	pi_buffer_t piBuf;
dmalcolm be5790
 	
dmalcolm be5790
 	g_assert (local->addr != NULL );
dmalcolm be5790
 	
dmalcolm be5790
@@ -803,9 +809,17 @@
dmalcolm be5790
 	p.archived = local->local.archived;
dmalcolm be5790
 	p.secret = local->local.secret;
dmalcolm be5790
 
dmalcolm be5790
+	memset (&piBuf, 0, sizeof (piBuf));
dmalcolm be5790
+	memset (record, 0, sizeof (record));
dmalcolm be5790
+	pack_Address (local->addr, &piBuf, address_v1);
dmalcolm be5790
+
dmalcolm be5790
 	/* Generate pilot record structure */
dmalcolm be5790
+	if (piBuf.used > 0)
dmalcolm be5790
+		memcpy (record, piBuf.data, piBuf.used);
dmalcolm be5790
 	p.record = record;
dmalcolm be5790
-	p.length = pack_Address (local->addr, p.record, 0xffff);
dmalcolm be5790
+	p.length = piBuf.used;
dmalcolm be5790
+	if (piBuf.data)
dmalcolm be5790
+		free (piBuf.data);
dmalcolm be5790
 
dmalcolm be5790
 	return p;	
dmalcolm be5790
 }
dmalcolm be5790
@@ -834,16 +848,16 @@
dmalcolm be5790
 	 */
dmalcolm be5790
 	if (local->local.ID != 0) {
dmalcolm be5790
 		struct Address addr;
dmalcolm be5790
-		char record[0xffff];
dmalcolm be5790
+		pi_buffer_t *buffer = pi_buffer_new (0xffff);
dmalcolm be5790
 		int cat = 0;
dmalcolm be5790
 		
dmalcolm be5790
 		if (dlp_ReadRecordById (ctxt->dbi->pilot_socket, 
dmalcolm be5790
 					ctxt->dbi->db_handle,
dmalcolm be5790
-					local->local.ID, &record, 
dmalcolm be5790
-					NULL, NULL, NULL, &cat) > 0) {
dmalcolm be5790
+					local->local.ID, buffer, 
dmalcolm be5790
+					NULL, NULL, &cat) > 0) {
dmalcolm be5790
 			local->local.category = cat;
dmalcolm be5790
 			memset (&addr, 0, sizeof (struct Address));
dmalcolm be5790
-			unpack_Address (&addr, record, 0xffff);
dmalcolm be5790
+			unpack_Address (&addr, buffer, address_v1);
dmalcolm be5790
 			for (i = 0; i < 5; i++) {
dmalcolm be5790
 				if (addr.entry[entryPhone1 + i])
dmalcolm be5790
 					local->addr->entry[entryPhone1 + i] = 
dmalcolm be5790
@@ -858,6 +872,8 @@
dmalcolm be5790
 			}
dmalcolm be5790
 			free_Address (&addr);
dmalcolm be5790
 		}
dmalcolm be5790
+
dmalcolm be5790
+		pi_buffer_free (buffer);
dmalcolm be5790
 	}
dmalcolm be5790
 
dmalcolm be5790
 	local->addr->entry[entryFirstname] = e_pilot_utf8_to_pchar (e_contact_get_const (contact, E_CONTACT_GIVEN_NAME));
dmalcolm be5790
@@ -1019,10 +1035,16 @@
dmalcolm be5790
 	EContactField next_mail, next_home, next_work, next_fax;
dmalcolm be5790
 	EContactField next_other, next_main, next_pager, next_mobile;
dmalcolm be5790
 	int i;
dmalcolm be5790
+	pi_buffer_t piBuf;
dmalcolm be5790
 
dmalcolm be5790
 	g_return_val_if_fail(remote!=NULL,NULL);
dmalcolm be5790
 	memset (&address, 0, sizeof (struct Address));
dmalcolm be5790
-	unpack_Address (&address, remote->record, remote->length);
dmalcolm be5790
+
dmalcolm be5790
+	piBuf.data = remote->record;
dmalcolm be5790
+	piBuf.allocated = remote->length;
dmalcolm be5790
+	piBuf.used = remote->length;
dmalcolm be5790
+
dmalcolm be5790
+	unpack_Address (&address, &piBuf, address_v1);
dmalcolm be5790
 
dmalcolm be5790
 	if (in_contact == NULL)
dmalcolm be5790
 		contact = e_contact_new ();
dmalcolm be5790
@@ -1212,7 +1234,7 @@
dmalcolm be5790
 	EBookQuery *query;
dmalcolm be5790
     	GList *l;
dmalcolm be5790
 	int len;
dmalcolm be5790
-	unsigned char *buf;
dmalcolm be5790
+	pi_buffer_t *buffer;
dmalcolm be5790
 	char *filename;
dmalcolm be5790
 	char *change_id;
dmalcolm be5790
 	char *auth;
dmalcolm be5790
@@ -1302,9 +1324,9 @@
dmalcolm be5790
   	gnome_pilot_conduit_sync_abs_set_num_updated_local_records (abs_conduit, mod_records);
dmalcolm be5790
   	gnome_pilot_conduit_sync_abs_set_num_deleted_local_records(abs_conduit, del_records);
dmalcolm be5790
 
dmalcolm be5790
-	buf = (unsigned char*)g_malloc (0xffff);
dmalcolm be5790
+	buffer = pi_buffer_new (0xffff);
dmalcolm be5790
 	len = dlp_ReadAppBlock (dbi->pilot_socket, dbi->db_handle, 0,
dmalcolm be5790
-			      (unsigned char *)buf, 0xffff);
dmalcolm be5790
+				-1, buffer);
dmalcolm be5790
 	
dmalcolm be5790
 	if (len < 0) {
dmalcolm be5790
 		WARN (_("Could not read pilot's Address application block"));
dmalcolm be5790
@@ -1313,8 +1335,8 @@
dmalcolm be5790
 					   _("Could not read pilot's Address application block"));
dmalcolm be5790
 		return -1;
dmalcolm be5790
 	}
dmalcolm be5790
-	unpack_AddressAppInfo (&(ctxt->ai), buf, len);
dmalcolm be5790
-	g_free (buf);
dmalcolm be5790
+	unpack_AddressAppInfo (&(ctxt->ai), buffer->data, len);
dmalcolm be5790
+	pi_buffer_free (buffer);
dmalcolm be5790
 
dmalcolm be5790
   	check_for_slow_setting (conduit, ctxt);
dmalcolm be5790
 	if (ctxt->cfg->sync_type == GnomePilotConduitSyncTypeCopyToPilot
dmalcolm be5790
--- evolution-2.5.4/calendar/conduits/calendar/calendar-conduit.c.fix-conduits	2006-01-02 06:38:57.000000000 -0500
dmalcolm be5790
+++ evolution-2.5.4/calendar/conduits/calendar/calendar-conduit.c	2006-01-10 19:33:44.000000000 -0500
dmalcolm be5790
@@ -413,14 +413,20 @@
dmalcolm be5790
 {
dmalcolm be5790
 	static char buff[ 4096 ];
dmalcolm be5790
 	struct Appointment appt;
dmalcolm be5790
+	pi_buffer_t piBuf;
dmalcolm be5790
 
dmalcolm be5790
 	if (remote == NULL) {
dmalcolm be5790
 		sprintf (buff, "[NULL]");
dmalcolm be5790
 		return buff;
dmalcolm be5790
 	}
dmalcolm be5790
 
dmalcolm be5790
+
dmalcolm be5790
+	piBuf.data = remote->record;
dmalcolm be5790
+	piBuf.allocated = remote->length;
dmalcolm be5790
+	piBuf.used = remote->length;
dmalcolm be5790
+
dmalcolm be5790
 	memset (&appt, 0, sizeof (struct Appointment));
dmalcolm be5790
-	unpack_Appointment (&appt, remote->record, remote->length);
dmalcolm be5790
+	unpack_Appointment (&appt, &piBuf, datebook_v1);
dmalcolm be5790
 
dmalcolm be5790
 	g_snprintf (buff, 4096, "[%ld %ld '%s' '%s']",
dmalcolm be5790
 		    mktime (&appt.begin),
dmalcolm be5790
@@ -818,7 +824,8 @@
dmalcolm be5790
 			      ECalConduitContext *ctxt)
dmalcolm be5790
 {
dmalcolm be5790
 	GnomePilotRecord p;
dmalcolm be5790
-	static char record[0xffff];
dmalcolm be5790
+	static unsigned char record[0xffff];
dmalcolm be5790
+	pi_buffer_t piBuf;
dmalcolm be5790
 
dmalcolm be5790
 	g_assert (local->comp != NULL);
dmalcolm be5790
 	g_assert (local->appt != NULL );
dmalcolm be5790
@@ -829,9 +836,17 @@
dmalcolm be5790
 	p.archived = local->local.archived;
dmalcolm be5790
 	p.secret = local->local.secret;
dmalcolm be5790
 
dmalcolm be5790
+	memset (&piBuf, 0, sizeof (piBuf));
dmalcolm be5790
+	memset (record, 0, sizeof (record));
dmalcolm be5790
+	pack_Appointment (local->appt, &piBuf, datebook_v1);
dmalcolm be5790
+
dmalcolm be5790
 	/* Generate pilot record structure */
dmalcolm be5790
+	if (piBuf.used > 0)
dmalcolm be5790
+		memcpy (record, piBuf.data, piBuf.used);
dmalcolm be5790
 	p.record = record;
dmalcolm be5790
-	p.length = pack_Appointment (local->appt, p.record, 0xffff);
dmalcolm be5790
+	p.length = piBuf.used;
dmalcolm be5790
+	if (piBuf.data)
dmalcolm be5790
+		free (piBuf.data);
dmalcolm be5790
 
dmalcolm be5790
 	return p;	
dmalcolm be5790
 }
dmalcolm be5790
@@ -867,22 +882,24 @@
dmalcolm be5790
          * we don't overwrite them 
dmalcolm be5790
 	 */
dmalcolm be5790
 	if (local->local.ID != 0) {
dmalcolm be5790
-		struct Appointment appt;		
dmalcolm be5790
-		char record[0xffff];
dmalcolm be5790
+		struct Appointment appt;
dmalcolm be5790
+		pi_buffer_t *buffer = pi_buffer_new (0xffff);
dmalcolm be5790
 		int cat = 0;
dmalcolm be5790
 		
dmalcolm be5790
 		if (dlp_ReadRecordById (ctxt->dbi->pilot_socket, 
dmalcolm be5790
 					ctxt->dbi->db_handle,
dmalcolm be5790
-					local->local.ID, &record, 
dmalcolm be5790
-					NULL, NULL, NULL, &cat) > 0) {
dmalcolm be5790
+					local->local.ID, buffer,
dmalcolm be5790
+					NULL, NULL, &cat) > 0) {
dmalcolm be5790
 			local->local.category = cat;
dmalcolm be5790
 			memset (&appt, 0, sizeof (struct Appointment));
dmalcolm be5790
-			unpack_Appointment (&appt, record, 0xffff);
dmalcolm be5790
+			unpack_Appointment (&appt, buffer, datebook_v1);
dmalcolm be5790
 			local->appt->alarm = appt.alarm;
dmalcolm be5790
 			local->appt->advance = appt.advance;
dmalcolm be5790
 			local->appt->advanceUnits = appt.advanceUnits;
dmalcolm be5790
 			free_Appointment (&appt;;
dmalcolm be5790
 		}
dmalcolm be5790
+
dmalcolm be5790
+		pi_buffer_free (buffer);
dmalcolm be5790
 	}
dmalcolm be5790
 
dmalcolm be5790
 	/* STOP: don't replace these with g_strdup, since free_Appointment
dmalcolm be5790
@@ -1140,11 +1157,17 @@
dmalcolm be5790
 	GSList *edl = NULL;	
dmalcolm be5790
 	char *txt;
dmalcolm be5790
 	int pos, i;
dmalcolm be5790
+	pi_buffer_t piBuf;
dmalcolm be5790
 	
dmalcolm be5790
 	g_return_val_if_fail (remote != NULL, NULL);
dmalcolm be5790
 
dmalcolm be5790
+
dmalcolm be5790
+	piBuf.data = remote->record;
dmalcolm be5790
+	piBuf.allocated = remote->length;
dmalcolm be5790
+	piBuf.used = remote->length;
dmalcolm be5790
+
dmalcolm be5790
 	memset (&appt, 0, sizeof (struct Appointment));
dmalcolm be5790
-	unpack_Appointment (&appt, remote->record, remote->length);
dmalcolm be5790
+	unpack_Appointment (&appt, &piBuf, datebook_v1);
dmalcolm be5790
 
dmalcolm be5790
 	if (in_comp == NULL) {
dmalcolm be5790
 		comp = e_cal_component_new ();
dmalcolm be5790
@@ -1409,7 +1432,7 @@
dmalcolm be5790
 	GnomePilotConduitSyncAbs *abs_conduit;
dmalcolm be5790
 	GList *removed = NULL, *added = NULL, *l;
dmalcolm be5790
 	int len;
dmalcolm be5790
-	unsigned char *buf;
dmalcolm be5790
+	pi_buffer_t *buffer;
dmalcolm be5790
 	char *filename, *change_id;
dmalcolm be5790
 	icalcomponent *icalcomp;
dmalcolm be5790
 	gint num_records, add_records = 0, mod_records = 0, del_records = 0;
dmalcolm be5790
@@ -1521,9 +1544,9 @@
dmalcolm be5790
 	gnome_pilot_conduit_sync_abs_set_num_updated_local_records (abs_conduit, mod_records);
dmalcolm be5790
 	gnome_pilot_conduit_sync_abs_set_num_deleted_local_records(abs_conduit, del_records);
dmalcolm be5790
 
dmalcolm be5790
-	buf = (unsigned char*)g_malloc (0xffff);
dmalcolm be5790
+	buffer = pi_buffer_new (0xffff);
dmalcolm be5790
 	len = dlp_ReadAppBlock (dbi->pilot_socket, dbi->db_handle, 0,
dmalcolm be5790
-			      (unsigned char *)buf, 0xffff);
dmalcolm be5790
+				-1, buffer);
dmalcolm be5790
 	
dmalcolm be5790
 	if (len < 0) {
dmalcolm be5790
 		WARN (_("Could not read pilot's Calendar application block"));
dmalcolm be5790
@@ -1532,8 +1555,8 @@
dmalcolm be5790
 					   _("Could not read pilot's Calendar application block"));
dmalcolm be5790
 		return -1;
dmalcolm be5790
 	}
dmalcolm be5790
-	unpack_AppointmentAppInfo (&(ctxt->ai), buf, len);
dmalcolm be5790
-	g_free (buf);
dmalcolm be5790
+	unpack_AppointmentAppInfo (&(ctxt->ai), buffer->data, len);
dmalcolm be5790
+	pi_buffer_free (buffer);
dmalcolm be5790
 
dmalcolm be5790
 	check_for_slow_setting (conduit, ctxt);
dmalcolm be5790
 	if (ctxt->cfg->sync_type == GnomePilotConduitSyncTypeCopyToPilot
dmalcolm be5790
--- evolution-2.5.4/calendar/conduits/todo/todo-conduit.c.fix-conduits	2005-12-08 03:15:03.000000000 -0500
dmalcolm be5790
+++ evolution-2.5.4/calendar/conduits/todo/todo-conduit.c	2006-01-10 19:33:44.000000000 -0500
dmalcolm be5790
@@ -402,14 +402,19 @@
dmalcolm be5790
 {
dmalcolm be5790
 	static char buff[ 4096 ];
dmalcolm be5790
 	struct ToDo todo;
dmalcolm be5790
+	pi_buffer_t piBuf;
dmalcolm be5790
 
dmalcolm be5790
 	if (remote == NULL) {
dmalcolm be5790
 		sprintf (buff, "[NULL]");
dmalcolm be5790
 		return buff;
dmalcolm be5790
 	}
dmalcolm be5790
 
dmalcolm be5790
+	piBuf.data = remote->record;
dmalcolm be5790
+	piBuf.allocated = remote->length;
dmalcolm be5790
+	piBuf.used = remote->length;
dmalcolm be5790
+
dmalcolm be5790
 	memset (&todo, 0, sizeof (struct ToDo));
dmalcolm be5790
-	unpack_ToDo (&todo, remote->record, remote->length);
dmalcolm be5790
+	unpack_ToDo (&todo, &piBuf, todo_v1);
dmalcolm be5790
 
dmalcolm be5790
 	g_snprintf (buff, 4096, "[%d %ld %d %d '%s' '%s' %d]",
dmalcolm be5790
 		    todo.indefinite,
dmalcolm be5790
@@ -594,7 +599,8 @@
dmalcolm be5790
 			      EToDoConduitContext *ctxt)
dmalcolm be5790
 {
dmalcolm be5790
 	GnomePilotRecord p;
dmalcolm be5790
-	static char record[0xffff];
dmalcolm be5790
+	static unsigned char record[0xffff];
dmalcolm be5790
+	pi_buffer_t piBuf;
dmalcolm be5790
 
dmalcolm be5790
 	g_assert (local->comp != NULL);
dmalcolm be5790
 	g_assert (local->todo != NULL );
dmalcolm be5790
@@ -607,9 +613,17 @@
dmalcolm be5790
 	p.archived = local->local.archived;
dmalcolm be5790
 	p.secret = local->local.secret;
dmalcolm be5790
 
dmalcolm be5790
+	memset (&piBuf, 0, sizeof (piBuf));
dmalcolm be5790
+	memset (record, 0, sizeof (record));
dmalcolm be5790
+	pack_ToDo (local->todo, &piBuf, todo_v1);
dmalcolm be5790
+
dmalcolm be5790
 	/* Generate pilot record structure */
dmalcolm be5790
+	if (piBuf.used > 0)
dmalcolm be5790
+		memcpy (record, piBuf.data, piBuf.used);
dmalcolm be5790
 	p.record = record;
dmalcolm be5790
-	p.length = pack_ToDo (local->todo, p.record, 0xffff);
dmalcolm be5790
+	p.length = piBuf.used;
dmalcolm be5790
+	if (piBuf.data)
dmalcolm be5790
+		free (piBuf.data);
dmalcolm be5790
 
dmalcolm be5790
 	return p;	
dmalcolm be5790
 }
dmalcolm be5790
@@ -696,15 +710,17 @@
dmalcolm be5790
 
dmalcolm be5790
 	/* Don't overwrite the category */
dmalcolm be5790
 	if (local->local.ID != 0) {
dmalcolm be5790
-		char record[0xffff];
dmalcolm be5790
+		pi_buffer_t *buffer = pi_buffer_new (0xffff);  		
dmalcolm be5790
 		int cat = 0;
dmalcolm be5790
 		
dmalcolm be5790
 		if (dlp_ReadRecordById (ctxt->dbi->pilot_socket, 
dmalcolm be5790
 					ctxt->dbi->db_handle,
dmalcolm be5790
-					local->local.ID, &record, 
dmalcolm be5790
-					NULL, NULL, NULL, &cat) > 0) {
dmalcolm be5790
+					local->local.ID, buffer, 
dmalcolm be5790
+					NULL, NULL, &cat) > 0) {
dmalcolm be5790
 			local->local.category = cat;
dmalcolm be5790
 		}
dmalcolm be5790
+
dmalcolm be5790
+		pi_buffer_free (buffer);
dmalcolm be5790
 	}
dmalcolm be5790
 	
dmalcolm be5790
 	/*
dmalcolm be5790
@@ -859,12 +875,17 @@
dmalcolm be5790
 	icaltimezone *utc_zone;
dmalcolm be5790
 	int priority;
dmalcolm be5790
 	char *txt;
dmalcolm be5790
+	pi_buffer_t piBuf;
dmalcolm be5790
 	char *category;
dmalcolm be5790
 	
dmalcolm be5790
 	g_return_val_if_fail (remote != NULL, NULL);
dmalcolm be5790
 
dmalcolm be5790
+	piBuf.data = remote->record;
dmalcolm be5790
+	piBuf.allocated = remote->length;
dmalcolm be5790
+	piBuf.used = remote->length;
dmalcolm be5790
+
dmalcolm be5790
 	memset (&todo, 0, sizeof (struct ToDo));
dmalcolm be5790
-	unpack_ToDo (&todo, remote->record, remote->length);
dmalcolm be5790
+	unpack_ToDo (&todo, &piBuf, todo_v1);
dmalcolm be5790
 
dmalcolm be5790
 	utc_zone = icaltimezone_get_utc_timezone ();
dmalcolm be5790
 	now = icaltime_from_timet_with_zone (time (NULL), FALSE, 
dmalcolm be5790
@@ -1014,7 +1035,7 @@
dmalcolm be5790
 	GnomePilotConduitSyncAbs *abs_conduit;
dmalcolm be5790
 	GList *l;
dmalcolm be5790
 	int len;
dmalcolm be5790
-	unsigned char *buf;
dmalcolm be5790
+	pi_buffer_t *buffer;
dmalcolm be5790
 	char *filename, *change_id;
dmalcolm be5790
 	icalcomponent *icalcomp;
dmalcolm be5790
 	gint num_records, add_records = 0, mod_records = 0, del_records = 0;
dmalcolm be5790
@@ -1104,9 +1125,9 @@
dmalcolm be5790
 	g_message("num_records: %d\nadd_records: %d\nmod_records: %d\ndel_records: %d\n",
dmalcolm be5790
 			num_records, add_records, mod_records, del_records);
dmalcolm be5790
 
dmalcolm be5790
-	buf = (unsigned char*)g_malloc (0xffff);
dmalcolm be5790
+	buffer = pi_buffer_new (0xffff);
dmalcolm be5790
 	len = dlp_ReadAppBlock (dbi->pilot_socket, dbi->db_handle, 0,
dmalcolm be5790
-			      (unsigned char *)buf, 0xffff);
dmalcolm be5790
+				-1, buffer);
dmalcolm be5790
 	
dmalcolm be5790
 	if (len < 0) {
dmalcolm be5790
 		WARN (_("Could not read pilot's ToDo application block"));
dmalcolm be5790
@@ -1115,8 +1136,8 @@
dmalcolm be5790
 					   _("Could not read pilot's ToDo application block"));
dmalcolm be5790
 		return -1;
dmalcolm be5790
 	}
dmalcolm be5790
-	unpack_ToDoAppInfo (&(ctxt->ai), buf, len);
dmalcolm be5790
-	g_free (buf);
dmalcolm be5790
+	unpack_ToDoAppInfo (&(ctxt->ai), buffer->data, len);
dmalcolm be5790
+	pi_buffer_free (buffer);
dmalcolm be5790
 	
dmalcolm be5790
 	lastDesktopUniqueID = 128;
dmalcolm be5790
 
dmalcolm be5790
--- evolution-2.5.4/calendar/conduits/memo/memo-conduit.c.fix-conduits	2006-01-10 22:52:28.000000000 -0500
dmalcolm be5790
+++ evolution-2.5.4/calendar/conduits/memo/memo-conduit.c	2006-01-10 23:11:47.000000000 -0500
dmalcolm be5790
@@ -331,14 +331,19 @@
dmalcolm be5790
 {
dmalcolm be5790
 	static char buff[ 64 ];
dmalcolm be5790
 	struct Memo memo;
dmalcolm be5790
+	pi_buffer_t piBuf;
dmalcolm be5790
 
dmalcolm be5790
 	if (remote == NULL) {
dmalcolm be5790
 		sprintf (buff, "[NULL]");
dmalcolm be5790
 		return buff;
dmalcolm be5790
 	}
dmalcolm be5790
 
dmalcolm be5790
+	piBuf.data = remote->record;
dmalcolm be5790
+	piBuf.allocated = remote->length;
dmalcolm be5790
+	piBuf.used = remote->length;
dmalcolm be5790
+
dmalcolm be5790
 	memset (&memo, 0, sizeof (struct Memo));
dmalcolm be5790
-	unpack_Memo (&memo, remote->record, remote->length);
dmalcolm be5790
+	unpack_Memo (&memo, &piBuf, memo_v1);
dmalcolm be5790
 
dmalcolm be5790
 	g_snprintf (buff, 64, "['%s']",
dmalcolm be5790
 		    memo.text ?
dmalcolm be5790
@@ -451,7 +456,8 @@
dmalcolm be5790
 			      EMemoConduitContext *ctxt)
dmalcolm be5790
 {
dmalcolm be5790
 	GnomePilotRecord p;
dmalcolm be5790
-	static char record[0xffff];
dmalcolm be5790
+	static unsigned char record[0xffff];
dmalcolm be5790
+	pi_buffer_t piBuf;  		
dmalcolm be5790
 
dmalcolm be5790
 	g_assert (local->comp != NULL);
dmalcolm be5790
 	g_assert (local->memo != NULL );
dmalcolm be5790
@@ -466,8 +472,14 @@
dmalcolm be5790
 
dmalcolm be5790
 	/* Generate pilot record structure */
dmalcolm be5790
 	p.record = record;
dmalcolm be5790
-	p.length = pack_Memo (local->memo, p.record, 0xffff);
dmalcolm be5790
-
dmalcolm be5790
+	memset (&piBuf, 0, sizeof (piBuf));
dmalcolm be5790
+	memset (record, 0, sizeof (record));
dmalcolm be5790
+	p.length = pack_Memo (local->memo, &piBuf, memo_v1);
dmalcolm be5790
+	if (piBuf.used > 0)
dmalcolm be5790
+		memcpy (record, piBuf.data, piBuf.used);
dmalcolm be5790
+	p.length = piBuf.used;
dmalcolm be5790
+	if (piBuf.data)
dmalcolm be5790
+		free (piBuf.data);
dmalcolm be5790
 	return p;	
dmalcolm be5790
 }
dmalcolm be5790
 
dmalcolm be5790
@@ -568,16 +580,17 @@
dmalcolm be5790
 
dmalcolm be5790
 	/* Don't overwrite the category */
dmalcolm be5790
 	if (local->local.ID != 0) {
dmalcolm be5790
-		char record[0xffff];
dmalcolm be5790
+		pi_buffer_t *buffer = pi_buffer_new (0xffff);
dmalcolm be5790
 		int cat = 0;
dmalcolm be5790
 		
dmalcolm be5790
 		LOG(fprintf(stderr, "local_record_from_comp: calling dlp_ReadRecordById\n"));
dmalcolm be5790
 		if (dlp_ReadRecordById (ctxt->dbi->pilot_socket, 
dmalcolm be5790
 					ctxt->dbi->db_handle,
dmalcolm be5790
-					local->local.ID, &record, 
dmalcolm be5790
-					NULL, NULL, NULL, &cat) > 0) {
dmalcolm be5790
+					local->local.ID, buffer, 
dmalcolm be5790
+					NULL, NULL, &cat) > 0) {
dmalcolm be5790
 			local->local.category = cat;
dmalcolm be5790
 		}
dmalcolm be5790
+		pi_buffer_free (buffer);
dmalcolm be5790
 		LOG(fprintf(stderr, "local_record_from_comp: done calling dlp_ReadRecordById\n"));
dmalcolm be5790
 	}
dmalcolm be5790
 	
dmalcolm be5790
@@ -699,6 +712,7 @@
dmalcolm be5790
 {
dmalcolm be5790
 	ECalComponent *comp;
dmalcolm be5790
 	struct Memo memo;
dmalcolm be5790
+	pi_buffer_t piBuf;
dmalcolm be5790
 	struct icaltimetype now;
dmalcolm be5790
 	icaltimezone *utc_zone;
dmalcolm be5790
 	char *txt, *txt2, *txt3;
dmalcolm be5790
@@ -707,8 +721,12 @@
dmalcolm be5790
 	
dmalcolm be5790
 	g_return_val_if_fail (remote != NULL, NULL);
dmalcolm be5790
 
dmalcolm be5790
+	piBuf.data = remote->record;
dmalcolm be5790
+	piBuf.allocated = remote->length;
dmalcolm be5790
+	piBuf.used = remote->length;
dmalcolm be5790
+
dmalcolm be5790
 	memset (&memo, 0, sizeof (struct Memo));
dmalcolm be5790
-	unpack_Memo (&memo, remote->record, remote->length);
dmalcolm be5790
+	unpack_Memo (&memo, &piBuf, memo_v1);
dmalcolm be5790
 
dmalcolm be5790
 	utc_zone = icaltimezone_get_utc_timezone ();
dmalcolm be5790
 	now = icaltime_from_timet_with_zone (time (NULL), FALSE, 
dmalcolm be5790
@@ -836,7 +854,7 @@
dmalcolm be5790
 	GnomePilotConduitSyncAbs *abs_conduit;
dmalcolm be5790
 	GList *l;
dmalcolm be5790
 	int len;
dmalcolm be5790
-	unsigned char *buf;
dmalcolm be5790
+	pi_buffer_t *buffer;
dmalcolm be5790
 	char *filename, *change_id;
dmalcolm be5790
 	icalcomponent *icalcomp;
dmalcolm be5790
 	gint num_records, add_records = 0, mod_records = 0, del_records = 0;
dmalcolm be5790
@@ -929,9 +947,9 @@
dmalcolm be5790
 	g_message("num_records: %d\nadd_records: %d\nmod_records: %d\ndel_records: %d\n",
dmalcolm be5790
 		num_records, add_records, mod_records, del_records);
dmalcolm be5790
 
dmalcolm be5790
-	buf = (unsigned char*)g_malloc (0xffff);
dmalcolm be5790
+	buffer = pi_buffer_new (0xffff);
dmalcolm be5790
 	len = dlp_ReadAppBlock (dbi->pilot_socket, dbi->db_handle, 0,
dmalcolm be5790
-			      (unsigned char *)buf, 0xffff);
dmalcolm be5790
+				-1, buffer);
dmalcolm be5790
 	
dmalcolm be5790
 	if (len < 0) {
dmalcolm be5790
 		WARN (_("Could not read pilot's Memo application block"));
dmalcolm be5790
@@ -940,8 +958,8 @@
dmalcolm be5790
 					   _("Could not read pilot's Memo application block"));
dmalcolm be5790
 		return -1;
dmalcolm be5790
 	}
dmalcolm be5790
-	unpack_MemoAppInfo (&(ctxt->ai), buf, len);
dmalcolm be5790
-	g_free (buf);
dmalcolm be5790
+	unpack_MemoAppInfo (&(ctxt->ai), buffer->data, len);
dmalcolm be5790
+	pi_buffer_free (buffer);
dmalcolm be5790
 	
dmalcolm be5790
 	lastDesktopUniqueID = 128;
dmalcolm be5790