[Vm-dev] Failing win64x64 builds - undeclared identifier 'PATH_MAX'

Tobias Pape Das.Linux at gmx.de
Mon May 15 14:58:04 UTC 2017


> On 15.05.2017, at 16:31, Eliot Miranda <eliot.miranda at gmail.com> wrote:
> 
> 
> Hi Alistair,
> 
>> On May 15, 2017, at 7:28 AM, Alistair Grant <akgrant0710 at 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 at 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 does not work that way.
AFAIK, all Ansi-APIs are 260-limited (correct me if I'm wrong),
but even the Unicode-APIs are, if not used in the correct way.
See:
	https://github.com/OpenSmalltalk/opensmalltalk-vm/blob/Cog/platforms/win32/plugins/FilePlugin/sqWin32File.h#L6
and hence 
	http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx#maxpath

TL;DR: MAX_PATH is 260, path _can_ be longer if used correctly ('\\?\')

-t

> 
>> 
>> Thanks,
>> Alistair



More information about the Vm-dev mailing list