diff options
author | 2023-11-03 15:31:57 +0100 | |
---|---|---|
committer | 2023-11-03 15:31:57 +0100 | |
commit | d1f6be54eafe177bdea6d42b4ef3b45bb00660b3 (patch) | |
tree | 5b40ca3a87c7e98b3b740615b56fb22800da0734 /lib | |
parent | Merge tag 'pm-6.7-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm (diff) | |
parent | cpufreq: qcom-nvmem: Introduce cpufreq for ipq95xx (diff) | |
download | wireguard-linux-d1f6be54eafe177bdea6d42b4ef3b45bb00660b3.tar.xz wireguard-linux-d1f6be54eafe177bdea6d42b4ef3b45bb00660b3.zip |
Merge tag 'cpufreq-arm-updates-6.7-part2' of git://git.kernel.org/pub/scm/linux/kernel/git/vireshk/pm
Merge ARM cpufreq updates for 6.7 (part 2) from Viresh kumar:
"- Add support for several Qualcomm SoC versions (Robert Marko and
Varadarajan Narayanan)."
* tag 'cpufreq-arm-updates-6.7-part2' of git://git.kernel.org/pub/scm/linux/kernel/git/vireshk/pm:
cpufreq: qcom-nvmem: Introduce cpufreq for ipq95xx
cpufreq: qcom-nvmem: Enable cpufreq for ipq53xx
cpufreq: qcom-nvmem: add support for IPQ8074
soc: qcom: socinfo: Add IDs for IPQ8174 family
dt-bindings: arm: qcom,ids: Add IDs for IPQ8174 family
dt-bindings: qcom: geni-se: Allow dma-coherent
soc: qcom: socinfo: Add SoC ID for QCM6490
dt-bindings: arm: qcom,ids: Add SoC ID for QCM6490
soc: qcom: socinfo: Add SM8550-adjacent PMICs
soc: qcom: wcnss_ctrl: Remove redundant initialization owner in wcnss_ctrl_driver
soc: qcom: socinfo: Add Soc ID for SM7150P
dt-bindings: arm: qcom,ids: Add Soc ID for SM7150P
firmware: Add support for Qualcomm UEFI Secure Application
firmware: qcom_scm: Add support for Qualcomm Secure Execution Environment SCM interface
lib/ucs2_string: Add UCS-2 strscpy function
Diffstat (limited to 'lib')
-rw-r--r-- | lib/ucs2_string.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/lib/ucs2_string.c b/lib/ucs2_string.c index 0a559a42359b..9308bcfb2ad5 100644 --- a/lib/ucs2_string.c +++ b/lib/ucs2_string.c @@ -32,6 +32,58 @@ ucs2_strsize(const ucs2_char_t *data, unsigned long maxlength) } EXPORT_SYMBOL(ucs2_strsize); +/** + * ucs2_strscpy() - Copy a UCS2 string into a sized buffer. + * + * @dst: Pointer to the destination buffer where to copy the string to. + * @src: Pointer to the source buffer where to copy the string from. + * @count: Size of the destination buffer, in UCS2 (16-bit) characters. + * + * Like strscpy(), only for UCS2 strings. + * + * Copy the source string @src, or as much of it as fits, into the destination + * buffer @dst. The behavior is undefined if the string buffers overlap. The + * destination buffer @dst is always NUL-terminated, unless it's zero-sized. + * + * Return: The number of characters copied into @dst (excluding the trailing + * %NUL terminator) or -E2BIG if @count is 0 or @src was truncated due to the + * destination buffer being too small. + */ +ssize_t ucs2_strscpy(ucs2_char_t *dst, const ucs2_char_t *src, size_t count) +{ + long res; + + /* + * Ensure that we have a valid amount of space. We need to store at + * least one NUL-character. + */ + if (count == 0 || WARN_ON_ONCE(count > INT_MAX / sizeof(*dst))) + return -E2BIG; + + /* + * Copy at most 'count' characters, return early if we find a + * NUL-terminator. + */ + for (res = 0; res < count; res++) { + ucs2_char_t c; + + c = src[res]; + dst[res] = c; + + if (!c) + return res; + } + + /* + * The loop above terminated without finding a NUL-terminator, + * exceeding the 'count': Enforce proper NUL-termination and return + * error. + */ + dst[count - 1] = 0; + return -E2BIG; +} +EXPORT_SYMBOL(ucs2_strscpy); + int ucs2_strncmp(const ucs2_char_t *a, const ucs2_char_t *b, size_t len) { |