/* 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 * <code><a href="http://www.opengroup.org/onlinepubs/009695399/functions/errno.html">errno</a></code> * or <code><a href="http://msdn.microsoft.com/en-us/library/ms679360(VS.85).aspx">GetLastError()</a></code>. */ 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; } }