summaryrefslogtreecommitdiffstats
path: root/abs/extra/mc
diff options
context:
space:
mode:
Diffstat (limited to 'abs/extra/mc')
-rw-r--r--abs/extra/mc/PKGBUILD55
-rw-r--r--abs/extra/mc/mc-4.6.1-bash-all.patch33
-rw-r--r--abs/extra/mc/mc-4.6.1-find.patch155
-rw-r--r--abs/extra/mc/mc-4.6.1-invalid-mtime.patch30
-rw-r--r--abs/extra/mc/mc-4.6.1-largefile.patch194
-rw-r--r--abs/extra/mc/mc-4.6.1-nonblock.patch11
6 files changed, 478 insertions, 0 deletions
diff --git a/abs/extra/mc/PKGBUILD b/abs/extra/mc/PKGBUILD
new file mode 100644
index 0000000..e8b6b2f
--- /dev/null
+++ b/abs/extra/mc/PKGBUILD
@@ -0,0 +1,55 @@
+# $Id: PKGBUILD 3023 2008-06-18 02:32:22Z eric $
+# Maintainer: dorphell <dorphell@archlinux.org>
+# Committer: Judd Vinet <jvinet@zeroflux.org>
+# Contributor: Lucien Immink <l.immink@student.fnt.hvu.nl>
+pkgname=mc
+pkgver=4.6.1
+pkgrel=5
+pkgdesc="A filemanager/shell that emulates Norton Commander"
+arch=('i686' 'x86_64')
+url="http://www.ibiblio.org/mc/"
+license=('GPL')
+depends=('e2fsprogs' 'glib2' 'pcre' 'gpm>=1.20.4' 'slang')
+makedepends=('libxt' 'libx11')
+conflicts=('mc-utf8')
+replaces=('mc-utf8')
+options=('!emptydirs' '!makeflags')
+source=(http://www.ibiblio.org/pub/Linux/utils/file/managers/mc/${pkgname}-${pkgver}.tar.gz \
+ ftp://ftp.archlinux.org/other/mc/mc-4.6.1-utf8-r2.patch.bz2 \
+ mc-4.6.1-bash-all.patch mc-4.6.1-find.patch mc-4.6.1-invalid-mtime.patch \
+ mc-4.6.1-largefile.patch mc-4.6.1-nonblock.patch)
+md5sums=('18b20db6e40480a53bac2870c56fc3c4' 'f90bffe7f51883e818143dc2077eb98f'\
+ 'd0c5d1f7258daf2a86b41b185524dced' '3c950491cdf44091df216cfa709d133a'\
+ '81930cce827fe93639dcd6bff630a1a4' '80b45ecf38d9b5df6d368c83d14fd89d'\
+ '00e89cfc43fe6026b61f52b218a65907')
+
+build() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ patch -p1 < ../mc-4.6.1-find.patch || return 1
+ patch -p1 < ../mc-4.6.1-largefile.patch || return 1
+ patch -p1 < ../mc-4.6.1-invalid-mtime.patch || return 1
+ patch -p1 < ../mc-4.6.1-utf8-r2.patch || return 1
+ patch -p1 < ../mc-4.6.1-nonblock.patch || return 1
+ patch -p1 < ../mc-4.6.1-bash-all.patch || return 1
+
+# Prevent lazy bindings in cons.saver binary.
+# - not using bindnow-flags() because cons.saver is only built on GNU/Linux
+ sed -i -e "s:^\(cons_saver_LDADD = .*\):\1 -Wl,-z,now:" src/Makefile.in
+
+ ./configure --prefix=/usr --mandir=/usr/share/man \
+ --without-gnome --without-debug --with-screen=slang --without-included-gettext \
+ -enable-largefile --with-subshell --with-edit --with-vfs --with-samba --with-mmap \
+ --with-x --with-gpm-mouse --enable-charset
+ make || return 1
+ make DESTDIR=${pkgdir} install
+
+ iconv -f koi8-r -t utf8 ${pkgdir}/usr/share/mc/mc.hint.ru > ${pkgdir}/usr/share/mc/mc.hint.ru.tmp || return 1
+ mv ${pkgdir}/usr/share/mc/mc.hint.ru.tmp ${pkgdir}/usr/share/mc/mc.hint.ru
+
+ iconv -f koi8-r -t utf8 ${pkgdir}/usr/share/mc/mc.hlp.ru > ${pkgdir}/usr/share/mc/mc.hlp.ru.tmp || return 1
+ mv ${pkgdir}/usr/share/mc/mc.hlp.ru.tmp ${pkgdir}/usr/share/mc/mc.hlp.ru
+
+ # convert man pages to utf8
+ cd ${pkgdir}/usr/share/man/ru
+ find -type f | xargs -i123 -- sh -c "mv 123 123.old && iconv -f koi8-r -t utf8 123.old >123 && rm 123.old" || return 1
+}
diff --git a/abs/extra/mc/mc-4.6.1-bash-all.patch b/abs/extra/mc/mc-4.6.1-bash-all.patch
new file mode 100644
index 0000000..e3e2afc
--- /dev/null
+++ b/abs/extra/mc/mc-4.6.1-bash-all.patch
@@ -0,0 +1,33 @@
+--- /src/subshell.c.000 2006-05-08 23:11:48.000000000 +0200
++++ /src/subshell.c 2006-10-28 15:40:46.000000000 +0200
+@@ -745,29 +745,13 @@ subshell_name_quote (const char *s)
+ memcpy (d, cmd_start, len);
+ d += len;
+
+- /*
+- * Print every character in octal format with the leading backslash.
+- * tcsh and zsh may require 4-digit octals, bash < 2.05b doesn't like them.
+- */
+- if (subshell_type == BASH) {
+ for (; *s; s++) {
+- /* Must quote numbers, so that they are not glued to octals */
+ if (isalpha ((unsigned char) *s)) {
+ *d++ = (unsigned char) *s;
+ } else {
+- sprintf (d, "\\%03o", (unsigned char) *s);
+- d += 4;
+- }
+- }
+- } else {
+- for (; *s; s++) {
+- if (isalnum ((unsigned char) *s)) {
+- *d++ = (unsigned char) *s;
+- } else {
+ sprintf (d, "\\0%03o", (unsigned char) *s);
+ d += 5;
+ }
+- }
+ }
+
+ memcpy (d, common_end, sizeof (common_end));
+
diff --git a/abs/extra/mc/mc-4.6.1-find.patch b/abs/extra/mc/mc-4.6.1-find.patch
new file mode 100644
index 0000000..f44a6ac
--- /dev/null
+++ b/abs/extra/mc/mc-4.6.1-find.patch
@@ -0,0 +1,155 @@
+diff -Naur mc-4.6.1.orig/src/cmd.c mc-4.6.1/src/cmd.c
+--- mc-4.6.1.orig/src/cmd.c 2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1/src/cmd.c 2006-03-19 12:57:00.000000000 +0100
+@@ -510,7 +510,7 @@
+ continue;
+ }
+ c = regexp_match (reg_exp_t, current_panel->dir.list[i].fname,
+- match_file);
++ match_file, 0);
+ if (c == -1) {
+ message (1, MSG_ERROR, _(" Malformed regular expression "));
+ g_free (reg_exp);
+diff -Naur mc-4.6.1.orig/src/dir.c mc-4.6.1/src/dir.c
+--- mc-4.6.1.orig/src/dir.c 2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1/src/dir.c 2006-03-19 12:58:56.000000000 +0100
+@@ -405,7 +405,7 @@
+ *stale_link = 1;
+ }
+ if (!(S_ISDIR (buf1->st_mode) || *link_to_dir) && filter
+- && !regexp_match (filter, dp->d_name, match_file))
++ && !regexp_match (filter, dp->d_name, match_file, 0))
+ return 0;
+
+ /* Need to grow the *list? */
+diff -Naur mc-4.6.1.orig/src/ext.c mc-4.6.1/src/ext.c
+--- mc-4.6.1.orig/src/ext.c 2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1/src/ext.c 2006-03-19 13:00:43.000000000 +0100
+@@ -394,7 +394,7 @@
+ }
+
+ if (content_string[0]
+- && regexp_match (ptr, content_string + content_shift, match_regex)) {
++ && regexp_match (ptr, content_string + content_shift, match_regex, 0)) {
+ found = 1;
+ }
+
+@@ -534,11 +534,11 @@
+ /* Do not transform shell patterns, you can use shell/ for
+ * that
+ */
+- if (regexp_match (p, filename, match_regex))
++ if (regexp_match (p, filename, match_regex, 0))
+ found = 1;
+ } else if (!strncmp (p, "directory/", 10)) {
+ if (S_ISDIR (mystat.st_mode)
+- && regexp_match (p + 10, filename, match_regex))
++ && regexp_match (p + 10, filename, match_regex, 0))
+ found = 1;
+ } else if (!strncmp (p, "shell/", 6)) {
+ p += 6;
+diff -Naur mc-4.6.1.orig/src/find.c mc-4.6.1/src/find.c
+--- mc-4.6.1.orig/src/find.c 2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1/src/find.c 2006-03-19 13:04:10.000000000 +0100
+@@ -575,6 +575,7 @@
+ struct stat tmp_stat;
+ static int pos;
+ static int subdirs_left = 0;
++ int flags = 0;
+
+ if (!h) { /* someone forces me to close dirp */
+ if (dirp) {
+@@ -586,6 +587,10 @@
+ dp = 0;
+ return 1;
+ }
++
++ if (!(case_sense->state & C_BOOL))
++ flags |= REG_ICASE;
++
+ do_search_begin:
+ while (!dp){
+
+@@ -662,7 +667,7 @@
+ g_free (tmp_name);
+ }
+
+- if (regexp_match (find_pattern, dp->d_name, match_file)){
++ if (regexp_match (find_pattern, dp->d_name, match_file, flags)){
+ if (content_pattern) {
+ if (search_content (h, directory, dp->d_name)) {
+ return 1;
+diff -Naur mc-4.6.1.orig/src/user.c mc-4.6.1/src/user.c
+--- mc-4.6.1.orig/src/user.c 2005-07-01 17:47:07.000000000 +0200
++++ mc-4.6.1/src/user.c 2006-03-19 13:05:00.000000000 +0100
+@@ -412,18 +412,18 @@
+ break;
+ case 'f': /* file name pattern */
+ p = extract_arg (p, arg, sizeof (arg));
+- *condition = panel && regexp_match (arg, panel->dir.list [panel->selected].fname, match_file);
++ *condition = panel && regexp_match (arg, panel->dir.list [panel->selected].fname, match_file, 0);
+ break;
+ case 'y': /* syntax pattern */
+ if (edit_widget && edit_widget->syntax_type) {
+ p = extract_arg (p, arg, sizeof (arg));
+ *condition = panel &&
+- regexp_match (arg, edit_widget->syntax_type, match_normal);
++ regexp_match (arg, edit_widget->syntax_type, match_normal, 0);
+ }
+ break;
+ case 'd':
+ p = extract_arg (p, arg, sizeof (arg));
+- *condition = panel && regexp_match (arg, panel->cwd, match_file);
++ *condition = panel && regexp_match (arg, panel->cwd, match_file, 0);
+ break;
+ case 't':
+ p = extract_arg (p, arg, sizeof (arg));
+diff -Naur mc-4.6.1.orig/src/util.c mc-4.6.1/src/util.c
+--- mc-4.6.1.orig/src/util.c 2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1/src/util.c 2006-03-19 13:06:58.000000000 +0100
+@@ -563,27 +563,30 @@
+ return g_strdup (pattern);
+ }
+
+-int regexp_match (const char *pattern, const char *string, int match_type)
++int regexp_match (const char *pattern, const char *string, int match_type, int flags)
+ {
+ static regex_t r;
+ static char *old_pattern = NULL;
+ static int old_type;
++ static int old_flags;
+ int rval;
+ char *my_pattern;
+
+- if (!old_pattern || STRCOMP (old_pattern, pattern) || old_type != match_type){
++ if (!old_pattern || STRCOMP (old_pattern, pattern) || old_type != match_type || old_flags != flags){
+ if (old_pattern){
+ regfree (&r);
+ g_free (old_pattern);
+ old_pattern = NULL;
+ }
+ my_pattern = convert_pattern (pattern, match_type, 0);
+- if (regcomp (&r, my_pattern, REG_EXTENDED|REG_NOSUB|MC_ARCH_FLAGS)) {
++
++ if (regcomp (&r, my_pattern, REG_EXTENDED|REG_NOSUB|MC_ARCH_FLAGS|flags)) {
+ g_free (my_pattern);
+ return -1;
+ }
+ old_pattern = my_pattern;
+ old_type = match_type;
++ old_flags = flags;
+ }
+ rval = !regexec (&r, string, 0, NULL, 0);
+ return rval;
+diff -Naur mc-4.6.1.orig/src/util.h mc-4.6.1/src/util.h
+--- mc-4.6.1.orig/src/util.h 2005-01-13 20:20:47.000000000 +0100
++++ mc-4.6.1/src/util.h 2006-03-19 13:07:16.000000000 +0100
+@@ -116,7 +116,7 @@
+
+ extern int easy_patterns;
+ char *convert_pattern (const char *pattern, int match_type, int do_group);
+-int regexp_match (const char *pattern, const char *string, int match_type);
++int regexp_match (const char *pattern, const char *string, int match_type, int flags);
+
+ /* Error pipes */
+ void open_error_pipe (void);
diff --git a/abs/extra/mc/mc-4.6.1-invalid-mtime.patch b/abs/extra/mc/mc-4.6.1-invalid-mtime.patch
new file mode 100644
index 0000000..07b1f6d
--- /dev/null
+++ b/abs/extra/mc/mc-4.6.1-invalid-mtime.patch
@@ -0,0 +1,30 @@
+
+ Invalid timestamps on files caused mc to segfault by passing a null
+ pointer to strftime. Avoid trying to print the time in this case.
+
+ Reported by Maxim Britov <maxim@office.modum.by>
+ at http://bugs.gentoo.org/184296
+
+--- mc-4.6.1/src/util.c
++++ mc-4.6.1/src/util.c
+@@ -717,6 +717,7 @@
+ static size_t i18n_timelength = 0;
+ static const char *fmtyear, *fmttime;
+ const char *fmt;
++ struct tm *whentm;
+
+ if (i18n_timelength == 0){
+ i18n_timelength = i18n_checktimelength() + 1;
+@@ -740,7 +741,11 @@
+ else
+ fmt = fmttime;
+
+- strftime (timebuf, i18n_timelength, fmt, localtime(&when));
++ whentm = localtime(&when);
++ if (whentm == NULL)
++ return "(invalid)";
++
++ strftime (timebuf, i18n_timelength, fmt, whentm);
+ return timebuf;
+ }
+
diff --git a/abs/extra/mc/mc-4.6.1-largefile.patch b/abs/extra/mc/mc-4.6.1-largefile.patch
new file mode 100644
index 0000000..de30715
--- /dev/null
+++ b/abs/extra/mc/mc-4.6.1-largefile.patch
@@ -0,0 +1,194 @@
+diff -Naur mc-4.6.1.orig/intl/loadmsgcat.c mc-4.6.1/intl/loadmsgcat.c
+--- mc-4.6.1.orig/intl/loadmsgcat.c 2005-07-23 18:52:57.000000000 +0200
++++ mc-4.6.1/intl/loadmsgcat.c 2006-03-19 17:11:14.000000000 +0100
+@@ -1002,7 +1002,7 @@
+ /* The magic number is wrong: not a message catalog file. */
+ #ifdef HAVE_MMAP
+ if (use_mmap)
+- munmap ((caddr_t) data, size);
++ munmap ((void *) data, size);
+ else
+ #endif
+ free (data);
+@@ -1271,7 +1271,7 @@
+ free (domain->malloced);
+ #ifdef HAVE_MMAP
+ if (use_mmap)
+- munmap ((caddr_t) data, size);
++ munmap ((void *) data, size);
+ else
+ #endif
+ free (data);
+@@ -1306,7 +1306,7 @@
+
+ # ifdef _POSIX_MAPPED_FILES
+ if (domain->use_mmap)
+- munmap ((caddr_t) domain->data, domain->mmap_size);
++ munmap ((void *) domain->data, domain->mmap_size);
+ else
+ # endif /* _POSIX_MAPPED_FILES */
+ free ((void *) domain->data);
+diff -Naur mc-4.6.1.orig/src/view.c mc-4.6.1/src/view.c
+--- mc-4.6.1.orig/src/view.c 2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1/src/view.c 2006-03-19 17:10:34.000000000 +0100
+@@ -76,6 +76,12 @@
+ #define vwidth (view->widget.cols - (view->have_frame ? 2 : 0))
+ #define vheight (view->widget.lines - (view->have_frame ? 2 : 0))
+
++#if GLIB_MAJOR_VERSION >= 2
++# define my_g_malloc g_try_malloc
++#else
++# define my_g_malloc g_malloc
++#endif
++
+ /* Offset in bytes into a file */
+ typedef unsigned long offset_type;
+ #define INVALID_OFFSET ((offset_type) -1)
+@@ -560,8 +566,8 @@
+ view->data = mc_mmap (0, view->s.st_size, PROT_READ,
+ MAP_FILE | MAP_SHARED, view->file, 0);
+ else
+- view->data = (caddr_t) -1;
+- if ((caddr_t) view->data != (caddr_t) - 1) {
++ view->data = (void *) -1;
++ if (view->data != (void *)-1) {
+ /* mmap worked */
+ view->first = 0;
+ view->bytes_read = view->s.st_size;
+@@ -573,6 +579,9 @@
+ /* For the OSes that don't provide mmap call, try to load all the
+ * file into memory (alex@bcs.zaporizhzhe.ua). Also, mmap can fail
+ * for any reason, so we use this as fallback (pavel@ucw.cz) */
++
++ /* If large file support is enabled, st_size is a 64 bit value and
++ * will thus on 32 bit platforms possibly be beyond the range of gulong */
+
+ /* Make sure view->s.st_size is not truncated when passed to g_malloc */
+ if ((gulong) view->s.st_size == view->s.st_size)
+diff -Naur mc-4.6.1.orig/vfs/local.c mc-4.6.1/vfs/local.c
+--- mc-4.6.1.orig/vfs/local.c 2004-09-25 01:00:18.000000000 +0200
++++ mc-4.6.1/vfs/local.c 2006-03-19 17:00:45.000000000 +0100
+@@ -243,8 +243,8 @@
+ }
+
+ #ifdef HAVE_MMAP
+-caddr_t
+-local_mmap (struct vfs_class *me, caddr_t addr, size_t len, int prot, int flags, void *data, off_t offset)
++void *
++local_mmap (struct vfs_class *me, void *addr, size_t len, int prot, int flags, void *data, off_t offset)
+ {
+ int fd = * (int *)data;
+
+@@ -252,7 +252,7 @@
+ }
+
+ int
+-local_munmap (struct vfs_class *me, caddr_t addr, size_t len, void *data)
++local_munmap (struct vfs_class *me, void *addr, size_t len, void *data)
+ {
+ return munmap (addr, len);
+ }
+diff -Naur mc-4.6.1.orig/vfs/local.h mc-4.6.1/vfs/local.h
+--- mc-4.6.1.orig/vfs/local.h 2004-08-17 11:17:43.000000000 +0200
++++ mc-4.6.1/vfs/local.h 2006-03-19 17:01:35.000000000 +0100
+@@ -13,9 +13,9 @@
+ extern int local_errno (struct vfs_class *me);
+ extern int local_lseek (void *data, off_t offset, int whence);
+ #ifdef HAVE_MMAP
+-extern caddr_t local_mmap (struct vfs_class *me, caddr_t addr, size_t len,
++extern void *local_mmap (struct vfs_class *me, void *addr, size_t len,
+ int prot, int flags, void *data, off_t offset);
+-extern int local_munmap (struct vfs_class *me, caddr_t addr, size_t len, void *data);
++extern int local_munmap (struct vfs_class *me, void *addr, size_t len, void *data);
+ #endif
+
+ #endif
+diff -Naur mc-4.6.1.orig/vfs/samba/lib/util.c mc-4.6.1/vfs/samba/lib/util.c
+--- mc-4.6.1.orig/vfs/samba/lib/util.c 2005-05-27 16:19:19.000000000 +0200
++++ mc-4.6.1/vfs/samba/lib/util.c 2006-03-19 17:06:39.000000000 +0100
+@@ -1836,7 +1836,7 @@
+
+ /* Look up the host address in the address list we just got. */
+ for (i = 0; hp->h_addr_list[i]; i++) {
+- if (memcmp(hp->h_addr_list[i], (caddr_t) & addr, sizeof(addr)) == 0)
++ if (memcmp(hp->h_addr_list[i], &addr, sizeof(addr)) == 0)
+ return True;
+ }
+
+diff -Naur mc-4.6.1.orig/vfs/vfs.c mc-4.6.1/vfs/vfs.c
+--- mc-4.6.1.orig/vfs/vfs.c 2005-05-27 16:19:19.000000000 +0200
++++ mc-4.6.1/vfs/vfs.c 2006-03-19 17:03:48.000000000 +0100
+@@ -740,27 +740,27 @@
+
+ #ifdef HAVE_MMAP
+ static struct mc_mmapping {
+- caddr_t addr;
++ void *addr;
+ void *vfs_info;
+ struct vfs_class *vfs;
+ struct mc_mmapping *next;
+ } *mc_mmaparray = NULL;
+
+-caddr_t
+-mc_mmap (caddr_t addr, size_t len, int prot, int flags, int fd, off_t offset)
++void *
++mc_mmap (void *addr, size_t len, int prot, int flags, int fd, off_t offset)
+ {
+ struct vfs_class *vfs;
+- caddr_t result;
++ void *result;
+ struct mc_mmapping *mcm;
+
+ if (fd == -1)
+- return (caddr_t) -1;
++ return (void *) -1;
+
+ vfs = vfs_op (fd);
+- result = vfs->mmap ? (*vfs->mmap)(vfs, addr, len, prot, flags, vfs_info (fd), offset) : (caddr_t)-1;
+- if (result == (caddr_t)-1){
++ result = vfs->mmap ? (*vfs->mmap)(vfs, addr, len, prot, flags, vfs_info (fd), offset) : (void *)-1;
++ if (result == (void *)-1){
+ errno = ferrno (vfs);
+- return (caddr_t)-1;
++ return (void *)-1;
+ }
+ mcm =g_new (struct mc_mmapping, 1);
+ mcm->addr = result;
+@@ -772,7 +772,7 @@
+ }
+
+ int
+-mc_munmap (caddr_t addr, size_t len)
++mc_munmap (void *addr, size_t len)
+ {
+ struct mc_mmapping *mcm, *mcm2 = NULL;
+
+diff -Naur mc-4.6.1.orig/vfs/vfs.h mc-4.6.1/vfs/vfs.h
+--- mc-4.6.1.orig/vfs/vfs.h 2004-11-16 17:16:08.000000000 +0100
++++ mc-4.6.1/vfs/vfs.h 2006-03-19 17:05:57.000000000 +0100
+@@ -49,8 +49,8 @@
+ int mc_ctl (int fd, int ctlop, void *arg);
+ int mc_setctl (const char *path, int ctlop, void *arg);
+ #ifdef HAVE_MMAP
+-caddr_t mc_mmap (caddr_t, size_t, int, int, int, off_t);
+-int mc_munmap (caddr_t addr, size_t len);
++void *mc_mmap (void *, size_t, int, int, int, off_t);
++int mc_munmap (void *addr, size_t len);
+ #endif /* HAVE_MMAP */
+
+ /* Operations for mc_ctl - on open file */
+diff -Naur mc-4.6.1.orig/vfs/vfs-impl.h mc-4.6.1/vfs/vfs-impl.h
+--- mc-4.6.1.orig/vfs/vfs-impl.h 2004-09-02 15:57:59.000000000 +0200
++++ mc-4.6.1/vfs/vfs-impl.h 2006-03-19 17:12:01.000000000 +0100
+@@ -72,9 +72,9 @@
+ int (*setctl) (struct vfs_class *me, const char *path, int ctlop,
+ void *arg);
+ #ifdef HAVE_MMAP
+- caddr_t (*mmap) (struct vfs_class *me, caddr_t addr, size_t len,
++ void *(*mmap) (struct vfs_class *me, void *addr, size_t len,
+ int prot, int flags, void *vfs_info, off_t offset);
+- int (*munmap) (struct vfs_class *me, caddr_t addr, size_t len,
++ int (*munmap) (struct vfs_class *me, void *addr, size_t len,
+ void *vfs_info);
+ #endif
+ };
diff --git a/abs/extra/mc/mc-4.6.1-nonblock.patch b/abs/extra/mc/mc-4.6.1-nonblock.patch
new file mode 100644
index 0000000..eca34aa
--- /dev/null
+++ b/abs/extra/mc/mc-4.6.1-nonblock.patch
@@ -0,0 +1,11 @@
+--- mc-4.6.1/src/cons.saver.c.old 2006-04-30 20:45:11.725128977 +0200
++++ mc-4.6.1/src/cons.saver.c 2006-04-30 20:45:55.545063247 +0200
+@@ -134,7 +134,7 @@
+
+ if (seteuid (uid) < 0)
+ die ();
+- console_fd = open (tty_name, O_RDONLY);
++ console_fd = open (tty_name, O_RDONLY | O_NONBLOCK);
+ if (console_fd < 0)
+ die ();
+ if (fstat (console_fd, &st) < 0 || ! S_ISCHR (st.st_mode))