函数逻辑报告

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

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

函数名称:unlzo

函数原型:STATIC int __attribute__((__section__(".init.text"))) __attribute__((__cold__))unlzo(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
104  r等于0
105  skip等于0
109  ret等于负1
111  如果output
112  out_buf等于output
113  否则如果非flush
114  error("NULL output pointer and no flush function provided")
115  转到:exit
116  否则
117  out_buf等于Use defines rather than static inline in order to avoid spurious* warnings when not needed (indeed large_malloc / large_free are not* needed by inflate (LZO_BLOCK_SIZE)
118  如果非out_buf
119  error("Could not allocate output buffer")
120  转到:exit
124  如果inputfill
125  error("Both input pointer and fill function provided, don't know what to do")
126  转到:exit_1
127  否则如果input
128  in_buf等于input
129  否则如果非fill
130  error("NULL input pointer and missing fill function")
131  转到:exit_1
132  否则
133  in_buf等于Use defines rather than static inline in order to avoid spurious* warnings when not needed (indeed large_malloc / large_free are not* needed by inflate (lzo1x_worst_compress(LZO_BLOCK_SIZE))
134  如果非in_buf
135  error("Could not allocate input buffer")
136  转到:exit_1
139  in_buf_save等于in_buf
141  如果pospposp等于0
144  如果fill
151  in_buf加等于HEADER_SIZE_MAX
152  in_len等于fill(in_buf, HEADER_SIZE_MAX)
155  如果非parse_header(in_buf, & skip, in_len)则
156  error("invalid header")
157  转到:exit_2
159  in_buf加等于skip
160  in_len减等于skip
162  如果fill
164  内存复制(in_buf_save, in_buf, in_len)
165  in_buf等于in_buf_save
168  如果pospposp等于skip
171  循环
173  如果fillin_len小于4则
174  skip等于fill(in_buf + in_len, 4 - in_len)
175  如果skip大于0则in_len加等于skip
178  如果in_len小于4则
179  error("file corrupted")
180  转到:exit_2
182  dst_len等于get_unaligned_be32(in_buf)
183  in_buf加等于4
184  in_len减等于4
187  如果dst_len恒等于0则
188  如果pospposp加等于4
190  退出
193  如果dst_len大于LZO_BLOCK_SIZE
194  error("dest len longer than block size")
195  转到:exit_2
199  如果fillin_len小于8则
200  skip等于fill(in_buf + in_len, 8 - in_len)
201  如果skip大于0则in_len加等于skip
204  如果in_len小于8则
205  error("file corrupted")
206  转到:exit_2
208  src_len等于get_unaligned_be32(in_buf)
209  in_buf加等于8
210  in_len减等于8
212  如果src_len小于等于0或src_len大于dst_len
213  error("file corrupted")
214  转到:exit_2
218  如果fillin_len小于src_len
219  skip等于fill(in_buf + in_len, src_len - in_len)
220  如果skip大于0则in_len加等于skip
223  如果in_len小于src_len
224  error("file corrupted")
225  转到:exit_2
227  tmp等于dst_len
232  如果此条件成立可能性小(为编译器优化)(dst_len == src_len)则内存复制(out_buf, in_buf, src_len)
234  否则
238  如果r不等于Return values (< 0 = Error)dst_len不等于tmp
239  error("Compressed data violation")
240  转到:exit_2
244  如果flushflush(out_buf, dst_len)不等于dst_len则转到:exit_2
246  如果outputout_buf加等于dst_len
248  如果pospposp加等于src_len加12
251  in_buf加等于src_len
252  in_len减等于src_len
253  如果fill
259  如果in_len大于0则以skip小于in_len循环
261  in_buf_save[skip]等于in_buf[skip]
262  in_buf等于in_buf_save
266  ret等于0
267  exit_2 :
268  如果非inputfree(in_buf_save)
270  exit_1 :
271  如果非outputfree(out_buf)
273  exit :
274  返回:ret
调用者
名称描述
__decompress