Regis wrote: > 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?
Sounds good to me. Tim
