package org.jruby.ext;

import jnr.constants.platform.Errno;
import org.jruby.Ruby;
import org.jruby.RubyClass;
import org.jruby.exceptions.RaiseException;

public class JRubyPOSIXHelper {
    
Helper for handling common POSIX situations where a negative return value from a function call indicates an error, and errno must be consulted to determine how exactly the function failed.
Params:
  • runtime – Ruby runtime
  • result – return value of a POSIX call
/** * Helper for handling common POSIX situations where a negative return value * from a function call indicates an error, and errno must be consulted to * determine how exactly the function failed. * @param runtime Ruby runtime * @param result return value of a POSIX call */
public static void checkErrno(Ruby runtime, int result) { if (result < 0) { // FIXME: The error message is a bit off. // e.g., No such process - No such process (Errno::ESRCH) // Note the repetition of 'No such process'. Errno errno = Errno.valueOf(runtime.getPosix().errno()); String name = errno.name(); String msg = errno.toString(); RubyClass errnoClass = runtime.getErrno().getClass(name); if (errnoClass != null) { throw RaiseException.from(runtime, errnoClass, msg); } } } }