com.sun.jna.LastErrorException Maven / Gradle / Ivy
/* Copyright (c) 2009 Timothy Wall, All Rights Reserved
*
* The contents of this file is dual-licensed under 2
* alternative Open Source/Free licenses: LGPL 2.1 or later and
* Apache License 2.0. (starting with JNA version 4.0.0).
*
* You can freely decide which license you want to apply to
* the project.
*
* You may obtain a copy of the LGPL License at:
*
* http://www.gnu.org/licenses/licenses.html
*
* A copy is also included in the downloadable source code package
* containing JNA, in file "LGPL2.1".
*
* You may obtain a copy of the Apache License at:
*
* http://www.apache.org/licenses/
*
* A copy is also included in the downloadable source code package
* containing JNA, in file "AL2.0".
*/
package com.sun.jna;
/**
* Exception representing a non-zero error code returned in either
* errno
* or GetLastError()
.
*/
public class LastErrorException extends RuntimeException {
private static final long serialVersionUID = 1L;
private int errorCode;
private static String formatMessage(int code) {
return Platform.isWindows()
? "GetLastError() returned " + code
: "errno was " + code;
}
private static String parseMessage(String m) {
try {
return formatMessage(Integer.parseInt(m));
} catch(NumberFormatException e) {
return m;
}
}
/**
* @return The reported error code
*/
public int getErrorCode() {
return errorCode;
}
public LastErrorException(String msg) {
super(parseMessage(msg.trim()));
try {
if (msg.startsWith("[")) {
msg = msg.substring(1, msg.indexOf("]"));
}
this.errorCode = Integer.parseInt(msg);
} catch(NumberFormatException e) {
this.errorCode = -1;
}
}
public LastErrorException(int code) {
this(code, formatMessage(code));
}
protected LastErrorException(int code, String msg) {
super(msg);
this.errorCode = code;
}
}