harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Regis <xu.re...@gmail.com>
Subject Re: [jira] Created: (HARMONY-6238) [classlib][luni] File path limit set to 1K chars for all file systems
Date Fri, 19 Jun 2009 04:56:53 GMT
Tim Ellison wrote:
> Oliver Deakin wrote:
>> I've had a quick look around for the "right" way to do this, and it
>> seems there are 2 options:
>> 1) Determine the max path length from a system macro, probably PATH_MAX
>> in limits.h.
>> 2) Use the unix system call pathconf() to get the max path length.
>>
>> I think using a build time constant, as in 1, is preferable, however
>> this macro is not defined on all platforms. On zOS, for example, only
>> _POSIX_PATH_MAX is defined, and that is set to a paltry 256 (which is
>> not the real max path length - pathconf() tells me it is 1024).
>>
>> Perhaps to start with we can include /usr/include/linux/limits.h and use
>> PATH_MAX for linux platforms (I'm assuming that file exists for linux
>> distros in general here - perhaps someone can clarify this?) and on
>> non-linux platforms fall back to a default of 1024. We can add other
>> platforms in as we find the correct includes/macro definitions for them.
> 
>>>From the Harmony code I was looking at, the max path length is used to
> allocate char buffers so we can do path manipulations before passing
> through to OS calls.  We fail early if the path is greater than the
> expected max path length.
> 
> Would could, as you say try to set the max path length based on the OS
> we are using, but even that is going to be a guess since who knows where
> the file path points (e.g. network drives etc.)?
> 
> I wonder if we can be a bit lazier and set the Harmony max path length
> to a large number for the path manipulations, then let the OS call fail
> if the path is too long?

agree

> 
> (caveat: I've not looked at all uses of the HyMaxPath const to see if
> that is a good idea or not)
> 
> Regards,
> Tim
> 

I guess we have max path length because we used char array as buffer. It's not 
efficient and a kind of waste memory if the buffer size was the same as OS limit 
(on Windows it's 32,767 characters).

So I wonder if we can set a threshold value, like 1024, if path length is 
smaller than the value, we allocate char array as buffer, just like we have 
done; otherwise dynamic malloc memory as buffer, and then let OS tell us if the 
path is too long?

-- 
Best Regards,
Regis.

Mime
View raw message