src/solaris/native/sun/awt/awt_LoadLibrary.c

Print this page




  68             return JNI_TRUE;
  69         }
  70         isHeadless = (*env)->CallStaticBooleanMethod(env, graphicsEnvClass,
  71                                                      headlessFn);
  72     }
  73     return isHeadless;
  74 }
  75 
  76 jint
  77 AWT_OnLoad(JavaVM *vm, void *reserved)
  78 {
  79     Dl_info dlinfo;
  80     char buf[MAXPATHLEN];
  81     int32_t len;
  82     char *p, *tk = 0;
  83     JNI_OnLoad_type *JNI_OnLoad_ptr;
  84     struct utsname name;
  85     JNIEnv *env = (JNIEnv *)JNU_GetEnv(vm, JNI_VERSION_1_2);
  86     void *v;
  87     char *envvar;
  88     jstring toolkit = NULL, grenv = NULL, fmanager = NULL;
  89     jstring tkProp = NULL, geProp = NULL, fmProp = NULL;
  90 
  91     if (awtHandle != NULL) {
  92         /* Avoid several loading attempts */
  93         return JNI_VERSION_1_2;
  94     }
  95 
  96     jvm = vm;
  97 
  98     /* Get address of this library and the directory containing it. */
  99     dladdr((void *)JNI_OnLoad, &dlinfo);
 100     realpath((char *)dlinfo.dli_fname, buf);
 101     len = strlen(buf);
 102     p = strrchr(buf, '/');
 103 
 104     /*
 105      * The code below is responsible for:
 106      * 1. Loading appropriate awt library, i.e. xawt/libmawt or headless/libwawt
 107      * 2. Setting "awt.toolkit" system property to use the appropriate Java toolkit class,
 108      *    (if user has specified the toolkit in env varialble)
 109      */
 110 
 111     tkProp = (*env)->NewStringUTF(env, "awt.toolkit");
 112     geProp = (*env)->NewStringUTF(env, "java.awt.graphicsenv");
 113     fmProp = (*env)->NewStringUTF(env, "sun.font.fontmanager");
 114     /* Check if toolkit is specified in env variable */
 115 #ifdef MACOSX
 116     envvar = getenv("AWT_TOOLKIT");
 117     if (envvar && strstr(envvar, "XToolkit")) {
 118 #endif
 119     toolkit = (*env)->NewStringUTF(env, "sun.awt.X11.XToolkit");
 120         grenv = (*env)->NewStringUTF(env, "sun.awt.X11GraphicsEnvironment");
 121         fmanager = (*env)->NewStringUTF(env, "sun.awt.X11FontManager");
 122         tk = "/xawt/libmawt";
 123 #ifdef MACOSX
 124     } else {
 125     toolkit = (*env)->NewStringUTF(env, "sun.lwawt.macosx.LWCToolkit");
 126         grenv = (*env)->NewStringUTF(env, "sun.awt.CGraphicsEnvironment");
 127         fmanager = (*env)->NewStringUTF(env, "sun.font.CFontManager");
 128         tk = "/lwawt/liblwawt";
 129     }
 130 #endif
 131     if (toolkit && tkProp) {
 132         JNU_CallStaticMethodByName(env, NULL, "java/lang/System", "setProperty",
 133                                    "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;",
 134                                    tkProp, toolkit);
 135     }
 136     if (grenv && geProp) {
 137         JNU_CallStaticMethodByName(env, NULL, "java/lang/System", "setProperty",
 138                                    "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;",
 139                                    geProp, grenv);
 140     }
 141     if (fmanager && fmProp) {
 142         JNU_CallStaticMethodByName(env, NULL, "java/lang/System", "setProperty",
 143                                    "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;",
 144                                    fmProp, fmanager);
 145     }
 146 
 147     /* Calculate library name to load */
 148 #ifndef MACOSX
 149     if (AWTIsHeadless()) {
 150         strcpy(p, "/headless/libmawt");
 151     } else if (tk) {
 152 #endif
 153         strcpy(p, tk);
 154 #ifndef MACOSX
 155     }
 156 #endif
 157 
 158     if (toolkit) {
 159         (*env)->DeleteLocalRef(env, toolkit);
 160     }
 161     if (tkProp) {
 162         (*env)->DeleteLocalRef(env, tkProp);
 163     }
 164     if (grenv) {
 165         (*env)->DeleteLocalRef(env, grenv);
 166     }
 167     if (geProp) {
 168         (*env)->DeleteLocalRef(env, geProp);
 169     }
 170 
 171 #ifdef MACOSX
 172     strcat(p, ".dylib");
 173 #else
 174     strcat(p, ".so");
 175 #endif
 176 
 177     if (tk) {
 178         JNU_CallStaticMethodByName(env, NULL, "java/lang/System", "load",
 179                                    "(Ljava/lang/String;)V",
 180                                    JNU_NewStringPlatform(env, buf));
 181             awtHandle = dlopen(buf, RTLD_LAZY | RTLD_GLOBAL);
 182     }
 183 
 184     return JNI_VERSION_1_2;
 185 }
 186 
 187 JNIEXPORT jint JNICALL
 188 JNI_OnLoad(JavaVM *vm, void *reserved)
 189 {




  68             return JNI_TRUE;
  69         }
  70         isHeadless = (*env)->CallStaticBooleanMethod(env, graphicsEnvClass,
  71                                                      headlessFn);
  72     }
  73     return isHeadless;
  74 }
  75 
  76 jint
  77 AWT_OnLoad(JavaVM *vm, void *reserved)
  78 {
  79     Dl_info dlinfo;
  80     char buf[MAXPATHLEN];
  81     int32_t len;
  82     char *p, *tk = 0;
  83     JNI_OnLoad_type *JNI_OnLoad_ptr;
  84     struct utsname name;
  85     JNIEnv *env = (JNIEnv *)JNU_GetEnv(vm, JNI_VERSION_1_2);
  86     void *v;
  87     char *envvar;
  88     jstring fmanager = NULL;
  89     jstring fmProp = NULL;
  90 
  91     if (awtHandle != NULL) {
  92         /* Avoid several loading attempts */
  93         return JNI_VERSION_1_2;
  94     }
  95 
  96     jvm = vm;
  97 
  98     /* Get address of this library and the directory containing it. */
  99     dladdr((void *)JNI_OnLoad, &dlinfo);
 100     realpath((char *)dlinfo.dli_fname, buf);
 101     len = strlen(buf);
 102     p = strrchr(buf, '/');
 103 
 104     /*
 105      * 1. Set the "sun.font.fontmanager" system property,
 106      * 2. Choose the library image name.


 107      */



 108     fmProp = (*env)->NewStringUTF(env, "sun.font.fontmanager");
 109     /* Check if toolkit is specified in env variable */
 110 #ifdef MACOSX
 111     envvar = getenv("AWT_TOOLKIT");
 112     if (envvar && strstr(envvar, "XToolkit")) {
 113 #endif


 114         fmanager = (*env)->NewStringUTF(env, "sun.awt.X11FontManager");
 115         tk = "/xawt/libmawt";
 116 #ifdef MACOSX
 117     } else {


 118         fmanager = (*env)->NewStringUTF(env, "sun.font.CFontManager");
 119         tk = "/lwawt/liblwawt";
 120     }
 121 #endif










 122     if (fmanager && fmProp) {
 123         JNU_CallStaticMethodByName(env, NULL, "java/lang/System", "setProperty",
 124                                    "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;",
 125                                    fmProp, fmanager);
 126     }
 127 
 128     /* Calculate library name to load */
 129 #ifndef MACOSX
 130     if (AWTIsHeadless()) {
 131         strcpy(p, "/headless/libmawt");
 132     } else if (tk) {
 133 #endif
 134         strcpy(p, tk);
 135 #ifndef MACOSX
 136     }
 137 #endif













 138 
 139 #ifdef MACOSX
 140     strcat(p, ".dylib");
 141 #else
 142     strcat(p, ".so");
 143 #endif
 144 
 145     if (tk) {
 146         JNU_CallStaticMethodByName(env, NULL, "java/lang/System", "load",
 147                                    "(Ljava/lang/String;)V",
 148                                    JNU_NewStringPlatform(env, buf));
 149             awtHandle = dlopen(buf, RTLD_LAZY | RTLD_GLOBAL);
 150     }
 151 
 152     return JNI_VERSION_1_2;
 153 }
 154 
 155 JNIEXPORT jint JNICALL
 156 JNI_OnLoad(JavaVM *vm, void *reserved)
 157 {