diff options
Diffstat (limited to 'tools/perf/util/lzma.c')
-rw-r--r-- | tools/perf/util/lzma.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/tools/perf/util/lzma.c b/tools/perf/util/lzma.c index 7032caaf75eb..b1dd29a9d915 100644 --- a/tools/perf/util/lzma.c +++ b/tools/perf/util/lzma.c | |||
@@ -3,9 +3,13 @@ | |||
3 | #include <lzma.h> | 3 | #include <lzma.h> |
4 | #include <stdio.h> | 4 | #include <stdio.h> |
5 | #include <linux/compiler.h> | 5 | #include <linux/compiler.h> |
6 | #include <sys/types.h> | ||
7 | #include <sys/stat.h> | ||
8 | #include <fcntl.h> | ||
6 | #include "compress.h" | 9 | #include "compress.h" |
7 | #include "util.h" | 10 | #include "util.h" |
8 | #include "debug.h" | 11 | #include "debug.h" |
12 | #include <unistd.h> | ||
9 | 13 | ||
10 | #define BUFSIZE 8192 | 14 | #define BUFSIZE 8192 |
11 | 15 | ||
@@ -100,7 +104,18 @@ err_fclose: | |||
100 | return err; | 104 | return err; |
101 | } | 105 | } |
102 | 106 | ||
103 | bool lzma_is_compressed(const char *input __maybe_unused) | 107 | bool lzma_is_compressed(const char *input) |
104 | { | 108 | { |
105 | return true; | 109 | int fd = open(input, O_RDONLY); |
110 | const uint8_t magic[6] = { 0xFD, '7', 'z', 'X', 'Z', 0x00 }; | ||
111 | char buf[6] = { 0 }; | ||
112 | ssize_t rc; | ||
113 | |||
114 | if (fd < 0) | ||
115 | return -1; | ||
116 | |||
117 | rc = read(fd, buf, sizeof(buf)); | ||
118 | close(fd); | ||
119 | return rc == sizeof(buf) ? | ||
120 | memcmp(buf, magic, sizeof(buf)) == 0 : false; | ||
106 | } | 121 | } |