rem: nom_fichier_lock = g_strjoinv ( "/",
add: nom_fichier_lock = g_strjoinv ( G_DIR_SEPARATOR_S,
context: gboolean modification_etat_ouverture_fichier ( gboolean fichier_ouvert ){    struct stat buffer_stat;    int result;    gchar *nom_fichier_lock;    gchar **tab_str;    gint i;    /*     on efface et on recommence... bon, changement de technique : lors de l'ouverture */    /* 	d'un fichier, on crée un fichier .nom.swp qu'on efface à sa fermeture */    /*     si on ne force pas l'enregistrement et si le fichier était déjà ouvert, on ne fait rien */    if ( (etat.fichier_deja_ouvert	  &&	  !etat.force_enregistrement)	 ||	 !nom_fichier_comptes ||	 !nom_fichier_comptes ||	 !strlen(nom_fichier_comptes) )	return TRUE;    /*     on commence par vérifier que le fichier de nom_fichier_comptes existe bien */    result = stat ( nom_fichier_comptes, &buffer_stat);    if ( result == -1 )    {	dialogue_error (g_strdup_printf (_("Cannot open file '%s' to mark it as used: %s"),					 nom_fichier_comptes,					 latin2utf8 (strerror(errno))));	return FALSE;    }    /*     création du nom du fichier swp */    tab_str = g_strsplit ( nom_fichier_comptes,			   "/",			   0 );    i=0;    while ( tab_str[i+1] )	i++;    tab_str[i] = g_strconcat ( ".",			       tab_str[i],			       ".swp",			       NULL );    nom_fichier_lock = g_strjoinv ( "/",				   tab_str );    g_strfreev ( tab_str );    /*     maintenant on sépare entre l'effacement ou la création du fichier swp */    if ( fichier_ouvert )    {	/* 	on ouvre le fichier, donc on crée le fichier de lock */	FILE *fichier;	/* 	commence par tester si ce fichier existe, si c'est le cas on prévient l'utilisateur */	/* 	    avec possibilité d'annuler l'action ou d'effacer le fichier de lock */	result = stat ( nom_fichier_lock, &buffer_stat);	if ( result != -1 )	{	    /* 	    le fichier de lock existe */	    dialogue_conditional_hint ( g_strdup_printf( _("File \"%s\" is already opened"),							 nom_fichier_comptes),					_("Either this file is already opened by another user or it wasn't closed correctly (maybe Grisbi crashed?).\nGrisbi can't save the file unless you activate the \"Force saving locked files\" option in setup."),					&(etat.display_message_lock_active) );	    	    /* 	    on retourne true, vu que le fichier est déjà créé et qu'on a prévenu */	    etat.fichier_deja_ouvert = 1;	    return TRUE;	}	etat.fichier_deja_ouvert = 0;	fichier = fopen ( nom_fichier_lock,			  "w" );	if ( !fichier )	{	    dialogue_error (g_strdup_printf (_("Cannot write lock file :'%s': %s"),					     nom_fichier_comptes,					     latin2utf8 (strerror(errno))));	    return FALSE;	}	fclose ( fichier );	return TRUE;    }    else    {	/* 	on ferme le fichier, donc on détruit le fichier de lock */	etat.fichier_deja_ouvert = 0;	/* 	on vérifie d'abord que ce fichier existe */	result = stat ( nom_fichier_lock, &buffer_stat);	if ( result == -1 )	{	    /* 	    le fichier de lock n'existe */	    /* 	    on s'en fout, de toute façon fallait le virer, on s'en va */	    return TRUE;	}	result = remove ( nom_fichier_lock );	if ( result == -1 )	{	    dialogue_error (g_strdup_printf (_("Cannot erase lock file :'%s': %s"),					     nom_fichier_comptes,					     latin2utf8 (strerror(errno))));	    return FALSE;	}	return TRUE;    }}