public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Luis de Bethencourt <luisbg@osg.samsung.com>
To: Markus Mayer <mmayer@broadcom.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Al Viro <viro@zeniv.linux.org.uk>,
	Rasmus Villemoes <linux@rasmusvillemoes.dk>,
	Chris Metcalf <cmetcalf@ezchip.com>,
	Kees Cook <keescook@chromium.org>
Cc: devel@driverdev.osuosl.org, linux-scsi@vger.kernel.org,
	linux-pm@vger.kernel.org, nouveau@lists.freedesktop.org,
	speakup@linux-speakup.org, linux-kernel@vger.kernel.org,
	dri-devel@lists.freedesktop.org, linux-acpi@vger.kernel.org,
	target-devel@vger.kernel.org
Subject: Re: [PATCH v3 1/7] lib: string: add functions to case-convert strings
Date: Sat, 09 Jul 2016 13:04:54 +0100	[thread overview]
Message-ID: <5780E866.8000001@osg.samsung.com> (raw)
In-Reply-To: <1468017794-4818-2-git-send-email-mmayer@broadcom.com>

On 08/07/16 23:43, Markus Mayer wrote:
> Add a collection of generic functions to convert strings to lowercase
> or uppercase.
> 
> Changing the case of a string (with or without copying it first) seems
> to be a recurring requirement in the kernel that is currently being
> solved by several duplicated implementations doing the same thing. This
> change aims at reducing this code duplication.
> 
> The new functions are
>     void strlcpytoupper(char *dst, const char *src, size_t len);
>     void strlcpytolower(char *dst, const char *src, size_t len);
>     void strcpytoupper(char *dst, const char *src);
>     void strcpytolower(char *dst, const char *src);
>     void strtoupper(char *s);
>     void strtolower(char *s);
> 
> The "str[l]cpyto*" versions of the function take a destination string
> and a source string as arguments. The "strlcpyto*" versions additionally
> take a length argument like strlcpy() itself. Lastly, the strto*
> functions take a single string argument and modify the passed-in string.
> 
> Like strlcpy(), and unlike strncpy(), the functions guarantee NULL
> termination of the destination string.
> 
> Signed-off-by: Markus Mayer <mmayer@broadcom.com>
> ---
>  include/linux/string.h | 40 ++++++++++++++++++++++++++++++++++++++++
>  lib/string.c           | 38 ++++++++++++++++++++++++++++++++++++++
>  2 files changed, 78 insertions(+)
> 
> diff --git a/include/linux/string.h b/include/linux/string.h
> index 26b6f6a..36c9d14 100644
> --- a/include/linux/string.h
> +++ b/include/linux/string.h
> @@ -116,6 +116,8 @@ extern void * memchr(const void *,int,__kernel_size_t);
>  #endif
>  void *memchr_inv(const void *s, int c, size_t n);
>  char *strreplace(char *s, char old, char new);
> +extern void strlcpytoupper(char *dst, const char *src, size_t len);
> +extern void strlcpytolower(char *dst, const char *src, size_t len);
>  
>  extern void kfree_const(const void *x);
>  
> @@ -169,4 +171,42 @@ static inline const char *kbasename(const char *path)
>  	return tail ? tail + 1 : path;
>  }
>  
> +/**
> + * strcpytoupper - Copy string and convert to uppercase.
> + * @dst: The buffer to store the result.
> + * @src: The string to convert to uppercase.
> + */
> +static inline void strcpytoupper(char *dst, const char *src)
> +{
> +	strlcpytoupper(dst, src, -1);
> +}
> +

Why not use SIZE_MAX instead of -1?

> +/**
> + * strcpytolower - Copy string and convert to lowercase.
> + * @dst: The buffer to store the result.
> + * @src: The string to convert to lowercase.
> + */
> +static inline void strcpytolower(char *dst, const char *src)
> +{
> +	strlcpytolower(dst, src, -1);
> +}
> +

Same here, and the 2 below :)

Thanks Markus,
Luis

> +/**
> + * strtoupper - Convert string to uppercase.
> + * @s: The string to operate on.
> + */
> +static inline void strtoupper(char *s)
> +{
> +	strlcpytoupper(s, s, -1);
> +}
> +
> +/**
> + * strtolower - Convert string to lowercase.
> + * @s: The string to operate on.
> + */
> +static inline void strtolower(char *s)
> +{
> +	strlcpytolower(s, s, -1);
> +}
> +
>  #endif /* _LINUX_STRING_H_ */
> diff --git a/lib/string.c b/lib/string.c
> index ed83562..fd8c427 100644
> --- a/lib/string.c
> +++ b/lib/string.c
> @@ -952,3 +952,41 @@ char *strreplace(char *s, char old, char new)
>  	return s;
>  }
>  EXPORT_SYMBOL(strreplace);
> +
> +/**
> + * strlcpytoupper - Copy a length-limited string and convert to uppercase.
> + * @dst: The buffer to store the result.
> + * @src: The string to convert to uppercase.
> + * @len: Maximum string length. May be SIZE_MAX (-1) to set no limit.
> + */
> +void strlcpytoupper(char *dst, const char *src, size_t len)
> +{
> +	size_t i;
> +
> +	if (!len)
> +		return;
> +
> +	for (i = 0; i < len && src[i]; ++i)
> +		dst[i] = toupper(src[i]);
> +	dst[i < len ? i : i - 1] = '\0';
> +}
> +EXPORT_SYMBOL(strlcpytoupper);
> +
> +/**
> + * strlcpytolower - Copy a length-limited string and convert to lowercase.
> + * @dst: The buffer to store the result.
> + * @src: The string to convert to lowercase.
> + * @len: Maximum string length. May be SIZE_MAX (-1) to set no limit.
> + */
> +void strlcpytolower(char *dst, const char *src, size_t len)
> +{
> +	size_t i;
> +
> +	if (!len)
> +		return;
> +
> +	for (i = 0; i < len && src[i]; ++i)
> +		dst[i] = tolower(src[i]);
> +	dst[i < len ? i : i - 1] = '\0';
> +}
> +EXPORT_SYMBOL(strlcpytolower);
> 

  reply	other threads:[~2016-07-09 12:05 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-08 22:43 [PATCH v3 0/7] lib: string: add functions to case-convert strings Markus Mayer
2016-07-08 22:43 ` [PATCH v3 1/7] " Markus Mayer
2016-07-09 12:04   ` Luis de Bethencourt [this message]
2016-07-09 15:30     ` Markus Mayer
2016-07-11 22:46       ` Markus Mayer
2016-07-13 17:19         ` Luis de Bethencourt
2016-07-13 22:26           ` Markus Mayer
2016-07-13 22:53             ` Luis de Bethencourt
2016-07-13 23:04               ` Markus Mayer
2016-07-08 22:43 ` [PATCH v3 2/7] drm/nouveau/core: make use of new strlcpytolower() function Markus Mayer
2016-07-08 22:43 ` [PATCH v3 3/7] ACPI / device_sysfs: make use of new strtolower() function Markus Mayer
2016-07-08 23:22   ` Rafael J. Wysocki
2016-07-08 22:43 ` [PATCH v3 4/7] staging: speakup: replace spk_strlwr() with strlcpytolower() Markus Mayer
2016-07-13 20:57   ` Samuel Thibault
2016-07-08 22:43 ` [PATCH v3 5/7] iscsi-target: replace iscsi_initiatorname_tolower() with strtolower() Markus Mayer
2016-07-20 21:16   ` Nicholas A. Bellinger
2016-07-20 21:17     ` Nicholas A. Bellinger
2016-07-20 21:19       ` Markus Mayer
2016-07-08 22:43 ` [PATCH v3 6/7] drm/nouveau/fifo/gk104: make use of new strcpytoupper() function Markus Mayer
2016-07-08 22:43 ` [PATCH v3 7/7] power_supply: " Markus Mayer
2016-07-10  3:13 ` [PATCH v3 0/7] lib: string: add functions to case-convert strings Chris Metcalf
2016-07-10  4:11   ` Markus Mayer
2016-07-13 22:52     ` Markus Mayer
2016-07-20 20:28       ` Markus Mayer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5780E866.8000001@osg.samsung.com \
    --to=luisbg@osg.samsung.com \
    --cc=akpm@linux-foundation.org \
    --cc=cmetcalf@ezchip.com \
    --cc=devel@driverdev.osuosl.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=keescook@chromium.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=linux@rasmusvillemoes.dk \
    --cc=mmayer@broadcom.com \
    --cc=nouveau@lists.freedesktop.org \
    --cc=speakup@linux-speakup.org \
    --cc=target-devel@vger.kernel.org \
    --cc=viro@zeniv.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox