projects
/
oweals
/
u-boot.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
colibri_imx6: fix video stdout in default environment
[oweals/u-boot.git]
/
lib
/
gunzip.c
diff --git
a/lib/gunzip.c
b/lib/gunzip.c
index d86aa87f688477219a16550f69ba6c3cdb1cebba..bee3b9261f3449c438c43fac77bac45cde127238 100644
(file)
--- a/
lib/gunzip.c
+++ b/
lib/gunzip.c
@@
-1,18
+1,21
@@
+// SPDX-License-Identifier: GPL-2.0+
/*
* (C) Copyright 2000-2006
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
/*
* (C) Copyright 2000-2006
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
- *
- * SPDX-License-Identifier: GPL-2.0+
*/
#include <common.h>
*/
#include <common.h>
-#include <
watchdog
.h>
+#include <
blk
.h>
#include <command.h>
#include <console.h>
#include <command.h>
#include <console.h>
+#include <div64.h>
+#include <gzip.h>
#include <image.h>
#include <malloc.h>
#include <image.h>
#include <malloc.h>
+#include <memalign.h>
+#include <u-boot/crc.h>
+#include <watchdog.h>
#include <u-boot/zlib.h>
#include <u-boot/zlib.h>
-#include <div64.h>
#define HEADER0 '\x1f'
#define HEADER1 '\x8b'
#define HEADER0 '\x1f'
#define HEADER1 '\x8b'
@@
-41,7
+44,7
@@
void gzfree(void *x, void *addr, unsigned nb)
free (addr);
}
free (addr);
}
-int g
unzip(void *dst, int dstlen, unsigned char *src, unsigned long *lenp
)
+int g
zip_parse_header(const unsigned char *src, unsigned long len
)
{
int i, flags;
{
int i, flags;
@@
-62,14
+65,24
@@
int gunzip(void *dst, int dstlen, unsigned char *src, unsigned long *lenp)
;
if ((flags & HEAD_CRC) != 0)
i += 2;
;
if ((flags & HEAD_CRC) != 0)
i += 2;
- if (i >=
*lenp
) {
+ if (i >=
len
) {
puts ("Error: gunzip out of data in header\n");
return (-1);
}
puts ("Error: gunzip out of data in header\n");
return (-1);
}
+ return i;
+}
+
+int gunzip(void *dst, int dstlen, unsigned char *src, unsigned long *lenp)
+{
+ int offset = gzip_parse_header(src, *lenp);
+
+ if (offset < 0)
+ return offset;
- return zunzip(dst, dstlen, src, lenp, 1,
i
);
+ return zunzip(dst, dstlen, src, lenp, 1,
offset
);
}
}
+#ifdef CONFIG_CMD_UNZIP
__weak
void gzwrite_progress_init(u64 expectedsize)
{
__weak
void gzwrite_progress_init(u64 expectedsize)
{
@@
-104,7
+117,7
@@
void gzwrite_progress_finish(int returnval,
}
int gzwrite(unsigned char *src, int len,
}
int gzwrite(unsigned char *src, int len,
- struct bl
ock_dev
_desc *dev,
+ struct bl
k
_desc *dev,
unsigned long szwritebuf,
u64 startoffs,
u64 szexpected)
unsigned long szwritebuf,
u64 startoffs,
u64 szexpected)
@@
-192,7
+205,7
@@
int gzwrite(unsigned char *src, int len,
s.next_in = src + i;
s.avail_in = payload_size+8;
s.next_in = src + i;
s.avail_in = payload_size+8;
- writebuf = (unsigned char *)malloc(szwritebuf);
+ writebuf = (unsigned char *)malloc
_cache_aligned
(szwritebuf);
/* decompress until deflate stream ends or end of file */
do {
/* decompress until deflate stream ends or end of file */
do {
@@
-231,9
+244,8
@@
int gzwrite(unsigned char *src, int len,
gzwrite_progress(iteration++,
totalfilled,
szexpected);
gzwrite_progress(iteration++,
totalfilled,
szexpected);
- blocks_written = dev->block_write(dev, outblock,
- writeblocks,
- writebuf);
+ blocks_written = blk_dwrite(dev, outblock,
+ writeblocks, writebuf);
outblock += blocks_written;
if (ctrlc()) {
puts("abort\n");
outblock += blocks_written;
if (ctrlc()) {
puts("abort\n");
@@
-258,6
+270,7
@@
out:
return r;
}
return r;
}
+#endif
/*
* Uncompress blocks compressed with zlib without headers
/*
* Uncompress blocks compressed with zlib without headers
@@
-284,12
+297,11
@@
int zunzip(void *dst, int dstlen, unsigned char *src, unsigned long *lenp,
do {
r = inflate(&s, Z_FINISH);
if (stoponerr == 1 && r != Z_STREAM_END &&
do {
r = inflate(&s, Z_FINISH);
if (stoponerr == 1 && r != Z_STREAM_END &&
- (s.avail_out == 0 || r != Z_BUF_ERROR)) {
+ (s.avail_
in == 0 || s.avail_
out == 0 || r != Z_BUF_ERROR)) {
printf("Error: inflate() returned %d\n", r);
err = -1;
break;
}
printf("Error: inflate() returned %d\n", r);
err = -1;
break;
}
- s.avail_in = *lenp - offset - (int)(s.next_out - (unsigned char*)dst);
} while (r == Z_BUF_ERROR);
*lenp = s.next_out - (unsigned char *) dst;
inflateEnd(&s);
} while (r == Z_BUF_ERROR);
*lenp = s.next_out - (unsigned char *) dst;
inflateEnd(&s);