mirror of
https://github.com/MidnightCommander/mc
synced 2024-12-22 12:32:40 +03:00
Merge branch '3915_cleanup'
* 3915_cleanup: (25 commits) Update po/*.po files. (init_subshell): use openpty() to open master/slave devices for subshell. m4.include: move Gnulib modules to their own subdirectory. (vfs_preallocate): check mc_global.vfs.preallocate_space before call. (filegui__check_attrs_on_fs): check copymove_persistent_attr before call. (dlg_run_done): fix possible NULL dereference. (dlg_init): fix possible NULL dereference. doc: clarify description of system-wide confiduration files. Clarify usage of FL_NONE value. extfs: optimization: get rid of extra memory duplication. (file_mask_dialog): don't return an empty string. (file_mask_dialog): grammar. (str_ptr_array_join): constify argument. (extfs_get_path): use standard VFS flags. (extfs_find_entry): use standard VFS flags. extfs: constify some function arguments. extfs: refactoring: rename structures... extfs: refactoring: rename some structure members... extfs: refactoring: struct inode: use struct stat instead of separate members. extfs: refactoring: use GSList to store archive list. ...
This commit is contained in:
commit
4d7531ec3e
16
acinclude.m4
16
acinclude.m4
@ -1,17 +1,17 @@
|
||||
m4_include([m4.include/ac_onceonly.m4])
|
||||
m4_include([m4.include/gnulib/mode_t.m4])
|
||||
m4_include([m4.include/gnulib/stat-size.m4])
|
||||
m4_include([m4.include/gnulib/ls-mntd-fs.m4])
|
||||
m4_include([m4.include/gnulib/fstypename.m4])
|
||||
m4_include([m4.include/gnulib/fsusage.m4])
|
||||
m4_include([m4.include/gnulib/mountlist.m4])
|
||||
m4_include([m4.include/gnulib/windows-stat-inodes.m4])
|
||||
m4_include([m4.include/gnulib/sys_types_h.m4])
|
||||
m4_include([m4.include/ax_path_lib_pcre.m4])
|
||||
m4_include([m4.include/dx_doxygen.m4])
|
||||
m4_include([m4.include/mc-cflags.m4])
|
||||
m4_include([m4.include/ax_gcc_func_attribute.m4])
|
||||
m4_include([m4.include/mc-check-search-type.m4])
|
||||
m4_include([m4.include/mode_t.m4])
|
||||
m4_include([m4.include/stat-size.m4])
|
||||
m4_include([m4.include/ls-mntd-fs.m4])
|
||||
m4_include([m4.include/fstypename.m4])
|
||||
m4_include([m4.include/fsusage.m4])
|
||||
m4_include([m4.include/mountlist.m4])
|
||||
m4_include([m4.include/windows-stat-inodes.m4])
|
||||
m4_include([m4.include/sys_types_h.m4])
|
||||
m4_include([m4.include/mc-get-fs-info.m4])
|
||||
m4_include([m4.include/mc-with-x.m4])
|
||||
m4_include([m4.include/mc-use-termcap.m4])
|
||||
|
@ -160,7 +160,7 @@ AC_CHECK_HEADERS([string.h memory.h limits.h malloc.h \
|
||||
utime.h sys/statfs.h sys/vfs.h \
|
||||
sys/select.h sys/ioctl.h stropts.h arpa/inet.h \
|
||||
sys/socket.h])
|
||||
dnl This macro is redefined in m4.include/sys_types_h.m4
|
||||
dnl This macro is redefined in m4.include/gnulib/sys_types_h.m4
|
||||
dnl to work around a buggy version in autoconf <= 2.69.
|
||||
AC_HEADER_MAJOR
|
||||
|
||||
|
@ -2288,11 +2288,13 @@ connection is initiated by the server. This may not work with some
|
||||
firewalls.
|
||||
.\"NODE " Save Setup"
|
||||
.SH " Save Setup"
|
||||
At startup, Midnight Commander will try to load initialization
|
||||
information from the ~/.config/mc/ini file. If this file
|
||||
doesn't exist, it will load the information from the system\-wide
|
||||
configuration file, located in %prefix%/share/mc/mc.ini. If the
|
||||
system\-wide configuration file doesn't exist, MC uses the default settings.
|
||||
At startup, Midnight Commander tries to load initialization information
|
||||
from the ~/.config/mc/ini file.
|
||||
If this file doesn't exist, the system\-wide file
|
||||
.B %sysconfdir%/mc/mc.ini
|
||||
is used. If this file doesn't exist, the system\-wide file
|
||||
.B %prefix%/share/mc/mc.ini
|
||||
is used. If this file doesn't exist, MC uses the default settings.
|
||||
.PP
|
||||
The
|
||||
.I Save Setup
|
||||
@ -4311,10 +4313,14 @@ The default system\-wide extensions file.
|
||||
User's own extension, view configuration and edit configuration
|
||||
file. They override the contents of the system wide files if present.
|
||||
.PP
|
||||
.I %sysconfdir%/mc/mc.ini
|
||||
.RE
|
||||
.I %prefix%/share/mc/mc.ini
|
||||
.IP
|
||||
The default system\-wide setup for Midnight Commander, used only if
|
||||
the user doesn't have his own ~/.config/mc/ini file.
|
||||
System\-wide setup files for Midnight Commander, used only if the user
|
||||
doesn't have his own
|
||||
.B ~/.config/mc/ini
|
||||
file. If %sysconfdir%/mc/mc.ini exists, %prefix%/share/mc/mc.ini isn't used.
|
||||
.PP
|
||||
.I %prefix%/share/mc/mc.lib
|
||||
.IP
|
||||
|
@ -4673,12 +4673,15 @@ insert=\\e[Op
|
||||
Файл расширений пользователя. Если этот файл существует, он используется
|
||||
вместо общесистемного файла расширений.
|
||||
.PP
|
||||
.I %sysconfdir%/mc/mc.ini
|
||||
.RE
|
||||
.I %prefix%/share/mc/mc.ini
|
||||
.IP
|
||||
Используемый по умолчанию общесистемный файл установок для Midnight
|
||||
Commander; используется только в тех случаях, когда пользователь не
|
||||
имеет своего файла
|
||||
.B ~/.config/mc/ini
|
||||
Общесистемные файлы установок для Midnight Commander; используются только
|
||||
в тех случаях, когда пользователь не имеет своего файла
|
||||
.B ~/.config/mc/ini .
|
||||
Если файл %sysconfdir%/mc/mc.ini существует, то %prefix%/share/mc/mc.ini
|
||||
не используется.
|
||||
.PP
|
||||
.I %prefix%/share/mc/mc.lib
|
||||
.IP
|
||||
|
@ -42,7 +42,7 @@
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
static char *
|
||||
str_ptr_array_join (GPtrArray * str_splints)
|
||||
str_ptr_array_join (const GPtrArray * str_splints)
|
||||
{
|
||||
GString *return_str;
|
||||
guint i;
|
||||
|
@ -980,8 +980,9 @@ custom_canonicalize_pathname (char *path, CANON_PATH_FLAGS flags)
|
||||
|
||||
if (vclass != NULL)
|
||||
{
|
||||
struct vfs_s_subclass *sub = (struct vfs_s_subclass *) vclass->data;
|
||||
if (sub != NULL && sub->flags & VFS_S_REMOTE)
|
||||
struct vfs_s_subclass *sub = (struct vfs_s_subclass *) vclass;
|
||||
|
||||
if ((sub->flags & VFS_S_REMOTE) != 0)
|
||||
{
|
||||
s = vfs_prefix;
|
||||
continue;
|
||||
|
@ -164,7 +164,7 @@ vfs_s_resolve_symlink (struct vfs_class *me, struct vfs_s_entry *entry, int foll
|
||||
}
|
||||
}
|
||||
|
||||
target = MEDATA->find_entry (me, entry->dir->super->root, linkname, follow - 1, 0);
|
||||
target = MEDATA->find_entry (me, entry->dir->super->root, linkname, follow - 1, FL_NONE);
|
||||
g_free (fullname);
|
||||
return target;
|
||||
}
|
||||
@ -363,6 +363,30 @@ vfs_s_free_super (struct vfs_class *me, struct vfs_s_super *super)
|
||||
g_free (super);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
static vfs_file_handler_t *
|
||||
vfs_s_new_fh (struct vfs_s_inode *ino, gboolean changed)
|
||||
{
|
||||
vfs_file_handler_t *fh;
|
||||
|
||||
fh = g_new0 (vfs_file_handler_t, 1);
|
||||
vfs_s_init_fh (fh, ino, changed);
|
||||
|
||||
return fh;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
static void
|
||||
vfs_s_free_fh (struct vfs_s_subclass *s, vfs_file_handler_t * fh)
|
||||
{
|
||||
if (s->fh_free != NULL)
|
||||
s->fh_free (fh);
|
||||
|
||||
g_free (fh);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
/* Support of archives */
|
||||
/* ------------------------ readdir & friends ----------------------------- */
|
||||
@ -663,9 +687,8 @@ vfs_s_close (void *fh)
|
||||
close (FH->handle);
|
||||
|
||||
vfs_s_free_inode (me, FH->ino);
|
||||
if (MEDATA->fh_free_data != NULL)
|
||||
MEDATA->fh_free_data (fh);
|
||||
g_free (fh);
|
||||
vfs_s_free_fh (MEDATA, fh);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
@ -785,10 +808,10 @@ vfs_s_setctl (const vfs_path_t * vpath, int ctlop, void *arg)
|
||||
return 1;
|
||||
}
|
||||
case VFS_SETCTL_LOGFILE:
|
||||
((struct vfs_s_subclass *) path_element->class->data)->logfile = fopen ((char *) arg, "w");
|
||||
VFS_SUBCLASS (path_element)->logfile = fopen ((char *) arg, "w");
|
||||
return 1;
|
||||
case VFS_SETCTL_FLUSH:
|
||||
((struct vfs_s_subclass *) path_element->class->data)->flush = 1;
|
||||
VFS_SUBCLASS (path_element)->flush = 1;
|
||||
return 1;
|
||||
default:
|
||||
return 0;
|
||||
@ -826,7 +849,7 @@ vfs_s_nothingisopen (vfsid id)
|
||||
static void
|
||||
vfs_s_free (vfsid id)
|
||||
{
|
||||
vfs_s_free_super (((struct vfs_s_super *) id)->me, (struct vfs_s_super *) id);
|
||||
vfs_s_free_super (VFS_SUPER (id)->me, VFS_SUPER (id));
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
@ -1075,9 +1098,7 @@ vfs_get_super_by_vpath (const vfs_path_t * vpath)
|
||||
vfs_path_t *vpath_archive;
|
||||
|
||||
path_element = vfs_path_get_by_index (vpath, -1);
|
||||
subclass = (struct vfs_s_subclass *) path_element->class->data;
|
||||
if (subclass == NULL)
|
||||
return NULL;
|
||||
subclass = VFS_SUBCLASS (path_element);
|
||||
|
||||
vpath_archive = vfs_path_clone (vpath);
|
||||
vfs_path_remove_element_by_index (vpath_archive, -1);
|
||||
@ -1089,11 +1110,14 @@ vfs_get_super_by_vpath (const vfs_path_t * vpath)
|
||||
goto ret;
|
||||
}
|
||||
|
||||
if (subclass->archive_same == NULL)
|
||||
goto ret;
|
||||
|
||||
for (iter = subclass->supers; iter != NULL; iter = g_list_next (iter))
|
||||
{
|
||||
int i;
|
||||
|
||||
super = (struct vfs_s_super *) iter->data;
|
||||
super = VFS_SUPER (iter->data);
|
||||
|
||||
/* 0 == other, 1 == same, return it, 2 == other but stop scanning */
|
||||
i = subclass->archive_same (path_element, super, vpath_archive, cookie);
|
||||
@ -1144,9 +1168,11 @@ vfs_s_get_path (const vfs_path_t * vpath, struct vfs_s_super **archive, int flag
|
||||
return NULL;
|
||||
}
|
||||
|
||||
super = vfs_s_new_super (path_element->class);
|
||||
subclass = VFS_SUBCLASS (path_element);
|
||||
|
||||
super = subclass->new_archive != NULL ?
|
||||
subclass->new_archive (path_element->class) : vfs_s_new_super (path_element->class);
|
||||
|
||||
subclass = (struct vfs_s_subclass *) path_element->class->data;
|
||||
if (subclass->open_archive != NULL)
|
||||
{
|
||||
vfs_path_t *vpath_archive;
|
||||
@ -1225,6 +1251,17 @@ vfs_s_fullpath (struct vfs_class *me, struct vfs_s_inode *ino)
|
||||
return g_strconcat (ino->ent->dir->ent->name, PATH_SEP_STR, ino->ent->name, (char *) NULL);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
void
|
||||
vfs_s_init_fh (vfs_file_handler_t * fh, struct vfs_s_inode *ino, gboolean changed)
|
||||
{
|
||||
fh->ino = ino;
|
||||
fh->handle = -1;
|
||||
fh->changed = changed;
|
||||
fh->linear = LS_NOT_LINEAR;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
/* --------------------------- stat and friends ---------------------------- */
|
||||
|
||||
@ -1237,6 +1274,7 @@ vfs_s_open (const vfs_path_t * vpath, int flags, mode_t mode)
|
||||
const char *q;
|
||||
struct vfs_s_inode *ino;
|
||||
const vfs_path_element_t *path_element;
|
||||
struct vfs_s_subclass *s;
|
||||
|
||||
path_element = vfs_path_get_by_index (vpath, -1);
|
||||
|
||||
@ -1250,6 +1288,8 @@ vfs_s_open (const vfs_path_t * vpath, int flags, mode_t mode)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
s = VFS_SUBCLASS (path_element);
|
||||
|
||||
if (ino == NULL)
|
||||
{
|
||||
char *dirname, *name;
|
||||
@ -1273,7 +1313,7 @@ vfs_s_open (const vfs_path_t * vpath, int flags, mode_t mode)
|
||||
ent = vfs_s_generate_entry (path_element->class, name, dir, 0755);
|
||||
ino = ent->ino;
|
||||
vfs_s_insert_entry (path_element->class, dir, ent);
|
||||
if ((VFSDATA (path_element)->flags & VFS_S_USETMP) != 0)
|
||||
if ((s->flags & VFS_S_USETMP) != 0)
|
||||
{
|
||||
int tmp_handle;
|
||||
vfs_path_t *tmp_vpath;
|
||||
@ -1301,17 +1341,11 @@ vfs_s_open (const vfs_path_t * vpath, int flags, mode_t mode)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
fh = g_new (vfs_file_handler_t, 1);
|
||||
fh->pos = 0;
|
||||
fh->ino = ino;
|
||||
fh->handle = -1;
|
||||
fh->changed = was_changed;
|
||||
fh->linear = LS_NOT_LINEAR;
|
||||
fh->data = NULL;
|
||||
fh = s->fh_new != NULL ? s->fh_new (ino, was_changed) : vfs_s_new_fh (ino, was_changed);
|
||||
|
||||
if (IS_LINEAR (flags))
|
||||
{
|
||||
if (VFSDATA (path_element)->linear_start != NULL)
|
||||
if (s->linear_start != NULL)
|
||||
{
|
||||
vfs_print_message ("%s", _("Starting linear transfer..."));
|
||||
fh->linear = LS_LINEAR_PREOPEN;
|
||||
@ -1319,24 +1353,19 @@ vfs_s_open (const vfs_path_t * vpath, int flags, mode_t mode)
|
||||
}
|
||||
else
|
||||
{
|
||||
struct vfs_s_subclass *s;
|
||||
|
||||
s = VFSDATA (path_element);
|
||||
if (s->fh_open != NULL && s->fh_open (path_element->class, fh, flags, mode) != 0)
|
||||
{
|
||||
if (s->fh_free_data != NULL)
|
||||
s->fh_free_data (fh);
|
||||
g_free (fh);
|
||||
vfs_s_free_fh (s, fh);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if ((VFSDATA (path_element)->flags & VFS_S_USETMP) != 0 && fh->ino->localname != NULL)
|
||||
if ((s->flags & VFS_S_USETMP) != 0 && fh->ino->localname != NULL)
|
||||
{
|
||||
fh->handle = open (fh->ino->localname, NO_LINEAR (flags), mode);
|
||||
if (fh->handle == -1)
|
||||
{
|
||||
g_free (fh);
|
||||
vfs_s_free_fh (s, fh);
|
||||
path_element->class->verrno = errno;
|
||||
return NULL;
|
||||
}
|
||||
@ -1385,17 +1414,13 @@ vfs_s_retrieve_file (struct vfs_class *me, struct vfs_s_inode *ino)
|
||||
int handle;
|
||||
ssize_t n;
|
||||
off_t stat_size = ino->st.st_size;
|
||||
vfs_file_handler_t fh;
|
||||
vfs_file_handler_t *fh = NULL;
|
||||
vfs_path_t *tmp_vpath;
|
||||
struct vfs_s_subclass *s = MEDATA;
|
||||
|
||||
if ((MEDATA->flags & VFS_S_USETMP) == 0)
|
||||
if ((s->flags & VFS_S_USETMP) == 0)
|
||||
return (-1);
|
||||
|
||||
memset (&fh, 0, sizeof (fh));
|
||||
|
||||
fh.ino = ino;
|
||||
fh.handle = -1;
|
||||
|
||||
handle = vfs_mkstemps (&tmp_vpath, me->name, ino->ent->name);
|
||||
ino->localname = g_strdup (vfs_path_as_str (tmp_vpath));
|
||||
vfs_path_free (tmp_vpath);
|
||||
@ -1405,14 +1430,16 @@ vfs_s_retrieve_file (struct vfs_class *me, struct vfs_s_inode *ino)
|
||||
goto error_4;
|
||||
}
|
||||
|
||||
if (MEDATA->linear_start (me, &fh, 0) == 0)
|
||||
fh = s->fh_new != NULL ? s->fh_new (ino, FALSE) : vfs_s_new_fh (ino, FALSE);
|
||||
|
||||
if (s->linear_start (me, fh, 0) == 0)
|
||||
goto error_3;
|
||||
|
||||
/* Clear the interrupt status */
|
||||
tty_got_interrupt ();
|
||||
tty_enable_interrupt_key ();
|
||||
|
||||
while ((n = MEDATA->linear_read (me, &fh, buffer, sizeof (buffer))) != 0)
|
||||
while ((n = s->linear_read (me, fh, buffer, sizeof (buffer))) != 0)
|
||||
{
|
||||
int t;
|
||||
|
||||
@ -1433,22 +1460,23 @@ vfs_s_retrieve_file (struct vfs_class *me, struct vfs_s_inode *ino)
|
||||
goto error_1;
|
||||
}
|
||||
}
|
||||
MEDATA->linear_close (me, &fh);
|
||||
s->linear_close (me, fh);
|
||||
close (handle);
|
||||
|
||||
tty_disable_interrupt_key ();
|
||||
g_free (fh.data);
|
||||
vfs_s_free_fh (s, fh);
|
||||
return 0;
|
||||
|
||||
error_1:
|
||||
MEDATA->linear_close (me, &fh);
|
||||
s->linear_close (me, fh);
|
||||
error_3:
|
||||
tty_disable_interrupt_key ();
|
||||
close (handle);
|
||||
unlink (ino->localname);
|
||||
error_4:
|
||||
MC_PTR_FREE (ino->localname);
|
||||
g_free (fh.data);
|
||||
if (fh != NULL)
|
||||
vfs_s_free_fh (s, fh);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
@ -1457,9 +1485,10 @@ vfs_s_retrieve_file (struct vfs_class *me, struct vfs_s_inode *ino)
|
||||
|
||||
/* Initialize one of our subclasses - fill common functions */
|
||||
void
|
||||
vfs_s_init_class (struct vfs_class *vclass, struct vfs_s_subclass *sub)
|
||||
vfs_s_init_class (struct vfs_s_subclass *sub)
|
||||
{
|
||||
vclass->data = sub;
|
||||
struct vfs_class *vclass = (struct vfs_class *) sub;
|
||||
|
||||
vclass->fill_names = vfs_s_fill_names;
|
||||
vclass->open = vfs_s_open;
|
||||
vclass->close = vfs_s_close;
|
||||
|
@ -461,7 +461,7 @@ vfs_path_from_str_uri_parser (char *path)
|
||||
element->vfs_prefix = g_strdup (vfs_prefix_start);
|
||||
|
||||
url_delimiter += strlen (VFS_PATH_URL_DELIMITER);
|
||||
sub = VFSDATA (element);
|
||||
sub = VFS_SUBCLASS (element);
|
||||
if (sub != NULL && (sub->flags & VFS_S_REMOTE) != 0)
|
||||
{
|
||||
char *slash_pointer;
|
||||
|
@ -650,9 +650,6 @@ vfs_preallocate (int dest_vfs_fd, off_t src_fsize, off_t dest_fsize)
|
||||
void *dest_fd = NULL;
|
||||
struct vfs_class *dest_class;
|
||||
|
||||
if (!mc_global.vfs.preallocate_space)
|
||||
return 0;
|
||||
|
||||
if (src_fsize == 0)
|
||||
return 0;
|
||||
|
||||
|
@ -141,7 +141,6 @@ typedef struct vfs_class
|
||||
const char *name; /* "FIles over SHell" */
|
||||
vfs_class_flags_t flags;
|
||||
const char *prefix; /* "fish:" */
|
||||
void *data; /* this is for filesystem's own use */
|
||||
int verrno; /* can't use errno because glibc2 might define errno as function */
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
|
@ -19,7 +19,7 @@
|
||||
#define LINK_FOLLOW 15
|
||||
#define LINK_NO_FOLLOW -1
|
||||
|
||||
/* For vfs_s_find_entry */
|
||||
/* For vfs_s_find_entry and vfs_s_find_inode */
|
||||
#define FL_NONE 0
|
||||
#define FL_MKDIR 1
|
||||
#define FL_MKFILE 2
|
||||
@ -34,9 +34,11 @@
|
||||
|
||||
#define ERRNOR(a, b) do { me->verrno = a; return b; } while (0)
|
||||
|
||||
#define MEDATA ((struct vfs_s_subclass *) me->data)
|
||||
#define VFS_SUPER(a) ((struct vfs_s_super *) (a))
|
||||
|
||||
#define VFSDATA(a) ((a->class != NULL) ? (struct vfs_s_subclass *) a->class->data : NULL)
|
||||
#define MEDATA ((struct vfs_s_subclass *) me)
|
||||
|
||||
#define VFS_SUBCLASS(a) ((struct vfs_s_subclass *) a->class)
|
||||
|
||||
#define FH ((vfs_file_handler_t *) fh)
|
||||
#define FH_SUPER FH->ino->super
|
||||
@ -73,8 +75,6 @@ struct vfs_s_super
|
||||
#ifdef ENABLE_VFS_NET
|
||||
vfs_path_element_t *path_element;
|
||||
#endif /* ENABLE_VFS_NET */
|
||||
|
||||
void *data; /* This is for filesystem-specific use */
|
||||
};
|
||||
|
||||
/*
|
||||
@ -111,15 +111,16 @@ typedef struct
|
||||
int handle; /* This is for module's use, but if != -1, will be mc_close()d */
|
||||
gboolean changed; /* Did this file change? */
|
||||
vfs_linear_state_t linear; /* Is that file open with O_LINEAR? */
|
||||
void *data; /* This is for filesystem-specific use */
|
||||
} vfs_file_handler_t;
|
||||
|
||||
/*
|
||||
* One of our subclasses (tar, cpio, fish, ftpfs) with data and methods.
|
||||
* Extends vfs_class. Stored in the "data" field of vfs_class.
|
||||
* Extends vfs_class.
|
||||
*/
|
||||
struct vfs_s_subclass
|
||||
{
|
||||
struct vfs_class base; /* base class */
|
||||
|
||||
GList *supers;
|
||||
int inode_counter;
|
||||
vfs_subclass_flags_t flags; /* whether the subclass is remove, read-only etc */
|
||||
@ -135,13 +136,15 @@ struct vfs_s_subclass
|
||||
void *(*archive_check) (const vfs_path_t * vpath); /* optional */
|
||||
int (*archive_same) (const vfs_path_element_t * vpath_element, struct vfs_s_super * psup,
|
||||
const vfs_path_t * vpath, void *cookie);
|
||||
struct vfs_s_super *(*new_archive) (struct vfs_class * me);
|
||||
int (*open_archive) (struct vfs_s_super * psup,
|
||||
const vfs_path_t * vpath, const vfs_path_element_t * vpath_element);
|
||||
void (*free_archive) (struct vfs_class * me, struct vfs_s_super * psup);
|
||||
|
||||
vfs_file_handler_t *(*fh_new) (struct vfs_s_inode * ino, gboolean changed);
|
||||
int (*fh_open) (struct vfs_class * me, vfs_file_handler_t * fh, int flags, mode_t mode);
|
||||
int (*fh_close) (struct vfs_class * me, vfs_file_handler_t * fh);
|
||||
void (*fh_free_data) (vfs_file_handler_t * fh);
|
||||
void (*fh_free) (vfs_file_handler_t * fh);
|
||||
|
||||
struct vfs_s_entry *(*find_entry) (struct vfs_class * me,
|
||||
struct vfs_s_inode * root,
|
||||
@ -179,13 +182,15 @@ struct vfs_s_inode *vfs_s_find_inode (struct vfs_class *me,
|
||||
struct vfs_s_inode *vfs_s_find_root (struct vfs_class *me, struct vfs_s_entry *entry);
|
||||
|
||||
/* outside interface */
|
||||
void vfs_s_init_class (struct vfs_class *vclass, struct vfs_s_subclass *sub);
|
||||
void vfs_s_init_class (struct vfs_s_subclass *sub);
|
||||
const char *vfs_s_get_path (const vfs_path_t * vpath, struct vfs_s_super **archive, int flags);
|
||||
struct vfs_s_super *vfs_get_super_by_vpath (const vfs_path_t * vpath);
|
||||
|
||||
void vfs_s_invalidate (struct vfs_class *me, struct vfs_s_super *super);
|
||||
char *vfs_s_fullpath (struct vfs_class *me, struct vfs_s_inode *ino);
|
||||
|
||||
void vfs_s_init_fh (vfs_file_handler_t * fh, struct vfs_s_inode *ino, gboolean changed);
|
||||
|
||||
/* network filesystems support */
|
||||
int vfs_s_select_on_two (int fd1, int fd2);
|
||||
int vfs_s_get_line (struct vfs_class *me, int sock, char *buf, int buf_len, char term);
|
||||
|
@ -1139,7 +1139,8 @@ dlg_init (WDialog * h)
|
||||
widget_set_state (wh, WST_ACTIVE, TRUE);
|
||||
dlg_redraw (h);
|
||||
/* focus found widget */
|
||||
widget_set_state (WIDGET (h->current->data), WST_FOCUSED, TRUE);
|
||||
if (h->current != NULL)
|
||||
widget_set_state (WIDGET (h->current->data), WST_FOCUSED, TRUE);
|
||||
|
||||
h->ret_value = 0;
|
||||
}
|
||||
@ -1171,7 +1172,7 @@ dlg_run_done (WDialog * h)
|
||||
|
||||
if (widget_get_state (WIDGET (h), WST_CLOSED))
|
||||
{
|
||||
send_message (h, h->current->data, MSG_END, 0, NULL);
|
||||
send_message (h, h->current == NULL ? NULL : WIDGET (h->current->data), MSG_END, 0, NULL);
|
||||
if (!widget_get_state (WIDGET (h), WST_MODAL))
|
||||
dialog_switch_remove (h);
|
||||
}
|
||||
|
@ -24,6 +24,15 @@ AC_DEFUN([mc_SUBSHELL], [
|
||||
|
||||
if test "x$result" != xno; then
|
||||
AC_DEFINE(ENABLE_SUBSHELL, 1, [Define to enable subshell support])
|
||||
|
||||
dnl openpty() can simplify opening of master/slave devices for subshell
|
||||
AC_CHECK_HEADERS([pty.h libutil.h util.h])
|
||||
AC_CHECK_FUNCS(openpty,,
|
||||
AC_CHECK_LIB(util,openpty,
|
||||
[AC_DEFINE(HAVE_OPENPTY)
|
||||
LIBS="$LIBS -lutil"]
|
||||
)
|
||||
)
|
||||
fi
|
||||
|
||||
AC_MSG_RESULT([$result])
|
||||
|
10
po/az.po
10
po/az.po
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Azerbaijani (http://www.transifex.com/mc/mc/language/az/)\n"
|
||||
@ -2839,6 +2839,14 @@ msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Faylı tap"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Axtarılır"
|
||||
|
||||
|
10
po/be.po
10
po/be.po
@ -11,7 +11,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-05-21 16:57+0000\n"
|
||||
"Last-Translator: Zmicer Turok <zmicerturok@gmail.com>\n"
|
||||
"Language-Team: Belarusian (http://www.transifex.com/mc/mc/language/be/)\n"
|
||||
@ -3031,6 +3031,14 @@ msgstr[1] "Завершана (мінута %zu каталогі)"
|
||||
msgstr[2] "Завершана (мінута %zu каталогаў)"
|
||||
msgstr[3] "Завершана (мінута %zu каталогаў)"
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Шукаць файл"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Пошук"
|
||||
|
||||
|
10
po/bg.po
10
po/bg.po
@ -11,7 +11,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Bulgarian (http://www.transifex.com/mc/mc/language/bg/)\n"
|
||||
@ -3017,6 +3017,14 @@ msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] "Завършено (игнорирана %zu директория)"
|
||||
msgstr[1] "Завършено (игнорирани %zu директории)"
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Търси файл"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Търся"
|
||||
|
||||
|
10
po/ca.po
10
po/ca.po
@ -16,7 +16,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-05-21 16:46+0000\n"
|
||||
"Last-Translator: Marc Tormo i Bochaca <mtbochaca@gmail.com>\n"
|
||||
"Language-Team: Catalan (http://www.transifex.com/mc/mc/language/ca/)\n"
|
||||
@ -3041,6 +3041,14 @@ msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] "Finalitzada (s'ha ignorat %zu directori)"
|
||||
msgstr[1] "Finalitzada (s'han ignorat %zu directoris)"
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Cerca el fitxer"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Cercant"
|
||||
|
||||
|
10
po/cs.po
10
po/cs.po
@ -13,7 +13,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-05-22 14:53+0000\n"
|
||||
"Last-Translator: Pavel Borecki <pavel.borecki@gmail.com>\n"
|
||||
"Language-Team: Czech (http://www.transifex.com/mc/mc/language/cs/)\n"
|
||||
@ -3036,6 +3036,14 @@ msgstr[1] "Dokončeno (ignorovány %zu adresáře)"
|
||||
msgstr[2] "Dokončeno (ignorováno %zu složek)"
|
||||
msgstr[3] "Dokončeno (ignorováno %zu složek)"
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Najít soubor"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Hledá se"
|
||||
|
||||
|
10
po/da.po
10
po/da.po
@ -13,7 +13,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-05-15 17:16+0000\n"
|
||||
"Last-Translator: Morten Bo Johansen <mortenbo@hotmail.com>\n"
|
||||
"Language-Team: Danish (http://www.transifex.com/mc/mc/language/da/)\n"
|
||||
@ -3030,6 +3030,14 @@ msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] "Færdig (ignorerede %zu mappe)"
|
||||
msgstr[1] "Færdig (ignorerede %zu mapper)"
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Find fil"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Søger"
|
||||
|
||||
|
10
po/de.po
10
po/de.po
@ -18,7 +18,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: German (http://www.transifex.com/mc/mc/language/de/)\n"
|
||||
@ -3046,6 +3046,14 @@ msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] "Abgeschlossen (ignoriert %zu Verzeichnis)"
|
||||
msgstr[1] "Abgeschlossen (ignorierte %zu Verzeichnisse)"
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Datei suchen"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Suche "
|
||||
|
||||
|
10
po/de_CH.po
10
po/de_CH.po
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2015-02-26 09:48+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: German (Switzerland) (http://www.transifex.com/projects/p/mc/"
|
||||
@ -2837,6 +2837,14 @@ msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Searching"
|
||||
msgstr ""
|
||||
|
||||
|
10
po/el.po
10
po/el.po
@ -12,7 +12,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Greek (http://www.transifex.com/mc/mc/language/el/)\n"
|
||||
@ -2929,6 +2929,14 @@ msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Εύρεση αρχείου"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Αναζήτηση"
|
||||
|
||||
|
10
po/en_GB.po
10
po/en_GB.po
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: English (United Kingdom) (http://www.transifex.com/mc/mc/"
|
||||
@ -2847,6 +2847,14 @@ msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Searching"
|
||||
msgstr ""
|
||||
|
||||
|
10
po/eo.po
10
po/eo.po
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Esperanto (http://www.transifex.com/mc/mc/language/eo/)\n"
|
||||
@ -3027,6 +3027,14 @@ msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] "Finita (ignoris %zu dosierujon)"
|
||||
msgstr[1] "Finita (ignoris %zu dosierujojn)"
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Trovi dosieron"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Serĉanta"
|
||||
|
||||
|
10
po/es.po
10
po/es.po
@ -13,7 +13,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 20:11+0000\n"
|
||||
"Last-Translator: David Martin <dhmartina@yahoo.es>\n"
|
||||
"Language-Team: Spanish (http://www.transifex.com/mc/mc/language/es/)\n"
|
||||
@ -3033,6 +3033,14 @@ msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] "Terminado (%zu directorio ignorado)"
|
||||
msgstr[1] "Terminado (%zu directorios ignorados)"
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr " Buscar archivos "
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Buscando"
|
||||
|
||||
|
10
po/et.po
10
po/et.po
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Estonian (http://www.transifex.com/mc/mc/language/et/)\n"
|
||||
@ -3023,6 +3023,14 @@ msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] "Lõpetatud (%zu kataloogi eirati)"
|
||||
msgstr[1] "Lõpetatud (%zu kataloogi eirati)"
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Failide otsimine"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Otsimine"
|
||||
|
||||
|
10
po/eu.po
10
po/eu.po
@ -9,7 +9,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-05-12 11:25+0000\n"
|
||||
"Last-Translator: Iñigo Salvador Azurmendi <xalba@euskalnet.net>\n"
|
||||
"Language-Team: Basque (http://www.transifex.com/mc/mc/language/eu/)\n"
|
||||
@ -3027,6 +3027,14 @@ msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] "Amaituta (%zu direktorioa baztertuta)"
|
||||
msgstr[1] "Amaituta (%zu direktorioak baztertuta)"
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Bilatu fitxategia"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Bilatzen"
|
||||
|
||||
|
10
po/fa.po
10
po/fa.po
@ -12,7 +12,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Persian (http://www.transifex.com/mc/mc/language/fa/)\n"
|
||||
@ -2841,6 +2841,14 @@ msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "جستجوی فایل"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "در حال جستجو"
|
||||
|
||||
|
10
po/fi.po
10
po/fi.po
@ -10,7 +10,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Finnish (http://www.transifex.com/mc/mc/language/fi/)\n"
|
||||
@ -2848,6 +2848,14 @@ msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Tiedosto: %s"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr ""
|
||||
|
||||
|
10
po/fr.po
10
po/fr.po
@ -17,7 +17,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-05-03 09:01+0000\n"
|
||||
"Last-Translator: David Prudhomme <david7.prudhomme@gmail.com>\n"
|
||||
"Language-Team: French (http://www.transifex.com/mc/mc/language/fr/)\n"
|
||||
@ -3042,6 +3042,14 @@ msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] "Terminé (%zu répertoire ignoré)"
|
||||
msgstr[1] "Terminé (%zu répertoires ignorés)"
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Recherche de fichier"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Recherche en cours"
|
||||
|
||||
|
10
po/fr_CA.po
10
po/fr_CA.po
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2015-02-26 09:48+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: French (Canada) (http://www.transifex.com/projects/p/mc/"
|
||||
@ -2837,6 +2837,14 @@ msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Searching"
|
||||
msgstr ""
|
||||
|
||||
|
10
po/gl.po
10
po/gl.po
@ -12,7 +12,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Galician (http://www.transifex.com/mc/mc/language/gl/)\n"
|
||||
@ -3022,6 +3022,14 @@ msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Buscar ficheiro"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Buscando"
|
||||
|
||||
|
10
po/hr.po
10
po/hr.po
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Croatian (http://www.transifex.com/mc/mc/language/hr/)\n"
|
||||
@ -2838,6 +2838,14 @@ msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Searching"
|
||||
msgstr ""
|
||||
|
||||
|
10
po/hu.po
10
po/hu.po
@ -11,7 +11,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Hungarian (http://www.transifex.com/mc/mc/language/hu/)\n"
|
||||
@ -3015,6 +3015,14 @@ msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Fájl keresése"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Keresés"
|
||||
|
||||
|
10
po/ia.po
10
po/ia.po
@ -10,7 +10,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Interlingua (http://www.transifex.com/mc/mc/language/ia/)\n"
|
||||
@ -2857,6 +2857,14 @@ msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "File: %s"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Cerca"
|
||||
|
||||
|
10
po/id.po
10
po/id.po
@ -10,7 +10,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Indonesian (http://www.transifex.com/mc/mc/language/id/)\n"
|
||||
@ -2879,6 +2879,14 @@ msgid "Finished (ignored %zu directory)"
|
||||
msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Searching"
|
||||
msgstr ""
|
||||
|
||||
|
10
po/it.po
10
po/it.po
@ -11,7 +11,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-04-25 11:40+0300\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-05-30 09:39+0200\n"
|
||||
"Last-Translator: Marco Ciampa <ciampix@libero.it>\n"
|
||||
"Language-Team: Italian (http://www.transifex.com/projects/p/mc/language/"
|
||||
@ -3029,6 +3029,14 @@ msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] "Finito (ignorata %zu directory)"
|
||||
msgstr[1] "Finito (ignorate %zu directory)"
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr " Trova file "
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Cercando"
|
||||
|
||||
|
10
po/ja.po
10
po/ja.po
@ -11,7 +11,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Japanese (http://www.transifex.com/mc/mc/language/ja/)\n"
|
||||
@ -2854,6 +2854,14 @@ msgid "Finished (ignored %zu directory)"
|
||||
msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "ファイル検索"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "検索"
|
||||
|
||||
|
10
po/ka.po
10
po/ka.po
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Georgian (http://www.transifex.com/mc/mc/language/ka/)\n"
|
||||
@ -2840,6 +2840,14 @@ msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Searching"
|
||||
msgstr ""
|
||||
|
||||
|
10
po/kk.po
10
po/kk.po
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Kazakh (http://www.transifex.com/mc/mc/language/kk/)\n"
|
||||
@ -2837,6 +2837,14 @@ msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Searching"
|
||||
msgstr ""
|
||||
|
||||
|
10
po/ko.po
10
po/ko.po
@ -9,7 +9,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Korean (http://www.transifex.com/mc/mc/language/ko/)\n"
|
||||
@ -2846,6 +2846,14 @@ msgid "Finished (ignored %zu directory)"
|
||||
msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "파일 찾기"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "찾는 중"
|
||||
|
||||
|
10
po/lt.po
10
po/lt.po
@ -12,7 +12,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Lithuanian (http://www.transifex.com/mc/mc/language/lt/)\n"
|
||||
@ -2898,6 +2898,14 @@ msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
msgstr[3] ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Rasti failą"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Ieškoma"
|
||||
|
||||
|
10
po/lv.po
10
po/lv.po
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Latvian (http://www.transifex.com/mc/mc/language/lv/)\n"
|
||||
@ -2842,6 +2842,14 @@ msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Atrast Failu"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Meklēju"
|
||||
|
||||
|
10
po/mn.po
10
po/mn.po
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Mongolian (http://www.transifex.com/mc/mc/language/mn/)\n"
|
||||
@ -2839,6 +2839,14 @@ msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Файл хайх"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Хайж байна"
|
||||
|
||||
|
10
po/nb.po
10
po/nb.po
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Norwegian Bokmål (http://www.transifex.com/mc/mc/language/"
|
||||
@ -2840,6 +2840,14 @@ msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Finn fil"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Søker"
|
||||
|
||||
|
10
po/nl.po
10
po/nl.po
@ -14,7 +14,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Dutch (http://www.transifex.com/mc/mc/language/nl/)\n"
|
||||
@ -3029,6 +3029,14 @@ msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] "Klaar (%zu directorie genegeerd)"
|
||||
msgstr[1] "Klaar (%zu directories genegeerd)"
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Bestand zoeken"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Aan het zoeken"
|
||||
|
||||
|
10
po/pl.po
10
po/pl.po
@ -9,7 +9,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-05-01 15:44+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Polish (http://www.transifex.com/mc/mc/language/pl/)\n"
|
||||
@ -3037,6 +3037,14 @@ msgstr[1] "Ukończono (zignorowano %zu katalogi)"
|
||||
msgstr[2] "Ukończono (zignorowano %zu katalogów)"
|
||||
msgstr[3] "Ukończono (zignorowano %zu katalogów)"
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Znajdź plik"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Wyszukiwanie"
|
||||
|
||||
|
10
po/pt.po
10
po/pt.po
@ -11,7 +11,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 22:38+0000\n"
|
||||
"Last-Translator: Gilberto Jorge <gmj125@gmail.com>\n"
|
||||
"Language-Team: Portuguese (http://www.transifex.com/mc/mc/language/pt/)\n"
|
||||
@ -3033,6 +3033,14 @@ msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] "Terminado (%zu directório ignorado)"
|
||||
msgstr[1] "Terminado (%zu directórios ignorados)"
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Procurar Ficheiro"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "A procurar"
|
||||
|
||||
|
10
po/pt_BR.po
10
po/pt_BR.po
@ -13,7 +13,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/mc/mc/language/"
|
||||
@ -2965,6 +2965,14 @@ msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Procurar arquivo"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Procurando"
|
||||
|
||||
|
10
po/ro.po
10
po/ro.po
@ -15,7 +15,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Romanian (http://www.transifex.com/mc/mc/language/ro/)\n"
|
||||
@ -3035,6 +3035,14 @@ msgstr[0] "Finalizat (au fost ignorate %zu dosar)"
|
||||
msgstr[1] "Finalizat (au fost ignorate %zu dosare)"
|
||||
msgstr[2] "Finalizat (au fost ignorate %zu dosare)"
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Caută fișier"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Caut"
|
||||
|
||||
|
35
po/ru.po
35
po/ru.po
@ -3,30 +3,25 @@
|
||||
# This file is distributed under the same license as the mc package.
|
||||
#
|
||||
# Translators:
|
||||
# aborodin <aborodin@vmail.ru>, 2011
|
||||
# AlexL <loginov.alex.valer@gmail.com>, 2015-2017
|
||||
# Alex Tkachenko <alex@bcs.zp.ua>, 1998
|
||||
# and Alex Tkachenko <alex@bcs.zp.ua>, 1998
|
||||
# aborodin <aborodin@vmail.ru>, 2009-2012
|
||||
# Andrew V. Samoilov <sav@bcs.zp.ua>, 1999,2014
|
||||
# Anton Sergeevich Chumak <nightfast@yahoo.co.uk>, 2005
|
||||
# Dimitriy Ryazantcev <DJm00n@mail.ru>, 2015
|
||||
# Evgeny Bulgakov <bgav@netvision.net.il>, 1999
|
||||
# Ilia Maslakov <il.smind@gmail.com>, 2009
|
||||
# Mr GreyWolf, 2016
|
||||
# Mr.GreyWolf, 2016
|
||||
# NaiLi (aka jamesjames) Rootaerc <theism@mail.ru>, 2012
|
||||
# Piotr Drąg <piotrdrag@gmail.com>, 2018
|
||||
# Sergey Panov <sipan@mit.edu>, 1999
|
||||
# Simple88, 2016
|
||||
# Simple88, 2016
|
||||
# Slava Zanko <slavazanko@gmail.com>, 2009,2011
|
||||
# Andrew V. Samoilov <sav@bcs.zp.ua>, 1999, 2014
|
||||
# Valek Filippov <frob@df.ru>, 2000
|
||||
# Anton Sergeevich Chumak <nightfast@yahoo.co.uk>, 2005
|
||||
# Andrew Borodin <aborodin@vmail.ru>, 2011-2018
|
||||
# Ilia Maslakov <il.smind@gmail.com>, 2009
|
||||
# Slava Zanko <slavazanko@gmail.com>, 2009, 2011
|
||||
# AlexL <loginov.alex.valer@gmail.com>, 2015-2017
|
||||
# NaiLi (aka jamesjames) Rootaerc <theism@mail.ru>, 2012
|
||||
# Dimitriy Ryazantcev <DJm00n@mail.ru>, 2015
|
||||
# Simple88, 2016
|
||||
# Piotr Drąg <piotrdrag@gmail.com>, 2018
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Russian (http://www.transifex.com/mc/mc/language/ru/)\n"
|
||||
@ -3048,6 +3043,14 @@ msgstr[1] "Завершено (пропущено %zu каталога)"
|
||||
msgstr[2] "Завершено (пропущено %zu каталогов)"
|
||||
msgstr[3] "Завершено (пропущено %zu каталогов)"
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr "Поиск файла: \"%s\". Содержимое: \"%s\""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Поиск файла: \"%s\""
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Ищем"
|
||||
|
||||
|
10
po/sk.po
10
po/sk.po
@ -14,7 +14,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Slovak (http://www.transifex.com/mc/mc/language/sk/)\n"
|
||||
@ -3024,6 +3024,14 @@ msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
msgstr[3] ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Nájsť súbor"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Hľadá sa"
|
||||
|
||||
|
10
po/sl.po
10
po/sl.po
@ -10,7 +10,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Slovenian (http://www.transifex.com/mc/mc/language/sl/)\n"
|
||||
@ -2851,6 +2851,14 @@ msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
msgstr[3] ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Poišči datoteko"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Iščem"
|
||||
|
||||
|
10
po/sr.po
10
po/sr.po
@ -9,7 +9,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Serbian (http://www.transifex.com/mc/mc/language/sr/)\n"
|
||||
@ -3013,6 +3013,14 @@ msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Нађите датотеку"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Тражим"
|
||||
|
||||
|
10
po/sv.po
10
po/sv.po
@ -14,7 +14,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Swedish (http://www.transifex.com/mc/mc/language/sv/)\n"
|
||||
@ -3032,6 +3032,14 @@ msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] "Klar (ignorerade %zu katalog)"
|
||||
msgstr[1] "Klar (ignorerade %zu kataloger)"
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Sök Fil"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Söker"
|
||||
|
||||
|
10
po/szl.po
10
po/szl.po
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Silesian (http://www.transifex.com/mc/mc/language/szl/)\n"
|
||||
@ -2838,6 +2838,14 @@ msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Searching"
|
||||
msgstr ""
|
||||
|
||||
|
10
po/ta.po
10
po/ta.po
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Tamil (http://www.transifex.com/mc/mc/language/ta/)\n"
|
||||
@ -2837,6 +2837,14 @@ msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Searching"
|
||||
msgstr ""
|
||||
|
||||
|
10
po/te.po
10
po/te.po
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Telugu (http://www.transifex.com/mc/mc/language/te/)\n"
|
||||
@ -2836,6 +2836,14 @@ msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Searching"
|
||||
msgstr ""
|
||||
|
||||
|
10
po/tr.po
10
po/tr.po
@ -13,7 +13,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Turkish (http://www.transifex.com/mc/mc/language/tr/)\n"
|
||||
@ -3027,6 +3027,14 @@ msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Dosyayı bul"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Aranıyor"
|
||||
|
||||
|
10
po/uk.po
10
po/uk.po
@ -12,7 +12,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Ukrainian (http://www.transifex.com/mc/mc/language/uk/)\n"
|
||||
@ -3004,6 +3004,14 @@ msgstr[1] "Завершено (ігноровано %zu каталогів)"
|
||||
msgstr[2] "Завершено (ігноровано %zu каталогів)"
|
||||
msgstr[3] "Завершено (ігноровано %zu каталогів)"
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Знайти файл"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Виконується пошук"
|
||||
|
||||
|
10
po/vi.po
10
po/vi.po
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Vietnamese (http://www.transifex.com/mc/mc/language/vi/)\n"
|
||||
@ -2838,6 +2838,14 @@ msgid "Finished (ignored %zu directory)"
|
||||
msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Tìm tập tin"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Tìm"
|
||||
|
||||
|
10
po/wa.po
10
po/wa.po
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Walloon (http://www.transifex.com/mc/mc/language/wa/)\n"
|
||||
@ -2837,6 +2837,14 @@ msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "Trover Fitchî"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "Dji cwîr"
|
||||
|
||||
|
10
po/zh_CN.po
10
po/zh_CN.po
@ -17,7 +17,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-05-10 15:41+0000\n"
|
||||
"Last-Translator: Mingcong Bai <jeffbai@aosc.xyz>\n"
|
||||
"Language-Team: Chinese (China) (http://www.transifex.com/mc/mc/language/"
|
||||
@ -3026,6 +3026,14 @@ msgid "Finished (ignored %zu directory)"
|
||||
msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] "完成 (忽略 %zu 个目录)"
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "搜索文件"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "正在搜索"
|
||||
|
||||
|
10
po/zh_TW.po
10
po/zh_TW.po
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Midnight Commander\n"
|
||||
"Report-Msgid-Bugs-To: http://www.midnight-commander.org/\n"
|
||||
"POT-Creation-Date: 2018-05-27 21:58+0200\n"
|
||||
"POT-Creation-Date: 2018-09-09 19:12+0300\n"
|
||||
"PO-Revision-Date: 2018-04-30 12:37+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Chinese (Taiwan) (http://www.transifex.com/mc/mc/language/"
|
||||
@ -2839,6 +2839,14 @@ msgid "Finished (ignored %zu directory)"
|
||||
msgid_plural "Finished (ignored %zu directories)"
|
||||
msgstr[0] ""
|
||||
|
||||
#, c-format
|
||||
msgid "Find File: \"%s\". Content: \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
msgid "Find File: \"%s\""
|
||||
msgstr "尋找檔案"
|
||||
|
||||
msgid "Searching"
|
||||
msgstr "搜尋中"
|
||||
|
||||
|
@ -1821,9 +1821,6 @@ do_confirm_copy_move (const WPanel * panel, FileOperation operation, gboolean fo
|
||||
g_free (format);
|
||||
g_free (dest_dir);
|
||||
|
||||
if (ret == NULL || ret[0] == '\0')
|
||||
MC_PTR_FREE (ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -2370,7 +2367,8 @@ copy_file_file (file_op_total_context_t * tctx, file_op_context_t * ctx,
|
||||
}
|
||||
|
||||
/* try preallocate space; if fail, try copy anyway */
|
||||
while (vfs_preallocate (dest_desc, file_size, appending ? dst_stat.st_size : 0) != 0)
|
||||
while (mc_global.vfs.preallocate_space &&
|
||||
vfs_preallocate (dest_desc, file_size, appending ? dst_stat.st_size : 0) != 0)
|
||||
{
|
||||
if (ctx->skip_all)
|
||||
{
|
||||
|
@ -284,14 +284,12 @@ statvfs_works (void)
|
||||
#endif
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
static gboolean
|
||||
filegui__check_attrs_on_fs (const char *fs_path)
|
||||
{
|
||||
STRUCT_STATVFS stfs;
|
||||
|
||||
if (!copymove_persistent_attr)
|
||||
return FALSE;
|
||||
|
||||
#if USE_STATVFS && defined(STAT_STATVFS)
|
||||
if (statvfs_works () && statvfs (fs_path, &stfs) != 0)
|
||||
return TRUE;
|
||||
@ -1180,8 +1178,8 @@ file_mask_dialog (file_op_context_t * ctx, FileOperation operation,
|
||||
if (ctx == NULL)
|
||||
return NULL;
|
||||
|
||||
/* unselect checkbox if target filesystem don't support attributes */
|
||||
ctx->op_preserve = filegui__check_attrs_on_fs (def_text);
|
||||
/* unselect checkbox if target filesystem doesn't support attributes */
|
||||
ctx->op_preserve = copymove_persistent_attr && filegui__check_attrs_on_fs (def_text);
|
||||
ctx->stable_symlinks = FALSE;
|
||||
*do_bg = FALSE;
|
||||
|
||||
@ -1300,7 +1298,8 @@ file_mask_dialog (file_op_context_t * ctx, FileOperation operation,
|
||||
{
|
||||
g_free (def_text_secure);
|
||||
g_free (source_mask);
|
||||
return dest_dir;
|
||||
g_free (dest_dir);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ctx->search_handle = mc_search_new (source_mask, NULL);
|
||||
|
@ -74,6 +74,20 @@
|
||||
#include <stropts.h> /* For I_PUSH */
|
||||
#endif /* HAVE_STROPTS_H */
|
||||
|
||||
#ifdef HAVE_OPENPTY
|
||||
/* includes for openpty() */
|
||||
#if HAVE_PTY_H
|
||||
#include <pty.h>
|
||||
#endif
|
||||
#if HAVE_UTIL_H
|
||||
#include <util.h>
|
||||
#endif
|
||||
/* <sys/types.h> is a prerequisite of <libutil.h> on FreeBSD 8.0. */
|
||||
#if HAVE_LIBUTIL_H
|
||||
#include <libutil.h>
|
||||
#endif
|
||||
#endif /* HAVE_OPENPTY */
|
||||
|
||||
#include "lib/global.h"
|
||||
|
||||
#include "lib/unixcompat.h"
|
||||
@ -1026,6 +1040,15 @@ init_subshell (void)
|
||||
|
||||
/* FIXME: We may need to open a fresh pty each time on SVR4 */
|
||||
|
||||
#ifdef HAVE_OPENPTY
|
||||
if (openpty (&mc_global.tty.subshell_pty, &subshell_pty_slave, NULL, NULL, NULL))
|
||||
{
|
||||
fprintf (stderr, "Cannot open master and slave sides of pty: %s\n",
|
||||
unix_error_string (errno));
|
||||
mc_global.tty.use_subshell = FALSE;
|
||||
return;
|
||||
}
|
||||
#else
|
||||
mc_global.tty.subshell_pty = pty_open_master (pty_name);
|
||||
if (mc_global.tty.subshell_pty == -1)
|
||||
{
|
||||
@ -1041,6 +1064,7 @@ init_subshell (void)
|
||||
mc_global.tty.use_subshell = FALSE;
|
||||
return;
|
||||
}
|
||||
#endif /* HAVE_OPENPTY */
|
||||
|
||||
/* Create a pipe for receiving the subshell's CWD */
|
||||
|
||||
|
@ -52,23 +52,19 @@
|
||||
|
||||
/*** file scope macro definitions ****************************************************************/
|
||||
|
||||
#define SUP(super) ((cpio_super_data_t *) (super))
|
||||
|
||||
#define CPIO_POS(super) cpio_position
|
||||
/* If some time reentrancy should be needed change it to */
|
||||
/* #define CPIO_POS(super) (super)->u.arch.fd */
|
||||
|
||||
#define CPIO_SEEK_SET(super, where) \
|
||||
mc_lseek (((cpio_super_data_t *)(super)->data)->fd, \
|
||||
CPIO_POS(super) = (where), SEEK_SET)
|
||||
#define CPIO_SEEK_CUR(super, where) \
|
||||
mc_lseek (((cpio_super_data_t *)(super)->data)->fd, \
|
||||
CPIO_POS(super) += (where), SEEK_SET)
|
||||
#define CPIO_SEEK_SET(super, where) mc_lseek (SUP(super)->fd, CPIO_POS(super) = (where), SEEK_SET)
|
||||
#define CPIO_SEEK_CUR(super, where) mc_lseek (SUP(super)->fd, CPIO_POS(super) += (where), SEEK_SET)
|
||||
|
||||
#define MAGIC_LENGTH (6) /* How many bytes we have to read ahead */
|
||||
#define SEEKBACK CPIO_SEEK_CUR(super, ptr - top)
|
||||
#define RETURN(x) return (((cpio_super_data_t *)super->data)->type = (x))
|
||||
#define TYPEIS(x) \
|
||||
((((cpio_super_data_t *)super->data)->type == CPIO_UNKNOWN) || \
|
||||
(((cpio_super_data_t *)super->data)->type == (x)))
|
||||
#define RETURN(x) return (SUP(super)->type = (x))
|
||||
#define TYPEIS(x) ((SUP(super)->type == CPIO_UNKNOWN) || (SUP(super)->type == (x)))
|
||||
|
||||
#define HEAD_LENGTH (26)
|
||||
|
||||
@ -135,6 +131,8 @@ typedef struct
|
||||
|
||||
typedef struct
|
||||
{
|
||||
struct vfs_s_super base; /* base class */
|
||||
|
||||
int fd;
|
||||
struct stat st;
|
||||
int type; /* Type of the archive */
|
||||
@ -143,10 +141,12 @@ typedef struct
|
||||
|
||||
/*** file scope variables ************************************************************************/
|
||||
|
||||
static struct vfs_class vfs_cpiofs_ops;
|
||||
static struct vfs_s_subclass cpio_subclass;
|
||||
static struct vfs_class *vfs_cpiofs_ops = (struct vfs_class *) &cpio_subclass;
|
||||
|
||||
static off_t cpio_position;
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
/*** file scope functions ************************************************************************/
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
@ -172,7 +172,7 @@ cpio_defer_find (const void *a, const void *b)
|
||||
static ssize_t
|
||||
cpio_skip_padding (struct vfs_s_super *super)
|
||||
{
|
||||
switch (((cpio_super_data_t *) super->data)->type)
|
||||
switch (SUP (super)->type)
|
||||
{
|
||||
case CPIO_BIN:
|
||||
case CPIO_BINRE:
|
||||
@ -190,22 +190,33 @@ cpio_skip_padding (struct vfs_s_super *super)
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
static struct vfs_s_super *
|
||||
cpio_new_archive (struct vfs_class *me)
|
||||
{
|
||||
cpio_super_data_t *arch;
|
||||
|
||||
arch = g_new0 (cpio_super_data_t, 1);
|
||||
arch->base.me = me;
|
||||
arch->fd = -1; /* for now */
|
||||
arch->type = CPIO_UNKNOWN;
|
||||
|
||||
return VFS_SUPER (arch);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
static void
|
||||
cpio_free_archive (struct vfs_class *me, struct vfs_s_super *super)
|
||||
{
|
||||
cpio_super_data_t *arch = (cpio_super_data_t *) super->data;
|
||||
cpio_super_data_t *arch = SUP (super);
|
||||
|
||||
(void) me;
|
||||
|
||||
if (super->data == NULL)
|
||||
return;
|
||||
|
||||
if (arch->fd != -1)
|
||||
mc_close (arch->fd);
|
||||
arch->fd = -1;
|
||||
g_slist_free_full (arch->deferred, g_free);
|
||||
arch->deferred = NULL;
|
||||
MC_PTR_FREE (super->data);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
@ -226,12 +237,8 @@ cpio_open_cpio_file (struct vfs_class *me, struct vfs_s_super *super, const vfs_
|
||||
}
|
||||
|
||||
super->name = g_strdup (vfs_path_as_str (vpath));
|
||||
super->data = g_new (cpio_super_data_t, 1);
|
||||
arch = (cpio_super_data_t *) super->data;
|
||||
arch->fd = -1; /* for now */
|
||||
arch = SUP (super);
|
||||
mc_stat (vpath, &arch->st);
|
||||
arch->type = CPIO_UNKNOWN;
|
||||
arch->deferred = NULL;
|
||||
|
||||
type = get_compression_type (fd, super->name);
|
||||
if (type == COMPRESSION_NONE)
|
||||
@ -302,7 +309,7 @@ cpio_read_head (struct vfs_class *me, struct vfs_s_super *super)
|
||||
static ssize_t
|
||||
cpio_find_head (struct vfs_class *me, struct vfs_s_super *super)
|
||||
{
|
||||
cpio_super_data_t *arch = (cpio_super_data_t *) super->data;
|
||||
cpio_super_data_t *arch = SUP (super);
|
||||
char buf[BUF_SMALL * 2];
|
||||
ssize_t ptr = 0;
|
||||
ssize_t top;
|
||||
@ -366,7 +373,7 @@ cpio_find_head (struct vfs_class *me, struct vfs_s_super *super)
|
||||
static int
|
||||
cpio_create_entry (struct vfs_class *me, struct vfs_s_super *super, struct stat *st, char *name)
|
||||
{
|
||||
cpio_super_data_t *arch = (cpio_super_data_t *) super->data;
|
||||
cpio_super_data_t *arch = SUP (super);
|
||||
struct vfs_s_inode *inode = NULL;
|
||||
struct vfs_s_inode *root = super->root;
|
||||
struct vfs_s_entry *entry = NULL;
|
||||
@ -547,7 +554,7 @@ cpio_read_bin_head (struct vfs_class *me, struct vfs_s_super *super)
|
||||
short shorts[HEAD_LENGTH >> 1];
|
||||
} u;
|
||||
|
||||
cpio_super_data_t *arch = (cpio_super_data_t *) super->data;
|
||||
cpio_super_data_t *arch = SUP (super);
|
||||
ssize_t len;
|
||||
char *name;
|
||||
struct stat st;
|
||||
@ -611,7 +618,7 @@ cpio_read_bin_head (struct vfs_class *me, struct vfs_s_super *super)
|
||||
static ssize_t
|
||||
cpio_read_oldc_head (struct vfs_class *me, struct vfs_s_super *super)
|
||||
{
|
||||
cpio_super_data_t *arch = (cpio_super_data_t *) super->data;
|
||||
cpio_super_data_t *arch = SUP (super);
|
||||
struct new_cpio_header hd;
|
||||
union
|
||||
{
|
||||
@ -683,7 +690,7 @@ cpio_read_oldc_head (struct vfs_class *me, struct vfs_s_super *super)
|
||||
static ssize_t
|
||||
cpio_read_crc_head (struct vfs_class *me, struct vfs_s_super *super)
|
||||
{
|
||||
cpio_super_data_t *arch = (cpio_super_data_t *) super->data;
|
||||
cpio_super_data_t *arch = SUP (super);
|
||||
struct new_cpio_header hd;
|
||||
union
|
||||
{
|
||||
@ -824,16 +831,15 @@ cpio_super_same (const vfs_path_element_t * vpath_element, struct vfs_s_super *p
|
||||
return 0;
|
||||
|
||||
/* Has the cached archive been changed on the disk? */
|
||||
if (parc->data != NULL
|
||||
&& ((cpio_super_data_t *) parc->data)->st.st_mtime < archive_stat->st_mtime)
|
||||
if (parc != NULL && SUP (parc)->st.st_mtime < archive_stat->st_mtime)
|
||||
{
|
||||
/* Yes, reload! */
|
||||
(*vfs_cpiofs_ops.free) ((vfsid) parc);
|
||||
vfs_rmstamp (&vfs_cpiofs_ops, (vfsid) parc);
|
||||
vfs_cpiofs_ops->free ((vfsid) parc);
|
||||
vfs_rmstamp (vfs_cpiofs_ops, (vfsid) parc);
|
||||
return 2;
|
||||
}
|
||||
/* Hasn't been modified, give it a new timeout */
|
||||
vfs_stamp (&vfs_cpiofs_ops, (vfsid) parc);
|
||||
vfs_stamp (vfs_cpiofs_ops, (vfsid) parc);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -843,7 +849,7 @@ static ssize_t
|
||||
cpio_read (void *fh, char *buffer, size_t count)
|
||||
{
|
||||
off_t begin = FH->ino->data_offset;
|
||||
int fd = ((cpio_super_data_t *) FH_SUPER->data)->fd;
|
||||
int fd = SUP (FH_SUPER)->fd;
|
||||
struct vfs_class *me = FH_SUPER->me;
|
||||
ssize_t res;
|
||||
|
||||
@ -865,10 +871,9 @@ cpio_read (void *fh, char *buffer, size_t count)
|
||||
static int
|
||||
cpio_fh_open (struct vfs_class *me, vfs_file_handler_t * fh, int flags, mode_t mode)
|
||||
{
|
||||
(void) fh;
|
||||
(void) mode;
|
||||
|
||||
fh->data = NULL;
|
||||
|
||||
if ((flags & O_ACCMODE) != O_RDONLY)
|
||||
ERRNOR (EROFS, -1);
|
||||
return 0;
|
||||
@ -881,21 +886,20 @@ cpio_fh_open (struct vfs_class *me, vfs_file_handler_t * fh, int flags, mode_t m
|
||||
void
|
||||
init_cpiofs (void)
|
||||
{
|
||||
static struct vfs_s_subclass cpio_subclass;
|
||||
|
||||
cpio_subclass.flags = VFS_S_READONLY; /* FIXME: cpiofs used own temp files */
|
||||
cpio_subclass.archive_check = cpio_super_check;
|
||||
cpio_subclass.archive_same = cpio_super_same;
|
||||
cpio_subclass.new_archive = cpio_new_archive;
|
||||
cpio_subclass.open_archive = cpio_open_archive;
|
||||
cpio_subclass.free_archive = cpio_free_archive;
|
||||
cpio_subclass.fh_open = cpio_fh_open;
|
||||
|
||||
vfs_s_init_class (&vfs_cpiofs_ops, &cpio_subclass);
|
||||
vfs_cpiofs_ops.name = "cpiofs";
|
||||
vfs_cpiofs_ops.prefix = "ucpio";
|
||||
vfs_cpiofs_ops.read = cpio_read;
|
||||
vfs_cpiofs_ops.setctl = NULL;
|
||||
vfs_register_class (&vfs_cpiofs_ops);
|
||||
vfs_s_init_class (&cpio_subclass);
|
||||
vfs_cpiofs_ops->name = "cpiofs";
|
||||
vfs_cpiofs_ops->prefix = "ucpio";
|
||||
vfs_cpiofs_ops->read = cpio_read;
|
||||
vfs_cpiofs_ops->setctl = NULL;
|
||||
vfs_register_class (vfs_cpiofs_ops);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -117,12 +117,15 @@ int fish_directory_timeout = 900;
|
||||
#define FISH_HAVE_DATE_MDYT 32
|
||||
#define FISH_HAVE_TAIL 64
|
||||
|
||||
#define SUP ((fish_super_data_t *) super->data)
|
||||
#define SUP ((fish_super_data_t *) super)
|
||||
#define FISH_FH ((fish_fh_data_t *) fh)
|
||||
|
||||
/*** file scope type declarations ****************************************************************/
|
||||
|
||||
typedef struct
|
||||
{
|
||||
struct vfs_s_super base; /* base class */
|
||||
|
||||
int sockr;
|
||||
int sockw;
|
||||
char *scr_ls;
|
||||
@ -146,6 +149,8 @@ typedef struct
|
||||
|
||||
typedef struct
|
||||
{
|
||||
vfs_file_handler_t base; /* base class */
|
||||
|
||||
off_t got;
|
||||
off_t total;
|
||||
gboolean append;
|
||||
@ -155,7 +160,8 @@ typedef struct
|
||||
|
||||
static char reply_str[80];
|
||||
|
||||
static struct vfs_class vfs_fish_ops;
|
||||
static struct vfs_s_subclass fish_subclass;
|
||||
static struct vfs_class *vfs_fish_ops = (struct vfs_class *) &fish_subclass;
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
/*** file scope functions ************************************************************************/
|
||||
@ -343,7 +349,7 @@ fish_send_command (struct vfs_class *me, struct vfs_s_super *super, int flags, c
|
||||
va_start (ap, vars);
|
||||
r = fish_command_va (me, super, WAIT_REPLY, scr, vars, ap);
|
||||
va_end (ap);
|
||||
vfs_stamp_create (&vfs_fish_ops, super);
|
||||
vfs_stamp_create (vfs_fish_ops, super);
|
||||
|
||||
if (r != COMPLETE)
|
||||
ERRNOR (E_REMOTE, -1);
|
||||
@ -355,6 +361,19 @@ fish_send_command (struct vfs_class *me, struct vfs_s_super *super, int flags, c
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
static struct vfs_s_super *
|
||||
fish_new_archive (struct vfs_class *me)
|
||||
{
|
||||
fish_super_data_t *arch;
|
||||
|
||||
arch = g_new0 (fish_super_data_t, 1);
|
||||
arch->base.me = me;
|
||||
|
||||
return VFS_SUPER (arch);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
static void
|
||||
fish_free_archive (struct vfs_class *me, struct vfs_s_super *super)
|
||||
{
|
||||
@ -382,8 +401,6 @@ fish_free_archive (struct vfs_class *me, struct vfs_s_super *super)
|
||||
g_free (SUP->scr_append);
|
||||
g_free (SUP->scr_info);
|
||||
g_free (SUP->scr_env);
|
||||
g_free (SUP);
|
||||
super->data = NULL;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
@ -646,7 +663,6 @@ fish_open_archive (struct vfs_s_super *super,
|
||||
{
|
||||
(void) vpath;
|
||||
|
||||
super->data = g_new0 (fish_super_data_t, 1);
|
||||
super->path_element = vfs_path_element_clone (vpath_element);
|
||||
|
||||
if (strncmp (vpath_element->vfs_prefix, "rsh", 3) == 0)
|
||||
@ -944,7 +960,7 @@ fish_dir_load (struct vfs_class *me, struct vfs_s_inode *dir, char *remote_path)
|
||||
static int
|
||||
fish_file_store (struct vfs_class *me, vfs_file_handler_t * fh, char *name, char *localname)
|
||||
{
|
||||
fish_fh_data_t *fish = (fish_fh_data_t *) fh->data;
|
||||
fish_fh_data_t *fish = FISH_FH;
|
||||
struct vfs_s_super *super = FH_SUPER;
|
||||
int code;
|
||||
off_t total = 0;
|
||||
@ -1053,16 +1069,11 @@ fish_file_store (struct vfs_class *me, vfs_file_handler_t * fh, char *name, char
|
||||
static int
|
||||
fish_linear_start (struct vfs_class *me, vfs_file_handler_t * fh, off_t offset)
|
||||
{
|
||||
fish_fh_data_t *fish;
|
||||
fish_fh_data_t *fish = FISH_FH;
|
||||
struct vfs_s_super *super = FH_SUPER;
|
||||
char *name;
|
||||
char *quoted_name;
|
||||
|
||||
if (fh->data == NULL)
|
||||
fh->data = g_new0 (fish_fh_data_t, 1);
|
||||
|
||||
fish = (fish_fh_data_t *) fh->data;
|
||||
|
||||
name = vfs_s_fullpath (me, fh->ino);
|
||||
if (name == NULL)
|
||||
return 0;
|
||||
@ -1103,7 +1114,7 @@ fish_linear_start (struct vfs_class *me, vfs_file_handler_t * fh, off_t offset)
|
||||
static void
|
||||
fish_linear_abort (struct vfs_class *me, vfs_file_handler_t * fh)
|
||||
{
|
||||
fish_fh_data_t *fish = (fish_fh_data_t *) fh->data;
|
||||
fish_fh_data_t *fish = FISH_FH;
|
||||
struct vfs_s_super *super = FH_SUPER;
|
||||
char buffer[BUF_8K];
|
||||
ssize_t n;
|
||||
@ -1134,7 +1145,7 @@ fish_linear_abort (struct vfs_class *me, vfs_file_handler_t * fh)
|
||||
static ssize_t
|
||||
fish_linear_read (struct vfs_class *me, vfs_file_handler_t * fh, void *buf, size_t len)
|
||||
{
|
||||
fish_fh_data_t *fish = (fish_fh_data_t *) fh->data;
|
||||
fish_fh_data_t *fish = FISH_FH;
|
||||
struct vfs_s_super *super = FH_SUPER;
|
||||
ssize_t n = 0;
|
||||
|
||||
@ -1162,7 +1173,7 @@ fish_linear_read (struct vfs_class *me, vfs_file_handler_t * fh, void *buf, size
|
||||
static void
|
||||
fish_linear_close (struct vfs_class *me, vfs_file_handler_t * fh)
|
||||
{
|
||||
fish_fh_data_t *fish = (fish_fh_data_t *) fh->data;
|
||||
fish_fh_data_t *fish = FISH_FH;
|
||||
|
||||
if (fish->total != fish->got)
|
||||
fish_linear_abort (me, fh);
|
||||
@ -1357,7 +1368,8 @@ fish_chmod (const vfs_path_t * vpath, mode_t mode)
|
||||
|
||||
ret =
|
||||
fish_send_command (path_element->class, super, OPT_FLUSH, SUP->scr_chmod,
|
||||
"FISH_FILENAME=%s FISH_FILEMODE=%4.4o;\n", rpath, (int) (mode & 07777));
|
||||
"FISH_FILENAME=%s FISH_FILEMODE=%4.4o;\n", rpath,
|
||||
(unsigned int) (mode & 07777));
|
||||
|
||||
g_free (rpath);
|
||||
|
||||
@ -1612,11 +1624,15 @@ fish_rmdir (const vfs_path_t * vpath)
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
static void
|
||||
fish_fh_free_data (vfs_file_handler_t * fh)
|
||||
static vfs_file_handler_t *
|
||||
fish_fh_new (struct vfs_s_inode *ino, gboolean changed)
|
||||
{
|
||||
if (fh != NULL)
|
||||
MC_PTR_FREE (fh->data);
|
||||
fish_fh_data_t *fh;
|
||||
|
||||
fh = g_new0 (fish_fh_data_t, 1);
|
||||
vfs_s_init_fh ((vfs_file_handler_t *) fh, ino, changed);
|
||||
|
||||
return FH;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
@ -1624,13 +1640,10 @@ fish_fh_free_data (vfs_file_handler_t * fh)
|
||||
static int
|
||||
fish_fh_open (struct vfs_class *me, vfs_file_handler_t * fh, int flags, mode_t mode)
|
||||
{
|
||||
fish_fh_data_t *fish;
|
||||
fish_fh_data_t *fish = FISH_FH;
|
||||
|
||||
(void) mode;
|
||||
|
||||
fh->data = g_new0 (fish_fh_data_t, 1);
|
||||
fish = (fish_fh_data_t *) fh->data;
|
||||
|
||||
/* File will be written only, so no need to retrieve it */
|
||||
if (((flags & O_WRONLY) == O_WRONLY) && ((flags & (O_RDONLY | O_RDWR)) == 0))
|
||||
{
|
||||
@ -1662,7 +1675,6 @@ fish_fh_open (struct vfs_class *me, vfs_file_handler_t * fh, int flags, mode_t m
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
fish_fh_free_data (fh);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -1699,7 +1711,7 @@ fish_fill_names (struct vfs_class *me, fill_names_f func)
|
||||
}
|
||||
|
||||
name =
|
||||
g_strconcat (vfs_fish_ops.prefix, VFS_PATH_URL_DELIMITER,
|
||||
g_strconcat (vfs_fish_ops->prefix, VFS_PATH_URL_DELIMITER,
|
||||
super->path_element->user, "@", super->path_element->host, flags,
|
||||
PATH_SEP_STR, super->path_element->path, (char *) NULL);
|
||||
func (name);
|
||||
@ -1727,41 +1739,40 @@ fish_open (const vfs_path_t * vpath, int flags, mode_t mode)
|
||||
void
|
||||
init_fish (void)
|
||||
{
|
||||
static struct vfs_s_subclass fish_subclass;
|
||||
|
||||
tcp_init ();
|
||||
|
||||
fish_subclass.flags = VFS_S_REMOTE | VFS_S_USETMP;
|
||||
fish_subclass.archive_same = fish_archive_same;
|
||||
fish_subclass.new_archive = fish_new_archive;
|
||||
fish_subclass.open_archive = fish_open_archive;
|
||||
fish_subclass.free_archive = fish_free_archive;
|
||||
fish_subclass.fh_new = fish_fh_new;
|
||||
fish_subclass.fh_open = fish_fh_open;
|
||||
fish_subclass.fh_free_data = fish_fh_free_data;
|
||||
fish_subclass.dir_load = fish_dir_load;
|
||||
fish_subclass.file_store = fish_file_store;
|
||||
fish_subclass.linear_start = fish_linear_start;
|
||||
fish_subclass.linear_read = fish_linear_read;
|
||||
fish_subclass.linear_close = fish_linear_close;
|
||||
|
||||
vfs_s_init_class (&vfs_fish_ops, &fish_subclass);
|
||||
vfs_fish_ops.name = "fish";
|
||||
vfs_fish_ops.prefix = "sh";
|
||||
vfs_fish_ops.fill_names = fish_fill_names;
|
||||
vfs_fish_ops.stat = fish_stat;
|
||||
vfs_fish_ops.lstat = fish_lstat;
|
||||
vfs_fish_ops.fstat = fish_fstat;
|
||||
vfs_fish_ops.chmod = fish_chmod;
|
||||
vfs_fish_ops.chown = fish_chown;
|
||||
vfs_fish_ops.utime = fish_utime;
|
||||
vfs_fish_ops.open = fish_open;
|
||||
vfs_fish_ops.symlink = fish_symlink;
|
||||
vfs_fish_ops.link = fish_link;
|
||||
vfs_fish_ops.unlink = fish_unlink;
|
||||
vfs_fish_ops.rename = fish_rename;
|
||||
vfs_fish_ops.mkdir = fish_mkdir;
|
||||
vfs_fish_ops.rmdir = fish_rmdir;
|
||||
vfs_fish_ops.ctl = fish_ctl;
|
||||
vfs_register_class (&vfs_fish_ops);
|
||||
vfs_s_init_class (&fish_subclass);
|
||||
vfs_fish_ops->name = "fish";
|
||||
vfs_fish_ops->prefix = "sh";
|
||||
vfs_fish_ops->fill_names = fish_fill_names;
|
||||
vfs_fish_ops->stat = fish_stat;
|
||||
vfs_fish_ops->lstat = fish_lstat;
|
||||
vfs_fish_ops->fstat = fish_fstat;
|
||||
vfs_fish_ops->chmod = fish_chmod;
|
||||
vfs_fish_ops->chown = fish_chown;
|
||||
vfs_fish_ops->utime = fish_utime;
|
||||
vfs_fish_ops->open = fish_open;
|
||||
vfs_fish_ops->symlink = fish_symlink;
|
||||
vfs_fish_ops->link = fish_link;
|
||||
vfs_fish_ops->unlink = fish_unlink;
|
||||
vfs_fish_ops->rename = fish_rename;
|
||||
vfs_fish_ops->mkdir = fish_mkdir;
|
||||
vfs_fish_ops->rmdir = fish_rmdir;
|
||||
vfs_fish_ops->ctl = fish_ctl;
|
||||
vfs_register_class (vfs_fish_ops);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
@ -153,8 +153,9 @@ gboolean ftpfs_ignore_chattr_errors = TRUE;
|
||||
#define MAXHOSTNAMELEN 64
|
||||
#endif
|
||||
|
||||
#define SUP ((ftp_super_data_t *) super->data)
|
||||
#define FH_SOCK ((ftp_fh_data_t *) fh->data)->sock
|
||||
#define SUP ((ftp_super_data_t *) super)
|
||||
#define FTP_FH ((ftp_fh_data_t *) fh)
|
||||
#define FH_SOCK FTP_FH->sock
|
||||
|
||||
#ifndef INADDR_NONE
|
||||
#define INADDR_NONE 0xffffffff
|
||||
@ -203,6 +204,8 @@ typedef enum
|
||||
|
||||
typedef struct
|
||||
{
|
||||
struct vfs_s_super base; /* base class */
|
||||
|
||||
int sock;
|
||||
|
||||
char *proxy; /* proxy server, NULL if no proxy */
|
||||
@ -222,6 +225,8 @@ typedef struct
|
||||
|
||||
typedef struct
|
||||
{
|
||||
vfs_file_handler_t base; /* base class */
|
||||
|
||||
int sock;
|
||||
int append;
|
||||
} ftp_fh_data_t;
|
||||
@ -237,7 +242,8 @@ static struct linklist *connections_list;
|
||||
|
||||
static char reply_str[80];
|
||||
|
||||
static struct vfs_class vfs_ftpfs_ops;
|
||||
static struct vfs_s_subclass ftpfs_subclass;
|
||||
static struct vfs_class *vfs_ftpfs_ops = (struct vfs_class *) &ftpfs_subclass;
|
||||
|
||||
static GSList *no_proxy;
|
||||
|
||||
@ -558,6 +564,24 @@ ftpfs_command (struct vfs_class *me, struct vfs_s_super *super, int wait_reply,
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
static struct vfs_s_super *
|
||||
ftpfs_new_archive (struct vfs_class *me)
|
||||
{
|
||||
ftp_super_data_t *arch;
|
||||
|
||||
arch = g_new0 (ftp_super_data_t, 1);
|
||||
arch->base.me = me;
|
||||
arch->base.name = g_strdup (PATH_SEP_STR);
|
||||
arch->sock = -1;
|
||||
arch->use_passive_connection = ftpfs_use_passive_connections;
|
||||
arch->strict = ftpfs_use_unix_list_options ? RFC_AUTODETECT : RFC_STRICT;
|
||||
arch->isbinary = TYPE_UNKNOWN;
|
||||
|
||||
return VFS_SUPER (arch);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
static void
|
||||
ftpfs_free_archive (struct vfs_class *me, struct vfs_s_super *super)
|
||||
{
|
||||
@ -568,7 +592,6 @@ ftpfs_free_archive (struct vfs_class *me, struct vfs_s_super *super)
|
||||
close (SUP->sock);
|
||||
}
|
||||
g_free (SUP->current_dir);
|
||||
MC_PTR_FREE (super->data);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
@ -998,18 +1021,9 @@ ftpfs_open_archive (struct vfs_s_super *super,
|
||||
{
|
||||
(void) vpath;
|
||||
|
||||
super->data = g_new0 (ftp_super_data_t, 1);
|
||||
|
||||
super->path_element = ftpfs_correct_url_parameters (vpath_element);
|
||||
SUP->proxy = NULL;
|
||||
if (ftpfs_check_proxy (super->path_element->host))
|
||||
SUP->proxy = ftpfs_proxy_host;
|
||||
SUP->use_passive_connection = ftpfs_use_passive_connections;
|
||||
SUP->strict = ftpfs_use_unix_list_options ? RFC_AUTODETECT : RFC_STRICT;
|
||||
SUP->isbinary = TYPE_UNKNOWN;
|
||||
SUP->remote_is_amiga = 0;
|
||||
SUP->ctl_connection_busy = 0;
|
||||
super->name = g_strdup (PATH_SEP_STR);
|
||||
super->root =
|
||||
vfs_s_new_inode (vpath_element->class, super, ftpfs_default_stat (vpath_element->class));
|
||||
|
||||
@ -1839,7 +1853,7 @@ ftpfs_file_store (struct vfs_class *me, vfs_file_handler_t * fh, char *name, cha
|
||||
struct stat s;
|
||||
char *w_buf;
|
||||
struct vfs_s_super *super = FH_SUPER;
|
||||
ftp_fh_data_t *ftp = (ftp_fh_data_t *) fh->data;
|
||||
ftp_fh_data_t *ftp = FTP_FH;
|
||||
|
||||
h = open (localname, O_RDONLY);
|
||||
if (h == -1)
|
||||
@ -1923,9 +1937,6 @@ ftpfs_linear_start (struct vfs_class *me, vfs_file_handler_t * fh, off_t offset)
|
||||
{
|
||||
char *name;
|
||||
|
||||
if (fh->data == NULL)
|
||||
fh->data = g_new0 (ftp_fh_data_t, 1);
|
||||
|
||||
name = vfs_s_fullpath (me, fh->ino);
|
||||
if (name == NULL)
|
||||
return 0;
|
||||
@ -1934,7 +1945,7 @@ ftpfs_linear_start (struct vfs_class *me, vfs_file_handler_t * fh, off_t offset)
|
||||
if (FH_SOCK == -1)
|
||||
ERRNOR (EACCES, 0);
|
||||
fh->linear = LS_LINEAR_OPEN;
|
||||
((ftp_fh_data_t *) fh->data)->append = 0;
|
||||
FTP_FH->append = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -1995,7 +2006,7 @@ ftpfs_ctl (void *fh, int ctlop, void *arg)
|
||||
if (FH->linear == LS_LINEAR_CLOSED || FH->linear == LS_LINEAR_PREOPEN)
|
||||
return 0;
|
||||
|
||||
v = vfs_s_select_on_two (((ftp_fh_data_t *) (FH->data))->sock, 0);
|
||||
v = vfs_s_select_on_two (FH_SOCK, 0);
|
||||
return (((v < 0) && (errno == EINTR)) || v == 0) ? 1 : 0;
|
||||
}
|
||||
default:
|
||||
@ -2024,7 +2035,7 @@ ftpfs_send_command (const vfs_path_t * vpath, const char *cmd, int flags)
|
||||
p = ftpfs_translate_path (path_element->class, super, rpath);
|
||||
r = ftpfs_command (path_element->class, super, WAIT_REPLY, cmd, p);
|
||||
g_free (p);
|
||||
vfs_stamp_create (&vfs_ftpfs_ops, super);
|
||||
vfs_stamp_create (vfs_ftpfs_ops, super);
|
||||
if (flags & OPT_IGNORE_ERROR)
|
||||
r = COMPLETE;
|
||||
if (r != COMPLETE)
|
||||
@ -2186,11 +2197,16 @@ ftpfs_rmdir (const vfs_path_t * vpath)
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
static void
|
||||
ftpfs_fh_free_data (vfs_file_handler_t * fh)
|
||||
static vfs_file_handler_t *
|
||||
ftpfs_fh_new (struct vfs_s_inode *ino, gboolean changed)
|
||||
{
|
||||
if (fh != NULL)
|
||||
MC_PTR_FREE (fh->data);
|
||||
ftp_fh_data_t *fh;
|
||||
|
||||
fh = g_new0 (ftp_fh_data_t, 1);
|
||||
vfs_s_init_fh ((vfs_file_handler_t *) fh, ino, changed);
|
||||
fh->sock = -1;
|
||||
|
||||
return FH;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
@ -2198,12 +2214,10 @@ ftpfs_fh_free_data (vfs_file_handler_t * fh)
|
||||
static int
|
||||
ftpfs_fh_open (struct vfs_class *me, vfs_file_handler_t * fh, int flags, mode_t mode)
|
||||
{
|
||||
ftp_fh_data_t *ftp;
|
||||
ftp_fh_data_t *ftp = FTP_FH;
|
||||
|
||||
(void) mode;
|
||||
|
||||
fh->data = g_new0 (ftp_fh_data_t, 1);
|
||||
ftp = (ftp_fh_data_t *) fh->data;
|
||||
/* File will be written only, so no need to retrieve it from ftp server */
|
||||
if (((flags & O_WRONLY) == O_WRONLY) && ((flags & (O_RDONLY | O_RDWR)) == 0))
|
||||
{
|
||||
@ -2218,7 +2232,7 @@ ftpfs_fh_open (struct vfs_class *me, vfs_file_handler_t * fh, int flags, mode_t
|
||||
* to local temporary file and stored to ftp server
|
||||
* by vfs_s_close later
|
||||
*/
|
||||
if (((ftp_super_data_t *) (FH_SUPER->data))->ctl_connection_busy)
|
||||
if (((ftp_super_data_t *) FH_SUPER)->ctl_connection_busy)
|
||||
{
|
||||
if (!fh->ino->localname)
|
||||
{
|
||||
@ -2269,7 +2283,6 @@ ftpfs_fh_open (struct vfs_class *me, vfs_file_handler_t * fh, int flags, mode_t
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
ftpfs_fh_free_data (fh);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -2280,7 +2293,7 @@ ftpfs_fh_close (struct vfs_class *me, vfs_file_handler_t * fh)
|
||||
{
|
||||
if (fh->handle != -1 && !fh->ino->localname)
|
||||
{
|
||||
ftp_super_data_t *ftp = (ftp_super_data_t *) fh->ino->super->data;
|
||||
ftp_super_data_t *ftp = (ftp_super_data_t *) fh->ino->super;
|
||||
|
||||
close (fh->handle);
|
||||
fh->handle = -1;
|
||||
@ -2639,40 +2652,39 @@ ftpfs_init_passwd (void)
|
||||
void
|
||||
init_ftpfs (void)
|
||||
{
|
||||
static struct vfs_s_subclass ftpfs_subclass;
|
||||
|
||||
tcp_init ();
|
||||
|
||||
ftpfs_subclass.flags = VFS_S_REMOTE | VFS_S_USETMP;
|
||||
ftpfs_subclass.archive_same = ftpfs_archive_same;
|
||||
ftpfs_subclass.new_archive = ftpfs_new_archive;
|
||||
ftpfs_subclass.open_archive = ftpfs_open_archive;
|
||||
ftpfs_subclass.free_archive = ftpfs_free_archive;
|
||||
ftpfs_subclass.fh_new = ftpfs_fh_new;
|
||||
ftpfs_subclass.fh_open = ftpfs_fh_open;
|
||||
ftpfs_subclass.fh_close = ftpfs_fh_close;
|
||||
ftpfs_subclass.fh_free_data = ftpfs_fh_free_data;
|
||||
ftpfs_subclass.dir_load = ftpfs_dir_load;
|
||||
ftpfs_subclass.file_store = ftpfs_file_store;
|
||||
ftpfs_subclass.linear_start = ftpfs_linear_start;
|
||||
ftpfs_subclass.linear_read = ftpfs_linear_read;
|
||||
ftpfs_subclass.linear_close = ftpfs_linear_close;
|
||||
|
||||
vfs_s_init_class (&vfs_ftpfs_ops, &ftpfs_subclass);
|
||||
vfs_ftpfs_ops.name = "ftpfs";
|
||||
vfs_ftpfs_ops.flags = VFSF_NOLINKS;
|
||||
vfs_ftpfs_ops.prefix = "ftp";
|
||||
vfs_ftpfs_ops.done = &ftpfs_done;
|
||||
vfs_ftpfs_ops.fill_names = ftpfs_fill_names;
|
||||
vfs_ftpfs_ops.stat = ftpfs_stat;
|
||||
vfs_ftpfs_ops.lstat = ftpfs_lstat;
|
||||
vfs_ftpfs_ops.fstat = ftpfs_fstat;
|
||||
vfs_ftpfs_ops.chmod = ftpfs_chmod;
|
||||
vfs_ftpfs_ops.chown = ftpfs_chown;
|
||||
vfs_ftpfs_ops.unlink = ftpfs_unlink;
|
||||
vfs_ftpfs_ops.rename = ftpfs_rename;
|
||||
vfs_ftpfs_ops.mkdir = ftpfs_mkdir;
|
||||
vfs_ftpfs_ops.rmdir = ftpfs_rmdir;
|
||||
vfs_ftpfs_ops.ctl = ftpfs_ctl;
|
||||
vfs_register_class (&vfs_ftpfs_ops);
|
||||
vfs_s_init_class (&ftpfs_subclass);
|
||||
vfs_ftpfs_ops->name = "ftpfs";
|
||||
vfs_ftpfs_ops->flags = VFSF_NOLINKS;
|
||||
vfs_ftpfs_ops->prefix = "ftp";
|
||||
vfs_ftpfs_ops->done = &ftpfs_done;
|
||||
vfs_ftpfs_ops->fill_names = ftpfs_fill_names;
|
||||
vfs_ftpfs_ops->stat = ftpfs_stat;
|
||||
vfs_ftpfs_ops->lstat = ftpfs_lstat;
|
||||
vfs_ftpfs_ops->fstat = ftpfs_fstat;
|
||||
vfs_ftpfs_ops->chmod = ftpfs_chmod;
|
||||
vfs_ftpfs_ops->chown = ftpfs_chown;
|
||||
vfs_ftpfs_ops->unlink = ftpfs_unlink;
|
||||
vfs_ftpfs_ops->rename = ftpfs_rename;
|
||||
vfs_ftpfs_ops->mkdir = ftpfs_mkdir;
|
||||
vfs_ftpfs_ops->rmdir = ftpfs_rmdir;
|
||||
vfs_ftpfs_ops->ctl = ftpfs_ctl;
|
||||
vfs_register_class (vfs_ftpfs_ops);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
@ -52,6 +52,7 @@
|
||||
|
||||
#include "lib/vfs/vfs.h"
|
||||
#include "lib/vfs/utilvfs.h"
|
||||
#include "lib/vfs/xdirentry.h"
|
||||
#include "src/vfs/local/local.h"
|
||||
#include "lib/vfs/gc.h" /* vfs_stamp_create */
|
||||
|
||||
@ -100,7 +101,9 @@ typedef struct cachedfile
|
||||
/*** file scope variables ************************************************************************/
|
||||
|
||||
static GSList *head;
|
||||
static struct vfs_class vfs_sfs_ops;
|
||||
|
||||
static struct vfs_s_subclass sfs_subclass;
|
||||
static struct vfs_class *vfs_sfs_ops = (struct vfs_class *) &sfs_subclass;
|
||||
|
||||
static int sfs_no = 0;
|
||||
static char *sfs_prefix[MAXFS];
|
||||
@ -233,7 +236,7 @@ sfs_redirect (const vfs_path_t * vpath)
|
||||
if (cur != NULL)
|
||||
{
|
||||
cf = (cachedfile *) cur->data;
|
||||
vfs_stamp (&vfs_sfs_ops, cf);
|
||||
vfs_stamp (vfs_sfs_ops, cf);
|
||||
return cf->cache;
|
||||
}
|
||||
|
||||
@ -252,7 +255,7 @@ sfs_redirect (const vfs_path_t * vpath)
|
||||
head = g_slist_prepend (head, cf);
|
||||
vfs_path_free (cache_vpath);
|
||||
|
||||
vfs_stamp_create (&vfs_sfs_ops, (cachedfile *) head->data);
|
||||
vfs_stamp_create (vfs_sfs_ops, (cachedfile *) head->data);
|
||||
return cf->cache;
|
||||
}
|
||||
|
||||
@ -547,29 +550,32 @@ sfs_which (struct vfs_class *me, const char *path)
|
||||
void
|
||||
init_sfs (void)
|
||||
{
|
||||
vfs_sfs_ops.name = "sfs";
|
||||
vfs_sfs_ops.init = sfs_init;
|
||||
vfs_sfs_ops.done = sfs_done;
|
||||
vfs_sfs_ops.fill_names = sfs_fill_names;
|
||||
vfs_sfs_ops.which = sfs_which;
|
||||
vfs_sfs_ops.open = sfs_open;
|
||||
vfs_sfs_ops.close = local_close;
|
||||
vfs_sfs_ops.read = local_read;
|
||||
vfs_sfs_ops.stat = sfs_stat;
|
||||
vfs_sfs_ops.lstat = sfs_lstat;
|
||||
vfs_sfs_ops.fstat = local_fstat;
|
||||
vfs_sfs_ops.chmod = sfs_chmod;
|
||||
vfs_sfs_ops.chown = sfs_chown;
|
||||
vfs_sfs_ops.utime = sfs_utime;
|
||||
vfs_sfs_ops.readlink = sfs_readlink;
|
||||
vfs_sfs_ops.ferrno = local_errno;
|
||||
vfs_sfs_ops.lseek = local_lseek;
|
||||
vfs_sfs_ops.getid = sfs_getid;
|
||||
vfs_sfs_ops.nothingisopen = sfs_nothingisopen;
|
||||
vfs_sfs_ops.free = sfs_free;
|
||||
vfs_sfs_ops.getlocalcopy = sfs_getlocalcopy;
|
||||
vfs_sfs_ops.ungetlocalcopy = sfs_ungetlocalcopy;
|
||||
vfs_register_class (&vfs_sfs_ops);
|
||||
memset (&sfs_subclass, 0, sizeof (sfs_subclass));
|
||||
vfs_s_init_class (&sfs_subclass);
|
||||
|
||||
vfs_sfs_ops->name = "sfs";
|
||||
vfs_sfs_ops->init = sfs_init;
|
||||
vfs_sfs_ops->done = sfs_done;
|
||||
vfs_sfs_ops->fill_names = sfs_fill_names;
|
||||
vfs_sfs_ops->which = sfs_which;
|
||||
vfs_sfs_ops->open = sfs_open;
|
||||
vfs_sfs_ops->close = local_close;
|
||||
vfs_sfs_ops->read = local_read;
|
||||
vfs_sfs_ops->stat = sfs_stat;
|
||||
vfs_sfs_ops->lstat = sfs_lstat;
|
||||
vfs_sfs_ops->fstat = local_fstat;
|
||||
vfs_sfs_ops->chmod = sfs_chmod;
|
||||
vfs_sfs_ops->chown = sfs_chown;
|
||||
vfs_sfs_ops->utime = sfs_utime;
|
||||
vfs_sfs_ops->readlink = sfs_readlink;
|
||||
vfs_sfs_ops->ferrno = local_errno;
|
||||
vfs_sfs_ops->lseek = local_lseek;
|
||||
vfs_sfs_ops->getid = sfs_getid;
|
||||
vfs_sfs_ops->nothingisopen = sfs_nothingisopen;
|
||||
vfs_sfs_ops->free = sfs_free;
|
||||
vfs_sfs_ops->getlocalcopy = sfs_getlocalcopy;
|
||||
vfs_sfs_ops->ungetlocalcopy = sfs_ungetlocalcopy;
|
||||
vfs_register_class (vfs_sfs_ops);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
@ -354,19 +354,16 @@ sftpfs_get_config_entity (const vfs_path_element_t * vpath_element, GError ** mc
|
||||
void
|
||||
sftpfs_fill_connection_data_from_config (struct vfs_s_super *super, GError ** mcerror)
|
||||
{
|
||||
sftpfs_super_data_t *super_data;
|
||||
sftpfs_super_data_t *super_data = SUP;
|
||||
sftpfs_ssh_config_entity_t *config_entity;
|
||||
|
||||
mc_return_if_error (mcerror);
|
||||
|
||||
super_data = (sftpfs_super_data_t *) super->data;
|
||||
|
||||
config_entity = sftpfs_get_config_entity (super->path_element, mcerror);
|
||||
if (config_entity == NULL)
|
||||
return;
|
||||
|
||||
super_data->config_auth_type = NONE;
|
||||
super_data->config_auth_type |= (config_entity->pubkey_auth) ? PUBKEY : 0;
|
||||
super_data->config_auth_type = (config_entity->pubkey_auth) ? PUBKEY : 0;
|
||||
super_data->config_auth_type |= (config_entity->identities_only) ? 0 : AGENT;
|
||||
super_data->config_auth_type |= (config_entity->password_auth) ? PASSWORD : 0;
|
||||
|
||||
|
@ -167,11 +167,7 @@ static void
|
||||
sftpfs_recognize_auth_types (struct vfs_s_super *super)
|
||||
{
|
||||
char *userauthlist;
|
||||
sftpfs_super_data_t *super_data;
|
||||
|
||||
super_data = (sftpfs_super_data_t *) super->data;
|
||||
|
||||
super_data->auth_type = NONE;
|
||||
sftpfs_super_data_t *super_data = SUP;
|
||||
|
||||
/* check what authentication methods are available */
|
||||
/* userauthlist is internally managed by libssh2 and freed by libssh2_session_free() */
|
||||
@ -202,13 +198,12 @@ sftpfs_recognize_auth_types (struct vfs_s_super *super)
|
||||
static gboolean
|
||||
sftpfs_open_connection_ssh_agent (struct vfs_s_super *super, GError ** mcerror)
|
||||
{
|
||||
sftpfs_super_data_t *super_data;
|
||||
sftpfs_super_data_t *super_data = SUP;
|
||||
struct libssh2_agent_publickey *identity, *prev_identity = NULL;
|
||||
int rc;
|
||||
|
||||
mc_return_val_if_error (mcerror, FALSE);
|
||||
|
||||
super_data = (sftpfs_super_data_t *) super->data;
|
||||
super_data->agent = NULL;
|
||||
|
||||
if ((super_data->auth_type & AGENT) == 0)
|
||||
@ -255,14 +250,12 @@ sftpfs_open_connection_ssh_agent (struct vfs_s_super *super, GError ** mcerror)
|
||||
static gboolean
|
||||
sftpfs_open_connection_ssh_key (struct vfs_s_super *super, GError ** mcerror)
|
||||
{
|
||||
sftpfs_super_data_t *super_data;
|
||||
sftpfs_super_data_t *super_data = SUP;
|
||||
char *p, *passwd;
|
||||
gboolean ret_value = FALSE;
|
||||
|
||||
mc_return_val_if_error (mcerror, FALSE);
|
||||
|
||||
super_data = (sftpfs_super_data_t *) super->data;
|
||||
|
||||
if ((super_data->auth_type & PUBKEY) == 0)
|
||||
return FALSE;
|
||||
|
||||
@ -304,15 +297,13 @@ sftpfs_open_connection_ssh_key (struct vfs_s_super *super, GError ** mcerror)
|
||||
static gboolean
|
||||
sftpfs_open_connection_ssh_password (struct vfs_s_super *super, GError ** mcerror)
|
||||
{
|
||||
sftpfs_super_data_t *super_data;
|
||||
sftpfs_super_data_t *super_data = SUP;
|
||||
char *p, *passwd;
|
||||
gboolean ret_value = FALSE;
|
||||
int rc;
|
||||
|
||||
mc_return_val_if_error (mcerror, FALSE);
|
||||
|
||||
super_data = (sftpfs_super_data_t *) super->data;
|
||||
|
||||
if ((super_data->auth_type & PASSWORD) == 0)
|
||||
return FALSE;
|
||||
|
||||
@ -365,12 +356,10 @@ int
|
||||
sftpfs_open_connection (struct vfs_s_super *super, GError ** mcerror)
|
||||
{
|
||||
int rc;
|
||||
sftpfs_super_data_t *super_data;
|
||||
sftpfs_super_data_t *super_data = SUP;
|
||||
|
||||
mc_return_val_if_error (mcerror, -1);
|
||||
|
||||
super_data = (sftpfs_super_data_t *) super->data;
|
||||
|
||||
/*
|
||||
* The application code is responsible for creating the socket
|
||||
* and establishing the connection
|
||||
@ -436,15 +425,11 @@ sftpfs_open_connection (struct vfs_s_super *super, GError ** mcerror)
|
||||
void
|
||||
sftpfs_close_connection (struct vfs_s_super *super, const char *shutdown_message, GError ** mcerror)
|
||||
{
|
||||
sftpfs_super_data_t *super_data;
|
||||
sftpfs_super_data_t *super_data = SUP;
|
||||
|
||||
/* no mc_return_*_if_error() here because of abort open_connection handling too */
|
||||
(void) mcerror;
|
||||
|
||||
super_data = (sftpfs_super_data_t *) super->data;
|
||||
if (super_data == NULL)
|
||||
return;
|
||||
|
||||
if (super_data->sftp_session != NULL)
|
||||
{
|
||||
libssh2_sftp_shutdown (super_data->sftp_session);
|
||||
|
@ -78,7 +78,7 @@ sftpfs_opendir (const vfs_path_t * vpath, GError ** mcerror)
|
||||
if (vfs_s_get_path (vpath, &super, 0) == NULL)
|
||||
return NULL;
|
||||
|
||||
super_data = (sftpfs_super_data_t *) super->data;
|
||||
super_data = SUP;
|
||||
|
||||
while (TRUE)
|
||||
{
|
||||
@ -194,7 +194,7 @@ sftpfs_mkdir (const vfs_path_t * vpath, mode_t mode, GError ** mcerror)
|
||||
if (super == NULL)
|
||||
return -1;
|
||||
|
||||
super_data = (sftpfs_super_data_t *) super->data;
|
||||
super_data = SUP;
|
||||
if (super_data->sftp_session == NULL)
|
||||
return -1;
|
||||
|
||||
@ -244,7 +244,7 @@ sftpfs_rmdir (const vfs_path_t * vpath, GError ** mcerror)
|
||||
if (super == NULL)
|
||||
return -1;
|
||||
|
||||
super_data = (sftpfs_super_data_t *) super->data;
|
||||
super_data = SUP;
|
||||
if (super_data->sftp_session == NULL)
|
||||
return -1;
|
||||
|
||||
|
@ -39,10 +39,14 @@
|
||||
|
||||
/*** file scope macro definitions ****************************************************************/
|
||||
|
||||
#define SFTP_FH ((sftpfs_file_handler_data_t *) file_handler)
|
||||
|
||||
/*** file scope type declarations ****************************************************************/
|
||||
|
||||
typedef struct
|
||||
{
|
||||
vfs_file_handler_t base; /* base class */
|
||||
|
||||
LIBSSH2_SFTP_HANDLE *handle;
|
||||
int flags;
|
||||
mode_t mode;
|
||||
@ -62,13 +66,12 @@ typedef struct
|
||||
static void
|
||||
sftpfs_reopen (vfs_file_handler_t * file_handler, GError ** mcerror)
|
||||
{
|
||||
sftpfs_file_handler_data_t *file_handler_data;
|
||||
sftpfs_file_handler_data_t *file_handler_data = SFTP_FH;
|
||||
int flags;
|
||||
mode_t mode;
|
||||
|
||||
g_return_if_fail (mcerror == NULL || *mcerror == NULL);
|
||||
|
||||
file_handler_data = (sftpfs_file_handler_data_t *) file_handler->data;
|
||||
flags = file_handler_data->flags;
|
||||
mode = file_handler_data->mode;
|
||||
|
||||
@ -95,6 +98,19 @@ sftpfs_file__handle_error (sftpfs_super_data_t * super_data, int sftp_res, GErro
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
/*** public functions ****************************************************************************/
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
vfs_file_handler_t *
|
||||
sftpfs_fh_new (struct vfs_s_inode * ino, gboolean changed)
|
||||
{
|
||||
sftpfs_file_handler_data_t *fh;
|
||||
|
||||
fh = g_new0 (sftpfs_file_handler_data_t, 1);
|
||||
vfs_s_init_fh ((vfs_file_handler_t *) fh, ino, changed);
|
||||
|
||||
return FH;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
/**
|
||||
* Open new SFTP file.
|
||||
@ -112,19 +128,18 @@ sftpfs_open_file (vfs_file_handler_t * file_handler, int flags, mode_t mode, GEr
|
||||
unsigned long sftp_open_flags = 0;
|
||||
int sftp_open_mode = 0;
|
||||
gboolean do_append = FALSE;
|
||||
sftpfs_file_handler_data_t *file_handler_data;
|
||||
sftpfs_file_handler_data_t *file_handler_data = SFTP_FH;
|
||||
sftpfs_super_data_t *super_data;
|
||||
char *name;
|
||||
|
||||
(void) mode;
|
||||
mc_return_val_if_error (mcerror, FALSE);
|
||||
|
||||
name = vfs_s_fullpath (&sftpfs_class, file_handler->ino);
|
||||
name = vfs_s_fullpath (sftpfs_class, file_handler->ino);
|
||||
if (name == NULL)
|
||||
return FALSE;
|
||||
|
||||
super_data = (sftpfs_super_data_t *) file_handler->ino->super->data;
|
||||
file_handler_data = g_new0 (sftpfs_file_handler_data_t, 1);
|
||||
super_data = (sftpfs_super_data_t *) file_handler->ino->super;
|
||||
|
||||
if ((flags & O_CREAT) != 0 || (flags & O_WRONLY) != 0)
|
||||
{
|
||||
@ -171,7 +186,6 @@ sftpfs_open_file (vfs_file_handler_t * file_handler, int flags, mode_t mode, GEr
|
||||
|
||||
file_handler_data->flags = flags;
|
||||
file_handler_data->mode = mode;
|
||||
file_handler->data = file_handler_data;
|
||||
|
||||
if (do_append)
|
||||
{
|
||||
@ -212,9 +226,9 @@ sftpfs_fstat (void *data, struct stat *buf, GError ** mcerror)
|
||||
int res;
|
||||
LIBSSH2_SFTP_ATTRIBUTES attrs;
|
||||
vfs_file_handler_t *fh = (vfs_file_handler_t *) data;
|
||||
sftpfs_file_handler_data_t *sftpfs_fh = fh->data;
|
||||
sftpfs_file_handler_data_t *sftpfs_fh = (sftpfs_file_handler_data_t *) data;
|
||||
struct vfs_s_super *super = fh->ino->super;
|
||||
sftpfs_super_data_t *super_data = (sftpfs_super_data_t *) super->data;
|
||||
sftpfs_super_data_t *super_data = SUP;
|
||||
|
||||
mc_return_val_if_error (mcerror, -1);
|
||||
|
||||
@ -256,20 +270,19 @@ ssize_t
|
||||
sftpfs_read_file (vfs_file_handler_t * file_handler, char *buffer, size_t count, GError ** mcerror)
|
||||
{
|
||||
ssize_t rc;
|
||||
sftpfs_file_handler_data_t *file_handler_data;
|
||||
sftpfs_file_handler_data_t *file_handler_data = SFTP_FH;
|
||||
sftpfs_super_data_t *super_data;
|
||||
|
||||
mc_return_val_if_error (mcerror, -1);
|
||||
|
||||
if (file_handler == NULL || file_handler->data == NULL)
|
||||
if (file_handler == NULL)
|
||||
{
|
||||
mc_propagate_error (mcerror, 0, "%s",
|
||||
_("sftp: No file handler data present for reading file"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
file_handler_data = file_handler->data;
|
||||
super_data = (sftpfs_super_data_t *) file_handler->ino->super->data;
|
||||
super_data = (sftpfs_super_data_t *) file_handler->ino->super;
|
||||
|
||||
do
|
||||
{
|
||||
@ -308,13 +321,12 @@ sftpfs_write_file (vfs_file_handler_t * file_handler, const char *buffer, size_t
|
||||
GError ** mcerror)
|
||||
{
|
||||
ssize_t rc;
|
||||
sftpfs_file_handler_data_t *file_handler_data;
|
||||
sftpfs_file_handler_data_t *file_handler_data = SFTP_FH;
|
||||
sftpfs_super_data_t *super_data;
|
||||
|
||||
mc_return_val_if_error (mcerror, -1);
|
||||
|
||||
file_handler_data = (sftpfs_file_handler_data_t *) file_handler->data;
|
||||
super_data = (sftpfs_super_data_t *) file_handler->ino->super->data;
|
||||
super_data = (sftpfs_super_data_t *) file_handler->ino->super;
|
||||
|
||||
file_handler->pos = (off_t) libssh2_sftp_tell64 (file_handler_data->handle);
|
||||
|
||||
@ -349,19 +361,13 @@ sftpfs_write_file (vfs_file_handler_t * file_handler, const char *buffer, size_t
|
||||
int
|
||||
sftpfs_close_file (vfs_file_handler_t * file_handler, GError ** mcerror)
|
||||
{
|
||||
sftpfs_file_handler_data_t *file_handler_data;
|
||||
int ret = -1;
|
||||
int ret;
|
||||
|
||||
mc_return_val_if_error (mcerror, -1);
|
||||
|
||||
file_handler_data = (sftpfs_file_handler_data_t *) file_handler->data;
|
||||
if (file_handler_data != NULL)
|
||||
{
|
||||
ret = libssh2_sftp_close (file_handler_data->handle);
|
||||
g_free (file_handler_data);
|
||||
}
|
||||
ret = libssh2_sftp_close (SFTP_FH->handle);
|
||||
|
||||
return ret;
|
||||
return ret == 0 ? 0 : -1;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
@ -380,7 +386,7 @@ sftpfs_close_file (vfs_file_handler_t * file_handler, GError ** mcerror)
|
||||
off_t
|
||||
sftpfs_lseek (vfs_file_handler_t * file_handler, off_t offset, int whence, GError ** mcerror)
|
||||
{
|
||||
sftpfs_file_handler_data_t *file_handler_data;
|
||||
sftpfs_file_handler_data_t *file_handler_data = SFTP_FH;
|
||||
|
||||
mc_return_val_if_error (mcerror, 0);
|
||||
|
||||
@ -413,8 +419,6 @@ sftpfs_lseek (vfs_file_handler_t * file_handler, off_t offset, int whence, GErro
|
||||
break;
|
||||
}
|
||||
|
||||
file_handler_data = (sftpfs_file_handler_data_t *) file_handler->data;
|
||||
|
||||
libssh2_sftp_seek64 (file_handler_data->handle, file_handler->pos);
|
||||
file_handler->pos = (off_t) libssh2_sftp_tell64 (file_handler_data->handle);
|
||||
|
||||
|
@ -34,6 +34,9 @@
|
||||
|
||||
/*** global variables ****************************************************************************/
|
||||
|
||||
struct vfs_s_subclass sftpfs_subclass;
|
||||
struct vfs_class *sftpfs_class = (struct vfs_class *) &sftpfs_subclass;
|
||||
|
||||
/*** file scope macro definitions ****************************************************************/
|
||||
|
||||
/*** file scope type declarations ****************************************************************/
|
||||
@ -55,15 +58,10 @@ init_sftpfs (void)
|
||||
{
|
||||
tcp_init ();
|
||||
|
||||
sftpfs_init_class ();
|
||||
sftpfs_init_subclass ();
|
||||
|
||||
vfs_s_init_class (&sftpfs_class, &sftpfs_subclass);
|
||||
|
||||
sftpfs_init_class_callbacks ();
|
||||
sftpfs_init_subclass_callbacks ();
|
||||
|
||||
vfs_register_class (&sftpfs_class);
|
||||
vfs_s_init_class (&sftpfs_subclass);
|
||||
sftpfs_init_class ();
|
||||
vfs_register_class (sftpfs_class);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
@ -117,7 +117,7 @@ sftpfs_op_init (sftpfs_super_data_t ** super_data, const vfs_path_element_t ** p
|
||||
if (super == NULL)
|
||||
return FALSE;
|
||||
|
||||
*super_data = (sftpfs_super_data_t *) super->data;
|
||||
*super_data = SUP;
|
||||
|
||||
if ((*super_data)->sftp_session == NULL)
|
||||
return FALSE;
|
||||
|
@ -21,6 +21,8 @@
|
||||
#define LIBSSH2_INVALID_SOCKET -1
|
||||
#endif
|
||||
|
||||
#define SUP ((sftpfs_super_data_t *) super)
|
||||
|
||||
/*** enums ***************************************************************************************/
|
||||
|
||||
typedef enum
|
||||
@ -35,6 +37,8 @@ typedef enum
|
||||
|
||||
typedef struct
|
||||
{
|
||||
struct vfs_s_super base;
|
||||
|
||||
sftpfs_auth_type_t auth_type;
|
||||
sftpfs_auth_type_t config_auth_type;
|
||||
|
||||
@ -54,15 +58,13 @@ typedef struct
|
||||
/*** global variables defined in .c file *********************************************************/
|
||||
|
||||
extern GString *sftpfs_filename_buffer;
|
||||
extern struct vfs_class sftpfs_class;
|
||||
extern struct vfs_s_subclass sftpfs_subclass;
|
||||
extern struct vfs_class *sftpfs_class;
|
||||
|
||||
/*** declarations of public functions ************************************************************/
|
||||
|
||||
void sftpfs_init_class (void);
|
||||
void sftpfs_init_subclass (void);
|
||||
void sftpfs_init_class_callbacks (void);
|
||||
void sftpfs_init_subclass_callbacks (void);
|
||||
void sftpfs_init_config_variables_patterns (void);
|
||||
void sftpfs_deinit_config_variables_patterns (void);
|
||||
|
||||
@ -87,6 +89,8 @@ int sftpfs_open_connection (struct vfs_s_super *super, GError ** mcerror);
|
||||
void sftpfs_close_connection (struct vfs_s_super *super, const char *shutdown_message,
|
||||
GError ** mcerror);
|
||||
|
||||
vfs_file_handler_t *sftpfs_fh_new (struct vfs_s_inode *ino, gboolean changed);
|
||||
|
||||
void *sftpfs_opendir (const vfs_path_t * vpath, GError ** mcerror);
|
||||
void *sftpfs_readdir (void *data, GError ** mcerror);
|
||||
int sftpfs_closedir (void *data, GError ** mcerror);
|
||||
|
@ -36,8 +36,6 @@
|
||||
|
||||
/*** global variables ****************************************************************************/
|
||||
|
||||
struct vfs_class sftpfs_class;
|
||||
|
||||
/*** file scope macro definitions ****************************************************************/
|
||||
|
||||
/*** file scope type declarations ****************************************************************/
|
||||
@ -151,7 +149,6 @@ sftpfs_cb_open (const vfs_path_t * vpath, int flags, mode_t mode)
|
||||
file_handler->handle = -1;
|
||||
file_handler->changed = is_changed;
|
||||
file_handler->linear = LS_NOT_LINEAR;
|
||||
file_handler->data = NULL;
|
||||
|
||||
if (!sftpfs_open_file (file_handler, flags, mode, &mcerror))
|
||||
{
|
||||
@ -495,7 +492,7 @@ sftpfs_cb_close (void *data)
|
||||
|
||||
super->fd_usage--;
|
||||
if (super->fd_usage == 0)
|
||||
vfs_stamp_create (&sftpfs_class, super);
|
||||
vfs_stamp_create (sftpfs_class, super);
|
||||
|
||||
rc = sftpfs_close_file (file_handler, &mcerror);
|
||||
mc_error_message (&mcerror, NULL);
|
||||
@ -503,7 +500,7 @@ sftpfs_cb_close (void *data)
|
||||
if (file_handler->handle != -1)
|
||||
close (file_handler->handle);
|
||||
|
||||
vfs_s_free_inode (&sftpfs_class, file_handler->ino);
|
||||
vfs_s_free_inode (sftpfs_class, file_handler->ino);
|
||||
g_free (file_handler);
|
||||
|
||||
return rc;
|
||||
@ -684,50 +681,40 @@ sftpfs_cb_fill_names (struct vfs_class *me, fill_names_f func)
|
||||
void
|
||||
sftpfs_init_class (void)
|
||||
{
|
||||
memset (&sftpfs_class, 0, sizeof (sftpfs_class));
|
||||
sftpfs_class.name = "sftpfs";
|
||||
sftpfs_class.prefix = "sftp";
|
||||
sftpfs_class.flags = VFSF_NOLINKS;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
/**
|
||||
* Initialization of VFS class callbacks.
|
||||
*/
|
||||
|
||||
void
|
||||
sftpfs_init_class_callbacks (void)
|
||||
{
|
||||
sftpfs_class.init = sftpfs_cb_init;
|
||||
sftpfs_class.done = sftpfs_cb_done;
|
||||
|
||||
sftpfs_class.fill_names = sftpfs_cb_fill_names;
|
||||
|
||||
sftpfs_class.opendir = sftpfs_cb_opendir;
|
||||
sftpfs_class.readdir = sftpfs_cb_readdir;
|
||||
sftpfs_class.closedir = sftpfs_cb_closedir;
|
||||
sftpfs_class.mkdir = sftpfs_cb_mkdir;
|
||||
sftpfs_class.rmdir = sftpfs_cb_rmdir;
|
||||
|
||||
sftpfs_class.stat = sftpfs_cb_stat;
|
||||
sftpfs_class.lstat = sftpfs_cb_lstat;
|
||||
sftpfs_class.fstat = sftpfs_cb_fstat;
|
||||
sftpfs_class.readlink = sftpfs_cb_readlink;
|
||||
sftpfs_class.symlink = sftpfs_cb_symlink;
|
||||
sftpfs_class.link = sftpfs_cb_link;
|
||||
sftpfs_class.utime = sftpfs_cb_utime;
|
||||
sftpfs_class.mknod = sftpfs_cb_mknod;
|
||||
sftpfs_class.chown = sftpfs_cb_chown;
|
||||
sftpfs_class.chmod = sftpfs_cb_chmod;
|
||||
|
||||
sftpfs_class.open = sftpfs_cb_open;
|
||||
sftpfs_class.read = sftpfs_cb_read;
|
||||
sftpfs_class.write = sftpfs_cb_write;
|
||||
sftpfs_class.close = sftpfs_cb_close;
|
||||
sftpfs_class.lseek = sftpfs_cb_lseek;
|
||||
sftpfs_class.unlink = sftpfs_cb_unlink;
|
||||
sftpfs_class.rename = sftpfs_cb_rename;
|
||||
sftpfs_class.ferrno = sftpfs_cb_errno;
|
||||
sftpfs_class->name = "sftpfs";
|
||||
sftpfs_class->prefix = "sftp";
|
||||
sftpfs_class->flags = VFSF_NOLINKS;
|
||||
|
||||
sftpfs_class->init = sftpfs_cb_init;
|
||||
sftpfs_class->done = sftpfs_cb_done;
|
||||
|
||||
sftpfs_class->fill_names = sftpfs_cb_fill_names;
|
||||
|
||||
sftpfs_class->opendir = sftpfs_cb_opendir;
|
||||
sftpfs_class->readdir = sftpfs_cb_readdir;
|
||||
sftpfs_class->closedir = sftpfs_cb_closedir;
|
||||
sftpfs_class->mkdir = sftpfs_cb_mkdir;
|
||||
sftpfs_class->rmdir = sftpfs_cb_rmdir;
|
||||
|
||||
sftpfs_class->stat = sftpfs_cb_stat;
|
||||
sftpfs_class->lstat = sftpfs_cb_lstat;
|
||||
sftpfs_class->fstat = sftpfs_cb_fstat;
|
||||
sftpfs_class->readlink = sftpfs_cb_readlink;
|
||||
sftpfs_class->symlink = sftpfs_cb_symlink;
|
||||
sftpfs_class->link = sftpfs_cb_link;
|
||||
sftpfs_class->utime = sftpfs_cb_utime;
|
||||
sftpfs_class->mknod = sftpfs_cb_mknod;
|
||||
sftpfs_class->chown = sftpfs_cb_chown;
|
||||
sftpfs_class->chmod = sftpfs_cb_chmod;
|
||||
|
||||
sftpfs_class->open = sftpfs_cb_open;
|
||||
sftpfs_class->read = sftpfs_cb_read;
|
||||
sftpfs_class->write = sftpfs_cb_write;
|
||||
sftpfs_class->close = sftpfs_cb_close;
|
||||
sftpfs_class->lseek = sftpfs_cb_lseek;
|
||||
sftpfs_class->unlink = sftpfs_cb_unlink;
|
||||
sftpfs_class->rename = sftpfs_cb_rename;
|
||||
sftpfs_class->ferrno = sftpfs_cb_errno;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
@ -37,8 +37,6 @@
|
||||
|
||||
/*** global variables ****************************************************************************/
|
||||
|
||||
struct vfs_s_subclass sftpfs_subclass;
|
||||
|
||||
/*** file scope macro definitions ****************************************************************/
|
||||
|
||||
/*** file scope type declarations ****************************************************************/
|
||||
@ -67,7 +65,7 @@ sftpfs_cb_is_equal_connection (const vfs_path_element_t * vpath_element, struct
|
||||
(void) vpath;
|
||||
(void) cookie;
|
||||
|
||||
orig_connect_info = ((sftpfs_super_data_t *) super->data)->original_connection_info;
|
||||
orig_connect_info = ((sftpfs_super_data_t *) super)->original_connection_info;
|
||||
|
||||
result = ((g_strcmp0 (vpath_element->host, orig_connect_info->host) == 0)
|
||||
&& (g_strcmp0 (vpath_element->user, orig_connect_info->user) == 0)
|
||||
@ -76,6 +74,23 @@ sftpfs_cb_is_equal_connection (const vfs_path_element_t * vpath_element, struct
|
||||
return result;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
static struct vfs_s_super *
|
||||
sftpfs_cb_init_connection (struct vfs_class *me)
|
||||
{
|
||||
sftpfs_super_data_t *arch;
|
||||
|
||||
arch = g_new0 (sftpfs_super_data_t, 1);
|
||||
arch->base.me = me;
|
||||
arch->base.name = g_strdup (PATH_SEP_STR);
|
||||
arch->auth_type = NONE;
|
||||
arch->config_auth_type = NONE;
|
||||
arch->socket_handle = LIBSSH2_INVALID_SOCKET;
|
||||
|
||||
return VFS_SUPER (arch);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
/**
|
||||
* Callback for opening new connection.
|
||||
@ -91,7 +106,7 @@ sftpfs_cb_open_connection (struct vfs_s_super *super,
|
||||
const vfs_path_t * vpath, const vfs_path_element_t * vpath_element)
|
||||
{
|
||||
GError *mcerror = NULL;
|
||||
sftpfs_super_data_t *sftpfs_super_data;
|
||||
sftpfs_super_data_t *sftpfs_super_data = SUP;
|
||||
int ret_value;
|
||||
|
||||
(void) vpath;
|
||||
@ -103,10 +118,7 @@ sftpfs_cb_open_connection (struct vfs_s_super *super,
|
||||
return -1;
|
||||
}
|
||||
|
||||
sftpfs_super_data = g_new0 (sftpfs_super_data_t, 1);
|
||||
sftpfs_super_data->socket_handle = LIBSSH2_INVALID_SOCKET;
|
||||
sftpfs_super_data->original_connection_info = vfs_path_element_clone (vpath_element);
|
||||
super->data = sftpfs_super_data;
|
||||
super->path_element = vfs_path_element_clone (vpath_element);
|
||||
|
||||
sftpfs_fill_connection_data_from_config (super, &mcerror);
|
||||
@ -116,7 +128,6 @@ sftpfs_cb_open_connection (struct vfs_s_super *super,
|
||||
return -1;
|
||||
}
|
||||
|
||||
super->name = g_strdup (PATH_SEP_STR);
|
||||
super->root =
|
||||
vfs_s_new_inode (vpath_element->class, super,
|
||||
vfs_s_default_stat (vpath_element->class, S_IFDIR | 0755));
|
||||
@ -138,18 +149,13 @@ static void
|
||||
sftpfs_cb_close_connection (struct vfs_class *me, struct vfs_s_super *super)
|
||||
{
|
||||
GError *mcerror = NULL;
|
||||
sftpfs_super_data_t *sftpfs_super_data;
|
||||
|
||||
(void) me;
|
||||
sftpfs_close_connection (super, "Normal Shutdown", &mcerror);
|
||||
|
||||
sftpfs_super_data = (sftpfs_super_data_t *) super->data;
|
||||
if (sftpfs_super_data != NULL)
|
||||
vfs_path_element_free (sftpfs_super_data->original_connection_info);
|
||||
vfs_path_element_free (SUP->original_connection_info);
|
||||
|
||||
mc_error_message (&mcerror, NULL);
|
||||
|
||||
g_free (sftpfs_super_data);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
@ -186,19 +192,12 @@ sftpfs_init_subclass (void)
|
||||
{
|
||||
memset (&sftpfs_subclass, 0, sizeof (sftpfs_subclass));
|
||||
sftpfs_subclass.flags = VFS_S_REMOTE;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
/**
|
||||
* Initialization of VFS subclass callbacks.
|
||||
*/
|
||||
|
||||
void
|
||||
sftpfs_init_subclass_callbacks (void)
|
||||
{
|
||||
sftpfs_subclass.archive_same = sftpfs_cb_is_equal_connection;
|
||||
sftpfs_subclass.new_archive = sftpfs_cb_init_connection;
|
||||
sftpfs_subclass.open_archive = sftpfs_cb_open_connection;
|
||||
sftpfs_subclass.free_archive = sftpfs_cb_close_connection;
|
||||
sftpfs_subclass.fh_new = sftpfs_fh_new;
|
||||
sftpfs_subclass.dir_load = sftpfs_cb_dir_load;
|
||||
}
|
||||
|
||||
|
@ -61,6 +61,8 @@
|
||||
|
||||
/*** file scope macro definitions ****************************************************************/
|
||||
|
||||
#define SUP(super) ((tar_super_data_t *) (super))
|
||||
|
||||
/*
|
||||
* Header block on tape.
|
||||
*
|
||||
@ -215,6 +217,8 @@ typedef enum
|
||||
|
||||
typedef struct
|
||||
{
|
||||
struct vfs_s_super base; /* base class */
|
||||
|
||||
int fd;
|
||||
struct stat st;
|
||||
int type; /* Type of the archive */
|
||||
@ -222,13 +226,15 @@ typedef struct
|
||||
|
||||
/*** file scope variables ************************************************************************/
|
||||
|
||||
static struct vfs_class vfs_tarfs_ops;
|
||||
static struct vfs_s_subclass tarfs_subclass;
|
||||
static struct vfs_class *vfs_tarfs_ops = (struct vfs_class *) &tarfs_subclass;
|
||||
|
||||
/* As we open one archive at a time, it is safe to have this static */
|
||||
static off_t current_tar_position = 0;
|
||||
|
||||
static union record rec_buf;
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
/*** file scope functions ************************************************************************/
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
/**
|
||||
@ -262,19 +268,30 @@ tar_from_oct (int digs, const char *where)
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
static struct vfs_s_super *
|
||||
tar_new_archive (struct vfs_class *me)
|
||||
{
|
||||
tar_super_data_t *arch;
|
||||
|
||||
arch = g_new0 (tar_super_data_t, 1);
|
||||
arch->base.me = me;
|
||||
arch->fd = -1;
|
||||
arch->type = TAR_UNKNOWN;
|
||||
|
||||
return VFS_SUPER (arch);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
static void
|
||||
tar_free_archive (struct vfs_class *me, struct vfs_s_super *archive)
|
||||
{
|
||||
tar_super_data_t *arch = SUP (archive);
|
||||
|
||||
(void) me;
|
||||
|
||||
if (archive->data != NULL)
|
||||
{
|
||||
tar_super_data_t *arch = (tar_super_data_t *) archive->data;
|
||||
|
||||
if (arch->fd != -1)
|
||||
mc_close (arch->fd);
|
||||
g_free (archive->data);
|
||||
}
|
||||
if (arch->fd != -1)
|
||||
mc_close (arch->fd);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
@ -296,11 +313,8 @@ tar_open_archive_int (struct vfs_class *me, const vfs_path_t * vpath, struct vfs
|
||||
}
|
||||
|
||||
archive->name = g_strdup (vfs_path_as_str (vpath));
|
||||
archive->data = g_new (tar_super_data_t, 1);
|
||||
arch = (tar_super_data_t *) archive->data;
|
||||
arch = SUP (archive);
|
||||
mc_stat (vpath, &arch->st);
|
||||
arch->fd = -1;
|
||||
arch->type = TAR_UNKNOWN;
|
||||
|
||||
/* Find out the method to handle this tar file */
|
||||
type = get_compression_type (result, archive->name);
|
||||
@ -425,7 +439,7 @@ tar_checksum (const union record *header)
|
||||
static void
|
||||
tar_fill_stat (struct vfs_s_super *archive, struct stat *st, union record *header, size_t h_size)
|
||||
{
|
||||
tar_super_data_t *arch = (tar_super_data_t *) archive->data;
|
||||
tar_super_data_t *arch = SUP (archive);
|
||||
|
||||
st->st_mode = tar_from_oct (8, header->header.mode);
|
||||
|
||||
@ -515,7 +529,7 @@ tar_fill_stat (struct vfs_s_super *archive, struct stat *st, union record *heade
|
||||
static ReadStatus
|
||||
tar_read_header (struct vfs_class *me, struct vfs_s_super *archive, int tard, size_t * h_size)
|
||||
{
|
||||
tar_super_data_t *arch = (tar_super_data_t *) archive->data;
|
||||
tar_super_data_t *arch = SUP (archive);
|
||||
ReadStatus checksum_status;
|
||||
union record *header;
|
||||
static char *next_long_name = NULL, *next_long_link = NULL;
|
||||
@ -719,7 +733,7 @@ tar_read_header (struct vfs_class *me, struct vfs_s_super *archive, int tard, si
|
||||
|
||||
if (header->header.linkflag == LF_LINK)
|
||||
{
|
||||
inode = vfs_s_find_inode (me, archive, current_link_name, LINK_NO_FOLLOW, 0);
|
||||
inode = vfs_s_find_inode (me, archive, current_link_name, LINK_NO_FOLLOW, FL_NONE);
|
||||
if (inode == NULL)
|
||||
{
|
||||
message (D_ERROR, MSG_ERROR, _("Inconsistent tar archive"));
|
||||
@ -875,15 +889,15 @@ tar_super_same (const vfs_path_element_t * vpath_element, struct vfs_s_super *pa
|
||||
return 0;
|
||||
|
||||
/* Has the cached archive been changed on the disk? */
|
||||
if (((tar_super_data_t *) parc->data)->st.st_mtime < archive_stat->st_mtime)
|
||||
if (parc != NULL && SUP (parc)->st.st_mtime < archive_stat->st_mtime)
|
||||
{
|
||||
/* Yes, reload! */
|
||||
(*vfs_tarfs_ops.free) ((vfsid) parc);
|
||||
vfs_rmstamp (&vfs_tarfs_ops, (vfsid) parc);
|
||||
vfs_tarfs_ops->free ((vfsid) parc);
|
||||
vfs_rmstamp (vfs_tarfs_ops, (vfsid) parc);
|
||||
return 2;
|
||||
}
|
||||
/* Hasn't been modified, give it a new timeout */
|
||||
vfs_stamp (&vfs_tarfs_ops, (vfsid) parc);
|
||||
vfs_stamp (vfs_tarfs_ops, (vfsid) parc);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -893,7 +907,7 @@ static ssize_t
|
||||
tar_read (void *fh, char *buffer, size_t count)
|
||||
{
|
||||
off_t begin = FH->ino->data_offset;
|
||||
int fd = ((tar_super_data_t *) FH_SUPER->data)->fd;
|
||||
int fd = SUP (FH_SUPER)->fd;
|
||||
struct vfs_class *me = FH_SUPER->me;
|
||||
ssize_t res;
|
||||
|
||||
@ -930,21 +944,20 @@ tar_fh_open (struct vfs_class *me, vfs_file_handler_t * fh, int flags, mode_t mo
|
||||
void
|
||||
init_tarfs (void)
|
||||
{
|
||||
static struct vfs_s_subclass tarfs_subclass;
|
||||
|
||||
tarfs_subclass.flags = VFS_S_READONLY; /* FIXME: tarfs used own temp files */
|
||||
tarfs_subclass.archive_check = tar_super_check;
|
||||
tarfs_subclass.archive_same = tar_super_same;
|
||||
tarfs_subclass.new_archive = tar_new_archive;
|
||||
tarfs_subclass.open_archive = tar_open_archive;
|
||||
tarfs_subclass.free_archive = tar_free_archive;
|
||||
tarfs_subclass.fh_open = tar_fh_open;
|
||||
|
||||
vfs_s_init_class (&vfs_tarfs_ops, &tarfs_subclass);
|
||||
vfs_tarfs_ops.name = "tarfs";
|
||||
vfs_tarfs_ops.prefix = "utar";
|
||||
vfs_tarfs_ops.read = tar_read;
|
||||
vfs_tarfs_ops.setctl = NULL;
|
||||
vfs_register_class (&vfs_tarfs_ops);
|
||||
vfs_s_init_class (&tarfs_subclass);
|
||||
vfs_tarfs_ops->name = "tarfs";
|
||||
vfs_tarfs_ops->prefix = "utar";
|
||||
vfs_tarfs_ops->read = tar_read;
|
||||
vfs_tarfs_ops->setctl = NULL;
|
||||
vfs_register_class (vfs_tarfs_ops);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
@ -64,6 +64,7 @@
|
||||
|
||||
#include "lib/util.h"
|
||||
#include "lib/widget.h" /* message() */
|
||||
#include "lib/vfs/xdirentry.h"
|
||||
#include "lib/vfs/utilvfs.h"
|
||||
#include "lib/vfs/vfs.h"
|
||||
|
||||
@ -129,8 +130,11 @@ static char *block_buf;
|
||||
static const char *undelfserr = N_("undelfs: error");
|
||||
static int readdir_ptr;
|
||||
static int undelfs_usage;
|
||||
static struct vfs_class vfs_undelfs_ops;
|
||||
|
||||
static struct vfs_s_subclass undelfs_subclass;
|
||||
static struct vfs_class *vfs_undelfs_ops = (struct vfs_class *) &undelfs_subclass;
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
/*** file scope functions ************************************************************************/
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
@ -820,24 +824,27 @@ com_err (const char *whoami, long err_code, const char *fmt, ...)
|
||||
void
|
||||
init_undelfs (void)
|
||||
{
|
||||
vfs_undelfs_ops.name = "undelfs";
|
||||
vfs_undelfs_ops.prefix = "undel";
|
||||
vfs_undelfs_ops.init = undelfs_init;
|
||||
vfs_undelfs_ops.open = undelfs_open;
|
||||
vfs_undelfs_ops.close = undelfs_close;
|
||||
vfs_undelfs_ops.read = undelfs_read;
|
||||
vfs_undelfs_ops.opendir = undelfs_opendir;
|
||||
vfs_undelfs_ops.readdir = undelfs_readdir;
|
||||
vfs_undelfs_ops.closedir = undelfs_closedir;
|
||||
vfs_undelfs_ops.stat = undelfs_stat;
|
||||
vfs_undelfs_ops.lstat = undelfs_lstat;
|
||||
vfs_undelfs_ops.fstat = undelfs_fstat;
|
||||
vfs_undelfs_ops.chdir = undelfs_chdir;
|
||||
vfs_undelfs_ops.lseek = undelfs_lseek;
|
||||
vfs_undelfs_ops.getid = undelfs_getid;
|
||||
vfs_undelfs_ops.nothingisopen = undelfs_nothingisopen;
|
||||
vfs_undelfs_ops.free = undelfs_free;
|
||||
vfs_register_class (&vfs_undelfs_ops);
|
||||
memset (&undelfs_subclass, 0, sizeof (undelfs_subclass));
|
||||
vfs_s_init_class (&undelfs_subclass);
|
||||
|
||||
vfs_undelfs_ops->name = "undelfs";
|
||||
vfs_undelfs_ops->prefix = "undel";
|
||||
vfs_undelfs_ops->init = undelfs_init;
|
||||
vfs_undelfs_ops->open = undelfs_open;
|
||||
vfs_undelfs_ops->close = undelfs_close;
|
||||
vfs_undelfs_ops->read = undelfs_read;
|
||||
vfs_undelfs_ops->opendir = undelfs_opendir;
|
||||
vfs_undelfs_ops->readdir = undelfs_readdir;
|
||||
vfs_undelfs_ops->closedir = undelfs_closedir;
|
||||
vfs_undelfs_ops->stat = undelfs_stat;
|
||||
vfs_undelfs_ops->lstat = undelfs_lstat;
|
||||
vfs_undelfs_ops->fstat = undelfs_fstat;
|
||||
vfs_undelfs_ops->chdir = undelfs_chdir;
|
||||
vfs_undelfs_ops->lseek = undelfs_lseek;
|
||||
vfs_undelfs_ops->getid = undelfs_getid;
|
||||
vfs_undelfs_ops->nothingisopen = undelfs_nothingisopen;
|
||||
vfs_undelfs_ops->free = undelfs_free;
|
||||
vfs_register_class (vfs_undelfs_ops);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
Loading…
Reference in New Issue
Block a user