On Mon, May 15, 2017 at 07:31:50AM -0700, Eliot Miranda wrote:
Hi Alistair,
On May 15, 2017, at 7:28 AM, Alistair Grant akgrant0710@gmail.com wrote:
Hi Ben & Eliot,
On Sun, May 14, 2017 at 01:30:36AM +0800, Ben Coman wrote: On Sat, May 13, 2017 at 11:28 AM, Eliot Miranda eliot.miranda@gmail.com wrote:
Hi Ben,
can you tell me what path-related limits limits.h does define on win64? e.g. there should be something like POSIX_PATH_MAS or XOPEN_PATH_MAX, and if neither of these is available, and nothing else looks relevant we can define a default. I already put in a default; see platforms/Cross/plugins/B3DAcceleratorPlugin/sqOpenGLRenderer.c
I see that here https://git.io/v9QbB and the error disappears in https://ci.appveyor.com/project/OpenSmalltalk/vm/build/1.0.665
But can we do better on win64/win32?
I found _MAX_PATH in <stdlib.h> at "Path Field Limits" for MSVC here... https://msdn.microsoft.com/en-us/library/930f87yf.aspx
but I'm not sure how that relates to Cygwin. I see PATH_MAX defined in "limits.h" here... https://cygwin.com/ml/cygwin-patches/2005-q1/msg00084.html
cheers -ben
Did you agree on a solution for this?
I'm getting close to finishing the FileAttributes plugin discussed in the "Extending primitiveDirectoryEntry" thread and have also realised that PATH_MAX = 260 on win32. The plugin also uses the unicode versions of the windows function, so should work with paths up to 32k characters.
Is there a manifest constant (#define) in Cygwin for the 32k limit? Which APIs have a 32k limit and which have a 260 limit?
[why are C APIs such a mess?]
It's a mess seems to be the best summary...
I couldn't find any constant in cygwin for 32k. Although in some ways it doesn't matter...
As Tobias said, the 32k limit only applies to the wide version of functions that have appropriately formatted file names, i.e. "\?" prepended to the name, and the expansion means that the actual limit may be less. That is, of course, assuming the underlying file system supports it, otherwise it might still be 260 characters. The cynical part of me is also wondering whether it really is 32k characters, or 32k bytes, in which case the coding may influence the available length.
It looks like the best that can be done is to have our own #define of 32768, use the wide character version of the functions and hope for the best.
Just to add to my frustration, it looks like the gcc version of stat() handles timezones properly, while the mingw version doesn't. Grrr... (If anyone happens to know something here, please tell me).
Cheers, Alistair