add: if ((doc == NULL ) && ( errno == 0)) { if (file_io_fix_xml_corrupted_file_lock_tag(nom_fichier_comptes)) { doc = utf8_xmlParseFile ( nom_fichier_comptes ); } }
context: gboolean charge_operations ( gchar *nom_fichier ){    struct stat buffer_stat;    xmlDocPtr doc;    int result;    struct recuperation_version *version;    if ( DEBUG )	printf ( "charge_operations\n" );    /* vérification de la permission du fichier */    result = utf8_stat ( nom_fichier, &buffer_stat);    /* check here if it's not a regular file */    if ( !S_ISREG (buffer_stat.st_mode))    {	dialogue_error ( g_strdup_printf ( _("%s doen't seem to be a regular file,\nplease check it and try again."),					   nom_fichier_comptes ));	return ( FALSE );    }    if ( result != -1 && 	 buffer_stat.st_mode != 33152 && !etat.display_message_file_readable )	propose_changement_permissions();    /* on commence par ouvrir le fichier en xml */    if ( result != -1 )    {	doc = utf8_xmlParseFile ( nom_fichier );	if ( doc )	{	    gint no_version;	    /* récupère la version de fichier */	    version = recupere_version_fichier ( doc );	    /* 	    si les versions ne sont pas récupérées, c'est que ce n'est pas un fichier grisbi */	    if ( !version -> version_fichier		 ||		 !version -> version_grisbi )	    {		dialogue_error ( _("Invalid accounts file") );		xmlFreeDoc ( doc );		return ( FALSE );	    }	    /* 	    on transforme la version en integer */	    no_version = utils_str_atoi ( g_strjoinv ( "",						g_strsplit ( version -> version_fichier,							     ".",							     0 )));	    /* 	    on va commencer par charger le fichier */	    /* 		théoriquement toute version peut être chargée, même une version */	    /* 		du futur, la seule chose, c'est qu'on le remarquera ensuite et */	    /* 		on ne le démarrera pas */	    charge_fichier_xml_grisbi ( doc );	    /* 	    on effectue les modif en fonction de la version du fichier */	    /* 		et retourne TRUE si ça s'est bien passé */	    return (mise_a_jour_versions_anterieures ( no_version,						       version ));	}	dialogue_error (g_strdup_printf (_("Cannot open file '%s': %s"), nom_fichier,					 latin2utf8 (strerror(errno))));	remove_file_from_last_opened_files_list ( nom_fichier );	return ( FALSE );    }    else    {	dialogue_error (g_strdup_printf (_("Cannot open file '%s': %s"), nom_fichier,					 latin2utf8 (strerror(errno))));	remove_file_from_last_opened_files_list ( nom_fichier );	return FALSE;    }}