1 /* 2 * Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved. 3 * Copyright 2013 SAP AG. All rights reserved. 4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 5 * 6 * This code is free software; you can redistribute it and/or modify it 7 * under the terms of the GNU General Public License version 2 only, as 8 * published by the Free Software Foundation. Oracle designates this 9 * particular file as subject to the "Classpath" exception as provided 10 * by Oracle in the LICENSE file that accompanied this code. 11 * 12 * This code is distributed in the hope that it will be useful, but WITHOUT 13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 14 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 15 * version 2 for more details (a copy is included in the LICENSE file that 16 * accompanied this code). 17 * 18 * You should have received a copy of the GNU General Public License version 19 * 2 along with this work; if not, write to the Free Software Foundation, 20 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 21 * 22 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 23 * or visit www.oracle.com if you need additional information or have any 24 * questions. 25 */ 26 27 /* 28 * Portions Copyright (c) 2014 IBM Corporation 29 */ 30 31 package sun.nio.fs; 32 33 import java.security.AccessController; 34 import java.security.PrivilegedAction; 35 import java.util.List; 36 37 /** 38 * AIX specific system calls. 39 */ 40 41 class AixNativeDispatcher extends UnixNativeDispatcher { 42 private AixNativeDispatcher() { } 43 44 // initialize 45 private static native void init(); 46 47 /** 48 * Special implementation of 'getextmntent' (see SolarisNativeDispatcher) 49 * that returns all entries at once. 50 */ 51 static native UnixMountEntry[] getmntctl() throws UnixException; 52 53 static { 54 AccessController.doPrivileged(new PrivilegedAction<Void>() { 55 public Void run() { 56 System.loadLibrary("nio"); 57 return null; 58 }}); 59 init(); 60 } 61 62 63 static void getAixMountEntries(List<UnixMountEntry> entries) { 64 int size = queryMountEntrySize(); 65 if (size != 0) { 66 NativeBuffer buffer = NativeBuffers.allocNativeBuffer(size); 67 getAixMountEntries(entries, buffer.address(), size); 68 buffer.release(); 69 } 70 } 71 72 private static native int queryMountEntrySize(); 73 74 private static native void getAixMountEntries(List<UnixMountEntry> entries, long bufferAddress, int size); 75 76 /** 77 * ssize_t fgetxattr(int filedes, const char *name, void *value, size_t size); 78 */ 79 static int fgetxattr(int filedes, byte[] name, long valueAddress, 80 int valueLen) throws UnixException 81 { 82 NativeBuffer buffer = NativeBuffers.asNativeBuffer(name); 83 try { 84 return fgetxattr0(filedes, buffer.address(), valueAddress, valueLen); 85 } finally { 86 buffer.release(); 87 } 88 } 89 90 private static native int fgetxattr0(int filedes, long nameAddress, 91 long valueAdddress, int valueLen) throws UnixException; 92 93 /** 94 * fsetxattr(int filedes, const char *name, const void *value, size_t size, int flags); 95 */ 96 static void fsetxattr(int filedes, byte[] name, long valueAddress, 97 int valueLen) throws UnixException 98 { 99 NativeBuffer buffer = NativeBuffers.asNativeBuffer(name); 100 try { 101 fsetxattr0(filedes, buffer.address(), valueAddress, valueLen); 102 } finally { 103 buffer.release(); 104 } 105 } 106 107 private static native void fsetxattr0(int filedes, long nameAddress, 108 long valueAdddress, int valueLen) throws UnixException; 109 110 111 /** 112 * fremovexattr(int filedes, const char *name); 113 */ 114 static void fremovexattr(int filedes, byte[] name) throws UnixException { 115 NativeBuffer buffer = NativeBuffers.asNativeBuffer(name); 116 try { 117 fremovexattr0(filedes, buffer.address()); 118 } finally { 119 buffer.release(); 120 } 121 } 122 123 private static native void fremovexattr0(int filedes, long nameAddress) 124 throws UnixException; 125 126 /** 127 * size_t flistxattr(int filedes, const char *list, size_t size) 128 */ 129 static native int flistxattr(int filedes, long listAddress, int size) 130 throws UnixException; 131 132 }