函数逻辑报告

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

Source Code:arch\x86\boot\printf.c Create Date:2022-07-27 08:26:07
Last Modify:2020-03-12 14:18:49 Copyright©Brick
首页 函数Tree
注解内核,赢得工具下载SCCTEnglish

函数名称:vsprintf

函数原型:int vsprintf(char *buf, const char *fmt, va_list args)

返回类型:int

参数:

类型参数名称
char *buf
const char *fmt
va_listargs
128 fmt循环
129  如果fmt不等于'%'则
130  str自加等于fmt
131  继续下一循环
135  flags等于0
136  repeat :
137  fmt先自加
139  :fmt恒等于'-'
140  flags或等于left justified
141  转到:repeat
142  :fmt恒等于'+'
143  flags或等于show plus
144  转到:repeat
145  :fmt恒等于' '
146  flags或等于space if plus
147  转到:repeat
148  :fmt恒等于'#'
149  flags或等于0x
150  转到:repeat
151  :fmt恒等于'0'
152  flags或等于pad with zero
153  转到:repeat
157  field_width等于负1
158  如果是数字field_width等于-*- linux-c -*- ------------------------------------------------------- ** Copyright (C) 1991, 1992 Linus Torvalds* Copyright 2007 rPath, Inc. - All Rights Reserved* -----------------------------------------------------------------------
160  否则如果fmt恒等于'*'则
161  fmt先自加
163  field_width等于va_arg(args, int)
164  如果field_width小于0则
165  field_width等于负field_width
166  flags或等于left justified
171  precision等于负1
172  如果fmt恒等于'.'则
173  fmt先自加
176  否则如果fmt恒等于'*'则
177  fmt先自加
179  precision等于va_arg(args, int)
181  如果precision小于0则precision等于0
186  qualifier等于负1
187  如果fmt恒等于'h'或fmt恒等于'l'或fmt恒等于'L'则
188  qualifier等于fmt
189  fmt先自加
193  base等于10
196  :fmt恒等于'c'
197  如果非flags按位与left justified 的值则当field_width先自减大于0循环
199  str自加等于' '
200  str自加等于va_arg(args, int)
201 field_width先自减大于0循环
202  str自加等于' '
203  继续下一循环
205  :fmt恒等于's'
206  s等于va_arg(args, char * )
207  len等于字符串长度
209  如果非flags按位与left justified 的值则当len小于field_width自减循环
211  str自加等于' '
212 i小于len循环str自加等于s自加
214 len小于field_width自减循环
215  str自加等于' '
216  继续下一循环
218  :fmt恒等于'p'
219  如果field_width恒等于负1则
220  field_width等于2乘*的长度
221  flags或等于pad with zero
223  str等于number(str, (unsignedlong)va_arg(args, void * ), 16, field_width, precision, flags)
226  继续下一循环
228  :fmt恒等于'n'
229  如果qualifier恒等于'l'则
230  ip等于va_arg(args, long * )
231  ip等于strbuf
232  否则
233  ip等于va_arg(args, int * )
234  ip等于strbuf
236  继续下一循环
238  :fmt恒等于'%'
239  str自加等于'%'
240  继续下一循环
243  :fmt恒等于'o'
244  base等于8
245  退出
247  :fmt恒等于'x'
248  flags或等于Must be 32 == 0x20
249  :fmt恒等于'X'
250  base等于16
251  退出
253  :fmt恒等于'd'
254  :fmt恒等于'i'
256  :fmt恒等于'u'
257  退出
259  默认
260  str自加等于'%'
261  如果fmtstr自加等于fmt
263  否则fmt先自减
265  继续下一循环
267  如果qualifier恒等于'l'则num等于va_arg(args, unsignedlong)
269  否则如果qualifier恒等于'h'则
270  num等于va_arg(args, int)
271  如果flags按位与unsigned/signed long num等于num
273  否则如果flags按位与unsigned/signed long num等于va_arg(args, int)
275  否则num等于va_arg(args, unsignedint)
277  str等于number(str, num, base, field_width, precision, flags)
279  str等于'\0'
280  返回:strbuf
调用者
名称描述
sprintf输出格式化串
printf格式化输出串