rem: if (message != NULL && conn->func != NULL) (*conn->func) (message, conn->data);
add: subs = message; finished = FALSE;  while (subs != '\0' && finished == FALSE) { if (message != NULL && conn->func != NULL) (*conn->func) (subs, conn->data);  subs += strlen (subs) + 1; if (subs - message >= offset) finished = TRUE; }
context: server_cb (GIOChannel *source, GIOCondition condition, gpointer data){	BaconMessageConnection *conn = (BaconMessageConnection *)data;	char *message, buf[BUF_SIZE];	int cd, alen, rc, offset;	message = NULL;	offset = 0;	cd = accept (g_io_channel_unix_get_fd (source), NULL, &alen);	memset (buf, sizeof (buf), '\0');	rc = read (cd, buf, BUF_SIZE);	while (rc != 0)	{		message = g_realloc (message, rc + offset);		memcpy (message + offset, buf, MIN(rc, BUF_SIZE));		offset = offset + rc;		memset (buf, sizeof (buf), '\0');		rc = read (cd, buf, BUF_SIZE);	}	if (message != NULL && conn->func != NULL)			(*conn->func) (message, conn->data);	g_free (message);	return TRUE;}