[PATCH 2/3] Cygwin: tzcode resync v2: imports

2020-05-18 Thread Mark Geisert
Import most recent NetBSD localtime.c, private.h, and tzfile.h.

---
 winsup/cygwin/tzcode/localtime.c | 2493 ++
 winsup/cygwin/tzcode/private.h   |  795 ++
 winsup/cygwin/tzcode/tzfile.h|  174 +++
 3 files changed, 3462 insertions(+)
 create mode 100644 winsup/cygwin/tzcode/localtime.c
 create mode 100644 winsup/cygwin/tzcode/private.h
 create mode 100644 winsup/cygwin/tzcode/tzfile.h

diff --git a/winsup/cygwin/tzcode/localtime.c b/winsup/cygwin/tzcode/localtime.c
new file mode 100644
index 0..a4d02a4c7
--- /dev/null
+++ b/winsup/cygwin/tzcode/localtime.c
@@ -0,0 +1,2493 @@
+/* $NetBSD: localtime.c,v 1.122 2019/07/03 15:50:16 christos Exp $ */
+
+/* Convert timestamp from time_t to struct tm.  */
+
+/*
+** This file is in the public domain, so clarified as of
+** 1996-06-05 by Arthur David Olson.
+*/
+
+#include 
+#if defined(LIBC_SCCS) && !defined(lint)
+#if 0
+static charelsieid[] = "@(#)localtime.c8.17";
+#else
+__RCSID("$NetBSD: localtime.c,v 1.122 2019/07/03 15:50:16 christos Exp $");
+#endif
+#endif /* LIBC_SCCS and not lint */
+
+/*
+** Leap second handling from Bradley White.
+** POSIX-style TZ environment variable handling from Guy Harris.
+*/
+
+/*LINTLIBRARY*/
+
+#include "namespace.h"
+#include 
+#define LOCALTIME_IMPLEMENTATION
+#include "private.h"
+
+#include "tzfile.h"
+#include 
+
+#if NETBSD_INSPIRED
+# define NETBSD_INSPIRED_EXTERN
+#else
+# define NETBSD_INSPIRED_EXTERN static
+#endif
+
+#if defined(__weak_alias)
+__weak_alias(daylight,_daylight)
+__weak_alias(tzname,_tzname)
+#endif
+
+#ifndef TZ_ABBR_MAX_LEN
+#define TZ_ABBR_MAX_LEN16
+#endif /* !defined TZ_ABBR_MAX_LEN */
+
+#ifndef TZ_ABBR_CHAR_SET
+#define TZ_ABBR_CHAR_SET \
+   "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 :+-._"
+#endif /* !defined TZ_ABBR_CHAR_SET */
+
+#ifndef TZ_ABBR_ERR_CHAR
+#define TZ_ABBR_ERR_CHAR   '_'
+#endif /* !defined TZ_ABBR_ERR_CHAR */
+
+/*
+** SunOS 4.1.1 headers lack O_BINARY.
+*/
+
+#ifdef O_BINARY
+#define OPEN_MODE  (O_RDONLY | O_BINARY | O_CLOEXEC)
+#endif /* defined O_BINARY */
+#ifndef O_BINARY
+#define OPEN_MODE  (O_RDONLY | O_CLOEXEC)
+#endif /* !defined O_BINARY */
+
+#ifndef WILDABBR
+/*
+** Someone might make incorrect use of a time zone abbreviation:
+** 1.  They might reference tzname[0] before calling tzset (explicitly
+** or implicitly).
+** 2.  They might reference tzname[1] before calling tzset (explicitly
+** or implicitly).
+** 3.  They might reference tzname[1] after setting to a time zone
+** in which Daylight Saving Time is never observed.
+** 4.  They might reference tzname[0] after setting to a time zone
+** in which Standard Time is never observed.
+** 5.  They might reference tm.TM_ZONE after calling offtime.
+** What's best to do in the above cases is open to debate;
+** for now, we just set things up so that in any of the five cases
+** WILDABBR is used. Another possibility: initialize tzname[0] to the
+** string "tzname[0] used before set", and similarly for the other cases.
+** And another: initialize tzname[0] to "ERA", with an explanation in the
+** manual page of what this "time zone abbreviation" means (doing this so
+** that tzname[0] has the "normal" length of three characters).
+*/
+#define WILDABBR   "   "
+#endif /* !defined WILDABBR */
+
+static const char  wildabbr[] = WILDABBR;
+
+static const char  gmt[] = "GMT";
+
+/*
+** The DST rules to use if TZ has no rules and we can't load TZDEFRULES.
+** Default to US rules as of 2017-05-07.
+** POSIX does not specify the default DST rules;
+** for historical reasons, US rules are a common default.
+*/
+#ifndef TZDEFRULESTRING
+#define TZDEFRULESTRING ",M3.2.0,M11.1.0"
+#endif
+
+struct ttinfo {/* time type information */
+   int_fast32_ttt_utoff;   /* UT offset in seconds */
+   booltt_isdst;   /* used to set tm_isdst */
+   int tt_desigidx;/* abbreviation list index */
+   booltt_ttisstd; /* transition is std time */
+   booltt_ttisut;  /* transition is UT */
+};
+
+struct lsinfo {/* leap second information */
+   time_t  ls_trans;   /* transition time */
+   int_fast64_tls_corr;/* correction to apply */
+};
+
+#define SMALLEST(a, b) (((a) < (b)) ? (a) : (b))
+#define BIGGEST(a, b)  (((a) > (b)) ? (a) : (b))
+
+#ifdef TZNAME_MAX
+#define MY_TZNAME_MAX  TZNAME_MAX
+#endif /* defined TZNAME_MAX */
+#ifndef TZNAME_MAX
+#define MY_TZNAME_MAX  255
+#endif /* !defined TZNAME_MAX */
+
+#define state __state
+struct state {
+   int leapcnt;
+   int timecnt;
+   int typecnt;
+   int charcnt;
+   boolgoback;
+   boolgoahead;
+   time_t   

[PATCH 0/3] Cygwin: tzcode resync v2

2020-05-18 Thread Mark Geisert
This is a reorganization of the previous patch contents to cut down on
extraneous material.  It seems to be complete and could thus be applied
to a copy of the newlib-cygwin tree successfully for testing or review.

Methods of testing can be discussed by reply to this post, or on
cygwin-developers, whichever is most appropriate.  I'm also open to other
strategies of implementation if this one seems risky or unattractive for
some reason.

..mark

[PATCH 1/3] Cygwin: tzcode resync v2: basics
[PATCH 2/3] Cygwin: tzcode resync v2: imports
[PATCH 3/3] Cygwin: tzcode resync v2: details



[PATCH 3/3] Cygwin: tzcode resync v2: details

2020-05-18 Thread Mark Geisert
Add tz_posixrules.h with data generated from most recent Cygwin tzdata
package.  Establish localtime.cc as primarily a wrapper around a patched
copy of localtime.c.  See README for more information.

---
 winsup/cygwin/tzcode/README|  37 +++
 winsup/cygwin/tzcode/localtime.c.patch | 399 +
 winsup/cygwin/tzcode/localtime.cc  | 159 ++
 winsup/cygwin/tzcode/tz_posixrules.h   | 231 ++
 4 files changed, 826 insertions(+)
 create mode 100644 winsup/cygwin/tzcode/README
 create mode 100644 winsup/cygwin/tzcode/localtime.c.patch
 create mode 100644 winsup/cygwin/tzcode/localtime.cc
 create mode 100644 winsup/cygwin/tzcode/tz_posixrules.h

diff --git a/winsup/cygwin/tzcode/README b/winsup/cygwin/tzcode/README
new file mode 100644
index 0..dd01ac565
--- /dev/null
+++ b/winsup/cygwin/tzcode/README
@@ -0,0 +1,37 @@
+/*
+   How the code in this directory is supposed to work...
+   2020/05/13 Mark Geisert 
+
+   localtime.cc is the Cygwin-specific module that is compiled into
+   the Cygwin DLL when the latter is built.  It's just a wrapper that
+   #defines a bunch of stuff then #includes localtime.c.
+
+   localtime.c, at any point in time, is a reasonably recent version
+   of /src/lib/libc/time/localtime.c from NetBSD.  The same goes for
+   private.h and tzfile.h.
+
+   The idea is that in the future, one just needs to bring over newer
+   versions of localtime.c, private.h, and/or tzfile.h from NetBSD as
+   they become available.
+
+   With luck, you can drop those files into this directory and they
+   can be immediately used to build a newer Cygwin DLL that has the
+   newer NetBSD functionality.  Without luck, you'll have to tweak the
+   wrapper localtime.cc.  In the worst case, some other strategy will
+   need to be figured out, such as manually pulling out the parts of
+   the NetBSD code Cygwin needs to build a stand-alone localtime.cc.
+
+   Re tz_posixrules.h: The data elements can be generated from
+   /usr/share/zoneinfo/posixrules in any version of Cygwin's tzdata
+   package.  Instructions are in the comment leading tz_posixrules.h.
+
+   Addendum:
+   Implementation of the strategy above has uncovered a small number
+   of NetBSD-isms in localtime.c that cannot be worked around with
+   preprocessor tricks.  So there is another file localtime.c.patched
+   that holds just these adjustments for Cygwin, and it's this file
+   that localtime.cc #includes.  localtime.c.patched is generated by
+   winsup/cygwin/Makefile[.in] operating with localtime.c.patch.
+
+   ..mark
+*/
diff --git a/winsup/cygwin/tzcode/localtime.c.patch 
b/winsup/cygwin/tzcode/localtime.c.patch
new file mode 100644
index 0..a17d9ee90
--- /dev/null
+++ b/winsup/cygwin/tzcode/localtime.c.patch
@@ -0,0 +1,399 @@
+*** localtime.c2020-05-16 21:54:00.533111800 -0700
+--- localtime.c.patched2020-05-16 22:42:40.486924300 -0700
+***
+*** 1,3 
+--- 1,4 
++ // localtime.c.patched: based on NetBSD's localtime.c version 1.122
+  /*   $NetBSD: localtime.c,v 1.122 2019/07/03 15:50:16 christos Exp $ */
+  
+  /* Convert timestamp from time_t to struct tm.  */
+***
+*** 23,29 
+  
+  /*LINTLIBRARY*/
+  
+- #include "namespace.h"
+  #include 
+  #define LOCALTIME_IMPLEMENTATION
+  #include "private.h"
+--- 24,29 
+***
+*** 182,188 
+  
+  
+  #if !defined(__LIBC12_SOURCE__)
+! timezone_t __lclptr;
+  #ifdef _REENTRANT
+  rwlock_t __lcl_lock = RWLOCK_INITIALIZER;
+  #endif
+--- 182,188 
+  
+  
+  #if !defined(__LIBC12_SOURCE__)
+! static timezone_t __lclptr;
+  #ifdef _REENTRANT
+  rwlock_t __lcl_lock = RWLOCK_INITIALIZER;
+  #endif
+***
+*** 198,204 
+  
+  static struct tm tm;
+  
+! #if !HAVE_POSIX_DECLS || TZ_TIME_T || defined(__NetBSD__)
+  # if !defined(__LIBC12_SOURCE__)
+  
+  __aconst char *  tzname[2] = {
+--- 198,204 
+  
+  static struct tm tm;
+  
+! #if !HAVE_POSIX_DECLS || TZ_TIME_T || defined(__NetBSD__) || 
defined(__CYGWIN__)
+  # if !defined(__LIBC12_SOURCE__)
+  
+  __aconst char *  tzname[2] = {
+***
+*** 413,419 
+  };
+  
+  /* TZDIR with a trailing '/' rather than a trailing '\0'.  */
+! static char const tzdirslash[sizeof TZDIR] = TZDIR "/";
+  
+  /* Local storage needed for 'tzloadbody'.  */
+  union local_storage {
+--- 413,420 
+  };
+  
+  /* TZDIR with a trailing '/' rather than a trailing '\0'.  */
+! static char const tzdirslash[] = TZDIR "/";
+! #define sizeof_tzdirslash (sizeof tzdirslash - 1)
+  
+  /* Local storage needed for 'tzloadbody'.  */
+  union local_storage {
+***
+*** 428,434 
+  
+   /* The file name to be opened.  */
+   char fullname[/*CONSTCOND*/BIGGEST(sizeof (struct file_analysis),
+!  sizeof tzdirslash + 1024)];
+  };
+  
+  /* Load 

[PATCH 1/3] Cygwin: tzcode resync v2: basics

2020-05-18 Thread Mark Geisert
Modifies winsup/cygwin/Makefile.in to build localtime.o from items in
new winsup/cygwin/tzcode subdirectory.  Removes existing localtime.cc
and tz_posixrules.h from winsup/cygwin as they are superseded by the
following patches.

---
 winsup/cygwin/Makefile.in |   12 +-
 winsup/cygwin/localtime.cc| 2597 -
 winsup/cygwin/tz_posixrules.h |   48 -
 3 files changed, 10 insertions(+), 2647 deletions(-)
 delete mode 100644 winsup/cygwin/localtime.cc
 delete mode 100644 winsup/cygwin/tz_posixrules.h

diff --git a/winsup/cygwin/Makefile.in b/winsup/cygwin/Makefile.in
index f273ba793..59434a930 100644
--- a/winsup/cygwin/Makefile.in
+++ b/winsup/cygwin/Makefile.in
@@ -27,7 +27,7 @@ export CCWRAP_HEADERS:=. ${srcdir}
 export CCWRAP_SYSTEM_HEADERS:=@cygwin_headers@ @newlib_headers@
 export CCWRAP_DIRAFTER_HEADERS:=@windows_headers@
 
-VPATH+=$(srcdir)/regex $(srcdir)/lib $(srcdir)/libc $(srcdir)/math
+VPATH+=$(srcdir)/regex $(srcdir)/lib $(srcdir)/libc $(srcdir)/math 
$(srcdir)/tzcode
 
 target_cpu:=@target_cpu@
 target_alias:=@target_alias@
@@ -246,6 +246,14 @@ MATH_OFILES:= \
tgammal.o \
truncl.o
 
+TZCODE_OFILES:=localtime.o
+
+localtime.o: $(srcdir)/tzcode/localtime.cc $(srcdir)/tzcode/localtime.c.patch
+   (cd $(srcdir)/tzcode && \
+   patch -c -o localtime.c.patched localtime.c localtime.c.patch)
+   $(CXX) ${CXXFLAGS} -I$(target_builddir)/winsup/cygwin \
+   -I$(srcdir) -I$(srcdir)/tzcode -c -o $@ $<
+
 DLL_OFILES:= \
advapi32.o \
aio.o \
@@ -333,7 +341,6 @@ DLL_OFILES:= \
ldap.o \
libstdcxx_wrapper.o \
loadavg.o \
-   localtime.o \
lsearch.o \
malloc_wrapper.o \
minires-os-if.o \
@@ -412,6 +419,7 @@ DLL_OFILES:= \
$(EXTRA_OFILES) \
$(MALLOC_OFILES) \
$(MATH_OFILES) \
+   $(TZCODE_OFILES) \
$(MT_SAFE_OBJECTS)
 
 EXCLUDE_STATIC_OFILES:=$(addprefix --exclude=,\
diff --git a/winsup/cygwin/localtime.cc b/winsup/cygwin/localtime.cc
deleted file mode 100644
index 010376637..0
--- a/winsup/cygwin/localtime.cc
+++ /dev/null
@@ -1,2597 +0,0 @@
-/* $NetBSD: localtime.c,v 1.72 2012/10/28 19:02:29 christos Exp $  */
-
-/* Don't reformat the code arbitrarily.
-
-   It uses in wide parts the exact formatting as the upstream NetBSD
-   versions.  The purpose is to simplify subsequent diffs to the NetBSD
-   version, should the need arise again at one point. */
-
-/*
-** This file is in the public domain, so clarified as of
-** 1996-06-05 by Arthur David Olson.
-*/
-/* Temporarily merged private.h and tzfile.h for ease of management - DJ */
-
-#include "winsup.h"
-#include "cygerrno.h"
-#include "sync.h"
-#include 
-#define STD_INSPIRED
-#define lint
-
-#define USG_COMPAT
-
-#ifndef lint
-#ifndef NOID
-static charelsieid[] = "@(#)localtime.c8.17";
-#endif /* !defined NOID */
-#endif /* !defined lint */
-
-/*
-** Leap second handling from Bradley White.
-** POSIX-style TZ environment variable handling from Guy Harris.
-*/
-
-#define NO_ERROR_IN_DST_GAP
-
-/*LINTLIBRARY*/
-
-#ifndef PRIVATE_H
-
-#define PRIVATE_H
-
-/*
-** This file is in the public domain, so clarified as of
-** 1996-06-05 by Arthur David Olson
-*/
-
-/*
-** This header is for use ONLY with the time conversion code.
-** There is no guarantee that it will remain unchanged,
-** or that it will remain at all.
-** Do NOT copy it to any system include directory.
-** Thank you!
-*/
-
-/*
-** ID
-*/
-
-#ifndef lint
-#ifndef NOID
-static charprivatehid[] = "@(#)private.h   7.48";
-#endif /* !defined NOID */
-#endif /* !defined lint */
-
-/*
-** Nested includes
-*/
-
-#include "stdio.h"
-#include "limits.h"/* for CHAR_BIT */
-#include "stdlib.h"
-#include "unistd.h"/* for F_OK and R_OK */
-
-/* Unlike 's isdigit, this also works if c < 0 | c > UCHAR_MAX.  */
-#define is_digit(c) ((unsigned)(c) - '0' <= 9)
-
-#ifndef __pure
-#if 2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)
-# define __pure __attribute__ ((__pure__))
-#else
-# define __pure /* empty */
-#endif
-#endif
-
-/*
-** Finally, some convenience items.
-*/
-
-#ifndef TYPE_INTEGRAL
-#define TYPE_INTEGRAL(type) (/*CONSTCOND*/((type) 0.5) != 0.5)
-#endif /* !defined TYPE_INTEGRAL */
-
-#ifndef TYPE_BIT
-#define TYPE_BIT(type) (sizeof (type) * CHAR_BIT)
-#endif /* !defined TYPE_BIT */
-
-#ifndef TYPE_SIGNED
-#define TYPE_SIGNED(type) (((type) -1) < 0)
-#endif /* !defined TYPE_SIGNED */
-
-#ifndef INT_STRLEN_MAXIMUM
-/*
-** 302 / 1000 is log10(2.0) rounded up.
-** Subtract one for the sign bit if the type is signed;
-** add one for integer division truncation;
-** add one more for a minus sign if the type is signed.
-*/
-#define INT_STRLEN_MAXIMUM(type) \
-((TYPE_BIT(type) - TYPE_SIGNED(type)) * 302 / 1000 + 1 + TYPE_SIGNED(type))
-#endif /* !defined INT_STRLEN_MAXIMUM */
-
-/*
-** INITIALIZE(x)
-*/
-
-#ifndef GNUC_or_lint
-#ifdef lint
-#define GNUC_or_lint
-#endif /* defined lint */

Re: [PATCH 00/21] FIFO: Support multiple readers

2020-05-18 Thread Takashi Yano via Cygwin-patches
Hi Ken,

On Mon, 18 May 2020 13:42:19 -0400
Ken Brown via Cygwin-patches  wrote:
> Hi Takashi,
> 
> On 5/18/2020 12:03 PM, Ken Brown via Cygwin-patches wrote:
> > On 5/18/2020 1:36 AM, Takashi Yano via Cygwin-patches wrote:
> >> On Mon, 18 May 2020 14:25:19 +0900
> >> Takashi Yano via Cygwin-patches  wrote:
> >>> However, mc hangs by several operations.
> >>>
> >>> To reproduce this:
> >>> 1. Start mc with 'env SHELL=tcsh mc -a'
> >>
> >> I mean 'env SHELL=/bin/tcsh mc -a'
> >>
> >>> 2. Select a file using up/down cursor keys.
> >>> 3. Press F3 (View) key.
> > 
> > Thanks for the report.  I can reproduce the problem and will look into it.
> 
> I'm not convinced that this is a FIFO bug.  I tried two things.
> 
> 1. I attached gdb to mc while it was hanging and got the following backtrace 
> (abbreviated):
> 
> #1  0x7ff901638037 in WaitForMultipleObjectsEx ()
> #2  0x7ff901637f1e in WaitForMultipleObjects ()
> #3  0x000180048df5 in cygwait () at ...winsup/cygwin/cygwait.cc:75
> #4  0x00018019b1c0 in wait4 () at ...winsup/cygwin/wait.cc:80
> #5  0x00018019afea in waitpid () at ...winsup/cygwin/wait.cc:28
> #6  0x00018017d2d8 in pclose () at ...winsup/cygwin/syscalls.cc:4627
> #7  0x00018015943b in _sigfe () at sigfe.s:35
> #8  0x00010040d002 in get_popen_information () at filemanager/ext.c:561
> [...]
> 
> So pclose is blocking after calling waitpid.  As far as I can tell from 
> looking 
> at backtraces of all threads, there are no FIFOs open.
> 
> 2. I ran mc under strace (after exporting SHELL=/bin/tcsh), and I didn't see 
> anything suspicious involving FIFOs.  But I saw many EBADF errors from fstat 
> and 
> close that don't appear to be related to FIFOs.
> 
> So my best guess at this point is that the FIFO changes just exposed some 
> unrelated bug(s).
> 
> Prior to the FIFO changes, mc would get an error when it tried to open 
> tcsh_fifo 
> the second time, and it would then set
> 
>mc_global.tty.use_subshell = FALSE;
> 
> see the mc source file subshell/common.c:1087.

I looked into this problem and found pclose() stucks if FIFO
is opened.

Attached is a simple test case. It works under cygwin 3.1.4,
but stucks at pclose() under cygwin git head.

Isn't this a FIFO related issue?

-- 
Takashi Yano 
#include 
#include 
#include 
#include 

int main()
{
	int fifo;
	FILE *p;
	int r;

	printf("Call mkfifo().\n");
	r = mkfifo("fifo1", 0600);
	if (r == 0) printf("mkfifo() success.\n");
	printf("Call open().\n");
	fifo = open("fifo1", O_RDWR);
	if (fifo != -1) printf("open() success.\n");
	printf("Call popen().\n");
	p = popen("/bin/true", "r");
	if (p) printf("popen() success.\n");
	printf("Call pclose().\n");
	r = pclose(p);
	if (r != -1) printf("pclose() success.\n");
	printf("Call close().\n");
	r = close(fifo);
	if (r == 0) printf("close() success.\n");
	printf("Call unlink().\n");
	r = unlink("fifo1");
	if (r == 0) printf("unlink() success.\n");
	return 0;
}


Re: [PATCH 00/21] FIFO: Support multiple readers

2020-05-18 Thread Ken Brown via Cygwin-patches

Hi Takashi,

On 5/18/2020 12:03 PM, Ken Brown via Cygwin-patches wrote:

On 5/18/2020 1:36 AM, Takashi Yano via Cygwin-patches wrote:

On Mon, 18 May 2020 14:25:19 +0900
Takashi Yano via Cygwin-patches  wrote:

However, mc hangs by several operations.

To reproduce this:
1. Start mc with 'env SHELL=tcsh mc -a'


I mean 'env SHELL=/bin/tcsh mc -a'


2. Select a file using up/down cursor keys.
3. Press F3 (View) key.


Thanks for the report.  I can reproduce the problem and will look into it.


I'm not convinced that this is a FIFO bug.  I tried two things.

1. I attached gdb to mc while it was hanging and got the following backtrace 
(abbreviated):


#1  0x7ff901638037 in WaitForMultipleObjectsEx ()
#2  0x7ff901637f1e in WaitForMultipleObjects ()
#3  0x000180048df5 in cygwait () at ...winsup/cygwin/cygwait.cc:75
#4  0x00018019b1c0 in wait4 () at ...winsup/cygwin/wait.cc:80
#5  0x00018019afea in waitpid () at ...winsup/cygwin/wait.cc:28
#6  0x00018017d2d8 in pclose () at ...winsup/cygwin/syscalls.cc:4627
#7  0x00018015943b in _sigfe () at sigfe.s:35
#8  0x00010040d002 in get_popen_information () at filemanager/ext.c:561
[...]

So pclose is blocking after calling waitpid.  As far as I can tell from looking 
at backtraces of all threads, there are no FIFOs open.


2. I ran mc under strace (after exporting SHELL=/bin/tcsh), and I didn't see 
anything suspicious involving FIFOs.  But I saw many EBADF errors from fstat and 
close that don't appear to be related to FIFOs.


So my best guess at this point is that the FIFO changes just exposed some 
unrelated bug(s).


Prior to the FIFO changes, mc would get an error when it tried to open tcsh_fifo 
the second time, and it would then set


  mc_global.tty.use_subshell = FALSE;

see the mc source file subshell/common.c:1087.

Ken


Re: [PATCH 00/21] FIFO: Support multiple readers

2020-05-18 Thread Ken Brown via Cygwin-patches

On 5/18/2020 1:36 AM, Takashi Yano via Cygwin-patches wrote:

On Mon, 18 May 2020 14:25:19 +0900
Takashi Yano via Cygwin-patches  wrote:

However, mc hangs by several operations.

To reproduce this:
1. Start mc with 'env SHELL=tcsh mc -a'


I mean 'env SHELL=/bin/tcsh mc -a'


2. Select a file using up/down cursor keys.
3. Press F3 (View) key.


Thanks for the report.  I can reproduce the problem and will look into it.

Ken