Changeset 132ab5d1 in mainline for uspace/lib/c/generic/elf/elf_mod.c


Ignore:
Timestamp:
2018-01-30T03:20:45Z (8 years ago)
Author:
Jenda <jenda.jzqk73@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
5a6cc679
Parents:
8bfb163 (diff), 6a5d05b (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge commit '6a5d05bd2551e64111bea4f9332dd7448c26ce84' into forwardport

Separate return value from error code in gen_irq_code*().

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/elf/elf_mod.c

    r8bfb163 r132ab5d1  
    6969        "incompatible image",
    7070        "unsupported image type",
    71         "irrecoverable error"
     71        "irrecoverable error",
     72        "file io error"
    7273};
    7374
     
    9091 *                  extracted from the binary.
    9192 *
    92  * @return EOK on success or negative error code.
     93 * @return EE_OK on success or EE_xx error code.
    9394 *
    9495 */
     
    9798        elf_ld_t elf;
    9899
    99         int ofile = vfs_clone(file, -1, true);
    100         int rc = vfs_open(ofile, MODE_READ);
     100        int ofile;
     101        int rc = vfs_clone(file, -1, true, &ofile);
     102        if (rc == EOK) {
     103                rc = vfs_open(ofile, MODE_READ);
     104        }
    101105        if (rc != EOK) {
    102                 return rc;
     106                return EE_IO;
    103107        }
    104108
     
    107111        elf.flags = flags;
    108112
    109         rc = elf_load_module(&elf, so_bias);
     113        int ret = elf_load_module(&elf, so_bias);
    110114
    111115        vfs_put(ofile);
    112         return rc;
     116        return ret;
    113117}
    114118
     
    116120    elf_finfo_t *info)
    117121{
    118         int file = vfs_lookup(path, 0);
    119         int rc = elf_load_file(file, so_bias, flags, info);
    120         vfs_put(file);
    121         return rc;
     122        int file;
     123        int rc = vfs_lookup(path, 0, &file);
     124        if (rc == EOK) {
     125                int ret = elf_load_file(file, so_bias, flags, info);
     126                vfs_put(file);
     127                return ret;
     128        } else {
     129                return EE_IO;
     130        }
    122131}
    123132
     
    137146        elf_header_t *header = &header_buf;
    138147        aoff64_t pos = 0;
    139         int i, rc;
    140 
    141         rc = vfs_read(elf->fd, &pos, header, sizeof(elf_header_t));
    142         if (rc != sizeof(elf_header_t)) {
     148        size_t nr;
     149        int i, ret;
     150        int rc;
     151
     152        rc = vfs_read(elf->fd, &pos, header, sizeof(elf_header_t), &nr);
     153        if (rc != EOK || nr != sizeof(elf_header_t)) {
    143154                DPRINTF("Read error.\n");
    144                 return EE_INVALID;
     155                return EE_IO;
    145156        }
    146157
     
    199210                pos = header->e_phoff + i * sizeof(elf_segment_header_t);
    200211                rc = vfs_read(elf->fd, &pos, &segment_hdr,
    201                     sizeof(elf_segment_header_t));
    202                 if (rc != sizeof(elf_segment_header_t)) {
     212                    sizeof(elf_segment_header_t), &nr);
     213                if (rc != EOK || nr != sizeof(elf_segment_header_t)) {
    203214                        DPRINTF("Read error.\n");
    204                         return EE_INVALID;
     215                        return EE_IO;
    205216                }
    206217
    207                 rc = segment_header(elf, &segment_hdr);
    208                 if (rc != EE_OK)
    209                         return rc;
     218                ret = segment_header(elf, &segment_hdr);
     219                if (ret != EE_OK)
     220                        return ret;
    210221        }
    211222
     
    218229                pos = header->e_shoff + i * sizeof(elf_section_header_t);
    219230                rc = vfs_read(elf->fd, &pos, &section_hdr,
    220                     sizeof(elf_section_header_t));
    221                 if (rc != sizeof(elf_section_header_t)) {
     231                    sizeof(elf_section_header_t), &nr);
     232                if (rc != EOK || nr != sizeof(elf_section_header_t)) {
    222233                        DPRINTF("Read error.\n");
    223                         return EE_INVALID;
     234                        return EE_IO;
    224235                }
    225236
    226                 rc = section_header(elf, &section_hdr);
    227                 if (rc != EE_OK)
    228                         return rc;
     237                ret = section_header(elf, &section_hdr);
     238                if (ret != EE_OK)
     239                        return ret;
    229240        }
    230241
     
    330341        size_t mem_sz;
    331342        aoff64_t pos;
    332         ssize_t rc;
     343        int rc;
     344        size_t nr;
    333345
    334346        bias = elf->bias;
     
    388400         */
    389401        pos = entry->p_offset;
    390         rc = vfs_read(elf->fd, &pos, seg_ptr, entry->p_filesz);
    391         if (rc < 0) {
     402        rc = vfs_read(elf->fd, &pos, seg_ptr, entry->p_filesz, &nr);
     403        if (rc != EOK || nr != entry->p_filesz) {
    392404                DPRINTF("read error\n");
    393                 return EE_INVALID;
     405                return EE_IO;
    394406        }
    395407
Note: See TracChangeset for help on using the changeset viewer.