source: mainline/uspace/lib/c/generic/sysinfo.c@ d9fae235

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since d9fae235 was d9fae235, checked in by Martin Decky <martin@…>, 15 years ago

sysinfo overhaul

  • cleanup (nicer data structures, use of SLAB allocator)
  • add support for storing arbitrary binary data
  • properly reimplement non-constant values (generated by functions)
  • add support for non-constant subtrees (generated by functions)
  • syscall ABI change, libc API change
  • reflect changes in user code

libc: task_spawn() can now return error code

  • reflect change in user code, print error strings after failed task_spawn()

uspace cleanup

  • more use of string and other constants
  • more use of str_error()
  • unify error reporting in init
  • Property mode set to 100644
File size: 2.6 KB
Line 
1/*
2 * Copyright (c) 2006 Jakub Jermar
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29/** @addtogroup libc
30 * @{
31 */
32/** @file
33 */
34
35#include <libc.h>
36#include <sysinfo.h>
37#include <str.h>
38#include <errno.h>
39#include <malloc.h>
40#include <bool.h>
41
42sysinfo_item_tag_t sysinfo_get_tag(const char *path)
43{
44 return (sysinfo_item_tag_t) __SYSCALL2(SYS_SYSINFO_GET_TAG,
45 (sysarg_t) path, (sysarg_t) str_size(path));
46}
47
48int sysinfo_get_value(const char *path, sysarg_t *value)
49{
50 return (int) __SYSCALL3(SYS_SYSINFO_GET_VALUE, (sysarg_t) path,
51 (sysarg_t) str_size(path), (sysarg_t) value);
52}
53
54static int sysinfo_get_data_size(const char *path, size_t *size)
55{
56 return (int) __SYSCALL3(SYS_SYSINFO_GET_DATA_SIZE, (sysarg_t) path,
57 (sysarg_t) str_size(path), (sysarg_t) size);
58}
59
60extern void *sysinfo_get_data(const char *path, size_t *size)
61{
62 while (true) {
63 int ret = sysinfo_get_data_size(path, size);
64 if (ret != EOK)
65 return NULL;
66
67 void *data = malloc(*size);
68 if (data == NULL)
69 return NULL;
70
71 ret = __SYSCALL4(SYS_SYSINFO_GET_DATA, (sysarg_t) path,
72 (sysarg_t) str_size(path), (sysarg_t) data, (sysarg_t) *size);
73 if (ret == EOK)
74 return data;
75
76 if (ret != ENOMEM)
77 return NULL;
78
79 free(data);
80 }
81}
82
83/** @}
84 */
Note: See TracBrowser for help on using the repository browser.