函数逻辑报告

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

Source Code:lib\decompress_unlz4.c Create Date:2022-07-27 07:15:14
Last Modify:2020-03-15 22:50:34 Copyright©Brick
首页 函数Tree
注解内核,赢得工具下载SCCTEnglish

函数名称:unlz4

函数原型:STATIC inline int __attribute__((__section__(".init.text"))) __attribute__((__cold__))unlz4(u8 *input, long in_len, long (*fill)(void *, unsigned long ), long (*flush)(void *, unsigned long ), u8 *output, long *posp, void (*error)(char *x))

返回类型:int

参数:

类型参数名称
u8 *input
longin_len
long (*fill
long (*flush
u8 *output
long *posp
void (*error
37  ret等于负1
38  chunksize等于0
39  uncomp_chunksize等于Note: Uncompressed chunk size is used in the compressor side* (userspace side for compression).* It is hardcoded because there is not proper way to extract it* from the binary stream which is generated by the preliminary* version of LZ4 tool so far.
43  size等于in_len
45  out_len等于get_unaligned_le32(input + in_len)
50  如果output
51  outp等于output
52  否则如果非flush
53  error("NULL output pointer and no flush function provided")
54  转到:exit_0
55  否则
56  outp等于large_malloc(uncomp_chunksize)
57  如果非outp
58  error("Could not allocate output buffer")
59  转到:exit_0
63  如果inputfill
64  error("Both input pointer and fill function provided,")
65  转到:exit_1
66  否则如果input
67  inp等于input
68  否则如果非fill
69  error("NULL input pointer and missing fill function")
70  转到:exit_1
71  否则
72  inp等于large_malloc(LZ4_compressBound() - Max. output size in worst case szenarios*@isize: Size of the input data* Return: Max. size LZ4 may output in a "worst case" szenario* (data not compressible))
73  如果非inp
74  error("Could not allocate input buffer")
75  转到:exit_1
78  inp_start等于inp
80  如果pospposp等于0
83  如果fill
84  size等于fill(inp, 4)
85  如果size小于4则
86  error("data corrupted")
87  转到:exit_2
91  chunksize等于get_unaligned_le32(inp)
92  如果chunksize恒等于ARCHIVE_MAGICNUMBER
93  如果非fill
94  inp加等于4
95  size减等于4
97  否则
98  error("invalid header")
99  转到:exit_2
102  如果pospposp加等于4
105  循环
107  如果fill
108  size等于fill(inp, 4)
109  如果size恒等于0则退出
111  如果size小于4则
112  error("data corrupted")
113  转到:exit_2
117  chunksize等于get_unaligned_le32(inp)
118  如果chunksize恒等于ARCHIVE_MAGICNUMBER
119  如果非fill
120  inp加等于4
121  size减等于4
123  如果pospposp加等于4
125  继续下一循环
129  如果pospposp加等于4
132  如果非fill
133  inp加等于4
134  size减等于4
135  否则
137  error("chunk length is longer than allocated")
138  转到:exit_2
140  size等于fill(inp, chunksize)
141  如果size小于chunksize
142  error("data corrupted")
143  转到:exit_2
147  如果out_len大于等于uncomp_chunksize
149  out_len减等于dest_len
150  否则dest_len等于out_len
153  ret等于LZ4_decompress_fast(inp, outp, dest_len)
154  chunksize等于ret
161  如果ret小于0则
162  error("Decoding failed")
163  转到:exit_2
166  ret等于负1
167  如果flushflush(outp, dest_len)不等于dest_len则转到:exit_2
169  如果outputoutp加等于dest_len
171  如果pospposp加等于chunksize
174  如果非fill
175  size减等于chunksize
177  如果size恒等于0则退出
179  否则如果size小于0则
180  error("data corrupted")
181  转到:exit_2
183  inp加等于chunksize
187  ret等于0
188  exit_2 :
189  如果非inputlarge_free(inp_start)
191  exit_1 :
192  如果非outputlarge_free(outp)
194  exit_0 :
195  返回:ret
调用者
名称描述
__decompress