Question about os::getenv()
David Holmes
david.holmes at oracle.com
Fri Mar 6 07:20:33 UTC 2015
On 5/03/2015 11:12 AM, David Holmes wrote:
> On 5/03/2015 10:07 AM, Jeremy Manson wrote:
>> I'm happy to s/os::getenv/getenv/g if we know it works on Windows. I
>> assumed that there was some safety / security reason for requiring the
>> copying - otherwise, why does this interface exist at all?
>
> I don't know. Someone else (perhaps on hotspot list rather than
> serviceability) may, but I'd have to do a bit of archaeology to find out.
Arguments::parse_options_environment_variable itself requires a copy as
it rewrites the value of the variable in to the format needed.
I also checked back and in 1.3 we used getenv but then applied strdup
(and win32 used getenv too). But when hotspot turned up in 1.4 it has
the os::getenv copying into a supplied buffer.
Cheers,
David
>> If everyone's happy about this, I'll go ahead and file a bug / send in a
>> patch, with the understanding that someone else has to test on non-Linux
>> platforms...
>
> Sure. Do the patch and I'll run it through JPRT. If you need testing
> other than Solaris and Windows then others will need to step up. :)
>
> Cheers,
> David
>
>> Jeremy
>>
>> On Wed, Mar 4, 2015 at 3:45 PM, David Holmes <david.holmes at oracle.com
>> <mailto:david.holmes at oracle.com>> wrote:
>>
>> Hi Jeremy,
>>
>>
>> On 5/03/2015 6:14 AM, Jeremy Manson wrote:
>>
>> Hey folks,
>>
>> We had a request internally to make it so that JAVA_TOOL_OPTIONS
>> could
>> accept something longer than 1024 characters. See:
>>
>> Arguments::parse_options___environment_variable(const char* name,
>> SysClassPath* scp_p, bool* scp_assembly_required_p)
>>
>> in
>>
>>
>> http://hg.openjdk.java.net/__jdk9/jdk9/hotspot/file/__27f0413cbea3/src/share/vm/__runtime/arguments.cpp
>>
>>
>> <http://hg.openjdk.java.net/jdk9/jdk9/hotspot/file/27f0413cbea3/src/share/vm/runtime/arguments.cpp>
>>
>>
>> Would you folks be amenable to a refactoring so that getenv
>> returns a
>> newly allocated array with the contents of the envvar, which the
>> caller
>> has to delete?
>>
>>
>> I think this gets used too early in the VM startup to use the VM's
>> allocation routines (ie with NMT support) - not 100% sure though.
>>
>> But I think I have to agree with Martin and wonder why we have this
>> copying interface around getenv, rather than using the result of
>> getenv directly? Any code that really wants to modify the returned
>> value can copy it for themselves. That would alleviate the hard
>> wired limits.
>>
>> getenv is available on Windows too.
>>
>> David
>>
>> Jeremy
>>
>>
More information about the serviceability-dev
mailing list