Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/rtld/module.c

    r1567471 ra0e2f9c  
    6565
    6666        module = calloc(1, sizeof(module_t));
    67         if (module == NULL)
     67        if (module == NULL) {
     68                DPRINTF("malloc failed\n");
    6869                return ENOMEM;
     70        }
    6971
    7072        module->id = rtld_get_next_id(rtld);
     
    182184        char name_buf[NAME_BUF_SIZE];
    183185        module_t *m;
    184         int rc;
     186        errno_t rc;
    185187
    186188        m = calloc(1, sizeof(module_t));
    187189        if (m == NULL) {
    188                 printf("malloc failed\n");
    189                 exit(1);
     190                DPRINTF("malloc failed\n");
     191                goto error;
    190192        }
    191193
     
    197199
    198200        if (str_size(name) > NAME_BUF_SIZE - 2) {
    199                 printf("soname too long. increase NAME_BUF_SIZE\n");
    200                 exit(1);
     201                DPRINTF("soname too long. increase NAME_BUF_SIZE\n");
     202                goto error;
    201203        }
    202204
     
    208210
    209211        rc = elf_load_file_name(name_buf, RTLD_MODULE_LDF, &info);
    210         if (rc != EE_OK) {
    211                 printf("Failed to load '%s'\n", name_buf);
    212                 exit(1);
     212        if (rc != EOK) {
     213                DPRINTF("Failed to load '%s'\n", name_buf);
     214                goto error;
    213215        }
    214216
     
    218220
    219221        if (info.dynamic == NULL) {
    220                 printf("Error: '%s' is not a dynamically-linked object.\n",
     222                DPRINTF("Error: '%s' is not a dynamically-linked object.\n",
    221223                    name_buf);
    222                 exit(1);
     224                goto error;
    223225        }
    224226
     
    243245
    244246        return m;
     247
     248error:
     249        if (m)
     250                free(m);
     251
     252        return NULL;
    245253}
    246254
    247255/** Load all modules on which m (transitively) depends.
    248256 */
    249 void module_load_deps(module_t *m, mlflags_t flags)
     257errno_t module_load_deps(module_t *m, mlflags_t flags)
    250258{
    251259        elf_dyn_t *dp;
     
    274282                /* There are no dependencies, so we are done. */
    275283                m->deps = NULL;
    276                 return;
     284                return EOK;
    277285        }
    278286
    279287        m->deps = malloc(n * sizeof(module_t *));
    280288        if (!m->deps) {
    281                 printf("malloc failed\n");
    282                 exit(1);
     289                DPRINTF("malloc failed\n");
     290                return ENOMEM;
    283291        }
    284292
     
    294302                        if (!dm) {
    295303                                dm = module_load(m->rtld, dep_name, flags);
    296                                 module_load_deps(dm, flags);
     304                                if (!dm) {
     305                                        return EINVAL;
     306                                }
     307
     308                                errno_t rc = module_load_deps(dm, flags);
     309                                if (rc != EOK) {
     310                                        return rc;
     311                                }
    297312                        }
    298313
     
    302317                ++dp;
    303318        }
     319
     320        return EOK;
    304321}
    305322
Note: See TracChangeset for help on using the changeset viewer.