[Patches] [Patch #103154] Cygwin Check Import Case Patch

noreply@sourceforge.net noreply@sourceforge.net
Sun, 21 Jan 2001 19:00:24 -0800


Patch #103154 has been updated. 

Project: python
Category: core (C code)
Status: Open
Submitted by: jlt63
Assigned to : gvanrossum
Summary: Cygwin Check Import Case Patch

Follow-Ups:

Date: 2001-Jan-21 19:00
By: jlt63

Comment:
My intentions when I asked you to reopen this patch were to determine
whether consensus was reached on how to resolve this issue, not to
provoke you in any way. If I did, then I apologize. From your previous
comments, it was not clear that you opposed this patch. Now that I
know, I will desist with this approach.

I'm willing to do as you suggest, but I have the following concerns:

1. At least two more modules that will need this conversion too (i.e.,
FCNTL and SOCKET). Are there more?
2. Unless there is some (enforceable) policy that module names cannot
differ only in case, then Cygwin Python will behave differently than
other UNIX versions in this regard.

Can you allay my concerns before I set out on this endeavor.

BTW, when is 2.1a2 scheduled so I know how much time that I have?
-------------------------------------------------------

Date: 2001-Jan-20 11:33
By: gvanrossum

Comment:
Indeed, it's too late for 2.1a1 (now planned for Monday 1/22), but not for
2.1a2.

It would be much more productive if you spent your time on adding the
termios constants to that module, than lobbying for a hack that I oppose.
-------------------------------------------------------

Date: 2001-Jan-20 11:07
By: jlt63

Comment:
Skip Montanaro and yourself (at least initially) suggested that this
problem should be solved by renaming the modules in question (e.g.,
TERMIOS) so that they are unique regardless of case.

As a following up, you suggested that "An even better solution is to get
rid of those generated headers and incorporate the desired symbols
directly in the C extension modules."

If neither of the two solutions will make it into 2.1a, then I will lobby
for the acceptance of my (albeit hacky) patch. It will only affect Cygwin
Python and makes it behave identical to other UNIX versions.

When a better solution is finally implemented, then the Cygwin cruft can
be ripped out.
-------------------------------------------------------

Date: 2001-Jan-20 08:47
By: gvanrossum

Comment:
Reopened at request.

But I won't *do* anything about this until I've heard the arguments one
more time.
-------------------------------------------------------

Date: 2001-Jan-19 22:59
By: jlt63

Comment:
Please reopen so that this issue is not accidentally overlooked. At
least,
until the case sensitive import problem is resolved. I still have a
pending
patch submitted for consideration. Sorry, to be a pest...
-------------------------------------------------------

Date: 2001-Jan-12 11:48
By: tim_one

Comment:
Ah, I see.  There's a difference between Windows filesystems and
filesystems used on Windows <wink/sigh>.  Older Novell network fileservers
for Windows do indeed destroy the case of file names, and newer ones are
often configured in a compatability mode to keep on doing that.  At my last
employer, more than half the LAN servers were set up that way.  Use of
PYTHONCASEOK was universal as a result.  We were also screwed in that one
of the popular Windows source-control systems *also* destroyed case (I
didn't use that, and have forgotten the name):  check in OhNo.py, check out
OHNO.PY.  Brrrrrrrrr.

-------------------------------------------------------

Date: 2001-Jan-12 10:52
By: gvanrossum

Comment:
Maybe things are different now.  But I definitely remember that when I
introduced this test, Mark Hammond told me that there was a popular
networking filesystem that didn't preserve case.  This was either for
Windows NT or Windows 95, so it's not a Windows 3.1 thing (although it's
possible that the fileserver in question was a bad port from DOS or Windows
3.1 of course).

-------------------------------------------------------

Date: 2001-Jan-12 10:47
By: jlt63

Comment:
I know. I was just confused by the following

On 2001-Jan-11 06:47, gvanrossum wrote:
> Note that I believe that "import termios, TERMIOS" *should fail* -- not
all
> filesystems used on Windows are case preserving.
-------------------------------------------------------

Date: 2001-Jan-12 10:26
By: tim_one

Comment:
The filesystems do preserve the case of names.  But all platform file
*lookup* APIs are case-insensitive.

-------------------------------------------------------

Date: 2001-Jan-12 09:50
By: jlt63

Comment:
Oops...

Use the following procedure to patch: 

$ cd Python
$ # save case.patch to current directory 
$ patch <case.patch
-------------------------------------------------------

Date: 2001-Jan-12 09:44
By: jlt63

Comment:
I just uploaded a new patch. It fixes the case sensitive import problem
for
Cygwin without affecting Win32 (i.e., Win32 functions as before). Now
Cygwin's import behavior is identical to other UNIX platforms.

I'm not completely happy with the patch and would characterize it as
hacky, but it is the best that I can do without fully grokking import.c.
I
think to do better would require major rework to find_module().

I guess by renaming TERMIOS you mean to change the module names
generated by h2py.py. I have no issue with this -- will others?

I thought all filesystems on Windows 95/NT 3.51 and later, were case
preserving. To what filesystems and Windows versions are you referring?
-------------------------------------------------------

Date: 2001-Jan-11 13:59
By: gvanrossum

Comment:
Upload it as a new patch.

But I believe the solution is that the TERMIOS module should be renamed.

-------------------------------------------------------

Date: 2001-Jan-11 07:56
By: jlt63

Comment:
Actually, this is not a bug in my original version. Cygwin Python is
behaving
identically to the Win32 one. Unfortunately, as you pointed out Win32
Python definitely does not handle the situation of two modules that only
differ by case. Sigh... If one tries to import the second module that would
be
found in sys.path, then a NameError: Case mismatch ... exception will
*always*
be generated. I'm not sure that I agree with this behavior but I really a
UNIX
guy.

Since Cygwin Python should support as many UNIX modules as possible, it
needs to deal with modules that only differ by case. termios and TERMIOS
used by getpass is a perfect example.

I have created a (hacky) patch, that solves this problem for both Cygwin
and
Win32. I can redo it so that it only affects Cygwin and leaves the Win32
functionality alone. I would like to upload it for discussion but I am
concerned
about overwriting the old version. Should I upload it anyway?
-------------------------------------------------------

Date: 2001-Jan-11 06:47
By: gvanrossum

Comment:
Reopened at request.

Note that I believe that "import termios, TERMIOS" *should fail* -- not all
filesystems used on Windows are case preserving.  I've had this battle with
Mark Hammond before.  The case check is intended to prevent you from
importing a moduleusing the wrong case (e.g. import String).  It is *not*
intended to let you have two modules that only differ in case.

-------------------------------------------------------

Date: 2001-Jan-10 19:48
By: jlt63

Comment:
I have already checked that this patch does not break the Windows VC
build before I submitted it. However, Tim is welcome to reverify himself.

Unfortunately, I have found a bug with this patch that (only) affects
Cygwin. Although this patch handles the following:

import String

it does not handle the following:

import termios, TERMIOS

I will resubmit a new version shortly, please change the status back to
open.
-------------------------------------------------------

Date: 2001-Jan-10 12:45
By: gvanrossum

Comment:
Thanks -- checked in!

Note: I didn't check this on Cygwin -- I only tested that this doesn't
break the build on Linux.  I hope that Tim will check that it doesn't break
the VC build on Windows.

-------------------------------------------------------

Date: 2001-Jan-08 21:11
By: jlt63

Comment:
[The formating was lost on my initial post, so I try again.  Sigh...]

This patch enables the imported module name case checking code
for Cygwin that is already enabled by default for Win32.  Use
the configure --with-check-import-case option to enable this
feature.

Without this patch, the following code from getpass.getuser()
behaves incorrectly:

import termios, TERMIOS

The folowing is a ChangeLog:

Mon Jan  8 23:54:00 2001  Jason Tishler <jt@dothill.com>

* acconfig.h: Add CHECK_IMPORT_CASE #undef.
* configure.in: Add --with-check-import-case section.
* Python/import.c: Enable case checking code for Cygwin too.
Include sys/cygwin.h, if appropriate.
(check_case): Add munging of module path from POSIX to Win32
so FindFirstFile() can cope, if appropriate.
-------------------------------------------------------

-------------------------------------------------------
For more info, visit:

http://sourceforge.net/patch/?func=detailpatch&patch_id=103154&group_id=5470