Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
d8c03214
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
d8c03214
编写于
6月 29, 2021
作者:
P
Petr Mladek
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'for-5.14-vsprintf-scanf' into for-linus
上级
80ae5529
d327ea15
变更
11
展开全部
隐藏空白更改
内联
并排
Showing
11 changed file
with
827 addition
and
40 deletion
+827
-40
MAINTAINERS
MAINTAINERS
+1
-0
include/linux/prandom.h
include/linux/prandom.h
+1
-1
lib/Kconfig.debug
lib/Kconfig.debug
+3
-0
lib/Makefile
lib/Makefile
+1
-0
lib/kstrtox.c
lib/kstrtox.c
+10
-3
lib/kstrtox.h
lib/kstrtox.h
+2
-0
lib/test_scanf.c
lib/test_scanf.c
+750
-0
lib/vsprintf.c
lib/vsprintf.c
+53
-35
tools/testing/selftests/lib/Makefile
tools/testing/selftests/lib/Makefile
+1
-1
tools/testing/selftests/lib/config
tools/testing/selftests/lib/config
+1
-0
tools/testing/selftests/lib/scanf.sh
tools/testing/selftests/lib/scanf.sh
+4
-0
未找到文件。
MAINTAINERS
浏览文件 @
d8c03214
...
...
@@ -19395,6 +19395,7 @@ S: Maintained
T: git git://git.kernel.org/pub/scm/linux/kernel/git/pmladek/printk.git
F: Documentation/core-api/printk-formats.rst
F: lib/test_printf.c
F: lib/test_scanf.c
F: lib/vsprintf.c
VT1211 HARDWARE MONITOR DRIVER
...
...
include/linux/prandom.h
浏览文件 @
d8c03214
...
...
@@ -111,7 +111,7 @@ static inline u32 __seed(u32 x, u32 m)
*/
static
inline
void
prandom_seed_state
(
struct
rnd_state
*
state
,
u64
seed
)
{
u32
i
=
(
seed
>>
32
)
^
(
seed
<<
10
)
^
seed
;
u32
i
=
(
(
seed
>>
32
)
^
(
seed
<<
10
)
^
seed
)
&
0xffffffffUL
;
state
->
s1
=
__seed
(
i
,
2U
);
state
->
s2
=
__seed
(
i
,
8U
);
...
...
lib/Kconfig.debug
浏览文件 @
d8c03214
...
...
@@ -2163,6 +2163,9 @@ config TEST_KSTRTOX
config TEST_PRINTF
tristate "Test printf() family of functions at runtime"
config TEST_SCANF
tristate "Test scanf() family of functions at runtime"
config TEST_BITMAP
tristate "Test bitmap_*() family of functions at runtime"
help
...
...
lib/Makefile
浏览文件 @
d8c03214
...
...
@@ -83,6 +83,7 @@ obj-$(CONFIG_TEST_USER_COPY) += test_user_copy.o
obj-$(CONFIG_TEST_STATIC_KEYS)
+=
test_static_keys.o
obj-$(CONFIG_TEST_STATIC_KEYS)
+=
test_static_key_base.o
obj-$(CONFIG_TEST_PRINTF)
+=
test_printf.o
obj-$(CONFIG_TEST_SCANF)
+=
test_scanf.o
obj-$(CONFIG_TEST_BITMAP)
+=
test_bitmap.o
obj-$(CONFIG_TEST_STRSCPY)
+=
test_strscpy.o
obj-$(CONFIG_TEST_UUID)
+=
test_uuid.o
...
...
lib/kstrtox.c
浏览文件 @
d8c03214
...
...
@@ -39,20 +39,22 @@ const char *_parse_integer_fixup_radix(const char *s, unsigned int *base)
/*
* Convert non-negative integer string representation in explicitly given radix
* to an integer.
* to an integer. A maximum of max_chars characters will be converted.
*
* Return number of characters consumed maybe or-ed with overflow bit.
* If overflow occurs, result integer (incorrect) is still returned.
*
* Don't you dare use this function.
*/
unsigned
int
_parse_integer
(
const
char
*
s
,
unsigned
int
base
,
unsigned
long
long
*
p
)
unsigned
int
_parse_integer_limit
(
const
char
*
s
,
unsigned
int
base
,
unsigned
long
long
*
p
,
size_t
max_chars
)
{
unsigned
long
long
res
;
unsigned
int
rv
;
res
=
0
;
rv
=
0
;
while
(
1
)
{
while
(
max_chars
--
)
{
unsigned
int
c
=
*
s
;
unsigned
int
lc
=
c
|
0x20
;
/* don't tolower() this line */
unsigned
int
val
;
...
...
@@ -82,6 +84,11 @@ unsigned int _parse_integer(const char *s, unsigned int base, unsigned long long
return
rv
;
}
unsigned
int
_parse_integer
(
const
char
*
s
,
unsigned
int
base
,
unsigned
long
long
*
p
)
{
return
_parse_integer_limit
(
s
,
base
,
p
,
INT_MAX
);
}
static
int
_kstrtoull
(
const
char
*
s
,
unsigned
int
base
,
unsigned
long
long
*
res
)
{
unsigned
long
long
_res
;
...
...
lib/kstrtox.h
浏览文件 @
d8c03214
...
...
@@ -4,6 +4,8 @@
#define KSTRTOX_OVERFLOW (1U << 31)
const
char
*
_parse_integer_fixup_radix
(
const
char
*
s
,
unsigned
int
*
base
);
unsigned
int
_parse_integer_limit
(
const
char
*
s
,
unsigned
int
base
,
unsigned
long
long
*
res
,
size_t
max_chars
);
unsigned
int
_parse_integer
(
const
char
*
s
,
unsigned
int
base
,
unsigned
long
long
*
res
);
#endif
lib/test_scanf.c
0 → 100644
浏览文件 @
d8c03214
此差异已折叠。
点击以展开。
lib/vsprintf.c
浏览文件 @
d8c03214
...
...
@@ -53,6 +53,31 @@
#include <linux/string_helpers.h>
#include "kstrtox.h"
static
unsigned
long
long
simple_strntoull
(
const
char
*
startp
,
size_t
max_chars
,
char
**
endp
,
unsigned
int
base
)
{
const
char
*
cp
;
unsigned
long
long
result
=
0ULL
;
size_t
prefix_chars
;
unsigned
int
rv
;
cp
=
_parse_integer_fixup_radix
(
startp
,
&
base
);
prefix_chars
=
cp
-
startp
;
if
(
prefix_chars
<
max_chars
)
{
rv
=
_parse_integer_limit
(
cp
,
base
,
&
result
,
max_chars
-
prefix_chars
);
/* FIXME */
cp
+=
(
rv
&
~
KSTRTOX_OVERFLOW
);
}
else
{
/* Field too short for prefix + digit, skip over without converting */
cp
=
startp
+
max_chars
;
}
if
(
endp
)
*
endp
=
(
char
*
)
cp
;
return
result
;
}
/**
* simple_strtoull - convert a string to an unsigned long long
* @cp: The start of the string
...
...
@@ -63,18 +88,7 @@
*/
unsigned
long
long
simple_strtoull
(
const
char
*
cp
,
char
**
endp
,
unsigned
int
base
)
{
unsigned
long
long
result
;
unsigned
int
rv
;
cp
=
_parse_integer_fixup_radix
(
cp
,
&
base
);
rv
=
_parse_integer
(
cp
,
base
,
&
result
);
/* FIXME */
cp
+=
(
rv
&
~
KSTRTOX_OVERFLOW
);
if
(
endp
)
*
endp
=
(
char
*
)
cp
;
return
result
;
return
simple_strntoull
(
cp
,
INT_MAX
,
endp
,
base
);
}
EXPORT_SYMBOL
(
simple_strtoull
);
...
...
@@ -109,6 +123,21 @@ long simple_strtol(const char *cp, char **endp, unsigned int base)
}
EXPORT_SYMBOL
(
simple_strtol
);
static
long
long
simple_strntoll
(
const
char
*
cp
,
size_t
max_chars
,
char
**
endp
,
unsigned
int
base
)
{
/*
* simple_strntoull() safely handles receiving max_chars==0 in the
* case cp[0] == '-' && max_chars == 1.
* If max_chars == 0 we can drop through and pass it to simple_strntoull()
* and the content of *cp is irrelevant.
*/
if
(
*
cp
==
'-'
&&
max_chars
>
0
)
return
-
simple_strntoull
(
cp
+
1
,
max_chars
-
1
,
endp
,
base
);
return
simple_strntoull
(
cp
,
max_chars
,
endp
,
base
);
}
/**
* simple_strtoll - convert a string to a signed long long
* @cp: The start of the string
...
...
@@ -119,10 +148,7 @@ EXPORT_SYMBOL(simple_strtol);
*/
long
long
simple_strtoll
(
const
char
*
cp
,
char
**
endp
,
unsigned
int
base
)
{
if
(
*
cp
==
'-'
)
return
-
simple_strtoull
(
cp
+
1
,
endp
,
base
);
return
simple_strtoull
(
cp
,
endp
,
base
);
return
simple_strntoll
(
cp
,
INT_MAX
,
endp
,
base
);
}
EXPORT_SYMBOL
(
simple_strtoll
);
...
...
@@ -3538,8 +3564,12 @@ int vsscanf(const char *buf, const char *fmt, va_list args)
str
=
skip_spaces
(
str
);
digit
=
*
str
;
if
(
is_sign
&&
digit
==
'-'
)
if
(
is_sign
&&
digit
==
'-'
)
{
if
(
field_width
==
1
)
break
;
digit
=
*
(
str
+
1
);
}
if
(
!
digit
||
(
base
==
16
&&
!
isxdigit
(
digit
))
...
...
@@ -3549,25 +3579,13 @@ int vsscanf(const char *buf, const char *fmt, va_list args)
break
;
if
(
is_sign
)
val
.
s
=
qualifier
!=
'L'
?
simple_strtol
(
str
,
&
next
,
base
)
:
simple_strtoll
(
str
,
&
next
,
base
);
val
.
s
=
simple_strntoll
(
str
,
field_width
>=
0
?
field_width
:
INT_MAX
,
&
next
,
base
);
else
val
.
u
=
qualifier
!=
'L'
?
simple_strtoul
(
str
,
&
next
,
base
)
:
simple_strtoull
(
str
,
&
next
,
base
);
if
(
field_width
>
0
&&
next
-
str
>
field_width
)
{
if
(
base
==
0
)
_parse_integer_fixup_radix
(
str
,
&
base
);
while
(
next
-
str
>
field_width
)
{
if
(
is_sign
)
val
.
s
=
div_s64
(
val
.
s
,
base
);
else
val
.
u
=
div_u64
(
val
.
u
,
base
);
--
next
;
}
}
val
.
u
=
simple_strntoull
(
str
,
field_width
>=
0
?
field_width
:
INT_MAX
,
&
next
,
base
);
switch
(
qualifier
)
{
case
'H'
:
/* that's 'hh' in format */
...
...
tools/testing/selftests/lib/Makefile
浏览文件 @
d8c03214
...
...
@@ -4,6 +4,6 @@
# No binaries, but make sure arg-less "make" doesn't trigger "run_tests"
all
:
TEST_PROGS
:=
printf.sh bitmap.sh prime_numbers.sh strscpy.sh
TEST_PROGS
:=
printf.sh bitmap.sh prime_numbers.sh s
canf.sh s
trscpy.sh
include
../lib.mk
tools/testing/selftests/lib/config
浏览文件 @
d8c03214
CONFIG_TEST_PRINTF=m
CONFIG_TEST_SCANF=m
CONFIG_TEST_BITMAP=m
CONFIG_PRIME_NUMBERS=m
CONFIG_TEST_STRSCPY=m
...
...
tools/testing/selftests/lib/scanf.sh
0 → 100755
浏览文件 @
d8c03214
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0
# Tests the scanf infrastructure using test_scanf kernel module.
$(
dirname
$0
)
/../kselftest/module.sh
"scanf"
test_scanf
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录