27 #include <sys/socket.h>
28 #include <netinet/in.h>
29 #include <arpa/inet.h>
30
31 #include <Security/AuthSession.h>
32 #include <CoreFoundation/CoreFoundation.h>
33 #include <SystemConfiguration/SystemConfiguration.h>
34
35 #include "java_props_macosx.h"
36
37
38 // need dlopen/dlsym trick to avoid pulling in JavaRuntimeSupport before libjava.dylib is loaded
39 static void *getJRSFramework() {
40 static void *jrsFwk = NULL;
41 if (jrsFwk == NULL) {
42 jrsFwk = dlopen("/System/Library/Frameworks/JavaVM.framework/Frameworks/JavaRuntimeSupport.framework/JavaRuntimeSupport", RTLD_LAZY | RTLD_LOCAL);
43 }
44 return jrsFwk;
45 }
46
47 static char *getPosixLocale(int cat) {
48 char *lc = setlocale(cat, NULL);
49 if ((lc == NULL) || (strcmp(lc, "C") == 0)) {
50 lc = getenv("LANG");
51 }
52 if (lc == NULL) return NULL;
53 return strdup(lc);
54 }
55
56 #define LOCALEIDLENGTH 128
57 char *setupMacOSXLocale(int cat) {
58 switch (cat) {
59 case LC_MESSAGES:
60 {
61 void *jrsFwk = getJRSFramework();
62 if (jrsFwk == NULL) return getPosixLocale(cat);
63
64 char *(*JRSCopyPrimaryLanguage)() = dlsym(jrsFwk, "JRSCopyPrimaryLanguage");
65 char *primaryLanguage = JRSCopyPrimaryLanguage ? JRSCopyPrimaryLanguage() : NULL;
66 if (primaryLanguage == NULL) return getPosixLocale(cat);
67
68 char *(*JRSCopyCanonicalLanguageForPrimaryLanguage)(char *) = dlsym(jrsFwk, "JRSCopyCanonicalLanguageForPrimaryLanguage");
69 char *canonicalLanguage = JRSCopyCanonicalLanguageForPrimaryLanguage ? JRSCopyCanonicalLanguageForPrimaryLanguage(primaryLanguage) : NULL;
70 free (primaryLanguage);
71 if (canonicalLanguage == NULL) return getPosixLocale(cat);
72
73 void (*JRSSetDefaultLocalization)(char *) = dlsym(jrsFwk, "JRSSetDefaultLocalization");
74 if (JRSSetDefaultLocalization) JRSSetDefaultLocalization(canonicalLanguage);
75
76 return canonicalLanguage;
77 }
78 break;
79 default:
80 {
81 char localeString[LOCALEIDLENGTH];
82 if (CFStringGetCString(CFLocaleGetIdentifier(CFLocaleCopyCurrent()),
83 localeString, LOCALEIDLENGTH, CFStringGetSystemEncoding())) {
84 return strdup(localeString);
85 }
86 }
87 break;
88 }
89
90 return NULL;
91 }
92
93 /* There are several toolkit options on Mac OS X, so we should try to
94 * pick the "best" one, given what we know about the environment Java
95 * is running under
96 */
97
98 static PreferredToolkit getPreferredToolkitFromEnv() {
99 char *envVar = getenv("AWT_TOOLKIT");
100 if (envVar == NULL) return unset;
101
102 if (strcasecmp(envVar, "CToolkit") == 0) return CToolkit;
103 if (strcasecmp(envVar, "XToolkit") == 0) return XToolkit;
104 if (strcasecmp(envVar, "HToolkit") == 0) return HToolkit;
105 return unset;
106 }
107
108 static bool isInAquaSession() {
109 // Is the WindowServer available?
110 SecuritySessionId session_id;
111 SessionAttributeBits session_info;
112 OSStatus status = SessionGetInfo(callerSecuritySession, &session_id, &session_info);
|
27 #include <sys/socket.h>
28 #include <netinet/in.h>
29 #include <arpa/inet.h>
30
31 #include <Security/AuthSession.h>
32 #include <CoreFoundation/CoreFoundation.h>
33 #include <SystemConfiguration/SystemConfiguration.h>
34
35 #include "java_props_macosx.h"
36
37
38 // need dlopen/dlsym trick to avoid pulling in JavaRuntimeSupport before libjava.dylib is loaded
39 static void *getJRSFramework() {
40 static void *jrsFwk = NULL;
41 if (jrsFwk == NULL) {
42 jrsFwk = dlopen("/System/Library/Frameworks/JavaVM.framework/Frameworks/JavaRuntimeSupport.framework/JavaRuntimeSupport", RTLD_LAZY | RTLD_LOCAL);
43 }
44 return jrsFwk;
45 }
46
47 char *getPosixLocale(int cat) {
48 char *lc = setlocale(cat, NULL);
49 if ((lc == NULL) || (strcmp(lc, "C") == 0)) {
50 lc = getenv("LANG");
51 }
52 if (lc == NULL) return NULL;
53 return strdup(lc);
54 }
55
56 #define LOCALEIDLENGTH 128
57 char *getMacOSXLocale(int cat) {
58 switch (cat) {
59 case LC_MESSAGES:
60 {
61 void *jrsFwk = getJRSFramework();
62 if (jrsFwk == NULL) return NULL;
63
64 char *(*JRSCopyPrimaryLanguage)() = dlsym(jrsFwk, "JRSCopyPrimaryLanguage");
65 char *primaryLanguage = JRSCopyPrimaryLanguage ? JRSCopyPrimaryLanguage() : NULL;
66 if (primaryLanguage == NULL) return NULL;
67
68 char *(*JRSCopyCanonicalLanguageForPrimaryLanguage)(char *) = dlsym(jrsFwk, "JRSCopyCanonicalLanguageForPrimaryLanguage");
69 char *canonicalLanguage = JRSCopyCanonicalLanguageForPrimaryLanguage ? JRSCopyCanonicalLanguageForPrimaryLanguage(primaryLanguage) : NULL;
70 free (primaryLanguage);
71
72 return canonicalLanguage;
73 }
74 break;
75 default:
76 {
77 char localeString[LOCALEIDLENGTH];
78 if (CFStringGetCString(CFLocaleGetIdentifier(CFLocaleCopyCurrent()),
79 localeString, LOCALEIDLENGTH, CFStringGetSystemEncoding())) {
80 return strdup(localeString);
81 }
82 }
83 break;
84 }
85
86 return NULL;
87 }
88
89 char *setupMacOSXLocale(int cat) {
90 char * ret = getMacOSXLocale(cat);
91
92 if (cat == LC_MESSAGES && ret != NULL) {
93 void *jrsFwk = getJRSFramework();
94 if (jrsFwk != NULL) {
95 void (*JRSSetDefaultLocalization)(char *) = dlsym(jrsFwk, "JRSSetDefaultLocalization");
96 if (JRSSetDefaultLocalization) JRSSetDefaultLocalization(ret);
97 }
98 }
99
100 if (ret == NULL) {
101 return getPosixLocale(cat);
102 } else {
103 return ret;
104 }
105 }
106
107 /* There are several toolkit options on Mac OS X, so we should try to
108 * pick the "best" one, given what we know about the environment Java
109 * is running under
110 */
111
112 static PreferredToolkit getPreferredToolkitFromEnv() {
113 char *envVar = getenv("AWT_TOOLKIT");
114 if (envVar == NULL) return unset;
115
116 if (strcasecmp(envVar, "CToolkit") == 0) return CToolkit;
117 if (strcasecmp(envVar, "XToolkit") == 0) return XToolkit;
118 if (strcasecmp(envVar, "HToolkit") == 0) return HToolkit;
119 return unset;
120 }
121
122 static bool isInAquaSession() {
123 // Is the WindowServer available?
124 SecuritySessionId session_id;
125 SessionAttributeBits session_info;
126 OSStatus status = SessionGetInfo(callerSecuritySession, &session_id, &session_info);
|