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