1 /* 2 * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 /* Native Platform Toolkit */ 27 28 #ifndef _NPT_MD_H 29 #define _NPT_MD_H 30 31 #include <stdio.h> 32 #include <string.h> 33 #include <errno.h> 34 #include <dlfcn.h> 35 #include <jvm_md.h> 36 37 #define NPT_LIBNAME "npt" 38 39 #define NPT_INITIALIZE(path,pnpt,version,options) \ 40 { \ 41 void *_handle; \ 42 void *_sym; \ 43 \ 44 if ( (pnpt) == NULL ) NPT_ERROR("NptEnv* is NULL"); \ 45 *(pnpt) = NULL; \ 46 _handle = dlopen(path, RTLD_LAZY); \ 47 if ( _handle == NULL ) NPT_ERROR("Cannot open library"); \ 48 _sym = dlsym(_handle, "nptInitialize"); \ 49 if ( _sym == NULL ) NPT_ERROR("Cannot find nptInitialize"); \ 50 ((NptInitialize)_sym)((pnpt), version, (options)); \ 51 if ( (*(pnpt)) == NULL ) NPT_ERROR("Cannot initialize NptEnv"); \ 52 (*(pnpt))->libhandle = _handle; \ 53 } 54 55 #define NPT_TERMINATE(npt,options) \ 56 { \ 57 void *_handle; \ 58 void *_sym; \ 59 \ 60 if ( (npt) == NULL ) NPT_ERROR("NptEnv* is NULL"); \ 61 _handle = (npt)->libhandle; \ 62 _sym = dlsym(_handle, "nptTerminate"); \ 63 if ( _sym == NULL ) NPT_ERROR("Cannot find nptTerminate"); \ 64 ((NptTerminate)_sym)((npt), (options)); \ 65 if ( _handle != NULL ) (void)dlclose(_handle); \ 66 } 67 68 69 #endif 70