compress.h 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #ifndef PERF_COMPRESS_H
  3. #define PERF_COMPRESS_H
  4. #include <stdbool.h>
  5. #include <stddef.h>
  6. #include <stdio.h>
  7. #include <sys/types.h>
  8. #include <linux/compiler.h>
  9. #ifdef HAVE_ZSTD_SUPPORT
  10. #include <zstd.h>
  11. #endif
  12. #ifdef HAVE_ZLIB_SUPPORT
  13. int gzip_decompress_to_file(const char *input, int output_fd);
  14. bool gzip_is_compressed(const char *input);
  15. #endif
  16. #ifdef HAVE_LZMA_SUPPORT
  17. int lzma_decompress_stream_to_file(FILE *input, int output_fd);
  18. int lzma_decompress_to_file(const char *input, int output_fd);
  19. bool lzma_is_compressed(const char *input);
  20. #else
  21. static inline
  22. int lzma_decompress_stream_to_file(FILE *input __maybe_unused,
  23. int output_fd __maybe_unused)
  24. {
  25. return -1;
  26. }
  27. static inline
  28. int lzma_decompress_to_file(const char *input __maybe_unused,
  29. int output_fd __maybe_unused)
  30. {
  31. return -1;
  32. }
  33. static inline int lzma_is_compressed(const char *input __maybe_unused)
  34. {
  35. return false;
  36. }
  37. #endif
  38. struct zstd_data {
  39. #ifdef HAVE_ZSTD_SUPPORT
  40. ZSTD_CStream *cstream;
  41. ZSTD_DStream *dstream;
  42. int comp_level;
  43. #endif
  44. };
  45. #ifdef HAVE_ZSTD_SUPPORT
  46. int zstd_init(struct zstd_data *data, int level);
  47. int zstd_fini(struct zstd_data *data);
  48. ssize_t zstd_compress_stream_to_records(struct zstd_data *data, void *dst, size_t dst_size,
  49. void *src, size_t src_size, size_t max_record_size,
  50. size_t process_header(void *record, size_t increment));
  51. size_t zstd_decompress_stream(struct zstd_data *data, void *src, size_t src_size,
  52. void *dst, size_t dst_size);
  53. #else /* !HAVE_ZSTD_SUPPORT */
  54. static inline int zstd_init(struct zstd_data *data __maybe_unused, int level __maybe_unused)
  55. {
  56. return 0;
  57. }
  58. static inline int zstd_fini(struct zstd_data *data __maybe_unused)
  59. {
  60. return 0;
  61. }
  62. static inline
  63. ssize_t zstd_compress_stream_to_records(struct zstd_data *data __maybe_unused,
  64. void *dst __maybe_unused, size_t dst_size __maybe_unused,
  65. void *src __maybe_unused, size_t src_size __maybe_unused,
  66. size_t max_record_size __maybe_unused,
  67. size_t process_header(void *record, size_t increment) __maybe_unused)
  68. {
  69. return 0;
  70. }
  71. static inline size_t zstd_decompress_stream(struct zstd_data *data __maybe_unused, void *src __maybe_unused,
  72. size_t src_size __maybe_unused, void *dst __maybe_unused,
  73. size_t dst_size __maybe_unused)
  74. {
  75. return 0;
  76. }
  77. #endif
  78. #endif /* PERF_COMPRESS_H */