public inbox for cygwin@cygwin.com
 help / color / mirror / Atom feed
* where was mention of what creates NUL files?
@ 2010-09-17 18:01 Daniel Barclay
  2010-09-17 18:02 ` Eric Blake
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Daniel Barclay @ 2010-09-17 18:01 UTC (permalink / raw)
  To: cygwin

Does anyone recall a mention of what in CygWin (or possibly Emacs) creates
files with a simple name of "NUL"?

Thanks,
Daniel

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: where was mention of what creates NUL files?
  2010-09-17 18:01 where was mention of what creates NUL files? Daniel Barclay
@ 2010-09-17 18:02 ` Eric Blake
  2010-09-17 22:46   ` Corinna Vinschen
  2010-09-20 10:22 ` Oleksandr Gavenko
  2013-06-27 18:35 ` g
  2 siblings, 1 reply; 8+ messages in thread
From: Eric Blake @ 2010-09-17 18:02 UTC (permalink / raw)
  To: cygwin

On 09/17/2010 11:12 AM, Daniel Barclay wrote:
> Does anyone recall a mention of what in CygWin (or possibly Emacs) creates
> files with a simple name of "NUL"?

Windows automagically maps the file named "NUL", in any directory, to 
the equivalent of Unix' /dev/null.  Cygwin doesn't create it, but all 
the same, portable programs should never name a file that 
case-insensitively matches 'nul', 'aux', or a host of other 
windows-magic names:

http://www.gnu.org/software/autoconf/manual/autoconf.html#File-System-Conventions

Meanwhile, cygwin 1.7 has added some magic to use native NT calls to 
work around these limitations, so that you can have a file that appears 
to be named "NUL" from within cygwin, but which is really exploiting 
some 16-bit values outside of Unicode.  But various windows programs 
that use windows API (rather than lower-level NT API), including your 
file Explorer, have a hard time figuring out what cygwin did.

-- 
Eric Blake   eblake@redhat.com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: where was mention of what creates NUL files?
  2010-09-17 18:02 ` Eric Blake
@ 2010-09-17 22:46   ` Corinna Vinschen
  2010-09-18  3:37     ` Daniel Barclay
  0 siblings, 1 reply; 8+ messages in thread
From: Corinna Vinschen @ 2010-09-17 22:46 UTC (permalink / raw)
  To: cygwin

On Sep 17 11:22, Eric Blake wrote:
> On 09/17/2010 11:12 AM, Daniel Barclay wrote:
> >Does anyone recall a mention of what in CygWin (or possibly Emacs) creates

<finicking>
It's Cygwin, not CygWin.
</finicking>

files with a simple name of "NUL"?
> 
> Windows automagically maps the file named "NUL", in any directory,

Meep!  The Win32 API, not Windows per se.

> to the equivalent of Unix' /dev/null.  Cygwin doesn't create it, but
> all the same, portable programs should never name a file that
> case-insensitively matches 'nul', 'aux', or a host of other
> windows-magic names:
> 
> http://www.gnu.org/software/autoconf/manual/autoconf.html#File-System-Conventions
> 
> Meanwhile, cygwin 1.7 has added some magic to use native NT calls to
> work around these limitations, so that you can have a file that
> appears to be named "NUL" from within cygwin, but which is really
> exploiting some 16-bit values outside of Unicode.

Sorry, but that's not entirely correct.  There isn't any magic involved
and the resulting filename is actually "nul".  No mapping to the Unicode
private use area.

The terrible DOS device name hack, which maps filenames containing
substring named like the the old DOS device names (NUL, AUX, PRN, etc)
to the actual Windows device, only exists in the Win32 API.  Cygwin
doesn't use the Win32 API to access files, rather it uses the underlying
native NT API.  This API allows to create and access actual files like
"nul" or "aux.c", just as on any other OS.  The DOS device name hack
simply doesn't affect us.

So, any Cygwin application can create files like "nul".  It happens, for
instance, if you call something like:

  $ echo foo > NUL
  $ ls -l NUL
  -rw-r--r-- 1 corinna vinschen 4 Sep 17 21:25 NUL

Note:  Don't use DOS device names in Cygwin!

  Wrong:

    $ echo foo > NUL
    $ echo foo > nul
    $ echo foo > nul:

  Right:

    $ echo foo > /dev/null

See here:
http://cygwin.com/cygwin-ug-net/using-specialnames.html#pathnames-dosdevices
and here:
http://cygwin.com/cygwin-ug-net/using-specialnames.html#pathnames-posixdevices


Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader          cygwin AT cygwin DOT com
Red Hat

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: where was mention of what creates NUL files?
  2010-09-17 22:46   ` Corinna Vinschen
@ 2010-09-18  3:37     ` Daniel Barclay
  0 siblings, 0 replies; 8+ messages in thread
From: Daniel Barclay @ 2010-09-18  3:37 UTC (permalink / raw)
  To: cygwin

Corinna Vinschen wrote:
...
>
> Note:  Don't use DOS device names in Cygwin!
>
>    Wrong:
>
>      $ echo foo>  NUL
>      $ echo foo>  nul
>      $ echo foo>  nul:
>
>    Right:
>
>      $ echo foo>  /dev/null

Yes, I know.  I'm not using NUL (or nul or nul:, etc.), but something
is.

(Now I'm thinking that it's an NTEmacs problem (perhaps thinking it's
running commands in a Windows/DOS shell rather than knowing it's
running them in Cygwin bash.).)



Daniel



--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: where was mention of what creates NUL files?
  2010-09-17 18:01 where was mention of what creates NUL files? Daniel Barclay
  2010-09-17 18:02 ` Eric Blake
@ 2010-09-20 10:22 ` Oleksandr Gavenko
  2013-06-27 18:35 ` g
  2 siblings, 0 replies; 8+ messages in thread
From: Oleksandr Gavenko @ 2010-09-20 10:22 UTC (permalink / raw)
  To: cygwin

On 17.09.2010 20:12, Daniel Barclay wrote:
> Does anyone recall a mention of what in CygWin (or possibly Emacs) creates
> files with a simple name of "NUL"?
>
I also use native Emacs and after some operation I got file with name NUL.

I have a lot NUL files in many dirs, which can be removed only from Cygwin:

   $ rm NUL

I don't fully  debug but think this come from 'null-device' variable
(which has 'NUL' value by default).

To friend native GNU Emacs with Cygwin (and stop creating NUL) I use:

(when (eq system-type 'windows-nt)
   (setq shell-file-name "bash")
   ;; Workaround for Cygwin shell, when set 'CYGWIN=noglob'. By default 
'shell-quote-argument'
   ;; quoted by double '\' chars this cause failure.
   (defun shell-quote-argument (argument)
     (concat "'" argument "'")
     )
   ;; Workaround for Cygwin when 'shell-file-name' is 'bash'.
   (setq null-device "/dev/null")
   )

--
Happy hacking!


--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: where was mention of what creates NUL files?
  2010-09-17 18:01 where was mention of what creates NUL files? Daniel Barclay
  2010-09-17 18:02 ` Eric Blake
  2010-09-20 10:22 ` Oleksandr Gavenko
@ 2013-06-27 18:35 ` g
  2013-06-27 19:00   ` Ken Brown
  2 siblings, 1 reply; 8+ messages in thread
From: g @ 2013-06-27 18:35 UTC (permalink / raw)
  To: cygwin




Daniel Barclay <daniel <at> fgm.com> writes:

> 
> Does anyone recall a mention of what in CygWin (or possibly Emacs) creates
> files with a simple name of "NUL"?
> 
> Thanks,
> Daniel
> 
> 


This has been driving me nuts for years. Finally tracked it down.
These are created by emacs' man.el code when you get a man page.
Reproduce: 
In emacs, do:
    M-x man <ret>
    <enter anything, valid ('ls') or not>
Now, you'll see a NUL file in the directory.

Root cause:
construction of the 'man' command that is passed to the shell includes:
(concat " %s 2>" null-device)

The variable `null-device' is platform specific and defaults to a pure-copy
of "/dev/null" which, apparently, becomes "NUL" on windows.

It is a defvar in files.el and 'set' again in dos-w32.el.

Resolution:
In your .emacs file, do:

   (require 'dos-w32) ;; load this first to avoid it undo'ing the next line
   (setq null-device "c:/tmp/emacs-dev-null.txt") ;; set to anything

Happy days!




--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: where was mention of what creates NUL files?
  2013-06-27 18:35 ` g
@ 2013-06-27 19:00   ` Ken Brown
  2013-06-27 22:32     ` wynfield
  0 siblings, 1 reply; 8+ messages in thread
From: Ken Brown @ 2013-06-27 19:00 UTC (permalink / raw)
  To: cygwin

On 6/26/2013 2:53 PM, g wrote:
>
>
>
> Daniel Barclay <daniel <at> fgm.com> writes:
>
>>
>> Does anyone recall a mention of what in CygWin (or possibly Emacs) creates
>> files with a simple name of "NUL"?
>>
>> Thanks,
>> Daniel
>>
>>
>
>
> This has been driving me nuts for years. Finally tracked it down.
> These are created by emacs' man.el code when you get a man page.
> Reproduce:
> In emacs, do:
>      M-x man <ret>
>      <enter anything, valid ('ls') or not>
> Now, you'll see a NUL file in the directory.

I can't reproduce this with Cygwin emacs.  You must be using native 
Windows emacs.

> Root cause:
> construction of the 'man' command that is passed to the shell includes:
> (concat " %s 2>" null-device)
>
> The variable `null-device' is platform specific and defaults to a pure-copy
> of "/dev/null" which, apparently, becomes "NUL" on windows.
>
> It is a defvar in files.el and 'set' again in dos-w32.el.
>
> Resolution:
> In your .emacs file, do:
>
>     (require 'dos-w32) ;; load this first to avoid it undo'ing the next line
>     (setq null-device "c:/tmp/emacs-dev-null.txt") ;; set to anything

Just to be clear, users of Cygwin emacs should *not* do this.

Ken

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: where was mention of what creates NUL files?
  2013-06-27 19:00   ` Ken Brown
@ 2013-06-27 22:32     ` wynfield
  0 siblings, 0 replies; 8+ messages in thread
From: wynfield @ 2013-06-27 22:32 UTC (permalink / raw)
  To: cygwin


I do not have the problem using emacs built on cygwin either.


> On 6/26/2013 2:53 PM, g wrote:
> >
> >
> >
> > Daniel Barclay <daniel <at> fgm.com> writes:
> >
> >>
> >> Does anyone recall a mention of what in CygWin (or possibly Emacs) creates
> >> files with a simple name of "NUL"?
> >>
> >> Thanks,
> >> Daniel
> >>
> >>
> >
> >
> > This has been driving me nuts for years. Finally tracked it down.
> > These are created by emacs' man.el code when you get a man page.
> > Reproduce:
> > In emacs, do:
> >      M-x man <ret>
> >      <enter anything, valid ('ls') or not>
> > Now, you'll see a NUL file in the directory.
> 
> I can't reproduce this with Cygwin emacs.  You must be using native
> Windows emacs.
> 
> > Root cause:
> > construction of the 'man' command that is passed to the shell includes:
> > (concat " %s 2>" null-device)
> >
> > The variable `null-device' is platform specific and defaults to a pure-copy
> > of "/dev/null" which, apparently, becomes "NUL" on windows.
> >
> > It is a defvar in files.el and 'set' again in dos-w32.el.
> >
> > Resolution:
> > In your .emacs file, do:
> >
> >     (require 'dos-w32) ;; load this first to avoid it undo'ing the next line
> >     (setq null-device "c:/tmp/emacs-dev-null.txt") ;; set to anything
> 
> Just to be clear, users of Cygwin emacs should *not* do this.
> 
> Ken
> 
> 

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2013-06-27 21:59 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-09-17 18:01 where was mention of what creates NUL files? Daniel Barclay
2010-09-17 18:02 ` Eric Blake
2010-09-17 22:46   ` Corinna Vinschen
2010-09-18  3:37     ` Daniel Barclay
2010-09-20 10:22 ` Oleksandr Gavenko
2013-06-27 18:35 ` g
2013-06-27 19:00   ` Ken Brown
2013-06-27 22:32     ` wynfield

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).