* src/vm/vm.c (vm_call_method_intern): Removed.
[cacao.git] / src / vm / properties.c
1 /* src/vm/properties.c - handling commandline properties
2
3    Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
4    C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
5    E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
6    J. Wenninger, Institut f. Computersprachen - TU Wien
7
8    This file is part of CACAO.
9
10    This program is free software; you can redistribute it and/or
11    modify it under the terms of the GNU General Public License as
12    published by the Free Software Foundation; either version 2, or (at
13    your option) any later version.
14
15    This program is distributed in the hope that it will be useful, but
16    WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18    General Public License for more details.
19
20    You should have received a copy of the GNU General Public License
21    along with this program; if not, write to the Free Software
22    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
23    02110-1301, USA.
24
25    Contact: cacao@cacaojvm.org
26
27    Authors: Christian Thalinger
28
29    Changes:
30
31    $Id: properties.c 4559 2006-03-05 23:24:50Z twisti $
32
33 */
34
35
36 #include "config.h"
37
38 #include <stdlib.h>
39
40 #include "vm/types.h"
41
42 #include "mm/memory.h"
43
44 #include "vm/global.h"
45 #include "native/include/java_lang_String.h"
46 #include "native/include/java_util_Properties.h"
47 #include "toolbox/list.h"
48 #include "vm/method.h"
49 #include "vm/options.h"
50 #include "vm/stringlocal.h"
51 #include "vm/vm.h"
52 #include "vm/jit/asmpart.h"
53
54
55 /* temporary property structure ***********************************************/
56
57 typedef struct list_properties_entry list_properties_entry;
58
59 struct list_properties_entry {
60         char     *key;
61         char     *value;
62         listnode linkage;
63 };
64
65
66 /* global variables ***********************************************************/
67
68 static list *list_properties = NULL;
69
70 static java_util_Properties *psystem;
71 static methodinfo *mput;
72
73
74 /* properties_init *************************************************************
75
76    Initialize the properties list.
77
78 *******************************************************************************/
79
80 bool properties_init(void)
81 {
82         list_properties = NEW(list);
83
84         list_init(list_properties, OFFSET(list_properties_entry, linkage));
85
86         /* everything's ok */
87
88         return true;
89 }
90
91
92 /* properties_postinit *********************************************************
93
94    Post-initialize the properties.  The passed properties table is the
95    Java system properties table.
96
97 *******************************************************************************/
98
99 bool properties_postinit(java_util_Properties *p)
100 {
101         /* set global Java system properties pointer */
102
103         psystem = p;
104
105         /* search for method to add properties */
106
107         mput = class_resolveclassmethod(p->header.vftbl->class,
108                                                                         utf_new_char("put"),
109                                                                         utf_new_char("(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"),
110                                                                         NULL,
111                                                                         true);
112
113         if (mput == NULL)
114                 return false;
115
116         return true;
117 }
118
119
120 /* properties_add **************************************************************
121
122    Adds a property entry for a command line property definition.
123
124 *******************************************************************************/
125
126 void properties_add(char *key, char *value)
127 {
128         list_properties_entry *p;
129
130         p = NEW(list_properties_entry);
131         p->key   = key;
132         p->value = value;
133
134         list_addlast(list_properties, p);
135 }
136
137
138 /* get_property ****************************************************************
139
140    Get a property entry from a command line property definition.
141
142 *******************************************************************************/
143
144 char *properties_get(char *key)
145 {
146         list_properties_entry *p;
147
148         for (p = list_first(list_properties); p != NULL;
149                  p = list_next(list_properties, p)) {
150                 if (strcmp(p->key, key) == 0)
151                         return p->value;
152         }
153
154         return NULL;
155 }
156
157
158 /* properties_system_add *******************************************************
159
160    Adds a property to the Java system properties.
161
162 *******************************************************************************/
163
164 void properties_system_add(char *key, char *value)
165 {
166         java_lang_String *k;
167         java_lang_String *v;
168
169         k = javastring_new_char(key);
170         v = javastring_new_char(value);
171
172         (void) vm_call_method(mput, (java_objectheader *) psystem, k, v);
173 }
174
175
176 /* properties_system_add_all ***************************************************
177
178    Adds a all properties from the properties list to the Java system
179    properties.
180
181 *******************************************************************************/
182
183 void properties_system_add_all(void)
184 {
185         list_properties_entry *p;
186
187         for (p = list_first(list_properties); p != NULL;
188                  p = list_first(list_properties)) {
189                 /* add to the Java system properties */
190
191                 properties_system_add(p->key, p->value);
192
193                 /* remove the entry from the list */
194
195                 list_remove(list_properties, p);
196
197                 /* and free the memory */
198
199                 FREE(p, list_properties_entry);
200         }
201 }
202
203
204 /*
205  * These are local overrides for various environment variables in Emacs.
206  * Please do not remove this and leave it at the end of the file, where
207  * Emacs will automagically detect them.
208  * ---------------------------------------------------------------------
209  * Local variables:
210  * mode: c
211  * indent-tabs-mode: t
212  * c-basic-offset: 4
213  * tab-width: 4
214  * End:
215  */