1e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera/* 2e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. 3e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * 5e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * This code is free software; you can redistribute it and/or modify it 6e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * under the terms of the GNU General Public License version 2 only, as 7e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * published by the Free Software Foundation. Oracle designates this 8e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * particular file as subject to the "Classpath" exception as provided 9e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * by Oracle in the LICENSE file that accompanied this code. 10e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * 11e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * This code is distributed in the hope that it will be useful, but WITHOUT 12e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * version 2 for more details (a copy is included in the LICENSE file that 15e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * accompanied this code). 16e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * 17e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * You should have received a copy of the GNU General Public License version 18e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * 2 along with this work; if not, write to the Free Software Foundation, 19e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * 21e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * or visit www.oracle.com if you need additional information or have any 23e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * questions. 24e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera */ 25e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera 26e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmerapackage sun.nio.fs; 27e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera 28e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmeraimport java.nio.file.*; 29e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmeraimport java.io.IOException; 30e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera 31e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera/** 32e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * Internal exception thrown by native methods when error detected. 33e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera */ 34e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera 35e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmeraclass UnixException extends Exception { 36e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera static final long serialVersionUID = 7227016794320723218L; 37e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera 38e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera private int errno; 39e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera private String msg; 40e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera 41e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera UnixException(int errno) { 42e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera this.errno = errno; 43e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera this.msg = null; 44e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera } 45e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera 46e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera UnixException(String msg) { 47e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera this.errno = 0; 48e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera this.msg = msg; 49e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera } 50e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera 51e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera int errno() { 52e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera return errno; 53e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera } 54e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera 55e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera void setError(int errno) { 56e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera this.errno = errno; 57e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera this.msg = null; 58e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera } 59e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera 60e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera String errorString() { 61e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera if (msg != null) { 62e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera return msg; 63e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera } else { 64e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera return Util.toString(UnixNativeDispatcher.strerror(errno())); 65e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera } 66e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera } 67e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera 68e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera @Override 69e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera public String getMessage() { 70e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera return errorString(); 71e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera } 72e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera 73e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera /** 74e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * Map well known errors to specific exceptions where possible; otherwise 75e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * return more general FileSystemException. 76e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera */ 77e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera private IOException translateToIOException(String file, String other) { 78e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera // created with message rather than errno 79e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera if (msg != null) 80e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera return new IOException(msg); 81e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera 82e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera // handle specific cases 83e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera if (errno() == UnixConstants.EACCES) 84e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera return new AccessDeniedException(file, other, null); 85e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera if (errno() == UnixConstants.ENOENT) 86e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera return new NoSuchFileException(file, other, null); 87e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera if (errno() == UnixConstants.EEXIST) 88e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera return new FileAlreadyExistsException(file, other, null); 89e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera 90e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera // fallback to the more general exception 91e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera return new FileSystemException(file, other, errorString()); 92e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera } 93e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera 94e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera void rethrowAsIOException(String file) throws IOException { 95e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera IOException x = translateToIOException(file, null); 96e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera throw x; 97e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera } 98e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera 99e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera void rethrowAsIOException(UnixPath file, UnixPath other) throws IOException { 100e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera String a = (file == null) ? null : file.getPathForExceptionMessage(); 101e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera String b = (other == null) ? null : other.getPathForExceptionMessage(); 102e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera IOException x = translateToIOException(a, b); 103e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera throw x; 104e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera } 105e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera 106e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera void rethrowAsIOException(UnixPath file) throws IOException { 107e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera rethrowAsIOException(file, null); 108e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera } 109e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera 110e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera IOException asIOException(UnixPath file) { 111e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera return translateToIOException(file.getPathForExceptionMessage(), null); 112e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera } 113e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera} 114