mirror of
https://github.com/MidnightCommander/mc
synced 2024-12-22 20:36:50 +03:00
* extfs.c (extfs_open): Only create a new entry if it has not
been found and O_CREAT is set. Consider file as changed only if it has been successfully created. (extfs_getlocalcopy): Open file only for reading. This prevents marking file as changed. Actually use the has_changed argument. Reported by Nerijus Baliunas <nerijus@users.sourceforge.net>
This commit is contained in:
parent
6c67d1918c
commit
4408c4e091
@ -1,3 +1,12 @@
|
||||
2002-02-19 Pavel Roskin <proski@gnu.org>
|
||||
|
||||
* extfs.c (extfs_open): Only create a new entry if it has not
|
||||
been found and O_CREAT is set. Consider file as changed only
|
||||
if it has been successfully created.
|
||||
(extfs_getlocalcopy): Open file only for reading. This prevents
|
||||
marking file as changed. Actually use the has_changed argument.
|
||||
Reported by Nerijus Baliunas <nerijus@users.sourceforge.net>
|
||||
|
||||
2002-02-12 Pavel Roskin <proski@gnu.org>
|
||||
|
||||
* extfs/lslR.in: Fix parsing of old entries (with year number).
|
||||
|
16
vfs/extfs.c
16
vfs/extfs.c
@ -607,11 +607,16 @@ static void *extfs_open (vfs *me, char *file, int flags, int mode)
|
||||
char *mc_extfsdir;
|
||||
struct entry *entry;
|
||||
int local_handle;
|
||||
const int do_create = (flags & O_ACCMODE) != O_RDONLY;
|
||||
int created = 0;
|
||||
|
||||
if ((q = get_path_mangle (file, &archive, 0, 0)) == NULL)
|
||||
return NULL;
|
||||
entry = find_entry (archive->root_entry, q, 0, do_create);
|
||||
entry = find_entry (archive->root_entry, q, 0, 0);
|
||||
if (entry == NULL && (flags & O_CREAT)) {
|
||||
/* Create new entry */
|
||||
entry = find_entry (archive->root_entry, q, 0, 1);
|
||||
created = (entry != NULL);
|
||||
}
|
||||
if (entry == NULL)
|
||||
return NULL;
|
||||
if ((entry = my_resolve_symlinks (entry)) == NULL)
|
||||
@ -642,7 +647,7 @@ static void *extfs_open (vfs *me, char *file, int flags, int mode)
|
||||
g_free (q);
|
||||
g_free (mc_extfsdir);
|
||||
g_free (archive_name);
|
||||
if (my_system (EXECUTE_AS_SHELL | EXECUTE_SETUID | EXECUTE_WAIT, shell, cmd) && !do_create){
|
||||
if (my_system (EXECUTE_AS_SHELL | EXECUTE_SETUID | EXECUTE_WAIT, shell, cmd) && !created){
|
||||
free (entry->inode->local_filename);
|
||||
entry->inode->local_filename = NULL;
|
||||
g_free (cmd);
|
||||
@ -658,7 +663,7 @@ static void *extfs_open (vfs *me, char *file, int flags, int mode)
|
||||
extfs_info = g_new (struct pseudofile, 1);
|
||||
extfs_info->archive = archive;
|
||||
extfs_info->entry = entry;
|
||||
extfs_info->has_changed = do_create;
|
||||
extfs_info->has_changed = created;
|
||||
extfs_info->local_handle = local_handle;
|
||||
|
||||
/* i.e. we had no open files and now we have one */
|
||||
@ -1308,12 +1313,13 @@ static char *extfs_getlocalcopy (vfs *me, char *path)
|
||||
static int extfs_ungetlocalcopy (vfs *me, char *path, char *local, int has_changed)
|
||||
{
|
||||
struct pseudofile *fp =
|
||||
(struct pseudofile *) extfs_open (me, path, O_WRONLY, 0);
|
||||
(struct pseudofile *) extfs_open (me, path, O_RDONLY, 0);
|
||||
|
||||
if (fp == NULL)
|
||||
return 0;
|
||||
if (!strcmp (fp->entry->inode->local_filename, local)) {
|
||||
fp->archive->fd_usage--;
|
||||
fp->has_changed |= has_changed;
|
||||
extfs_close ((void *) fp);
|
||||
return 0;
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user