From 01d771403e3a0b20bd39186b079294e60307ee56 Mon Sep 17 00:00:00 2001
From: Přemysl Janouch 
Date: Mon, 10 Jan 2011 06:56:07 +0100
Subject: Write a signature to diagram files.
---
 src/ld-diagram.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 51 insertions(+), 7 deletions(-)
(limited to 'src')
diff --git a/src/ld-diagram.c b/src/ld-diagram.c
index 49bfc9e..7a6694c 100644
--- a/src/ld-diagram.c
+++ b/src/ld-diagram.c
@@ -54,6 +54,8 @@ static void ld_diagram_set_property (GObject *object, guint property_id,
 static void ld_diagram_dispose (GObject *gobject);
 static void ld_diagram_finalize (GObject *gobject);
 
+static gboolean write_signature (GOutputStream *stream, GError **error);
+
 static void ld_diagram_real_changed (LdDiagram *self);
 static void ld_diagram_clear_internal (LdDiagram *self);
 static void ld_diagram_unselect_all_internal (LdDiagram *self);
@@ -279,13 +281,37 @@ gboolean
 ld_diagram_save_to_file (LdDiagram *self,
 	const gchar *filename, GError **error)
 {
+	GFile *file;
+	GFileOutputStream *file_stream;
 	JsonGenerator *generator;
 	JsonNode *root;
-	GError *json_error;
+	GError *local_error;
 
 	g_return_val_if_fail (LD_IS_DIAGRAM (self), FALSE);
 	g_return_val_if_fail (filename != NULL, FALSE);
 
+	file = g_file_new_for_path (filename);
+
+	local_error = NULL;
+	file_stream = g_file_replace (file, NULL, FALSE,
+		G_FILE_CREATE_NONE, NULL, &local_error);
+	g_object_unref (file);
+
+	if (local_error)
+	{
+		g_propagate_error (error, local_error);
+		return FALSE;
+	}
+
+	local_error = NULL;
+	write_signature (G_OUTPUT_STREAM (file_stream), &local_error);
+	if (local_error)
+	{
+		g_object_unref (file_stream);
+		g_propagate_error (error, local_error);
+		return FALSE;
+	}
+
 	/* TODO: Implement saving for real. This is just a stub. */
 	generator = json_generator_new ();
 	g_object_set (generator, "pretty", TRUE, NULL);
@@ -295,15 +321,33 @@ ld_diagram_save_to_file (LdDiagram *self,
 	json_generator_set_root (generator, root);
 	json_node_free (root);
 
-	json_error = NULL;
-	json_generator_to_file (generator, filename, &json_error);
-	if (json_error)
+	local_error = NULL;
+	json_generator_to_stream (generator, G_OUTPUT_STREAM (file_stream),
+		NULL, &local_error);
+	g_object_unref (file_stream);
+	g_object_unref (generator);
+
+	if (local_error)
 	{
-		g_propagate_error (error, json_error);
-		g_object_unref (generator);
+		g_propagate_error (error, local_error);
+		return FALSE;
+	}
+	return TRUE;
+}
+
+static gboolean
+write_signature (GOutputStream *stream, GError **error)
+{
+	static const gchar signature[] = "/* logdiag diagram */\n";
+	GError *local_error = NULL;
+
+	g_output_stream_write (stream, signature, sizeof (signature) - 1,
+		NULL, &local_error);
+	if (local_error)
+	{
+		g_propagate_error (error, local_error);
 		return FALSE;
 	}
-	g_object_unref (generator);
 	return TRUE;
 }
 
-- 
cgit v1.2.3-70-g09d2