Changeset d9fae235 in mainline for uspace/lib/c


Ignore:
Timestamp:
2010-04-17T01:28:38Z (15 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
9d6bfa5
Parents:
9256ad29
Message:

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
Location:
uspace/lib/c
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/arch/ia64/src/ddi.c

    r9256ad29 rd9fae235  
    22#include <sysinfo.h>
    33
    4 uint64_t ia64_iospace_address=0;
    5 
     4uint64_t ia64_iospace_address = 0;
    65
    76uint64_t get_ia64_iospace_address(void)
    87{
    9 
    10         return sysinfo_value("ia64_iospace.address.virtual");
    11 
     8        sysarg_t addr;
     9        if (sysinfo_get_value("ia64_iospace.address.virtual", &addr) != 0)
     10                addr = 0;
     11       
     12        return addr;
    1213}
    1314
  • uspace/lib/c/generic/sysinfo.c

    r9256ad29 rd9fae235  
    3131 */
    3232/** @file
    33  */ 
     33 */
    3434
    3535#include <libc.h>
    3636#include <sysinfo.h>
    3737#include <str.h>
     38#include <errno.h>
     39#include <malloc.h>
     40#include <bool.h>
    3841
    39 sysarg_t sysinfo_value(const char *name)
     42sysinfo_item_tag_t sysinfo_get_tag(const char *path)
    4043{
    41         return __SYSCALL2(SYS_SYSINFO_VALUE, (sysarg_t) name,
    42             (sysarg_t) str_size(name));
     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        }
    4381}
    4482
  • uspace/lib/c/generic/task.c

    r9256ad29 rd9fae235  
    7070 * loader API.
    7171 *
    72  * @param path pathname of the binary to execute
    73  * @param argv command-line arguments
     72 * @param path Pathname of the binary to execute.
     73 * @param argv Command-line arguments.
     74 * @param err  If not NULL, the error value is stored here.
    7475 *
    7576 * @return ID of the newly created task or zero on error.
    7677 *
    7778 */
    78 task_id_t task_spawn(const char *path, const char *const args[])
     79task_id_t task_spawn(const char *path, const char *const args[], int *err)
    7980{
    8081        /* Connect to a program loader. */
    8182        loader_t *ldr = loader_connect();
    82         if (ldr == NULL)
     83        if (ldr == NULL) {
     84                if (err != NULL)
     85                        *err = EREFUSED;
     86               
    8387                return 0;
     88        }
    8489       
    8590        /* Get task ID. */
     
    143148        /* Success */
    144149        free(ldr);
     150       
     151        if (err != NULL)
     152                *err = EOK;
     153       
    145154        return task_id;
    146155       
     
    149158        loader_abort(ldr);
    150159        free(ldr);
     160       
     161        if (err != NULL)
     162                *err = rc;
    151163       
    152164        return 0;
  • uspace/lib/c/include/sysinfo.h

    r9256ad29 rd9fae235  
    3131 */
    3232/** @file
    33  */ 
     33 */
    3434
    3535#ifndef LIBC_SYSINFO_H_
     
    3737
    3838#include <libc.h>
    39 #include <sysinfo.h>
    40 #include <str.h>
    4139
    42 sysarg_t sysinfo_value(const char *name);
     40typedef enum {
     41        SYSINFO_VAL_UNDEFINED = 0,
     42        SYSINFO_VAL_VAL = 1,
     43        SYSINFO_VAL_DATA = 2
     44} sysinfo_item_tag_t;
     45
     46extern sysinfo_item_tag_t sysinfo_get_tag(const char *);
     47extern int sysinfo_get_value(const char *, sysarg_t *);
     48extern void *sysinfo_get_data(const char *, size_t *);
    4349
    4450#endif
  • uspace/lib/c/include/task.h

    r9256ad29 rd9fae235  
    4646
    4747extern task_id_t task_get_id(void);
    48 extern int task_set_name(const char *name);
    49 extern task_id_t task_spawn(const char *path, const char *const argv[]);
    50 extern int task_wait(task_id_t id, task_exit_t *texit, int *retval);
    51 extern int task_retval(int val);
    52 
     48extern int task_set_name(const char *);
     49extern task_id_t task_spawn(const char *, const char *const[], int *);
     50extern int task_wait(task_id_t id, task_exit_t *, int *);
     51extern int task_retval(int);
    5352
    5453#endif
Note: See TracChangeset for help on using the changeset viewer.