Allow use file locking in various components of MC.

Renamed and moved src/editor/editloc.[ch] -> lib/lock.[ch].
Renamed lock handling functions.
Fixed library order in src/Makefile.am.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
This commit is contained in:
Andrew Borodin 2010-06-09 16:24:30 +04:00
parent 15a7b10191
commit b2ee413f03
8 changed files with 44 additions and 49 deletions

View File

@ -23,6 +23,7 @@ libmc_la_SOURCES = \
fs.h \
glibcompat.c glibcompat.h \
global.h \
lock.c lock.h \
timefmt.h
if USE_MAINTAINER_MODE

View File

@ -1,4 +1,4 @@
/* editor file locking.
/* file locking
Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@ -22,11 +22,11 @@
*/
/** \file
* \brief Source: editor file locking
* \brief Source: file locking
* \author Adam Byrtek
* \date 2003
*
* Locking scheme used in mcedit is based on a documentation found
* Locking scheme is based on a documentation found
* in JED editor sources. Abstract from lock.c file (by John E. Davis):
*
* The basic idea here is quite simple. Whenever a buffer is attached to
@ -54,13 +54,9 @@
#include "lib/global.h"
#include "lib/vfs/mc-vfs/vfs.h"
#include "lib/strutil.h" /* utf string functions */
#include "lib/lock.h"
#include "edit-impl.h"
#include "editlock.h"
#include "src/wtools.h" /* edit_query_dialog () */
#include "src/wtools.h" /* query_dialog() */
#define BUF_SIZE 255
#define PID_BUF_SIZE 10
@ -164,7 +160,7 @@ lock_get_info (const char *lockfname)
Returns 1 on success, 0 on failure, -1 if abort
Warning: Might do screen refresh and lose edit->force */
int
edit_lock_file (const char *fname)
lock_file (const char *fname)
{
char *lockfname, *newlock, *msg, *lock;
struct stat statbuf;
@ -199,8 +195,8 @@ edit_lock_file (const char *fname)
"User: %s\nProcess ID: %d"), x_basename (lockfname) + 2,
lockinfo->who, (int) lockinfo->pid);
/* TODO: Implement "Abort" - needs to rewind undo stack */
switch (edit_query_dialog2
(_("File locked"), msg, _("&Grab lock"),
switch (query_dialog
(_("File locked"), msg, D_NORMAL, 2, _("&Grab lock"),
_("&Ignore lock"))) {
case 0:
break;
@ -229,9 +225,9 @@ edit_lock_file (const char *fname)
}
/* Lowers file lock if possible
Always returns 0 to make 'lock = edit_unlock_file (f)' possible */
Always returns 0 */
int
edit_unlock_file (const char *fname)
unlock_file (const char *fname)
{
char *lockfname, *lock;
struct stat statbuf;

15
lib/lock.h Normal file
View File

@ -0,0 +1,15 @@
/** \file
* \brief Header: file locking
* \author Adam Byrtek
* \date 2003
* Look at lock.c for more details
*/
#ifndef MC_LOCK_H
#define MC_LOCK_H
int lock_file (const char *fname);
int unlock_file (const char *fname);
#endif /* MC_LOCK_H */

View File

@ -41,20 +41,18 @@ if CHARSET
SRC_USE_charset=$(SRC_charset)
endif
mc_LDADD = \
../lib/libmc.la \
viewer/libmcviewer.la \
$(MCLIBS) $(DIFFLIB) $(EDITLIB) $(SLANGLIB) \
$(GLIB_LIBS) $(PCRE_LIBS) \
$(LIBICONV) $(INTLLIBS)
$(DIFFLIB) $(EDITLIB) \
../lib/libmc.la \
$(MCLIBS) $(SLANGLIB) $(GLIB_LIBS) \
$(PCRE_LIBS) $(LIBICONV) $(INTLLIBS)
if USE_SAMBA_FS
# this is a hack for linking with own samba library in simple way
mc_LDADD += ../lib/vfs/mc-vfs/samba/libsamba.a
endif
SRC_mc_widgets = \
dialog.c dialog.h \
dialog-switch.c dialog-switch.h \

View File

@ -9,7 +9,7 @@ endif
libedit_la_SOURCES = \
bookmark.c edit.c editcmd.c editwidget.c editdraw.c editkeys.c \
editmenu.c editoptions.c edit-impl.h edit.h edit-widget.h \
editlock.c editlock.h syntax.c wordproc.c \
syntax.c wordproc.c \
choosesyntax.c etags.c etags.h editcmd_dialogs.c editcmd_dialogs.h
libedit_la_CFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir) $(PCRE_CFLAGS)

View File

@ -47,6 +47,7 @@
#include "lib/skin.h" /* EDITOR_NORMAL_COLOR */
#include "lib/vfs/mc-vfs/vfs.h"
#include "lib/strutil.h" /* utf string functions */
#include "lib/lock.h"
#include "src/widget.h"
#include "src/cmd.h" /* view_other_cmd() */
@ -61,7 +62,6 @@
#include "src/keybind.h"
#include "edit-impl.h"
#include "editlock.h"
#include "edit-widget.h"
int option_word_wrap_line_length = DEFAULT_WRAP_LINE_LENGTH;
@ -952,7 +952,7 @@ edit_clean (WEdit * edit)
/* a stale lock, remove it */
if (edit->locked)
edit->locked = edit_unlock_file (edit->filename);
edit->locked = unlock_file (edit->filename);
/* save cursor position */
if (option_save_position)
@ -1273,7 +1273,7 @@ edit_modification (WEdit * edit)
/* raise lock when file modified */
if (!edit->modified && !edit->delete_file)
edit->locked = edit_lock_file (edit->filename);
edit->locked = lock_file (edit->filename);
edit->modified = 1;
}

View File

@ -51,6 +51,7 @@
#include "lib/mcconfig.h"
#include "lib/skin.h"
#include "lib/strutil.h" /* utf string functions */
#include "lib/lock.h"
#include "lib/vfs/mc-vfs/vfs.h"
#include "src/history.h"
@ -66,7 +67,6 @@
#include "src/clipboard.h" /* copy_file_to_ext_clip, paste_to_file_from_ext_clip */
#include "src/editor/edit-impl.h"
#include "src/editor/editlock.h"
#include "src/editor/edit-widget.h"
#include "src/editor/editcmd_dialogs.h"
#include "src/editor/etags.h"
@ -623,13 +623,13 @@ edit_save_as_cmd (WEdit * edit)
{
edit->stat1.st_mode |= S_IWUSR;
}
save_lock = edit_lock_file (exp);
save_lock = lock_file (exp);
}
else
{
/* filenames equal, check if already locked */
if (!edit->locked && !edit->delete_file)
save_lock = edit_lock_file (exp);
save_lock = lock_file (exp);
}
if (different_filename)
@ -649,14 +649,14 @@ edit_save_as_cmd (WEdit * edit)
if (different_filename)
{
if (save_lock)
edit_unlock_file (exp);
unlock_file (exp);
if (edit->locked)
edit->locked = edit_unlock_file (edit->filename);
edit->locked = unlock_file (edit->filename);
}
else
{
if (edit->locked || save_lock)
edit->locked = edit_unlock_file (edit->filename);
edit->locked = unlock_file (edit->filename);
}
edit_set_filename (edit, exp);
@ -675,7 +675,7 @@ edit_save_as_cmd (WEdit * edit)
case -1:
/* Failed, so maintain modify (not save) lock */
if (save_lock)
edit_unlock_file (exp);
unlock_file (exp);
g_free (exp);
edit->force |= REDRAW_COMPLETELY;
return 0;
@ -932,12 +932,12 @@ edit_save_cmd (WEdit * edit)
int res, save_lock = 0;
if (!edit->locked && !edit->delete_file)
save_lock = edit_lock_file (edit->filename);
save_lock = lock_file (edit->filename);
res = edit_save_file (edit, edit->filename);
/* Maintain modify (not save) lock on failure */
if ((res > 0 && edit->locked) || save_lock)
edit->locked = edit_unlock_file (edit->filename);
edit->locked = unlock_file (edit->filename);
/* On failure try 'save as', it does locking on its own */
if (!res)
@ -988,7 +988,7 @@ edit_load_file_from_filename (WEdit * edit, char *exp)
}
if (prev_locked)
edit_unlock_file (prev_filename);
unlock_file (prev_filename);
g_free (prev_filename);
return 0;
}

View File

@ -1,15 +0,0 @@
/** \file
* \brief Header: editor file locking
* \author Adam Byrtek
* \date 2003
* Look at editlock.c for more details
*/
#ifndef MC_EDIT_LOCK_H
#define MC_EDIT_LOCK_H
int edit_lock_file (const char *fname);
int edit_unlock_file (const char *fname);
#endif