X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=liblttng-ust%2Flttng-ust-elf.c;h=4de380cf67d4edd803905e051ebde987bd90e683;hb=99b7132dc75b5eb865f284fd1eca2bad77442187;hp=0df70973fd7906f57d32e0289937bcbf861d7d1a;hpb=405be6583fc840d2ad298516edb267281bc2c4dc;p=lttng-ust.git diff --git a/liblttng-ust/lttng-ust-elf.c b/liblttng-ust/lttng-ust-elf.c index 0df70973..4de380cf 100644 --- a/liblttng-ust/lttng-ust-elf.c +++ b/liblttng-ust/lttng-ust-elf.c @@ -39,7 +39,7 @@ struct lttng_ust_elf_phdr *lttng_ust_elf_get_phdr(struct lttng_ust_elf *elf, uint16_t index) { struct lttng_ust_elf_phdr *phdr = NULL; - long offset; + off_t offset; if (!elf) { goto error; @@ -54,7 +54,8 @@ struct lttng_ust_elf_phdr *lttng_ust_elf_get_phdr(struct lttng_ust_elf *elf, goto error; } - offset = elf->ehdr->e_phoff + index * elf->ehdr->e_phentsize; + offset = (off_t) elf->ehdr->e_phoff + + (off_t) index * elf->ehdr->e_phentsize; if (lseek(elf->fd, offset, SEEK_SET) < 0) { goto error; } @@ -101,7 +102,7 @@ struct lttng_ust_elf_shdr *lttng_ust_elf_get_shdr(struct lttng_ust_elf *elf, uint16_t index) { struct lttng_ust_elf_shdr *shdr = NULL; - long offset; + off_t offset; if (!elf) { goto error; @@ -116,7 +117,8 @@ struct lttng_ust_elf_shdr *lttng_ust_elf_get_shdr(struct lttng_ust_elf *elf, goto error; } - offset = elf->ehdr->e_shoff + index * elf->ehdr->e_shentsize; + offset = (off_t) elf->ehdr->e_shoff + + (off_t) index * elf->ehdr->e_shentsize; if (lseek(elf->fd, offset, SEEK_SET) < 0) { goto error; } @@ -160,7 +162,7 @@ error: * If no name is found, NULL is returned. */ static -char *lttng_ust_elf_get_section_name(struct lttng_ust_elf *elf, uint32_t offset) +char *lttng_ust_elf_get_section_name(struct lttng_ust_elf *elf, off_t offset) { char *name = NULL; size_t len = 0, to_read; /* len does not include \0 */ @@ -403,10 +405,10 @@ error: static int lttng_ust_elf_get_build_id_from_segment( struct lttng_ust_elf *elf, uint8_t **build_id, size_t *length, - uint64_t offset, uint64_t segment_end, int *found) + off_t offset, off_t segment_end, int *found) { - uint8_t *_build_id; - size_t _length; + uint8_t *_build_id = NULL; /* Silence old gcc warning. */ + size_t _length = 0; /* Silence old gcc warning. */ int _found = 0; while (offset < segment_end) { @@ -452,7 +454,7 @@ int lttng_ust_elf_get_build_id_from_segment( _length = nhdr.n_descsz; _build_id = zmalloc(sizeof(uint8_t) * _length); - if (!build_id) { + if (!_build_id) { goto error; } @@ -476,6 +478,7 @@ int lttng_ust_elf_get_build_id_from_segment( *found = _found; return 0; error: + free(_build_id); return -1; } @@ -496,8 +499,8 @@ int lttng_ust_elf_get_build_id(struct lttng_ust_elf *elf, uint8_t **build_id, size_t *length, int *found) { uint16_t i; - uint8_t *_build_id; - size_t _length; + uint8_t *_build_id = NULL; /* Silence old gcc warning. */ + size_t _length = 0; /* Silence old gcc warning. */ int _found = 0; if (!elf || !build_id || !length || !found) { @@ -505,9 +508,9 @@ int lttng_ust_elf_get_build_id(struct lttng_ust_elf *elf, uint8_t **build_id, } for (i = 0; i < elf->ehdr->e_phnum; ++i) { - uint64_t offset, segment_end; + off_t offset, segment_end; struct lttng_ust_elf_phdr *phdr; - int ret; + int ret = 0; phdr = lttng_ust_elf_get_phdr(elf, i); if (!phdr) { @@ -542,6 +545,7 @@ int lttng_ust_elf_get_build_id(struct lttng_ust_elf *elf, uint8_t **build_id, *found = _found; return 0; error: + free(_build_id); return -1; } @@ -561,10 +565,10 @@ int lttng_ust_elf_get_debug_link_from_section(struct lttng_ust_elf *elf, struct lttng_ust_elf_shdr *shdr) { int _found = 0; - char *_filename; + char *_filename = NULL; /* Silence old gcc warning. */ size_t filename_len; char *section_name = NULL; - uint32_t _crc; + uint32_t _crc = 0; /* Silence old gcc warning. */ if (!elf || !filename || !crc || !found || !shdr) { goto error; @@ -622,10 +626,8 @@ end: return 0; error: - if (section_name) { - free(section_name); - } - + free(_filename); + free(section_name); return -1; } @@ -645,8 +647,8 @@ int lttng_ust_elf_get_debug_link(struct lttng_ust_elf *elf, char **filename, int ret; uint16_t i; int _found = 0; - char *_filename; - uint32_t _crc; + char *_filename = NULL; /* Silence old gcc warning. */ + uint32_t _crc = 0; /* Silence old gcc warning. */ if (!elf || !filename || !crc || !found) { goto error; @@ -680,5 +682,6 @@ int lttng_ust_elf_get_debug_link(struct lttng_ust_elf *elf, char **filename, *found = _found; return 0; error: + free(_filename); return -1; }