Update to v2.1 Stays closer to the stock firmware by using wrt350n.bin for the created image. Adds the possibility to create the image in two separate steps (-b / -z). Makefiles now support the possibility to include a u-boot image for a 100%-stock-like image.
Signed off by: Matthias Buecher <mail@maddes.net> SVN-Revision: 19596
This commit is contained in:
		@@ -1,5 +1,5 @@
 | 
				
			|||||||
#
 | 
					#
 | 
				
			||||||
# Copyright (C) 2008-2009 OpenWrt.org
 | 
					# Copyright (C) 2008-2010 OpenWrt.org
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# This is free software, licensed under the GNU General Public License v2.
 | 
					# This is free software, licensed under the GNU General Public License v2.
 | 
				
			||||||
# See /LICENSE for more information.
 | 
					# See /LICENSE for more information.
 | 
				
			||||||
@@ -61,14 +61,18 @@ define Image/Build/Linksys
 | 
				
			|||||||
# create parameter file
 | 
					# create parameter file
 | 
				
			||||||
	echo ":kernel $5 ${BIN_DIR}/openwrt-$2-uImage" >"${TMP_DIR}/$2_webupgrade/$2.par"
 | 
						echo ":kernel $5 ${BIN_DIR}/openwrt-$2-uImage" >"${TMP_DIR}/$2_webupgrade/$2.par"
 | 
				
			||||||
	echo ":rootfs 0 ${KDIR}/root.$1" >>"${TMP_DIR}/$2_webupgrade/$2.par"
 | 
						echo ":rootfs 0 ${KDIR}/root.$1" >>"${TMP_DIR}/$2_webupgrade/$2.par"
 | 
				
			||||||
# create webupgrade image
 | 
						[ ! -f "$(STAGING_DIR_HOST)/share/wrt350nv2-builder/u-boot.bin" ] || ( \
 | 
				
			||||||
 | 
							echo ":u-boot 0 $(STAGING_DIR_HOST)/share/wrt350nv2-builder/u-boot.bin" >>"${TMP_DIR}/$2_webupgrade/$2.par"; )
 | 
				
			||||||
 | 
					# create bin file for recovery and webupgrade image
 | 
				
			||||||
	( cd "${TMP_DIR}/$2_webupgrade"; \
 | 
						( cd "${TMP_DIR}/$2_webupgrade"; \
 | 
				
			||||||
		"${STAGING_DIR_HOST}/bin/$2-builder" \
 | 
							"${STAGING_DIR_HOST}/bin/$2-builder" \
 | 
				
			||||||
			-v "${TMP_DIR}/$2_webupgrade/$2.par" \
 | 
								-v -b "${TMP_DIR}/$2_webupgrade/$2.par"; \
 | 
				
			||||||
			"${BIN_DIR}/openwrt-$2-$1-webupgrade.img"; \
 | 
					 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
# copy bin file as recovery image
 | 
					# copy bin file as recovery image
 | 
				
			||||||
	$(CP) "${TMP_DIR}/$2_webupgrade/openwrt-$2-$1-webupgrade.bin" "$(BIN_DIR)/openwrt-$2-$1-recovery.bin"
 | 
						$(CP) "${TMP_DIR}/$2_webupgrade/wrt350n.bin" "$(BIN_DIR)/openwrt-$2-$1-recovery.bin"
 | 
				
			||||||
 | 
					# create webupgrade image for stock firmware update mechanism
 | 
				
			||||||
 | 
						zip "${TMP_DIR}/$2_webupgrade/wrt350n.zip" "${TMP_DIR}/$2_webupgrade/wrt350n.bin"
 | 
				
			||||||
 | 
						"${STAGING_DIR_HOST}/bin/$2-builder" -v -z "${TMP_DIR}/$2_webupgrade/wrt350n.zip" "${BIN_DIR}/openwrt-$2-$1-webupgrade.img"
 | 
				
			||||||
	rm -rf "${TMP_DIR}/$2_webupgrade"
 | 
						rm -rf "${TMP_DIR}/$2_webupgrade"
 | 
				
			||||||
endef
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -85,8 +89,10 @@ endef
 | 
				
			|||||||
define Image/Build
 | 
					define Image/Build
 | 
				
			||||||
	$(call Image/Build/$(1),$(1))
 | 
						$(call Image/Build/$(1),$(1))
 | 
				
			||||||
	$(call Image/Build/Netgear,$(1),wnr854t,NG_WNR854T,$(1))
 | 
						$(call Image/Build/Netgear,$(1),wnr854t,NG_WNR854T,$(1))
 | 
				
			||||||
	$(call Image/Build/Linksys,$(1),wrt350nv2,WNR350Nv2,$(1),1048576)	# 5th parameter is kernel mtd size 0x00100000 = 1048576 / 0x001A0000 = 1703936
 | 
					 | 
				
			||||||
	$(call Image/Build/Freecom,$(1),dt2,DT,$(1))
 | 
						$(call Image/Build/Freecom,$(1),dt2,DT,$(1))
 | 
				
			||||||
 | 
					# Leave WRT350Nv2 at last position due to webimage dependency for zip
 | 
				
			||||||
 | 
					# 5th parameter is kernel mtd size, e.g. 0x00100000 = 1048576 or 0x001A0000 = 1703936
 | 
				
			||||||
 | 
						$(call Image/Build/Linksys,$(1),wrt350nv2,WNR350Nv2,$(1),1048576)
 | 
				
			||||||
endef
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
define Image/Build/squashfs
 | 
					define Image/Build/squashfs
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
# 
 | 
					# 
 | 
				
			||||||
# Copyright (C) 2006-2009 OpenWrt.org
 | 
					# Copyright (C) 2006-2010 OpenWrt.org
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# This is free software, licensed under the GNU General Public License v2.
 | 
					# This is free software, licensed under the GNU General Public License v2.
 | 
				
			||||||
# See /LICENSE for more information.
 | 
					# See /LICENSE for more information.
 | 
				
			||||||
@@ -8,7 +8,7 @@
 | 
				
			|||||||
include $(TOPDIR)/rules.mk
 | 
					include $(TOPDIR)/rules.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PKG_NAME:=wrt350nv2-builder
 | 
					PKG_NAME:=wrt350nv2-builder
 | 
				
			||||||
PKG_VERSION:=2.0
 | 
					PKG_VERSION:=2.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/${PKG_NAME}-$(PKG_VERSION)
 | 
					HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/${PKG_NAME}-$(PKG_VERSION)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -24,10 +24,16 @@ endef
 | 
				
			|||||||
define Host/Install
 | 
					define Host/Install
 | 
				
			||||||
	$(INSTALL_DIR) $(STAGING_DIR_HOST)/bin
 | 
						$(INSTALL_DIR) $(STAGING_DIR_HOST)/bin
 | 
				
			||||||
	$(INSTALL_BIN) $(HOST_BUILD_DIR)/wrt350nv2-builder $(STAGING_DIR_HOST)/bin/
 | 
						$(INSTALL_BIN) $(HOST_BUILD_DIR)/wrt350nv2-builder $(STAGING_DIR_HOST)/bin/
 | 
				
			||||||
 | 
					# optionally the builder can add a u-boot binary to create a complete webupgrade image, but this is not mandatory
 | 
				
			||||||
 | 
					# u-boot images from stock firmware are available at ftp://ftp.maddes.net/openwrt/kamikaze/orion/stock/binaries/
 | 
				
			||||||
 | 
						[ ! -f "files/u-boot.bin" ] || ( \
 | 
				
			||||||
 | 
							$(INSTALL_DIR) $(STAGING_DIR_HOST)/share/wrt350nv2-builder; \
 | 
				
			||||||
 | 
							$(CP) files/u-boot.bin $(STAGING_DIR_HOST)/share/wrt350nv2-builder/; )
 | 
				
			||||||
endef
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
define Host/Clean
 | 
					define Host/Clean
 | 
				
			||||||
	rm -f $(STAGING_DIR_HOST)/bin/wrt350nv2-builder
 | 
						rm -f $(STAGING_DIR_HOST)/bin/wrt350nv2-builder
 | 
				
			||||||
 | 
						rm -f $(STAGING_DIR_HOST)/share/wrt350nv2-builder
 | 
				
			||||||
endef
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$(eval $(call HostBuild))
 | 
					$(eval $(call HostBuild))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	WRT350Nv2-Builder 2.0 (previously called buildimg)
 | 
						WRT350Nv2-Builder 2.1 (previously called buildimg)
 | 
				
			||||||
	Copyright (C) 2008-2009 Dirk Teurlings <info@upexia.nl>
 | 
						Copyright (C) 2008-2009 Dirk Teurlings <info@upexia.nl>
 | 
				
			||||||
	Copyright (C) 2009      Matthias Buecher (http://www.maddes.net/)
 | 
						Copyright (C) 2009-2010 Matthias Buecher (http://www.maddes.net/)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	This program is free software; you can redistribute it and/or modify
 | 
						This program is free software; you can redistribute it and/or modify
 | 
				
			||||||
	it under the terms of the GNU General Public License as published by
 | 
						it under the terms of the GNU General Public License as published by
 | 
				
			||||||
@@ -36,18 +36,19 @@
 | 
				
			|||||||
		1	wrt350nv2.par		parameter file describing the image layout
 | 
							1	wrt350nv2.par		parameter file describing the image layout
 | 
				
			||||||
		2	wrt350nv2.img		output file for linksys style image
 | 
							2	wrt350nv2.img		output file for linksys style image
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	An u-boot image inside the bin file is not necessary.
 | 
						A u-boot image inside the bin file is not necessary.
 | 
				
			||||||
	The version is not important.
 | 
						The version is not important.
 | 
				
			||||||
	The name of the bin file is not important.
 | 
						The name of the bin file is not important, but still "wrt350n.bin" is used to
 | 
				
			||||||
 | 
						keep as close as possible to the stock firmware.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Linksys assumes that no mtd will be used to its maximum, so the last 16 bytes
 | 
						Linksys assumes that no mtd will be used to its maximum, so the last 16 bytes
 | 
				
			||||||
	of the mtd are abused to define the length of the next mtd content (4 bytes for
 | 
						of the mtd are abused to define the length of the next mtd content (4 bytes for
 | 
				
			||||||
	size + 12 pad bytes).
 | 
						size + 12 pad bytes).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	At the end of "rootfs" additional 16 bytes are abused for some data and an
 | 
						At the end of "rootfs" additional 16 bytes are abused for some data and a
 | 
				
			||||||
	highly important eRcOmM identifier, so the last 32 bytes of "rootfs" are abused.
 | 
						highly important eRcOmM identifier, so the last 32 bytes of "rootfs" are abused.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	At the end of "u-boot" 128 bytes are abused for some data, a checksum and an
 | 
						At the end of "u-boot" 128 bytes are abused for some data, a checksum and a
 | 
				
			||||||
	highly important sErCoMm identifier.
 | 
						highly important sErCoMm identifier.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -82,7 +83,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// version info
 | 
					// version info
 | 
				
			||||||
#define VERSION "2.0"
 | 
					#define VERSION "2.1"
 | 
				
			||||||
char program_info[] = "WRT350Nv2-Builder v%s by Dirk Teurlings <info@upexia.nl> and Matthias Buecher (http://www.maddes.net/)\n";
 | 
					char program_info[] = "WRT350Nv2-Builder v%s by Dirk Teurlings <info@upexia.nl> and Matthias Buecher (http://www.maddes.net/)\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// verbosity
 | 
					// verbosity
 | 
				
			||||||
@@ -105,7 +106,8 @@ mtd_info mtd_rootfs = { "rootfs", 0, 0, NULL, 0L, { 0, 0 } };
 | 
				
			|||||||
mtd_info mtd_uboot = { "u-boot", 0, 0, NULL, 0L, { 0, 0 } };
 | 
					mtd_info mtd_uboot = { "u-boot", 0, 0, NULL, 0L, { 0, 0 } };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define ROOTFS_END_OFFSET	0x00760000
 | 
					#define ROOTFS_END_OFFSET	0x00760000
 | 
				
			||||||
#define ROOTFS_MIN_OFFSET	0x00700000	// should be filled up to here, to make sure that the zip file is big enough to pass the size check of the stock firmware
 | 
					#define ROOTFS_MIN_OFFSET	0x00640000	// should be filled up to here, to make sure that the zip file is big enough to pass the size check of the stock firmware
 | 
				
			||||||
 | 
											// 2.0.17: filled up to 0x00640000, 2.0.19: filled up to 0x0670000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// rootfs statics via: hexdump -v -e '1/1 "0x%02X, "' -s 0x0075FFE0 -n 16 "wrt350n.bin" ; echo -en "\n"
 | 
					// rootfs statics via: hexdump -v -e '1/1 "0x%02X, "' -s 0x0075FFE0 -n 16 "wrt350n.bin" ; echo -en "\n"
 | 
				
			||||||
unsigned char product_id[] = { 0x00, 0x03 };	// seems to be a fixed value
 | 
					unsigned char product_id[] = { 0x00, 0x03 };	// seems to be a fixed value
 | 
				
			||||||
@@ -203,17 +205,17 @@ int parse_par_file(FILE *f_par) {
 | 
				
			|||||||
		// read next line into memory
 | 
							// read next line into memory
 | 
				
			||||||
		do {
 | 
							do {
 | 
				
			||||||
			// allocate memory for input line
 | 
								// allocate memory for input line
 | 
				
			||||||
			if (buffer == NULL) {
 | 
								if (!buffer) {
 | 
				
			||||||
				buffer = malloc(buffer_size);
 | 
									buffer = malloc(buffer_size);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if (buffer == NULL) {
 | 
								if (!buffer) {
 | 
				
			||||||
				exitcode = 1;
 | 
									exitcode = 1;
 | 
				
			||||||
				printf("parse_par_file: can not allocate %i bytes\n", (int) buffer_size);
 | 
									printf("parse_par_file: can not allocate %i bytes\n", (int) buffer_size);
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			line = fgets(buffer, buffer_size, f_par);
 | 
								line = fgets(buffer, buffer_size, f_par);
 | 
				
			||||||
			if (line == NULL) {
 | 
								if (!line) {
 | 
				
			||||||
				exitcode = ferror(f_par);
 | 
									exitcode = ferror(f_par);
 | 
				
			||||||
				if (exitcode) {
 | 
									if (exitcode) {
 | 
				
			||||||
					printf("parse_par_file: %s\n", strerror(exitcode));
 | 
										printf("parse_par_file: %s\n", strerror(exitcode));
 | 
				
			||||||
@@ -243,7 +245,7 @@ int parse_par_file(FILE *f_par) {
 | 
				
			|||||||
			buffer_size *= 2;
 | 
								buffer_size *= 2;
 | 
				
			||||||
			lprintf(DEBUG_LVL2, " extending buffer to %i bytes\n", buffer_size);
 | 
								lprintf(DEBUG_LVL2, " extending buffer to %i bytes\n", buffer_size);
 | 
				
			||||||
		} while (1);
 | 
							} while (1);
 | 
				
			||||||
		if (line == NULL || exitcode) {
 | 
							if ((!line) || (exitcode)) {
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -262,17 +264,17 @@ int parse_par_file(FILE *f_par) {
 | 
				
			|||||||
					printf("line %i does not meet defined format (:<mtdname> <mtdsize> <file>)\n", lineno);
 | 
										printf("line %i does not meet defined format (:<mtdname> <mtdsize> <file>)\n", lineno);
 | 
				
			||||||
				} else {
 | 
									} else {
 | 
				
			||||||
					// populate mtd_info if supported mtd names
 | 
										// populate mtd_info if supported mtd names
 | 
				
			||||||
					if (strcmp(string1, mtd_kernel.name) == 0) {
 | 
										if (!strcmp(string1, mtd_kernel.name)) {
 | 
				
			||||||
						mtd = &mtd_kernel;
 | 
											mtd = &mtd_kernel;
 | 
				
			||||||
					} else if (strcmp(string1, mtd_rootfs.name) == 0) {
 | 
										} else if (!strcmp(string1, mtd_rootfs.name)) {
 | 
				
			||||||
						mtd = &mtd_rootfs;
 | 
											mtd = &mtd_rootfs;
 | 
				
			||||||
					} else if (strcmp(string1, mtd_uboot.name) == 0) {
 | 
										} else if (!strcmp(string1, mtd_uboot.name)) {
 | 
				
			||||||
						mtd = &mtd_uboot;
 | 
											mtd = &mtd_uboot;
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					if (mtd == NULL) {
 | 
										if (!mtd) {
 | 
				
			||||||
						printf("unknown mtd %s in line %i\n", string1, lineno);
 | 
											printf("unknown mtd %s in line %i\n", string1, lineno);
 | 
				
			||||||
					} else if (mtd->filename != NULL) {
 | 
										} else if (mtd->filename) {
 | 
				
			||||||
						f_exitcode = 1;
 | 
											f_exitcode = 1;
 | 
				
			||||||
						printf("mtd %s in line %i multiple definitions\n", string1, lineno);
 | 
											printf("mtd %s in line %i multiple definitions\n", string1, lineno);
 | 
				
			||||||
					} else {
 | 
										} else {
 | 
				
			||||||
@@ -281,7 +283,7 @@ int parse_par_file(FILE *f_par) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
						// Get file size
 | 
											// Get file size
 | 
				
			||||||
						f_in = fopen(mtd->filename, "rb");
 | 
											f_in = fopen(mtd->filename, "rb");
 | 
				
			||||||
						if (f_in == NULL) {
 | 
											if (!f_in) {
 | 
				
			||||||
							f_exitcode = errno;
 | 
												f_exitcode = errno;
 | 
				
			||||||
							printf("input file %s: %s\n", mtd->filename, strerror(f_exitcode));
 | 
												printf("input file %s: %s\n", mtd->filename, strerror(f_exitcode));
 | 
				
			||||||
						} else {
 | 
											} else {
 | 
				
			||||||
@@ -320,7 +322,7 @@ int parse_par_file(FILE *f_par) {
 | 
				
			|||||||
				if (count != 2) {
 | 
									if (count != 2) {
 | 
				
			||||||
					printf("line %i does not meet defined format (:<variable name> <integer>\n", lineno);
 | 
										printf("line %i does not meet defined format (:<variable name> <integer>\n", lineno);
 | 
				
			||||||
				} else {
 | 
									} else {
 | 
				
			||||||
					if (strcmp(string1, "version") == 0) {
 | 
										if (!strcmp(string1, "version")) {
 | 
				
			||||||
						// changing version
 | 
											// changing version
 | 
				
			||||||
						fw_version[0] = 0x000000FF & ( value >> 8 );
 | 
											fw_version[0] = 0x000000FF & ( value >> 8 );
 | 
				
			||||||
						fw_version[1] = 0x000000FF &   value;
 | 
											fw_version[1] = 0x000000FF &   value;
 | 
				
			||||||
@@ -337,9 +339,8 @@ int parse_par_file(FILE *f_par) {
 | 
				
			|||||||
					printf("line %i does not meet defined format (:<mtdname> <mtdsize> <file>)\n", lineno);
 | 
										printf("line %i does not meet defined format (:<mtdname> <mtdsize> <file>)\n", lineno);
 | 
				
			||||||
				} else {
 | 
									} else {
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
					if (strcmp(string1, "something") == 0) {
 | 
										if (!strcmp(string1, "something")) {
 | 
				
			||||||
						something = string2;
 | 
											something = strdup(string2);
 | 
				
			||||||
						string2 = NULL;	// do not free
 | 
					 | 
				
			||||||
					} else {
 | 
										} else {
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
						printf("unknown string variable %s in line %i\n", string1, lineno);
 | 
											printf("unknown string variable %s in line %i\n", string1, lineno);
 | 
				
			||||||
@@ -382,7 +383,7 @@ int create_bin_file(char *bin_filename) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// allocate memory for bin file
 | 
						// allocate memory for bin file
 | 
				
			||||||
	buffer = malloc(KERNEL_CODE_OFFSET + FLASH_SIZE);
 | 
						buffer = malloc(KERNEL_CODE_OFFSET + FLASH_SIZE);
 | 
				
			||||||
	if (buffer == NULL) {
 | 
						if (!buffer) {
 | 
				
			||||||
		exitcode = 1;
 | 
							exitcode = 1;
 | 
				
			||||||
		printf("create_bin_file: can not allocate %i bytes\n", FLASH_SIZE);
 | 
							printf("create_bin_file: can not allocate %i bytes\n", FLASH_SIZE);
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
@@ -415,10 +416,10 @@ int create_bin_file(char *bin_filename) {
 | 
				
			|||||||
					printf("create_bin_file: unknown mtd %i\n", i);
 | 
										printf("create_bin_file: unknown mtd %i\n", i);
 | 
				
			||||||
					break;
 | 
										break;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if (mtd == NULL) {
 | 
								if (!mtd) {
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if (mtd->filename == NULL) {
 | 
								if (!mtd->filename) {
 | 
				
			||||||
				continue;
 | 
									continue;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -434,7 +435,7 @@ int create_bin_file(char *bin_filename) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			// adding file content
 | 
								// adding file content
 | 
				
			||||||
			f_in = fopen(mtd->filename, "rb");
 | 
								f_in = fopen(mtd->filename, "rb");
 | 
				
			||||||
			if (f_in == NULL) {
 | 
								if (!f_in) {
 | 
				
			||||||
				exitcode = errno;
 | 
									exitcode = errno;
 | 
				
			||||||
				printf("input file %s: %s\n", mtd->filename, strerror(exitcode));
 | 
									printf("input file %s: %s\n", mtd->filename, strerror(exitcode));
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
@@ -461,7 +462,7 @@ int create_bin_file(char *bin_filename) {
 | 
				
			|||||||
				lprintf(DEBUG, " padding offset 0x%08X length 0x%08X\n", addsize, padsize);
 | 
									lprintf(DEBUG, " padding offset 0x%08X length 0x%08X\n", addsize, padsize);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				f_in = fopen(rand_filename, "rb");
 | 
									f_in = fopen(rand_filename, "rb");
 | 
				
			||||||
				if (f_in == NULL) {
 | 
									if (!f_in) {
 | 
				
			||||||
					exitcode = errno;
 | 
										exitcode = errno;
 | 
				
			||||||
					printf("input file %s: %s\n", rand_filename, strerror(exitcode));
 | 
										printf("input file %s: %s\n", rand_filename, strerror(exitcode));
 | 
				
			||||||
				} else {
 | 
									} else {
 | 
				
			||||||
@@ -514,7 +515,7 @@ int create_bin_file(char *bin_filename) {
 | 
				
			|||||||
	if (!exitcode) {
 | 
						if (!exitcode) {
 | 
				
			||||||
		lprintf(DEBUG, "writing file %s\n", bin_filename);
 | 
							lprintf(DEBUG, "writing file %s\n", bin_filename);
 | 
				
			||||||
		f_out = fopen(bin_filename, "wb");
 | 
							f_out = fopen(bin_filename, "wb");
 | 
				
			||||||
		if (f_out == NULL) {
 | 
							if (!f_out) {
 | 
				
			||||||
			exitcode = errno;
 | 
								exitcode = errno;
 | 
				
			||||||
			printf("output file %s: %s\n", bin_filename, strerror(exitcode));
 | 
								printf("output file %s: %s\n", bin_filename, strerror(exitcode));
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
@@ -547,18 +548,18 @@ int create_zip_file(char *zip_filename, char *bin_filename) {
 | 
				
			|||||||
	buffer = NULL;
 | 
						buffer = NULL;
 | 
				
			||||||
	do {
 | 
						do {
 | 
				
			||||||
		// allocate memory for command line
 | 
							// allocate memory for command line
 | 
				
			||||||
		if (buffer == NULL) {
 | 
							if (!buffer) {
 | 
				
			||||||
			buffer = malloc(buffer_size);
 | 
								buffer = malloc(buffer_size);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if (buffer == NULL) {
 | 
							if (!buffer) {
 | 
				
			||||||
			exitcode = 1;
 | 
								exitcode = 1;
 | 
				
			||||||
			printf("create_zip_file: can not allocate %i bytes\n", (int) buffer_size);
 | 
								printf("create_zip_file: can not allocate %i bytes\n", (int) buffer_size);
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// if buffer was not completely filled, then line fit in completely
 | 
							// if buffer was not completely filled, then line fit in completely
 | 
				
			||||||
		count = snprintf(buffer, buffer_size, "zip %s %s", zip_filename, bin_filename);
 | 
							count = snprintf(buffer, buffer_size, "zip \"%s\" \"%s\"", zip_filename, bin_filename);
 | 
				
			||||||
		if (count > -1 && count < buffer_size) {
 | 
							if ((count > -1) && (count < buffer_size)) {
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -577,7 +578,7 @@ int create_zip_file(char *zip_filename, char *bin_filename) {
 | 
				
			|||||||
		// zipping binfile
 | 
							// zipping binfile
 | 
				
			||||||
		lprintf(DEBUG, "%s\n", buffer);
 | 
							lprintf(DEBUG, "%s\n", buffer);
 | 
				
			||||||
		count = system(buffer);
 | 
							count = system(buffer);
 | 
				
			||||||
		if (count < 0 || WEXITSTATUS(count)) {
 | 
							if ((count < 0) || (WEXITSTATUS(count))) {
 | 
				
			||||||
			exitcode = 1;
 | 
								exitcode = 1;
 | 
				
			||||||
			printf("create_zip_file: can not execute %s bytes\n", buffer);
 | 
								printf("create_zip_file: can not execute %s bytes\n", buffer);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -624,7 +625,7 @@ int create_img_file(FILE *f_out, char *out_filename, char *zip_filename) {
 | 
				
			|||||||
	if (!exitcode) {
 | 
						if (!exitcode) {
 | 
				
			||||||
		lprintf(DEBUG_LVL2, " adding zip file\n");
 | 
							lprintf(DEBUG_LVL2, " adding zip file\n");
 | 
				
			||||||
		f_in = fopen(zip_filename, "rb");
 | 
							f_in = fopen(zip_filename, "rb");
 | 
				
			||||||
		if (f_in == NULL) {
 | 
							if (!f_in) {
 | 
				
			||||||
			exitcode = errno;
 | 
								exitcode = errno;
 | 
				
			||||||
			printf("input file %s: %s\n", zip_filename, strerror(exitcode));
 | 
								printf("input file %s: %s\n", zip_filename, strerror(exitcode));
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
@@ -696,16 +697,17 @@ int main(int argc, char *argv[]) {
 | 
				
			|||||||
	int exitcode = 0;
 | 
						int exitcode = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	int help;
 | 
						int help;
 | 
				
			||||||
 | 
						int onlybin;
 | 
				
			||||||
	int havezip;
 | 
						int havezip;
 | 
				
			||||||
	char option;
 | 
						char option;
 | 
				
			||||||
	char *par_filename = NULL;
 | 
						char *par_filename = NULL;
 | 
				
			||||||
	char *out_filename = NULL;
 | 
						char *img_filename = NULL;
 | 
				
			||||||
	char *base_filename = NULL;
 | 
						char *base_filename = NULL;
 | 
				
			||||||
	char *bin_filename = NULL;
 | 
						char *bin_filename = NULL;
 | 
				
			||||||
	char *zip_filename = NULL;
 | 
						char *zip_filename = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	FILE *f_par;
 | 
						FILE *f_par = NULL;
 | 
				
			||||||
	FILE *f_out;
 | 
						FILE *f_img = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	int i;
 | 
						int i;
 | 
				
			||||||
	mtd_info *mtd;
 | 
						mtd_info *mtd;
 | 
				
			||||||
@@ -722,19 +724,23 @@ int main(int argc, char *argv[]) {
 | 
				
			|||||||
// command line processing
 | 
					// command line processing
 | 
				
			||||||
	// options
 | 
						// options
 | 
				
			||||||
	help = 0;
 | 
						help = 0;
 | 
				
			||||||
 | 
						onlybin = 0;
 | 
				
			||||||
	havezip = 0;
 | 
						havezip = 0;
 | 
				
			||||||
	while ((option = getopt(argc, argv, ":hzf:v")) != -1) {
 | 
						while ((option = getopt(argc, argv, ":hbzf:v")) != -1) {
 | 
				
			||||||
		switch(option) {
 | 
							switch(option) {
 | 
				
			||||||
			case 'h':
 | 
								case 'h':
 | 
				
			||||||
				help = 1;
 | 
									help = 1;
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
 | 
								case 'b':
 | 
				
			||||||
 | 
									onlybin = 1;
 | 
				
			||||||
 | 
									break;
 | 
				
			||||||
			case 'z':
 | 
								case 'z':
 | 
				
			||||||
				havezip = 1;
 | 
									havezip = 1;
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
			case 'f':
 | 
								case 'f':
 | 
				
			||||||
				sizecheck = sscanf(optarg, "%i", &i);
 | 
									sizecheck = sscanf(optarg, "%i", &i);
 | 
				
			||||||
				if (sizecheck != 1) {
 | 
									if (sizecheck != 1) {
 | 
				
			||||||
					printf("firmware version of -f option not a valid integer\n");
 | 
										printf("Firmware version of -f option not a valid integer\n");
 | 
				
			||||||
					exitcode = 1;
 | 
										exitcode = 1;
 | 
				
			||||||
				} else {
 | 
									} else {
 | 
				
			||||||
					fw_version[0] = 0x000000FF & ( i >> 8 );
 | 
										fw_version[0] = 0x000000FF & ( i >> 8 );
 | 
				
			||||||
@@ -757,7 +763,7 @@ int main(int argc, char *argv[]) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// files
 | 
						// files
 | 
				
			||||||
	for ( ; optind < argc; optind++) {
 | 
						for ( ; optind < argc; optind++) {
 | 
				
			||||||
		if (par_filename == NULL) {
 | 
							if (!par_filename) {
 | 
				
			||||||
			par_filename = argv[optind];
 | 
								par_filename = argv[optind];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (access(par_filename, R_OK)) {
 | 
								if (access(par_filename, R_OK)) {
 | 
				
			||||||
@@ -772,12 +778,12 @@ int main(int argc, char *argv[]) {
 | 
				
			|||||||
			continue;
 | 
								continue;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (out_filename == NULL) {
 | 
							if ((!onlybin) && (!img_filename)) {
 | 
				
			||||||
			out_filename = argv[optind];
 | 
								img_filename = argv[optind];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (!access(out_filename, F_OK)) {	// if file already exists then check write access
 | 
								if (!access(img_filename, F_OK)) {	// if file already exists then check write access
 | 
				
			||||||
				if (access(out_filename, W_OK)) {
 | 
									if (access(img_filename, W_OK)) {
 | 
				
			||||||
					printf("No write access to output file %s\n", out_filename);
 | 
										printf("No write access to image file %s\n", img_filename);
 | 
				
			||||||
					exitcode = 1;
 | 
										exitcode = 1;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -791,7 +797,7 @@ int main(int argc, char *argv[]) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// file name checks
 | 
						// file name checks
 | 
				
			||||||
	if (par_filename == NULL) {
 | 
						if (!par_filename) {
 | 
				
			||||||
		if (havezip) {
 | 
							if (havezip) {
 | 
				
			||||||
			printf("Zip file not stated\n");
 | 
								printf("Zip file not stated\n");
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
@@ -800,7 +806,7 @@ int main(int argc, char *argv[]) {
 | 
				
			|||||||
		exitcode = 1;
 | 
							exitcode = 1;
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		base_filename = basename(par_filename);
 | 
							base_filename = basename(par_filename);
 | 
				
			||||||
		if (base_filename == NULL) {
 | 
							if (!base_filename) {
 | 
				
			||||||
			if (havezip) {
 | 
								if (havezip) {
 | 
				
			||||||
				printf("Zip file is a directory\n");
 | 
									printf("Zip file is a directory\n");
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
@@ -810,33 +816,35 @@ int main(int argc, char *argv[]) {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (out_filename == NULL) {
 | 
						if (!onlybin) {
 | 
				
			||||||
		printf("Output file not stated\n");
 | 
							if (!img_filename) {
 | 
				
			||||||
 | 
								printf("Image file not stated\n");
 | 
				
			||||||
			exitcode = 1;
 | 
								exitcode = 1;
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
		base_filename = basename(out_filename);
 | 
								base_filename = basename(img_filename);
 | 
				
			||||||
		if (base_filename == NULL) {
 | 
								if (!base_filename) {
 | 
				
			||||||
			printf("Output file is a directory\n");
 | 
									printf("Image file is a directory\n");
 | 
				
			||||||
				exitcode = 1;
 | 
									exitcode = 1;
 | 
				
			||||||
		} else {
 | 
					 | 
				
			||||||
			base_filename = strdup(base_filename);
 | 
					 | 
				
			||||||
			zip_filename = strrchr(base_filename, '.');
 | 
					 | 
				
			||||||
			if (zip_filename != NULL) {
 | 
					 | 
				
			||||||
				zip_filename[0] = 0;
 | 
					 | 
				
			||||||
				zip_filename = NULL;	// clean up
 | 
					 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// react on parameter problems or help request, and exit
 | 
						// check for mutually exclusive options
 | 
				
			||||||
	if ((exitcode != 0) || help) {
 | 
						if ((onlybin) && (havezip)) {
 | 
				
			||||||
 | 
							printf("Option -b and -z are mutually exclusive\n");
 | 
				
			||||||
 | 
							exitcode = 1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// react on option problems or help request, then exit
 | 
				
			||||||
 | 
						if ((exitcode) || (help)) {
 | 
				
			||||||
		if (help) {
 | 
							if (help) {
 | 
				
			||||||
			printf("This program creates Linksys style images for the WRT350Nv2 router.\n");
 | 
								printf("This program creates Linksys style images for the WRT350Nv2 router.\n");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		printf("  Usage:\n\
 | 
							printf("  Usage:\n\
 | 
				
			||||||
  %s [-h] [-z] [-f <version>] [-v] <parameter or zip file> <output file>\n\n\
 | 
					  %s [-h] [-b] [-z] [-f <version>] [-v] <parameter or zip file> [<image file>]\n\n\
 | 
				
			||||||
  Options:\n\
 | 
					  Options:\n\
 | 
				
			||||||
  -h            -  Show this help\n\
 | 
					  -h            -  Show this help\n\
 | 
				
			||||||
 | 
					  -b            -  Create only bin file, no img or zip file is created\n\
 | 
				
			||||||
  -z            -  Have zip file, the img file will be directly created from it\n\
 | 
					  -z            -  Have zip file, the img file will be directly created from it\n\
 | 
				
			||||||
  -f <version>  -  Wanted firmware version to use with -z\n\
 | 
					  -f <version>  -  Wanted firmware version to use with -z\n\
 | 
				
			||||||
                   Default firmware version is 0x2019 = 2.00.19.\n\
 | 
					                   Default firmware version is 0x2019 = 2.00.19.\n\
 | 
				
			||||||
@@ -853,29 +861,37 @@ int main(int argc, char *argv[]) {
 | 
				
			|||||||
		par_filename = NULL;
 | 
							par_filename = NULL;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	lprintf(DEBUG_LVL2, " verbosity: %i\n", verbosity);
 | 
						lprintf(DEBUG_LVL2, " Verbosity: %i\n", verbosity);
 | 
				
			||||||
	lprintf(DEBUG_LVL2, " program: %s\n", argv[0]);
 | 
						lprintf(DEBUG_LVL2, " Program: %s\n", argv[0]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (par_filename) {
 | 
				
			||||||
		lprintf(DEBUG, "Parameter file: %s\n", par_filename);
 | 
							lprintf(DEBUG, "Parameter file: %s\n", par_filename);
 | 
				
			||||||
	lprintf(DEBUG, "Output file: %s\n", out_filename);
 | 
						}
 | 
				
			||||||
	lprintf(DEBUG_LVL2, " basename: %s (%i)\n", base_filename, strlen(base_filename));
 | 
						if (zip_filename) {
 | 
				
			||||||
 | 
							lprintf(DEBUG, "Zip file: %s\n", zip_filename);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (img_filename) {
 | 
				
			||||||
 | 
							lprintf(DEBUG, "Image file: %s\n", img_filename);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// open files from command line
 | 
					// open files from command line
 | 
				
			||||||
	// parameter file
 | 
						// parameter/zip file
 | 
				
			||||||
	if (par_filename != NULL) {
 | 
						if (par_filename) {
 | 
				
			||||||
		f_par = fopen(par_filename, "r");
 | 
							f_par = fopen(par_filename, "rt");
 | 
				
			||||||
		if (f_par == NULL) {
 | 
							if (!f_par) {
 | 
				
			||||||
			exitcode = errno;
 | 
								exitcode = errno;
 | 
				
			||||||
			printf("input file %s: %s\n", par_filename, strerror(exitcode));
 | 
								printf("Input file %s: %s\n", par_filename, strerror(exitcode));
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// output file
 | 
						// image file
 | 
				
			||||||
	f_out = fopen(out_filename, "w");
 | 
						if (img_filename) {
 | 
				
			||||||
	if (f_out == NULL) {
 | 
							f_img = fopen(img_filename, "wb");
 | 
				
			||||||
 | 
							if (!f_img) {
 | 
				
			||||||
			exitcode = errno;
 | 
								exitcode = errno;
 | 
				
			||||||
		printf("Output file %s: %s\n", out_filename, strerror(exitcode));
 | 
								printf("Output file %s: %s\n", img_filename, strerror(exitcode));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (exitcode) {
 | 
						if (exitcode) {
 | 
				
			||||||
@@ -884,20 +900,20 @@ int main(int argc, char *argv[]) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// parameter file processing
 | 
					// parameter file processing
 | 
				
			||||||
	if (!exitcode && par_filename != NULL) {
 | 
						if ((!exitcode) && (f_par)) {
 | 
				
			||||||
		lprintf(DEBUG, "parsing parameter file...\n");
 | 
							lprintf(DEBUG, "parsing parameter file...\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		exitcode = parse_par_file(f_par);
 | 
							exitcode = parse_par_file(f_par);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		lprintf(DEBUG, "...done parsing file\n");
 | 
							lprintf(DEBUG, "...done parsing file\n");
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (par_filename != NULL) {
 | 
						if (f_par) {
 | 
				
			||||||
		fclose(f_par);
 | 
							fclose(f_par);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// check all input data
 | 
					// check all input data
 | 
				
			||||||
	if (!exitcode && par_filename != NULL) {
 | 
						if ((!exitcode) && (par_filename)) {
 | 
				
			||||||
		lprintf(DEBUG, "checking mtd data...\n");
 | 
							lprintf(DEBUG, "checking mtd data...\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for (i = 1; i <= 3; i++) {
 | 
							for (i = 1; i <= 3; i++) {
 | 
				
			||||||
@@ -936,20 +952,20 @@ int main(int argc, char *argv[]) {
 | 
				
			|||||||
					printf("unknown mtd check %i\n", i);
 | 
										printf("unknown mtd check %i\n", i);
 | 
				
			||||||
					break;
 | 
										break;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if (mtd == NULL) {
 | 
								if (!mtd) {
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			lprintf(DEBUG_LVL2, " checking mtd %s\n", mtd->name);
 | 
								lprintf(DEBUG_LVL2, " checking mtd %s\n", mtd->name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// general checks
 | 
								// general checks
 | 
				
			||||||
			if (mandatory && mtd->filename == NULL) {
 | 
								if ((mandatory) && (!mtd->filename)) {
 | 
				
			||||||
				exitcode = 1;
 | 
									exitcode = 1;
 | 
				
			||||||
				printf("mtd %s not specified correctly or at all in parameter file\n", mtd->name);
 | 
									printf("mtd %s not specified correctly or at all in parameter file\n", mtd->name);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// end checks if no file data present
 | 
								// end checks if no file data present
 | 
				
			||||||
			if (mtd->filename == NULL) {
 | 
								if (!mtd->filename) {
 | 
				
			||||||
				continue;
 | 
									continue;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -960,7 +976,7 @@ int main(int argc, char *argv[]) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			// general magic number check
 | 
								// general magic number check
 | 
				
			||||||
			if (magic[0]) {
 | 
								if (magic[0]) {
 | 
				
			||||||
				if (mtd->magic[0] != magic[0] || mtd->magic[1] != magic[1]) {
 | 
									if ((mtd->magic[0] != magic[0]) || (mtd->magic[1] != magic[1])) {
 | 
				
			||||||
					exitcode = 1;
 | 
										exitcode = 1;
 | 
				
			||||||
					printf("mtd %s input file %s has wrong magic number (0x%02X%02X)\n", mtd->name, mtd->filename, mtd->magic[0], mtd->magic[1]);
 | 
										printf("mtd %s input file %s has wrong magic number (0x%02X%02X)\n", mtd->name, mtd->filename, mtd->magic[0], mtd->magic[1]);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
@@ -992,10 +1008,8 @@ int main(int argc, char *argv[]) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// bin creation in memory
 | 
					// bin creation in memory
 | 
				
			||||||
	if (!exitcode && par_filename != NULL) {
 | 
						if ((!exitcode) && (par_filename)) {
 | 
				
			||||||
		// create bin name from basename
 | 
							bin_filename = "wrt350n.bin";
 | 
				
			||||||
		bin_filename = malloc(strlen(base_filename)+10);
 | 
					 | 
				
			||||||
		sprintf(bin_filename, "%s.bin", base_filename);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		lprintf(DEBUG, "creating bin file %s...\n", bin_filename);
 | 
							lprintf(DEBUG, "creating bin file %s...\n", bin_filename);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1004,12 +1018,9 @@ int main(int argc, char *argv[]) {
 | 
				
			|||||||
		lprintf(DEBUG, "...done creating bin file\n");
 | 
							lprintf(DEBUG, "...done creating bin file\n");
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
// zip file creation
 | 
					// zip file creation
 | 
				
			||||||
	if (!exitcode && zip_filename == NULL) {
 | 
						if ((!exitcode) && (!onlybin) && (!zip_filename)) {
 | 
				
			||||||
		// create zip name from basename
 | 
							zip_filename = "wrt350n.zip";
 | 
				
			||||||
		zip_filename = malloc(strlen(base_filename)+10);
 | 
					 | 
				
			||||||
		sprintf(zip_filename, "%s.zip", base_filename);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		lprintf(DEBUG, "creating zip file %s...\n", zip_filename);
 | 
							lprintf(DEBUG, "creating zip file %s...\n", zip_filename);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1020,15 +1031,18 @@ int main(int argc, char *argv[]) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// img file creation
 | 
					// img file creation
 | 
				
			||||||
	if (!exitcode) {
 | 
						if ((!exitcode) && (f_img)) {
 | 
				
			||||||
		lprintf(DEBUG, "creating img file...\n");
 | 
							lprintf(DEBUG, "creating img file...\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		exitcode = create_img_file(f_out, out_filename, zip_filename);
 | 
							exitcode = create_img_file(f_img, img_filename, zip_filename);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		lprintf(DEBUG, "...done creating img file\n");
 | 
							lprintf(DEBUG, "...done creating img file\n");
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	fclose(f_out);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// clean up
 | 
				
			||||||
 | 
						if (f_img) {
 | 
				
			||||||
 | 
							fclose(f_img);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// end program
 | 
					// end program
 | 
				
			||||||
	return exitcode;
 | 
						return exitcode;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user