162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci#define _LINUX_STRING_H_
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci#include <linux/compiler.h>	/* for inline */
562306a36Sopenharmony_ci#include <linux/types.h>	/* for size_t */
662306a36Sopenharmony_ci#include <linux/stddef.h>	/* for NULL */
762306a36Sopenharmony_ci#include <linux/linkage.h>
862306a36Sopenharmony_ci#include <asm/string.h>
962306a36Sopenharmony_ci#include "misc.h"
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#define STATIC static
1262306a36Sopenharmony_ci#define STATIC_RW_DATA	/* non-static please */
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci/* Diagnostic functions */
1562306a36Sopenharmony_ci#ifdef DEBUG
1662306a36Sopenharmony_ci#  define Assert(cond,msg) {if(!(cond)) error(msg);}
1762306a36Sopenharmony_ci#  define Trace(x) fprintf x
1862306a36Sopenharmony_ci#  define Tracev(x) {if (verbose) fprintf x ;}
1962306a36Sopenharmony_ci#  define Tracevv(x) {if (verbose>1) fprintf x ;}
2062306a36Sopenharmony_ci#  define Tracec(c,x) {if (verbose && (c)) fprintf x ;}
2162306a36Sopenharmony_ci#  define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;}
2262306a36Sopenharmony_ci#else
2362306a36Sopenharmony_ci#  define Assert(cond,msg)
2462306a36Sopenharmony_ci#  define Trace(x)
2562306a36Sopenharmony_ci#  define Tracev(x)
2662306a36Sopenharmony_ci#  define Tracevv(x)
2762306a36Sopenharmony_ci#  define Tracec(c,x)
2862306a36Sopenharmony_ci#  define Tracecv(c,x)
2962306a36Sopenharmony_ci#endif
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci/* Not needed, but used in some headers pulled in by decompressors */
3262306a36Sopenharmony_ciextern char * strstr(const char * s1, const char *s2);
3362306a36Sopenharmony_ciextern size_t strlen(const char *s);
3462306a36Sopenharmony_ciextern int strcmp(const char *cs, const char *ct);
3562306a36Sopenharmony_ciextern int memcmp(const void *cs, const void *ct, size_t count);
3662306a36Sopenharmony_ciextern char * strchrnul(const char *, int);
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci#ifdef CONFIG_KERNEL_GZIP
3962306a36Sopenharmony_ci#include "../../../../lib/decompress_inflate.c"
4062306a36Sopenharmony_ci#endif
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ci#ifdef CONFIG_KERNEL_LZO
4362306a36Sopenharmony_ci#include "../../../../lib/decompress_unlzo.c"
4462306a36Sopenharmony_ci#endif
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci#ifdef CONFIG_KERNEL_LZMA
4762306a36Sopenharmony_ci#include "../../../../lib/decompress_unlzma.c"
4862306a36Sopenharmony_ci#endif
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ci#ifdef CONFIG_KERNEL_XZ
5162306a36Sopenharmony_ci/* Prevent KASAN override of string helpers in decompressor */
5262306a36Sopenharmony_ci#undef memmove
5362306a36Sopenharmony_ci#define memmove memmove
5462306a36Sopenharmony_ci#undef memcpy
5562306a36Sopenharmony_ci#define memcpy memcpy
5662306a36Sopenharmony_ci#include "../../../../lib/decompress_unxz.c"
5762306a36Sopenharmony_ci#endif
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ci#ifdef CONFIG_KERNEL_LZ4
6062306a36Sopenharmony_ci#include "../../../../lib/decompress_unlz4.c"
6162306a36Sopenharmony_ci#endif
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ciint do_decompress(u8 *input, int len, u8 *output, void (*error)(char *x))
6462306a36Sopenharmony_ci{
6562306a36Sopenharmony_ci	return __decompress(input, len, NULL, NULL, output, 0, NULL, error);
6662306a36Sopenharmony_ci}
67