Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/net/adt/module_map.c

    r1bfd3d3 rd9fae235  
    2727 */
    2828
    29 /** @addtogroup libnet
    30  * @{
     29/** @addtogroup net
     30 *  @{
    3131 */
    3232
    3333/** @file
    34  * Character string to module map implementation.
     34 *  Character string to module map implementation.
    3535 */
    3636
     
    3838#include <task.h>
    3939#include <unistd.h>
    40 #include <errno.h>
    4140
    4241#include <ipc/services.h>
    4342
    44 #include <net/modules.h>
     43#include <net_err.h>
     44#include <net_modules.h>
    4545
    4646#include <adt/generic_char_map.h>
     
    4949GENERIC_CHAR_MAP_IMPLEMENT(modules, module_t)
    5050
    51 /** Adds module to the module map.
    52  *
    53  * @param[out] module   The module structure added.
    54  * @param[in] modules   The module map.
    55  * @param[in] name      The module name.
    56  * @param[in] filename  The full path filename.
    57  * @param[in] service   The module service.
    58  * @param[in] task_id   The module current task identifier. Zero means not
    59  *                      running.
    60  * @param[in] connect_module The module connecting function.
    61  * @return              EOK on success.
    62  * @return              ENOMEM if there is not enough memory left.
    63  */
    64 int
    65 add_module(module_t **module, modules_t *modules, const char *name,
    66     const char *filename, services_t service, task_id_t task_id,
    67     connect_module_t connect_module)
    68 {
    69         module_t *tmp_module;
    70         int rc;
     51int add_module(module_ref * module, modules_ref modules, const char * name, const char * filename, services_t service, task_id_t task_id, connect_module_t connect_module){
     52        ERROR_DECLARE;
    7153
    72         tmp_module = (module_t *) malloc(sizeof(module_t));
    73         if (!tmp_module)
     54        module_ref tmp_module;
     55
     56        tmp_module = (module_ref) malloc(sizeof(module_t));
     57        if(! tmp_module){
    7458                return ENOMEM;
    75 
     59        }
    7660        tmp_module->task_id = task_id;
    7761        tmp_module->phone = 0;
     
    8165        tmp_module->service = service;
    8266        tmp_module->connect_module = connect_module;
    83 
    84         rc = modules_add(modules, tmp_module->name, 0, tmp_module);
    85         if (rc != EOK) {
     67        if(ERROR_OCCURRED(modules_add(modules, tmp_module->name, 0, tmp_module))){
    8668                free(tmp_module);
    87                 return rc;
     69                return ERROR_CODE;
    8870        }
    89         if (module)
     71        if(module){
    9072                *module = tmp_module;
    91 
     73        }
    9274        return EOK;
    9375}
    9476
    95 /** Searches and returns the specified module.
    96  *
    97  * If the module is not running, the module filaname is spawned.
    98  * If the module is not connected, the connect_function is called.
    99  *
    100  * @param[in] modules   The module map.
    101  * @param[in] name      The module name.
    102  * @return              The running module found. It does not have to be
    103  *                      connected.
    104  * @return              NULL if there is no such module.
    105  */
    106 module_t *get_running_module(modules_t *modules, char *name)
    107 {
    108         module_t *module;
     77module_ref get_running_module(modules_ref modules, char * name){
     78        module_ref module;
    10979
    11080        module = modules_find(modules, name, 0);
    111         if (!module)
     81        if(! module){
    11282                return NULL;
    113 
    114         if (!module->task_id) {
     83        }
     84        if(! module->task_id){
    11585                module->task_id = spawn(module->filename);
    116                 if (!module->task_id)
     86                if(! module->task_id){
    11787                        return NULL;
     88                }
    11889        }
    119         if (!module->phone)
     90        if(! module->phone){
    12091                module->phone = module->connect_module(module->service);
    121 
     92        }
    12293        return module;
    12394}
    12495
    125 /** Starts the given module.
    126  *
    127  * @param[in] fname     The module full or relative path filename.
    128  * @return              The new module task identifier on success.
    129  * @return              Zero if there is no such module.
    130  */
    13196task_id_t spawn(const char *fname)
    13297{
    133         task_id_t id;
    134         int rc;
     98        const char *argv[2];
     99        task_id_t res;
    135100       
    136         rc = task_spawnl(&id, fname, fname, NULL);
    137         if (rc != EOK)
    138                 return 0;
     101        argv[0] = fname;
     102        argv[1] = NULL;
     103        res = task_spawn(fname, argv, NULL);
    139104       
    140         return id;
     105        return res;
    141106}
    142107
Note: See TracChangeset for help on using the changeset viewer.