Mail Archives: cygwin/2010/03/01/09:27:11
On Mar 1 14:05, Corinna Vinschen wrote:
> On Mar 1 13:11, Corinna Vinschen wrote:
> > On Mar 1 13:05, Corinna Vinschen wrote:
> > > On Mar 1 12:32, Corinna Vinschen wrote:
> > > > On Mar 1 11:08, Fergus wrote:
> > > > > My Cygwin [1.7] is located at the root of a mobile hard drive and a
> > > > > simple DOS dir command now shows a directory named . as in
> > > > > [...]
> > > >
> > > > Oh boy. I didn't even know that NT allows that.
> > > >
> > > > That's two bugs in one. The lilypond package has paths with leading
> > > > "./" in it, and setup.exe does not recognize that and remove the dot
> > > > path.
> > > >
> > > > For now I have removed the latest lilypond package from the distro.
> > > > Jan, can you please fix your package not to have leading ./ in the path?
> > > >
> > > > As for setup.exe, I have to have a look how to avoid that.
> > >
> > > The problem is, I can't reproduce it. I created two test packages,
> > > one with a file "./file" in it, the other with a file "tmp/./file".
> > > In both cases, setup.exe failed to create the file and showed a
> > > message "unable to extract ...".
> > >
> > > This was on Windows 7. What Windows are you using? Maybe an older
> > > version allows it. Unless I can create the "." directory myself,
> > > I can't fix it.
> >
> > On Windows XP I can't reproduce it either. Hmm.
>
> Are you sure the directory name is really "."? Could you please have
> a look if the directory isn't called ". " with one or more trailing
> spaces? Creating such directories is no problem and removing isn't
> a problem either:
>
> $ rmdir ". "
And, just for completeness, I tested to create a file and a directory
with the name ".", using the native NT function NtCreateFile(*), as
setup and Cygwin do. Both tests resulted in the status code 0xC0000033,
STATUS_OBJECT_NAME_INVALID. So I'm pretty sure the name of the
directory is not ".". Alternatively, you have some software running
which installs a filesystem filter driver, and that filter driver
overrides or skips these sanity checks in the OS.
Corinna
(*)
==== SNIP ====
#include <windows.h>
#include <ntsecapi.h>
#include <ddk/ntifs.h>
#include <ddk/winddk.h>
#include <stdio.h>
#define FNAME L"\\??\\C:\\cygwin\\tmp\\dot\\."
int
main (int argc, char **argv)
{
UNICODE_STRING fname;
OBJECT_ATTRIBUTES attr;
NTSTATUS stat;
HANDLE fh;
IO_STATUS_BLOCK io;
printf ("Full NT path: %ls\n", FNAME);
RtlInitUnicodeString (&fname, FNAME);
InitializeObjectAttributes (&attr, &fname, OBJ_CASE_INSENSITIVE, NULL, NULL);
stat = NtCreateFile (&fh, GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE,
&attr, &io, NULL, 0, FILE_SHARE_VALID_FLAGS,
FILE_CREATE,
#if 0
FILE_DIRECTORY_FILE |
#else
FILE_NON_DIRECTORY_FILE |
#endif
FILE_SYNCHRONOUS_IO_NONALERT,
NULL, 0);
if (!NT_SUCCESS (stat)) {
printf ("Unable to create %ls, status = 0x%08X\n", FNAME, stat);
return 1;
}
NtClose(fh);
NtDeleteFile (&attr);
return 0;
}
==== SNAP ====
--
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
- Raw text -