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); |