This patch adds 'is_zlib_file()' helper function which can be used to quickly determine with the passed kernel image is a zlib compressed kernel image. This is specifically useful for arm64 zImage (or Image.gz) support, which is introduced by later patches in this patchset. Signed-off-by: Bhupesh Sharma <bhsharma@xxxxxxxxxx> --- kexec/kexec-zlib.h | 1 + kexec/zlib.c | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/kexec/kexec-zlib.h b/kexec/kexec-zlib.h index 43c107bf4a72..16300f294759 100644 --- a/kexec/kexec-zlib.h +++ b/kexec/kexec-zlib.h @@ -6,5 +6,6 @@ #include "config.h" +int is_zlib_file(const char *filename, off_t *r_size); char *zlib_decompress_file(const char *filename, off_t *r_size); #endif /* __KEXEC_ZLIB_H */ diff --git a/kexec/zlib.c b/kexec/zlib.c index 95b608059d41..34d5ca566769 100644 --- a/kexec/zlib.c +++ b/kexec/zlib.c @@ -23,6 +23,32 @@ static void _gzerror(gzFile fp, int *errnum, const char **errmsg) } } +int is_zlib_file(const char *filename, off_t *r_size) +{ + gzFile fp; + int errnum; + const char *msg; + + if (!filename) + goto out; + + fp = gzopen(filename, "rb"); + if (fp == 0) { + _gzerror(fp, &errnum, &msg); + dbgprintf("Cannot open `%s': %s\n", filename, msg); + goto out; + } + + if (gzdirect(fp)) + /* It's not in gzip format */ + goto out; + + /* It's in gzip format */ + return 1; +out: + return 0; +} + char *zlib_decompress_file(const char *filename, off_t *r_size) { gzFile fp; @@ -84,6 +110,12 @@ fail: return buf; } #else + +int is_zlib_file(const char *filename, off_t *r_size) +{ + return 0; +} + char *zlib_decompress_file(const char *UNUSED(filename), off_t *UNUSED(r_size)) { return NULL; -- 2.7.4 _______________________________________________ kexec mailing list kexec@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/kexec