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:
Andrew Borodin 2018-09-09 19:18:03 +03:00
commit 4d7531ec3e
92 changed files with 1612 additions and 1124 deletions

View File

@ -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])

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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* */

View File

@ -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);

View File

@ -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);
}

View File

@ -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])

View File

@ -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"

View File

@ -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 "Пошук"

View File

@ -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 "Търся"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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 "

View File

@ -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 ""

View File

@ -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 "Αναζήτηση"

View File

@ -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 ""

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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 "در حال جستجو"

View File

@ -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 ""

View File

@ -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"

View File

@ -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 ""

View File

@ -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"

View File

@ -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 ""

View File

@ -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"

View File

@ -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"

View File

@ -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 ""

View File

@ -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"

View File

@ -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 "検索"

View File

@ -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 ""

View File

@ -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 ""

View File

@ -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 "찾는 중"

View File

@ -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"

View File

@ -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"

498
po/mc.pot

File diff suppressed because it is too large Load Diff

View File

@ -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 "Хайж байна"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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 "Ищем"

View File

@ -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"

View File

@ -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"

View File

@ -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 "Тражим"

View File

@ -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"

View File

@ -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 ""

View File

@ -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 ""

View File

@ -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 ""

View File

@ -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"

View File

@ -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 "Виконується пошук"

View File

@ -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"

View File

@ -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"

View File

@ -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 "正在搜索"

View File

@ -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 "搜尋中"

View File

@ -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)
{

View File

@ -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);

View File

@ -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 */

View File

@ -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

View File

@ -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);
}
/* --------------------------------------------------------------------------------------------- */

View File

@ -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);
}
/* --------------------------------------------------------------------------------------------- */

View File

@ -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);
}
/* --------------------------------------------------------------------------------------------- */

View File

@ -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;

View File

@ -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);

View File

@ -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;

View File

@ -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);

View File

@ -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);
}
/* --------------------------------------------------------------------------------------------- */

View File

@ -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;

View File

@ -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);

View File

@ -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;
}
/* --------------------------------------------------------------------------------------------- */

View File

@ -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;
}

View File

@ -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);
}
/* --------------------------------------------------------------------------------------------- */

View File

@ -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);
}
/* --------------------------------------------------------------------------------------------- */