Rev 3022 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3022 | Rev 4055 | ||
---|---|---|---|
Line 161... | Line 161... | ||
161 | } else { |
161 | } else { |
162 | subtree = subtree->next; |
162 | subtree = subtree->next; |
163 | i = 0; |
163 | i = 0; |
164 | } |
164 | } |
165 | } |
165 | } |
- | 166 | ||
166 | panic("Not reached\n"); |
167 | panic("Not reached."); |
167 | return NULL; |
168 | return NULL; |
168 | } |
169 | } |
169 | 170 | ||
170 | void sysinfo_set_item_val(const char *name, sysinfo_item_t **root, unative_t val) |
171 | void sysinfo_set_item_val(const char *name, sysinfo_item_t **root, unative_t val) |
171 | { |
172 | { |
Line 175... | Line 176... | ||
175 | /* If already created create only returns pointer |
176 | /* If already created create only returns pointer |
176 | If not, create it */ |
177 | If not, create it */ |
177 | sysinfo_item_t *item = sysinfo_create_path(name, root); |
178 | sysinfo_item_t *item = sysinfo_create_path(name, root); |
178 | 179 | ||
179 | if (item != NULL) { /* If in subsystem, unable to create or return so unable to set */ |
180 | if (item != NULL) { /* If in subsystem, unable to create or return so unable to set */ |
180 | item->val.val=val; |
181 | item->val.val = val; |
181 | item->val_type = SYSINFO_VAL_VAL; |
182 | item->val_type = SYSINFO_VAL_VAL; |
182 | } |
183 | } |
183 | } |
184 | } |
184 | 185 | ||
185 | void sysinfo_set_item_function(const char *name, sysinfo_item_t **root, sysinfo_val_fn_t fn) |
186 | void sysinfo_set_item_function(const char *name, sysinfo_item_t **root, sysinfo_val_fn_t fn) |
Line 190... | Line 191... | ||
190 | /* If already created create only returns pointer |
191 | /* If already created create only returns pointer |
191 | If not, create it */ |
192 | If not, create it */ |
192 | sysinfo_item_t *item = sysinfo_create_path(name, root); |
193 | sysinfo_item_t *item = sysinfo_create_path(name, root); |
193 | 194 | ||
194 | if (item != NULL) { /* If in subsystem, unable to create or return so unable to set */ |
195 | if (item != NULL) { /* If in subsystem, unable to create or return so unable to set */ |
195 | item->val.fn=fn; |
196 | item->val.fn = fn; |
196 | item->val_type = SYSINFO_VAL_FUNCTION; |
197 | item->val_type = SYSINFO_VAL_FUNCTION; |
197 | } |
198 | } |
198 | } |
199 | } |
199 | 200 | ||
200 | 201 | ||
Line 242... | Line 243... | ||
242 | val = ((sysinfo_val_fn_t) (root->val.fn)) (root); |
243 | val = ((sysinfo_val_fn_t) (root->val.fn)) (root); |
243 | vtype = "FUN"; |
244 | vtype = "FUN"; |
244 | break; |
245 | break; |
245 | } |
246 | } |
246 | 247 | ||
247 | printf("%s %s val:%d(%x) sub:%s\n", root->name, vtype, val, |
248 | printf("%s %s val:%" PRIun "(%" PRIxn ") sub:%s\n", root->name, vtype, val, |
248 | val, (root->subinfo_type == SYSINFO_SUBINFO_NONE) ? |
249 | val, (root->subinfo_type == SYSINFO_SUBINFO_NONE) ? |
249 | "NON" : ((root->subinfo_type == SYSINFO_SUBINFO_TABLE) ? |
250 | "NON" : ((root->subinfo_type == SYSINFO_SUBINFO_TABLE) ? |
250 | "TAB" : "FUN")); |
251 | "TAB" : "FUN")); |
251 | 252 | ||
252 | if (root->subinfo_type == SYSINFO_SUBINFO_TABLE) |
253 | if (root->subinfo_type == SYSINFO_SUBINFO_TABLE) |
Line 279... | Line 280... | ||
279 | ret.val = ((sysinfo_val_fn_t) (item->val.fn)) (item); |
280 | ret.val = ((sysinfo_val_fn_t) (item->val.fn)) (item); |
280 | } |
281 | } |
281 | return ret; |
282 | return ret; |
282 | } |
283 | } |
283 | 284 | ||
- | 285 | #define SYSINFO_MAX_LEN 1024 |
|
- | 286 | ||
284 | unative_t sys_sysinfo_valid(unative_t ptr, unative_t len) |
287 | unative_t sys_sysinfo_valid(unative_t ptr, unative_t len) |
285 | { |
288 | { |
286 | char *str; |
289 | char *str; |
287 | sysinfo_rettype_t ret = {0, 0}; |
290 | sysinfo_rettype_t ret = {0, 0}; |
- | 291 | ||
- | 292 | if (len > SYSINFO_MAX_LEN) |
|
- | 293 | return ret.valid; |
|
288 | str = malloc(len + 1, 0); |
294 | str = malloc(len + 1, 0); |
289 | 295 | ||
290 | ASSERT(str); |
296 | ASSERT(str); |
291 | if (!((copy_from_uspace(str, (void *) ptr, len + 1)) || (str[len]))) |
297 | if (!((copy_from_uspace(str, (void *) ptr, len + 1)) || (str[len]))) |
292 | ret = sysinfo_get_val(str, NULL); |
298 | ret = sysinfo_get_val(str, NULL); |
Line 297... | Line 303... | ||
297 | 303 | ||
298 | unative_t sys_sysinfo_value(unative_t ptr, unative_t len) |
304 | unative_t sys_sysinfo_value(unative_t ptr, unative_t len) |
299 | { |
305 | { |
300 | char *str; |
306 | char *str; |
301 | sysinfo_rettype_t ret = {0, 0}; |
307 | sysinfo_rettype_t ret = {0, 0}; |
- | 308 | ||
- | 309 | if (len > SYSINFO_MAX_LEN) |
|
- | 310 | return ret.val; |
|
302 | str = malloc(len + 1, 0); |
311 | str = malloc(len + 1, 0); |
303 | 312 | ||
304 | ASSERT(str); |
313 | ASSERT(str); |
305 | if (!((copy_from_uspace(str, (void *) ptr, len + 1)) || (str[len]))) |
314 | if (!((copy_from_uspace(str, (void *) ptr, len + 1)) || (str[len]))) |
306 | ret = sysinfo_get_val(str, NULL); |
315 | ret = sysinfo_get_val(str, NULL); |