aboutsummaryrefslogtreecommitdiffstats
path: root/tools/firmware-utils/src/mktplinkfw.c
diff options
context:
space:
mode:
authorThibaut VARÈNE <hacks@slashdirt.org>2017-10-03 20:19:52 +0200
committerMathias Kresin <dev@kresin.me>2017-10-06 08:28:41 +0200
commit9e768b9aac2367057fc8d6b7d07ea456b5433b9d (patch)
tree20014481111a09f6799e5f2a00ed916854146686 /tools/firmware-utils/src/mktplinkfw.c
parent10324fcb3992cdf40db651ae6ad0b3cda670d81b (diff)
downloadupstream-9e768b9aac2367057fc8d6b7d07ea456b5433b9d.tar.gz
upstream-9e768b9aac2367057fc8d6b7d07ea456b5433b9d.tar.bz2
upstream-9e768b9aac2367057fc8d6b7d07ea456b5433b9d.zip
tools/firmware-utils: mktplinkfw move build_fw() to lib
This patch moves build_fw() to mktplinkfw-lib.c The versions of mktplinkfw.c and mktplinkfw2.c had slight differences in code flow, the version from mktplinkfw.c has been preferred. While it's expected that this change will not affect mktplinkfw2, all use cases could not be tested and so this particular change is committed separately. Signed-off-by: Thibaut VARÈNE <hacks@slashdirt.org>
Diffstat (limited to 'tools/firmware-utils/src/mktplinkfw.c')
-rw-r--r--tools/firmware-utils/src/mktplinkfw.c87
1 files changed, 12 insertions, 75 deletions
diff --git a/tools/firmware-utils/src/mktplinkfw.c b/tools/firmware-utils/src/mktplinkfw.c
index 7dbb290413..9bc112fe6c 100644
--- a/tools/firmware-utils/src/mktplinkfw.c
+++ b/tools/firmware-utils/src/mktplinkfw.c
@@ -71,7 +71,7 @@ struct fw_region {
/*
* Globals
*/
-static char *ofname;
+char *ofname;
char *progname;
static char *vendor = "TP-LINK Technologies";
static char *version = "ver. 1.0";
@@ -79,7 +79,7 @@ static char *fw_ver = "0.0.0";
static uint32_t hdr_ver = HEADER_VERSION_V1;
static char *layout_id;
-static struct flash_layout *layout;
+struct flash_layout *layout;
static char *opt_hw_id;
static uint32_t hw_id;
static char *opt_hw_rev;
@@ -90,17 +90,17 @@ static const struct fw_region *region;
static int fw_ver_lo;
static int fw_ver_mid;
static int fw_ver_hi;
-static struct file_info kernel_info;
+struct file_info kernel_info;
static uint32_t kernel_la = 0;
static uint32_t kernel_ep = 0;
-static uint32_t kernel_len = 0;
-static struct file_info rootfs_info;
-static uint32_t rootfs_ofs = 0;
-static uint32_t rootfs_align;
+uint32_t kernel_len = 0;
+struct file_info rootfs_info;
+uint32_t rootfs_ofs = 0;
+uint32_t rootfs_align;
static struct file_info boot_info;
-static int combined;
-static int strip_padding;
-static int add_jffs2_eof;
+int combined;
+int strip_padding;
+int add_jffs2_eof;
static uint32_t fw_max_len;
static uint32_t reserved_space;
@@ -355,7 +355,7 @@ static int check_options(void)
return 0;
}
-static void fill_header(char *buf, int len)
+void fill_header(char *buf, int len)
{
struct fw_header *hdr = (struct fw_header *)buf;
@@ -408,69 +408,6 @@ static void fill_header(char *buf, int len)
get_md5(buf, len, hdr->md5sum1);
}
-static int build_fw(void)
-{
- int buflen;
- char *buf;
- char *p;
- int ret = EXIT_FAILURE;
- int writelen = 0;
-
- writelen = sizeof(struct fw_header) + kernel_len;
-
- if (combined)
- buflen = writelen;
- else
- buflen = layout->fw_max_len;
-
- buf = malloc(buflen);
- if (!buf) {
- ERR("no memory for buffer\n");
- goto out;
- }
-
- memset(buf, 0xff, buflen);
- p = buf + sizeof(struct fw_header);
- ret = read_to_buf(&kernel_info, p);
- if (ret)
- goto out_free_buf;
-
-
- if (!combined) {
- if (rootfs_align)
- p = buf + writelen;
- else
- p = buf + rootfs_ofs;
-
- ret = read_to_buf(&rootfs_info, p);
- if (ret)
- goto out_free_buf;
-
- if (rootfs_align)
- writelen += rootfs_info.file_size;
- else
- writelen = rootfs_ofs + rootfs_info.file_size;
-
- if (add_jffs2_eof)
- writelen = pad_jffs2(buf, writelen, layout->fw_max_len);
- }
-
- if (!strip_padding)
- writelen = buflen;
-
- fill_header(buf, writelen);
- ret = write_fw(ofname, buf, writelen);
- if (ret)
- goto out_free_buf;
-
- ret = EXIT_SUCCESS;
-
- out_free_buf:
- free(buf);
- out:
- return ret;
-}
-
static int inspect_fw(void)
{
char *buf;
@@ -686,7 +623,7 @@ int main(int argc, char *argv[])
goto out;
if (!inspect_info.file_name)
- ret = build_fw();
+ ret = build_fw(sizeof(struct fw_header));
else
ret = inspect_fw();