RFR: 8038296 sun/tools/jinfo/Basic.sh: java.io.IOException: Command failed in target VM

Dmitry Samersoff dmitry.samersoff at oracle.com
Tue Mar 25 12:46:23 UTC 2014


strtol() sets errno in two cases -

ERANGE if supplied value is less then LONG_MIN or greater than LONG_MAX
EINVAL if supplied base is not supported.

if you pass probe == 'bla', strtol just return 0 and errno will not be
set. So I'm not sure that check for errno has any value here.

One of possible way to check that supplied value is convertible to long is

char *eptr = probe;
strtol(probe, (char **)&eptr, 10);
if (eptr == probe) {
  // we can't convert supplied value
  return JNI_ERR;


On 2014-03-25 11:31, Staffan Larsen wrote:
> attachListener_solaris.cpp calls atoi() and then checks errno to see if any errors occurred. The problem is that atoi() does not set errno, so some old value of errno is checked which sometimes causes the function to fail.
> The fix is to replace atoi() with strtol() which does set errno. But errno is only set if an error occurred and not set to 0 in case of success. Thus, I set errno to 0 before calling strtol() and check the value afterwards.
> Verified with a JPRT run.
> webrev: http://cr.openjdk.java.net/~sla/8038296/webrev.00/
> bug: https://bugs.openjdk.java.net/browse/JDK-8038296
> Thanks,
> /Staffan

Dmitry Samersoff
Oracle Java development team, Saint Petersburg, Russia
* I would love to change the world, but they won't give me the sources.

More information about the hotspot-runtime-dev mailing list