mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 14:04:26 -04:00 
			
		
		
		
	This version now uses autotools to configure the build system. They are also using the newly added zlib package. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> Tested-by: Koen Vandeputte <koen.vandeputte@ncentric.com>
		
			
				
	
	
		
			90 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| --- a/lib/libubigen.c
 | |
| +++ b/lib/libubigen.c
 | |
| @@ -122,8 +122,9 @@ int ubigen_add_volume(const struct ubige
 | |
|  	return 0;
 | |
|  }
 | |
|  
 | |
| -void ubigen_init_ec_hdr(const struct ubigen_info *ui,
 | |
| -		        struct ubi_ec_hdr *hdr, long long ec)
 | |
| +static void __ubigen_init_ec_hdr(const struct ubigen_info *ui,
 | |
| +				 struct ubi_ec_hdr *hdr, long long ec,
 | |
| +				 int eof)
 | |
|  {
 | |
|  	uint32_t crc;
 | |
|  
 | |
| @@ -136,10 +137,22 @@ void ubigen_init_ec_hdr(const struct ubi
 | |
|  	hdr->data_offset = cpu_to_be32(ui->data_offs);
 | |
|  	hdr->image_seq = cpu_to_be32(ui->image_seq);
 | |
|  
 | |
| +	if (eof) {
 | |
| +		hdr->padding1[0] = 'E';
 | |
| +		hdr->padding1[1] = 'O';
 | |
| +		hdr->padding1[2] = 'F';
 | |
| +	}
 | |
| +
 | |
|  	crc = mtd_crc32(UBI_CRC32_INIT, hdr, UBI_EC_HDR_SIZE_CRC);
 | |
|  	hdr->hdr_crc = cpu_to_be32(crc);
 | |
|  }
 | |
|  
 | |
| +void ubigen_init_ec_hdr(const struct ubigen_info *ui,
 | |
| +		        struct ubi_ec_hdr *hdr, long long ec)
 | |
| +{
 | |
| +	__ubigen_init_ec_hdr(ui, hdr, ec, 0);
 | |
| +}
 | |
| +
 | |
|  void ubigen_init_vid_hdr(const struct ubigen_info *ui,
 | |
|  			 const struct ubigen_vol_info *vi,
 | |
|  			 struct ubi_vid_hdr *hdr, int lnum,
 | |
| @@ -307,6 +320,39 @@ int ubigen_write_layout_vol(const struct
 | |
|  	}
 | |
|  
 | |
|  	free(outbuf);
 | |
| +	return 0;
 | |
| +
 | |
| +out_free:
 | |
| +	free(outbuf);
 | |
| +	return -1;
 | |
| +}
 | |
| +
 | |
| +int ubigen_write_eof_markers(const struct ubigen_info *ui, long long ec,
 | |
| +			     int count, int out_fd)
 | |
| +{
 | |
| +	char *outbuf;
 | |
| +	int peb_size = ui->peb_size;
 | |
| +
 | |
| +	outbuf = malloc(peb_size);
 | |
| +	if (!outbuf) {
 | |
| +		sys_errmsg("cannot allocate %d bytes of memory", peb_size);
 | |
| +		return -1;
 | |
| +	}
 | |
| +
 | |
| +	memset(outbuf, 0xFF, peb_size);
 | |
| +	__ubigen_init_ec_hdr(ui, (struct ubi_ec_hdr *)outbuf, ec, 1);
 | |
| +
 | |
| +	while (count) {
 | |
| +		if (write(out_fd, outbuf, peb_size) != peb_size) {
 | |
| +			sys_errmsg("cannot write %d bytes to the output file",
 | |
| +				   peb_size);
 | |
| +			goto out_free;
 | |
| +		}
 | |
| +
 | |
| +		count--;
 | |
| +	}
 | |
| +
 | |
| +	free(outbuf);
 | |
|  	return 0;
 | |
|  
 | |
|  out_free:
 | |
| --- a/include/libubigen.h
 | |
| +++ b/include/libubigen.h
 | |
| @@ -188,6 +188,9 @@ int ubigen_write_layout_vol(const struct
 | |
|  			    long long ec1, long long ec2,
 | |
|  			    struct ubi_vtbl_record *vtbl, int fd);
 | |
|  
 | |
| +int ubigen_write_eof_markers(const struct ubigen_info *ui, long long ec,
 | |
| +			     int count, int out_fd);
 | |
| +
 | |
|  #ifdef __cplusplus
 | |
|  }
 | |
|  #endif
 |