|
于 2012-9-23 12:50, Paul K 写道:
Hi All, I came across this subtle issue, which creates problems for handling breakpoints in the debugger I'm working on. I put a workaround in place, but I'd like to know if this is something expected or if it is something that may need to be fixed in Lua. On windows the "old" file systems (FAT) is case-insensitive, but case-preserving. NTFS is case-sensitive, but it also seems to provide a mode of operation that is case-insensitive, but case-preserving (possibly for compatibility purposes); there are some details in this article: http://support.microsoft.com/kb/100625. How does all this matter? If I have a folder 'c:\foo' (lowercase), but specify package.path = "C:\FOO\?.lua" and try to load file "c:\foo\bar.lua" (using require "bar"), on a case sensitive system the command fails, but on a case-insensitve, but case-preserving system it will be successful. Unfortunately, Lua then seems to report the name of the file (in debug.getinfo) as "C:\FOO\bar.lua" (as specified in package.path), rather than "C:\foo\bar.lua" (as this path exists in the file system), which creates problems in matching the two names. I know, the likely recommendation is "don't do it", but this is a real case from real users who ran into this issue. Would it make sense to use the case-sensitive mode on windows or possibly normalize the path before reporting it through debug.getinfo? Paul. ZeroBrane Studio - slick Lua IDE and debugger for Windows, OSX, and Linux - http://studio.zerobrane.com/ Lua just concatenates package.path and the module name(with dots substituted by path seperator) to get the file name to load, and passed that to the OS. since the OS API would accept the file path, I don't think there would be much trouble when you wanted to use that path too, since you would use the very same API of the OS. and if the underlying OS use case-sensitive file path, you wouldn't get the file loaded at the first place if your package.path don't match the directory path in the fs. this is just my personal opinion; I don't quite get the exact problem you encountered. what do you say? best regards. |