gtranslator r3647 - in trunk/src: . translation-memory/berkeley



Author: icq
Date: Mon Sep 22 09:40:52 2008
New Revision: 3647
URL: http://svn.gnome.org/viewvc/gtranslator?rev=3647&view=rev

Log:
2008-08-04  Ignacio Casal Quinteiro  <nacho resa gmail com>

        * translation-memory/berkeley/db-base.c
(gtranslator_db_base_init),
        (gtranslator_db_base_finalize),
        (gtranslator_db_base_create_dabatase),
        (gtranslator_db_base_show_error):
        Added recovery mode. Not sure if this works.

Modified:
   trunk/src/ChangeLog
   trunk/src/translation-memory/berkeley/db-base.c

Modified: trunk/src/translation-memory/berkeley/db-base.c
==============================================================================
--- trunk/src/translation-memory/berkeley/db-base.c	(original)
+++ trunk/src/translation-memory/berkeley/db-base.c	Mon Sep 22 09:40:52 2008
@@ -43,6 +43,7 @@
 struct _GtranslatorDbBasePrivate
 {
 	DB *db;
+	gchar *path;
 };
 
 static gchar *
@@ -81,9 +82,11 @@
 }
 
 static void
-gtranslator_db_base_init (GtranslatorDbBase *panel)
+gtranslator_db_base_init (GtranslatorDbBase *base)
 {
-	panel->priv = GTR_DB_BASE_GET_PRIVATE (panel);
+	base->priv = GTR_DB_BASE_GET_PRIVATE (base);
+	
+	base->priv->path = NULL;
 }
 
 static void
@@ -95,6 +98,8 @@
 	if ((err = base->priv->db->close(base->priv->db, 0)) != 0)
 	       gtranslator_db_base_show_error (base, err);
 	
+	g_free (base->priv->path);
+	
 	G_OBJECT_CLASS (gtranslator_db_base_parent_class)->finalize (object);
 }
 
@@ -115,7 +120,6 @@
 {
 	gint error;
 	gchar *db_dir;
-	gchar *fullname;
 	
 	g_return_if_fail (GTR_IS_DB_BASE (base));
 	
@@ -127,19 +131,17 @@
 	}
 	
 	db_dir = get_db_base_directory ();
-	fullname = g_build_filename (db_dir, filename, NULL);
+	base->priv->path = g_build_filename (db_dir, filename, NULL);
 	g_free (db_dir);
 
 	error = base->priv->db->open (base->priv->db,
 				      NULL,
-				      fullname,
+				      base->priv->path,
 				      NULL,
 				      type,
 				      DB_CREATE,
 				      0);
 	
-	g_free (fullname);
-	
 	if (error != 0)
 	{
 		gtranslator_db_base_show_error (base, error);
@@ -152,14 +154,36 @@
 				int error)
 {
 	gchar *err = NULL;
+	DB_ENV *env;
+	gint e;
 	
-	if (error != DB_NOTFOUND)
+	switch (error)
 	{
-		err = g_strdup_printf (_("There was an error in database: %s"),
-				       db_strerror (error));
-	
-		g_warning (err);
-		g_free (err);
+		case DB_NOTFOUND:
+			break;
+		case DB_RUNRECOVERY:
+			g_warning (_("Running recovery..."));
+			
+			env = base->priv->db->get_env (base->priv->db);
+			e = env->open (env, base->priv->path,
+				       DB_RECOVER_FATAL, 0);
+			
+			if (e != 0)
+			{
+				err = g_strdup_printf (_("There was an error recovering the database: %s"),
+						       db_strerror (e));
+				
+				g_warning (err);
+				g_free (err);
+			}
+			break;
+		default:
+			err = g_strdup_printf (_("There was an error in database: %s"),
+					       db_strerror (error));
+			
+			g_warning (err);
+			g_free (err);
+			break;
 	}
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]