aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <zecke@selfish.org>2010-03-22 11:50:30 +0100
committerHolger Hans Peter Freyther <zecke@selfish.org>2010-03-22 11:50:30 +0100
commitd859a24f7d1dca2aed4e69330124e52d674d1589 (patch)
tree2c89e4f0de072bee6d582c80da3249b0cb1ee431
parent38722cca48771a791c08bd4911c208520e4eb627 (diff)
ipa-firmware: Fix the write out of the firmware parts
Use the start address inside the header entry, the start is relative to the surrounding SDP record which is located in our base offset, when writing it out also ignore four bytes of something (crc?).
-rw-r--r--openbsc/src/ipaccess/ipaccess-config.c2
-rw-r--r--openbsc/src/ipaccess/ipaccess-firmware.c2
2 files changed, 2 insertions, 2 deletions
diff --git a/openbsc/src/ipaccess/ipaccess-config.c b/openbsc/src/ipaccess/ipaccess-config.c
index 33dd82a4f..93fe44236 100644
--- a/openbsc/src/ipaccess/ipaccess-config.c
+++ b/openbsc/src/ipaccess/ipaccess-config.c
@@ -496,7 +496,7 @@ static void dump_entry(struct sdp_header_item *sub_entry, int part, int fd)
return;
}
- target = sub_entry->absolute_offset;
+ target = sub_entry->absolute_offset + ntohl(sub_entry->header_entry.start) + 4;
if (lseek(fd, target, SEEK_SET) != target) {
perror("seek failed");
close(out_fd);
diff --git a/openbsc/src/ipaccess/ipaccess-firmware.c b/openbsc/src/ipaccess/ipaccess-firmware.c
index d1004ea9e..bc40c1e47 100644
--- a/openbsc/src/ipaccess/ipaccess-firmware.c
+++ b/openbsc/src/ipaccess/ipaccess-firmware.c
@@ -117,7 +117,7 @@ int ipaccess_analyze_file(int fd, const unsigned int st_size, const unsigned int
header_entry = talloc_zero(header, struct sdp_header_item);
header_entry->header_entry = entry;
- header_entry->absolute_offset = lseek(fd, 0, SEEK_CUR);
+ header_entry->absolute_offset = base_offset;
llist_add(&header_entry->entry, &header->header_list);
/* now we need to find the SDP file... */