[erlang-questions] [RE] Case insensitivity - Windows trap or bug?
Doug Edmunds
dae@REDACTED
Sat Jan 19 18:42:53 CET 2008
Hi Alex,
Erlang-under-Cygwin might not be the cure that you think it is:
Go back to my original scenario:
A file named myTest.erl.
No file named mytest.erl
You got this result:
> 2> c(mytest).
> ** Module name 'myTest' does not match file name 'mytest' **
> {error,badfile}
c/1 has two phases, first it compiles the erl file (
creating a beam file), then it tries to load the beam file.
The message {error,badfile} is generated during the load phase and
doesn't reach the issue. I get the same result using Erlang-under-XP.
The focus of the issue is the compile phase.
If Erlang-under-Cygwin were trapping 'mytest.erl' as a non-
existent file (i.e. in a case sensitive way), it would generate a
different error message, something like this:
7> c(badspelling).
./badspelling.erl:none: no such file or directory
error
But it didn't generate that error.
Please put myTest.erl in an empty directory, then
using Erlang-under-Cygwin, run c(mytest) with all
small letters. Now look in the directory.
Did Erlang-under-Cygwin create a beam file?
My guess is that it does AND that it is named mytest.erl.
-- Doug Edmunds
>
> I can at least tell you that in Windows via Cygwin (pretty much acting
> like a Unix system) does gives out an error, as it should.
>
> 1> c(myTest).
> {ok,myTest}
> 2> c(mytest).
> ** Module name 'myTest' does not match file name 'mytest' **
> {error,badfile}
>
> The behavior you're experiencing is Window SOP. The deal with Unix or
> Unix-like systems is that you can have file 'test.erl' and also file
> 'Test.erl,' but not in Windows, as they would be exactly the same file
> (even under Cygwin). Hence, there's no problem!
>
> Cheers, Alex
>
>
>
> ---------[ Received Mail Content ]----------
>
> *Subject : *[erlang-questions] Case insensitivity - Window! s trap
> or bug?
>
> *Date : *Tue, 15 Jan 2008 13:14:04 -0800
>
> *From : *Doug Edmunds <dae@REDACTED>
>
> *To : *erlang-questions@REDACTED
>
>
>
> The Erlang compiler assumes that filenames are
>
> case sensitive. It does not check the existence
>
> of a file based on a case-sensitive spelling.
>
> But Windows filenames are not case sensitive.
>
> This can lead to unexpected results.
>
>
>
> (I don't have a *nix system to check this on. I
>
> assume this is a Windows-only problem.)
>
>
>
> ------
>
> Assume this scenario:
>
> (note the spelling, a capital T in both file name and module).
>
>
>
> a file named: myTest.erl
>
> containing a module: -module(myTest).
>
>
>
> > compile:file(myTest).
>
> produces myTest.beam
>
>
>
> So far so good.
>
>
>
> ------
>
>
>
> An inadvertent typo can cause unexpected results
>
> which are not flagged b! y the compiler (in Windows):
>
>
>
> 1.
>
>
>
> > co mpile:file(mytest). %% case insensitive input accepted.
>
> {ok,myTest} %% note difference between input and output
>
>
>
> What is the filename just created?
>
> 'mytest.beam', not 'myTest.beam'
>
>
>
> Any errors or warnings? No.
>
>
>
>
>
> ----
>
>
>
> 2. Having done step 1, things can become very strange:
>
> Remember, the name of the beam file is mytest.beam.
>
> There is no myTest.beam.
>
>
>
> > code:file_load(myTest).
>
> {module,myTest} %% loads
>
>
>
>
>
> 3. But this doesn't work:
>
>
>
> >code:file_load(mytest).
>
>
>
> =ERROR REPORT==== 15-Jan-2008::09:56:50 ===
>
> beam/beam_load.c(1035): Error loading module mytest:
>
> module name in object code is myTest
>
>
>
>
>
> =ERROR REPORT==== 15-Jan-2008::09:56:50 ===
>
> Loading of c:/erl_dae2/compile sensitivity bugs/mytest.beam failed:
> badfile
>
> {error,badfile}
>
>
>
> --------! -
>
>
>
> Running erlc from a DOS shell, has the same problems.
>
> erlc ignores case, and compiles a beam
>
> file that does not match the internal module name.
>
>
>
> erlc mytest.erl %% erlc accepts this filename in Windows
>
>
>
> produces mytest.beam from myTest.erl without any warning.
>
> The mytest.beam will have the same usage issues as indicated
>
> above (it will contain a module name 'myTest' and will not load.
>
>
>
> -------------------
>
> I think of these as bugs. Other Erlang functions
>
> can capture/retain filename case sensitivity in Windows.
>
> (c:ls/0, for example reports myTest.erl). You won't change
>
> Windows. The Erlang compiler functions need to test
>
> for file existence based on case-sensitivity.
>
>
>
> Doug Edmunds
>
>
>
>
>
> _______________________________________________
>
> erlang-questions mailing list
>
> erlang-questions@REDACTED
>
> http://www.erl! ang.org/mailman/listinfo/erlang-questions
>
> < /td>
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://www.erlang.org/mailman/listinfo/erlang-questions
More information about the erlang-questions
mailing list