Mail Archives: djgpp-workers/2001/06/16/12:05:21
Eli Zaretskii wrote:
>
> On Sun, 10 Jun 2001, Richard Dawe wrote:
> > BTW Fileutils 3.16 is probably bitten by this bug now too. The source
> > for the 3.16 port appears to set the opendir flags in the same way.
[snip]
> So the latest binaries of v3.16 indeed have the same bug; the
> v2.01-compiled binaries did not.
>
> Btw, the solution I suggested (see above) is not entirely correct: you
> indeed need to set __OPENDIR_NO_HIDDEN at startup, but instead of
> setting __OPENDIR_FIND_HIDDEN when you want the hidden files, you need
> to *reset* the __OPENDIR_NO_HIDDEN flag. (That setting
> __OPENDIR_FIND_HIDDEN will not work is actually a subtle bug in
> readdir, which I will fix in the CVS.)
Below is a patch that implements your suggestion. This does seem to have
fixed the bug - thanks! This patch also includes a fix for the bug I found
where ls would emit spurious a <-[m escape sequence on exit.
Thanks, bye, Rich =]
*** /djgpp/gnu/filutil3.16/src/ls-msdos.c Thu Apr 26 22:02:04 2001
--- c:/develop/ports/gnu.dev/filutil4.0/src/ls-msdos.c Sat Jun 16
13:19:58 2001
***************
*** 1,6 ****
! /* MSDOS-specific functions for `ls'.
!
! Written by Eli Zaretskii <eliz AT is DOT elta DOT co DOT il> */
#ifdef MSDOS
--- 1,12 ----
! /*
! * MSDOS-specific functions for `ls'.
! *
! * Written by Eli Zaretskii <eliz AT is DOT elta DOT co DOT il>
! *
! * Copied from Fileutils 3.16 DJGPP port for use in Fileutils 4.0 DJGPP
port
! * by Richard Dawe <richdawe AT bigfoot DOT com>. Modifications are indicated
by
! * '(richdawe) ...' comments.
! */
#ifdef MSDOS
***************
*** 73,82 ****
--- 79,96 ----
if (use_color)
_djstat_flags &= ~_STAT_EXEC_EXT;
+ /* (richdawe) Default to skipping hidden files. */
+ __opendir_flags |= __OPENDIR_NO_HIDDEN;
+
/* Find hidden files only if user specified -a. */
if (show_hidden)
{
+ /* (richdawe) Eli advised me that setting __OPENDIR_FIND_HIDDEN
+ * will not work, because of a bug in DJGPP 2.03's libc. We also
need
+ * to clear __OPENDIR_NO_HIDDEN. */
__opendir_flags |= __OPENDIR_FIND_HIDDEN;
+ __opendir_flags &= ~__OPENDIR_NO_HIDDEN;
+
/* Find volume labels only if user specified both -a and -g. */
if (msdos_long_format)
__opendir_flags |= __OPENDIR_FIND_LABEL;
***************
*** 146,152 ****
static int
msdos_screen_write (__FSEXT_Fnumber func, int *retval, va_list
rest_args)
{
! static char *cbuf = 0;
static size_t cbuf_len = 0;
/* Only dark colors mentioned here, so that bold has visible effect.
*/
static enum COLORS screen_color[] = {BLACK, RED, GREEN, BROWN,
--- 160,166 ----
static int
msdos_screen_write (__FSEXT_Fnumber func, int *retval, va_list
rest_args)
{
! static char *cbuf = NULL;
static size_t cbuf_len = 0;
/* Only dark colors mentioned here, so that bold has visible effect.
*/
static enum COLORS screen_color[] = {BLACK, RED, GREEN, BROWN,
***************
*** 207,212 ****
--- 221,236 ----
{
char *p = p_next;
+ /* (richdawe) Handle the null escape sequence (ESC-[m), which ls
uses
+ * to restore the original colour. */
+ if ((p[1] == '[') && (p[2] == 'm'))
+ {
+ textattr (norm_attr);
+ p += 3;
+ anchor = p_next = p;
+ continue;
+ }
+
if (p[1] == '[') /* "Esc-[" sequence */
{
/* If some chars seen since the last escape sequence,
- Raw text -