source: trunk/icedtea-web/plugin/icedteanp/os2/OS_OS2.cc

Last change on this file was 432, checked in by dmik, 11 years ago

icedtea-web: Requre PATH-located java to reside in bin/.

This is to kind of make sure that there is also lib/ where
rt.jar is expected to be.

File size: 4.2 KB
Line 
1/* OS_OS2.cc
2
3 Copyright (C) 2009, 2010 Red Hat
4
5This file is part of IcedTea.
6
7IcedTea is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 2, or (at your option)
10any later version.
11
12IcedTea is distributed in the hope that it will be useful, but
13WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with IcedTea; see the file COPYING. If not, write to the
19Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
2002110-1301 USA.
21
22Linking this library statically or dynamically with other modules is
23making a combined work based on this library. Thus, the terms and
24conditions of the GNU General Public License cover the whole
25combination.
26
27As a special exception, the copyright holders of this library give you
28permission to link this library with independent modules to produce an
29executable, regardless of the license terms of these independent
30modules, and to copy and distribute the resulting executable under
31terms of your choice, provided that you also meet, for each linked
32independent module, the terms and conditions of the license of that
33module. An independent module is a module which is not derived from
34or based on this library. If you modify this library, you may extend
35this exception to your version of the library, but you are not
36obligated to do so. If you do not wish to do so, delete this
37exception statement from your version. */
38
39#define INCL_DOS
40#define INCL_PM
41#define INCL_ERRORS
42#include <os2.h>
43
44#include <stdlib.h>
45#include <string.h>
46
47#include "OS_OS2.h"
48#include "OS_OS2_WinOS2.h"
49
50const char *icedtea_web_data_dir()
51{
52 const char *home = getenv("ICEDTEA_WEB_DATA");
53 if (!home)
54 {
55#if !defined(ICEDTEA_WEB_DATA_DIR)
56 // deduce the path from this DLL's name
57 static char buf[CCHMAXPATH] = {0};
58 if (buf[0] == 0)
59 {
60 BOOL ok = FALSE;
61 HMODULE hmod;
62 ULONG objNum, offset;
63 APIRET rc;
64 rc = DosQueryModFromEIP(&hmod, &objNum, sizeof(buf), buf, &offset,
65 (ULONG)&icedtea_web_data_dir);
66 if (rc == NO_ERROR)
67 {
68 rc = DosQueryModuleName(hmod, sizeof(buf), buf);
69 if (rc == NO_ERROR)
70 {
71 // truncate the extension to get the data dir
72 char *end = strrchr(buf, '.');
73 if (end)
74 {
75 *end = '\0';
76 ok = TRUE;
77 }
78 }
79 }
80 if (!ok)
81 buf[0] = '\0';
82 }
83 home = buf;
84#else
85 home = ICEDTEA_WEB_DATA_DIR;
86#endif
87 }
88 return home;
89}
90
91const char *icedtea_web_jre_dir()
92{
93 const char *jre = getenv("ICEDTEA_WEB_JRE");
94 if (!jre)
95 {
96#if !defined(ICEDTEA_WEB_JRE_DIR)
97 // deduce the path from JAVA.EXE found in PATH
98 static char buf[CCHMAXPATH] = {0};
99 if (buf[0] == 0)
100 {
101 BOOL ok = FALSE;
102 APIRET rc;
103 rc = DosSearchPath(SEARCH_IGNORENETERRS | SEARCH_ENVIRONMENT |
104 SEARCH_CUR_DIRECTORY,
105 "PATH", "JAVA.EXE", buf, sizeof(buf));
106 if (rc == NO_ERROR)
107 {
108 char *end = strrchr(buf, '\\');
109 if (end)
110 {
111 *end = '\0';
112 // truncate \bin if present (otherwise this path is considered invalid)
113 end = strrchr(buf, '\\');
114 if (end && stricmp(end + 1, "bin") == 0)
115 {
116 *end = '\0';
117 ok = TRUE;
118 }
119 }
120 }
121 if (!ok)
122 buf[0] = '\0';
123 }
124 jre = buf;
125#else
126 jre = ICEDTEA_WEB_JRE_DIR;
127#endif
128 }
129 return jre;
130}
131
132bool init_os()
133{
134 return init_os_winos2();
135}
136
137void done_os()
138{
139 done_os_winos2();
140}
Note: See TracBrowser for help on using the repository browser.