2021-08-01 23:09:24

by Simon Glass

[permalink] [raw]
Subject: [PATCH] checkpatch: Support wide strings

From: Joe Perches <[email protected]>

Allow prefixing typical strings with L for wide strings and u for
unicode strings.

Signed-off-by: Joe Perches <[email protected]>
Signed-off-by: Simon Glass <[email protected]>
---

scripts/checkpatch.pl | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 461d4221e4a4a1..a65753c05a6936 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -501,7 +501,7 @@ our $Binary = qr{(?i)0b[01]+$Int_type?};
our $Hex = qr{(?i)0x[0-9a-f]+$Int_type?};
our $Int = qr{[0-9]+$Int_type?};
our $Octal = qr{0[0-7]+$Int_type?};
-our $String = qr{"[X\t]*"};
+our $String = qr{(?:\b[Lu])?"[X\t]*"};
our $Float_hex = qr{(?i)0x[0-9a-f]+p-?[0-9]+[fl]?};
our $Float_dec = qr{(?i)(?:[0-9]+\.[0-9]*|[0-9]*\.[0-9]+)(?:e-?[0-9]+)?[fl]?};
our $Float_int = qr{(?i)[0-9]+e-?[0-9]+[fl]?};
@@ -6132,7 +6132,8 @@ sub process {
}

# concatenated string without spaces between elements
- if ($line =~ /$String[A-Za-z0-9_]/ || $line =~ /[A-Za-z0-9_]$String/) {
+ if ($line =~ /$String[A-Z_]/ ||
+ ($line =~ /([A-Za-z0-9_]+)$String/ && $1 !~ /^[Lu]$/)) {
if (CHK("CONCATENATED_STRING",
"Concatenated strings should use spaces between elements\n" . $herecurr) &&
$fix) {
@@ -6145,7 +6146,7 @@ sub process {
}

# uncoalesced string fragments
- if ($line =~ /$String\s*"/) {
+ if ($line =~ /$String\s*[Lu]?"/) {
if (WARN("STRING_FRAGMENTS",
"Consecutive strings are generally better as a single string\n" . $herecurr) &&
$fix) {
--
2.32.0.554.ge1b32706d8-goog



2021-08-02 00:01:52

by Joe Perches

[permalink] [raw]
Subject: Re: [PATCH] checkpatch: Support wide strings

On Sun, 2021-08-01 at 17:07 -0600, Simon Glass wrote:
> From: Joe Perches <[email protected]>
>
> Allow prefixing typical strings with L for wide strings and u for
> unicode strings.


I believe the kernel didn't need this when I wrote it.
There were no wide or unicode strings in the kernel sources.

But looking now, there _are_ wide strings in the kernel sources.

So:

Acked-by: Joe Perches <[email protected]>

(with some false positives, but hey it shows some...)

$ git grep -P '\b[Lu]"[A-Za-z0-9 \.]*?"'
Documentation/sphinx/cdomain.py:u"""
Documentation/sphinx/cdomain.py: u"""Handles signatures of function-like macros.
Documentation/sphinx/kernel_abi.py:u"""
Documentation/sphinx/kernel_abi.py: u"""KernelABI (``kernel-abi``) directive"""
Documentation/sphinx/kernel_abi.py: u"""Run command ``cmd`` and return it's stdout as unicode."""
Documentation/sphinx/kernel_feat.py:u"""
Documentation/sphinx/kernel_feat.py: u"""KernelFeat (``kernel-feat``) directive"""
Documentation/sphinx/kernel_feat.py: u"""Run command ``cmd`` and return it's stdout as unicode."""
Documentation/sphinx/kernel_include.py:u"""
Documentation/sphinx/kernel_include.py: u"""KernelInclude (``kernel-include``) directive"""
Documentation/sphinx/kfigure.py:u"""
Documentation/sphinx/kfigure.py: u"""
Documentation/sphinx/kfigure.py: u"""KernelImage directive
Documentation/sphinx/kfigure.py: u"""KernelImage directive
Documentation/sphinx/kfigure.py: u"""KernelRender directive
Documentation/sphinx/load_config.py: u"""Load an additional configuration file into *namespace*.
Documentation/sphinx/maintainers_include.py:u"""
Documentation/sphinx/maintainers_include.py: u"""MaintainersInclude (``maintainers-include``) directive"""
Documentation/sphinx/rstFlatTable.py:u"""
Documentation/sphinx/rstFlatTable.py: u"""FlatTable (``flat-table``) directive"""
Documentation/sphinx/rstFlatTable.py: u"""Builds a table from a double-stage list"""
Documentation/sphinx/rstFlatTable.py: u"""parses the node from a :py:class:`FlatTable` directive's body"""
Documentation/sphinx/rstFlatTable.py: u"""Round off the table definition.
arch/x86/platform/efi/quirks.c:static const efi_char16_t efi_dummy_name[] = L"DUMMY";
arch/x86/xen/efi.c: efi_systab_xen.fw_vendor = __pa_symbol(L"UNKNOWN");
arch/x86/xen/efi.c: status = efi.get_variable(L"MokSBStateRT", &shim_guid,
drivers/firmware/efi/libstub/secureboot.c:static const efi_char16_t shim_MokSBState_name[] = L"MokSBState";
drivers/firmware/efi/libstub/tpm.c: L"MemoryOverwriteRequestControl";
drivers/firmware/efi/libstub/x86-stub.c:static const efi_char16_t apple[] = L"Apple";
drivers/input/keyboard/applespi.c:#define EFI_BL_LEVEL_NAME L"KeyboardBacklightLevel"
drivers/net/wireless/intel/iwlwifi/fw/uefi.h:#define IWL_UEFI_OEM_PNVM_NAME L"UefiCnvWlanOemSignedPnvm"
drivers/net/wireless/intel/iwlwifi/fw/uefi.h:#define IWL_UEFI_REDUCED_POWER_NAME L"UefiCnvWlanReducedPower"
drivers/platform/mellanox/mlxbf-tmfifo.c:static efi_char16_t mlxbf_tmfifo_efi_name[] = L"RshimMacAddr";
fs/ceph/file.c: dout("aio_write %p %llx.%llx %llu~%u" "got EOLDSNAPC, retrying\n",
include/linux/efi.h: status = get_var(L"SecureBoot", &EFI_GLOBAL_VARIABLE_GUID, NULL, &size,
include/linux/efi.h: get_var(L"SetupMode", &EFI_GLOBAL_VARIABLE_GUID, NULL, &size, &setupmode);
security/integrity/platform_certs/load_uefi.c: status = efi.get_variable(L"MokIgnoreDB", &guid, NULL, &size, &db);
security/integrity/platform_certs/load_uefi.c: mok = get_cert_list(L"MokListRT", &mok_var, &moksize, &status);
security/integrity/platform_certs/load_uefi.c: db = get_cert_list(L"db", &secure_var, &dbsize, &status);
security/integrity/platform_certs/load_uefi.c: dbx = get_cert_list(L"dbx", &secure_var, &dbxsize, &status);
security/integrity/platform_certs/load_uefi.c: mokx = get_cert_list(L"MokListXRT", &mok_var, &mokxsize, &status);