From mboxrd@z Thu Jan 1 00:00:00 1970 From: Markus Mayer Subject: [PATCH v5 0/7] lib: string: add functions to case-convert strings Date: Wed, 10 Aug 2016 14:04:50 -0700 Message-ID: <1470863097-21138-1-git-send-email-mmayer@broadcom.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: Andrew Morton , Al Viro , Rasmus Villemoes , Chris Metcalf , Kees Cook Cc: devel-gWbeCf7V1WCQmaza687I9mD2FQJk+8+b@public.gmane.org, linux-scsi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-pm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, speakup-UPO/6gOIxNZglr+F8WMZYdi2O/JbrIOy@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-acpi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, target-devel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org List-Id: linux-acpi@vger.kernel.org VGhpcyBzZXJpZXMgaW50cm9kdWNlcyBhIGZhbWlseSBvZiBnZW5lcmljIHN0cmluZyBjYXNlIGNv bnZlcnNpb24KZnVuY3Rpb25zLiBUaGlzIGtpbmQgb2YgZnVuY3Rpb25hbGl0eSBpcyBuZWVkZWQg aW4gc2V2ZXJhbCBwbGFjZXMgaW4KdGhlIGtlcm5lbC4gUmlnaHQgbm93LCBldmVyeWJvZHkgc2Vl bXMgdG8gYmUgaW1wbGVtZW50aW5nIHRoZWlyIG93bgpjb3B5IG9mIHRoaXMgZnVuY3Rpb25hbGl0 eS4KCkJhc2VkIG9uIHRoZSBkaXNjdXNzaW9uIG9mIHRoZSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRo aXMgc2VyaWVzWzFdIGFuZAp0aGUgdXNlIGNhc2VzIGZvdW5kIGluIHRoZSBrZXJuZWwsIGl0IGRv ZXMgbG9vayBsaWtlIGhhdmluZyBzZXZlcmFsCmZsYXZvdXJzIG9mIGNhc2UgY29udmVyc2lvbiBm dW5jdGlvbnMgaXMgYmVuZWZpY2lhbC4gVGhlIHVzZSBjYXNlcyBmYWxsCmludG8gdGhyZWUgY2F0 ZWdvcmllczoKICAgIC0gY29weWluZyBhIHN0cmluZyBhbmQgY29udmVydGluZyB0aGUgY2FzZSB3 aGlsZSBzcGVjaWZ5aW5nIGEKICAgICAgbWF4aW11bSBsZW5ndGggdG8gbWltaWMgc3RybGNweSgp CiAgICAtIGNvcHlpbmcgYSBzdHJpbmcgYW5kIGNvbnZlcnRpbmcgdGhlIGNhc2Ugd2l0aG91dCBz cGVjaWZ5aW5nIGEKICAgICAgbGVuZ3RoIHRvIG1pbWljIHN0cmNweSgpCiAgICAtIGNvbnZlcnRp bmcgdGhlIGNhc2Ugb2YgYSBzdHJpbmcgaW4tcGxhY2UgKGkuZS4gbW9kaWZ5aW5nIHRoZQogICAg ICBzdHJpbmcgdGhhdCB3YXMgcGFzc2VkIGluKQoKQ29uc2VxdWVudGx5LCBJIGFtIHByb3Bvc2lu ZyB0aGVzZSBuZXcgZnVuY3Rpb25zOgogICAgaW50IHN0cmxjcHl0b3VwcGVyKGNoYXIgKmRzdCwg Y29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVuKTsKICAgIGludCBzdHJsY3B5dG9sb3dlcihjaGFy ICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGxlbik7CiAgICB2b2lkIHN0cmNweXRvdXBw ZXIoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMpOwogICAgdm9pZCBzdHJjcHl0b2xvd2VyKGNo YXIgKmRzdCwgY29uc3QgY2hhciAqc3JjKTsKICAgIHZvaWQgc3RydG91cHBlcihjaGFyICpzKTsK ICAgIHZvaWQgc3RydG9sb3dlcihjaGFyICpzKTsKClNldmVyYWwgZHJpdmVycyBhcmUgYmVpbmcg bW9kaWZpZWQgdG8gbWFrZSB1c2Ugb2YgdGhlIGZ1bmN0aW9ucyBhYm92ZS4KQW5vdGhlciBkcml2 ZXIgdGhhdCBhbHNvIG1ha2VzIHVzZSBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkgd2lsbCBiZQpzdWJt aXR0ZWQgdXBzdHJlYW0gc2hvcnRseSwgd2hpY2ggcHJvbXB0ZWQgdGhpcyB3aG9sZSBleGVyY2lz ZS4KClRoZSBjaGFuZ2VzIG1hZGUgaGVyZSBoYXZlIGJlZW4gY29tcGlsZS10ZXN0ZWQsIGJ1dCBu b3QgdHJpZWQgb3V0LCBkdWUKdG8gbGFjayBvZiByZXF1aXJlZCBoYXJkd2FyZS4KCkNoYW5nZXMg c2luY2UgdjQ6CiAgLSByZWJhc2VkIG9uIDQuOC1yYzE7IHRoaXMgb25seSBhZmZlY3RzIHBhdGNo IDYvNyAoZ2sxMDQpIGFuZCBvbmx5IHRoZQogICAgcGF0Y2ggY29udGV4dCwgbm90IHRoZSBwYXRj aCBpdHNlbGYKICAtIGFkZGVkIGFuIEFDSyB0byBwYXRjaCA0LzcgKHNwZWFrdXApCiAgLSBhZGRl ZCBhbiBBQ0sgdG8gcGF0Y2ggNy83IChwb3dlcl9zdXBwbHkpCgpDaGFuZ2VzIHNpbmNlIHYzOgog IC0gc3RybGNweXRvdXBwZXIoKSBhbmQgc3RybGNweXRvbG93ZXIoKSByZXR1cm4gbGVuZ3RoIG9m IGRlc3RpbmF0aW9uCiAgICBvciAtRTJCSUcgKHNlZSBbMl0pCiAgLSB3ZSB1c2UgfihzaXplX3Qp MCBpbnN0ZWFkIG9mIC0xIHRvIGNvcHkgc3RyaW5ncyBvZiBhcmJpdHJhcnkgbGVuZ3RoCiAgICBp biBzdHJjcHl0byooKSBhbmQgc3RydG8qKCkKICAtIEEgZmV3IEFDS3MgYWRkZWQKCkNoYW5nZXMg c2luY2UgdjI6CiAgLSB1c2Ugc3RybGNweSgpIHNlbWFudGljcyBub3Qgc3RybmNweSgpIHNlbWFu dGljcywgaS5lLiBndWFyYW50ZWUKICAgIE5VTEwgdGVybWluYXRpb24KICAtIGFzIGEgcmVzdWx0 IHN0cm5jcHl0bzx1cHBlcnxsb3dlcj4gYXJlIG5vdyBjYWxsZWQKICAgIHN0cmxjcHl0bzx1cHBl cnxsb3dlcj4KICAtIG1ha2UgZnVuY3Rpb25zIHZvaWQKICAtIHVzZSBsZW4gPT0gLTEgKFNJWkVf TUFYKSBhcyBuby1saW1pdCBpbmRpY2F0b3IgcmF0aGVyIHRoZW4gbGVuID09IDAKICAtIGNoYW5n ZSBQQVRDSCAyLzcgdG8gbWF0Y2ggc3RybGNweSgpIHNlbWFudGljcwogIC0gY2hhbmdlIFBBVENI IDQvNyB0byBtYXRjaCBzdHJsY3B5KCkgc2VtYW50aWNzCgpDaGFuZ2VzIHNpbmNlIHYxOgogIC0g ZXhwYW5kZWQgc3RydG9sb3dlcigpIGludG8gYSBmYW1pbHkgb2YgZnVuY3Rpb25zIHRoYXQgY292 ZXIgdXNlCiAgICBjYXNlcyB3aGVuIGEgbGVuZ3RoIGFyZ3VtZW50IGlzIG9yIGlzbid0IHJlcXVp cmVkIGFuZCB0aGF0IHN1cHBvcnQKICAgIGNvcHlpbmcgdGhlIHN0cmluZyBpbnRvIGEgbmV3IGJ1 ZmZlciBvciBjaGFuZ2luZyBpdCBpbi1wbGFjZSAKICAtIGNoYW5nZWQgdGhlIGZ1bmN0aW9uIHNl bWFudGljcyB0byByZXR1cm4gYSBwb2ludGVyIHRvIHRoZQogICAgdGVybWluYXRpbmcgJ1wwJyBj aGFyYWN0ZXIgb2YgdGhlIG1vZGlmaWVkIHN0cmluZwogIC0gYWRkZWQgc3RydG91cHBlcigpIGZ1 bmN0aW9uYWxpdHkgbWlycm9yaW5nIHRoZSBhYm92ZQogIC0gZHJvcHBlZCB0aGUgQUNQSUNBIHBh dGNoLCBzaW5jZSB0aGF0IGNvZGUgaXMgT1MgaW5kZXBlbmRlbnQgYW5kCiAgICBjYW4ndCByZWx5 IG9uIGEgTGludXggbGlicmFyeSBmdW5jdGlvbiAoc2VlIFszXSkKICAtIEFkZGVkIHR3byBuZXcg cGF0Y2hlcyByZXBsYWNpbmcgc3RydG91cHBlcigpIGltcGxlbWVudGF0aW9ucwoKWzFdIGh0dHBz Oi8vbGttbC5vcmcvbGttbC8yMDE2LzYvMzAvNzI3ClsyXSBodHRwczovL2xrbWwub3JnL2xrbWwv MjAxNi83LzEwLzQKWzNdIGh0dHBzOi8vbGttbC5vcmcvbGttbC8yMDE2LzcvMS85CgpNYXJrdXMg TWF5ZXIgKDcpOgogIGxpYjogc3RyaW5nOiBhZGQgZnVuY3Rpb25zIHRvIGNhc2UtY29udmVydCBz dHJpbmdzCiAgZHJtL25vdXZlYXUvY29yZTogbWFrZSB1c2Ugb2YgbmV3IHN0cmxjcHl0b2xvd2Vy KCkgZnVuY3Rpb24KICBBQ1BJIC8gZGV2aWNlX3N5c2ZzOiBtYWtlIHVzZSBvZiBuZXcgc3RydG9s b3dlcigpIGZ1bmN0aW9uCiAgc3RhZ2luZzogc3BlYWt1cDogcmVwbGFjZSBzcGtfc3RybHdyKCkg d2l0aCBzdHJsY3B5dG9sb3dlcigpCiAgaXNjc2ktdGFyZ2V0OiByZXBsYWNlIGlzY3NpX2luaXRp YXRvcm5hbWVfdG9sb3dlcigpIHdpdGggc3RydG9sb3dlcigpCiAgZHJtL25vdXZlYXUvZmlmby9n azEwNDogbWFrZSB1c2Ugb2YgbmV3IHN0cmNweXRvdXBwZXIoKSBmdW5jdGlvbgogIHBvd2VyX3N1 cHBseTogbWFrZSB1c2Ugb2YgbmV3IHN0cmNweXRvdXBwZXIoKSBmdW5jdGlvbgoKIGRyaXZlcnMv YWNwaS9kZXZpY2Vfc3lzZnMuYyAgICAgICAgICAgICAgICAgICAgICB8ICA0ICstLQogZHJpdmVy cy9ncHUvZHJtL25vdXZlYXUvbnZrbS9jb3JlL2Zpcm13YXJlLmMgICAgIHwgIDkgKy0tLS0KIGRy aXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2ZpZm8vZ2sxMDQuYyB8ICA1ICstLQog ZHJpdmVycy9wb3dlci9wb3dlcl9zdXBwbHlfc3lzZnMuYyAgICAgICAgICAgICAgIHwgMTMgKysr LS0tLQogZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAva29iamVjdHMuYyAgICAgICAgICAgICAgIHwg IDMgKy0KIGRyaXZlcnMvc3RhZ2luZy9zcGVha3VwL21haW4uYyAgICAgICAgICAgICAgICAgICB8 ICAzICstCiBkcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9zcGVha3VwLmggICAgICAgICAgICAgICAg fCAgMSAtCiBkcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC92YXJoYW5kbGVycy5jICAgICAgICAgICAg fCAxMiAtLS0tLS0tCiBkcml2ZXJzL3RhcmdldC9pc2NzaS9pc2NzaV90YXJnZXRfbmVnby5jICAg ICAgICAgfCAxNyArLS0tLS0tLS0KIGluY2x1ZGUvbGludXgvc3RyaW5nLmggICAgICAgICAgICAg ICAgICAgICAgICAgICB8IDQwICsrKysrKysrKysrKysrKysrKysrKwogbGliL3N0cmluZy5jICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNDYgKysrKysrKysrKysrKysrKysr KysrKysrCiAxMSBmaWxlcyBjaGFuZ2VkLCA5OCBpbnNlcnRpb25zKCspLCA1NSBkZWxldGlvbnMo LSkKCi0tIAoyLjcuNAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KTm91dmVhdSBtYWlsaW5nIGxpc3QKTm91dmVhdUBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9ub3V2ZWF1Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933333AbcHJVGA (ORCPT ); Wed, 10 Aug 2016 17:06:00 -0400 Received: from mail-qt0-f178.google.com ([209.85.216.178]:34946 "EHLO mail-qt0-f178.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933131AbcHJVFR (ORCPT ); Wed, 10 Aug 2016 17:05:17 -0400 From: Markus Mayer To: Andrew Morton , Al Viro , Rasmus Villemoes , Chris Metcalf , Kees Cook Cc: Markus Mayer , dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-acpi@vger.kernel.org, speakup@linux-speakup.org, devel@driverdev.osuosl.org, linux-scsi@vger.kernel.org, target-devel@vger.kernel.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 0/7] lib: string: add functions to case-convert strings Date: Wed, 10 Aug 2016 14:04:50 -0700 Message-Id: <1470863097-21138-1-git-send-email-mmayer@broadcom.com> X-Mailer: git-send-email 2.7.4 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This series introduces a family of generic string case conversion functions. This kind of functionality is needed in several places in the kernel. Right now, everybody seems to be implementing their own copy of this functionality. Based on the discussion of the previous version of this series[1] and the use cases found in the kernel, it does look like having several flavours of case conversion functions is beneficial. The use cases fall into three categories: - copying a string and converting the case while specifying a maximum length to mimic strlcpy() - copying a string and converting the case without specifying a length to mimic strcpy() - converting the case of a string in-place (i.e. modifying the string that was passed in) Consequently, I am proposing these new functions: int strlcpytoupper(char *dst, const char *src, size_t len); int 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); Several drivers are being modified to make use of the functions above. Another driver that also makes use of this functionality will be submitted upstream shortly, which prompted this whole exercise. The changes made here have been compile-tested, but not tried out, due to lack of required hardware. Changes since v4: - rebased on 4.8-rc1; this only affects patch 6/7 (gk104) and only the patch context, not the patch itself - added an ACK to patch 4/7 (speakup) - added an ACK to patch 7/7 (power_supply) Changes since v3: - strlcpytoupper() and strlcpytolower() return length of destination or -E2BIG (see [2]) - we use ~(size_t)0 instead of -1 to copy strings of arbitrary length in strcpyto*() and strto*() - A few ACKs added Changes since v2: - use strlcpy() semantics not strncpy() semantics, i.e. guarantee NULL termination - as a result strncpyto are now called strlcpyto - make functions void - use len == -1 (SIZE_MAX) as no-limit indicator rather then len == 0 - change PATCH 2/7 to match strlcpy() semantics - change PATCH 4/7 to match strlcpy() semantics Changes since v1: - expanded strtolower() into a family of functions that cover use cases when a length argument is or isn't required and that support copying the string into a new buffer or changing it in-place - changed the function semantics to return a pointer to the terminating '\0' character of the modified string - added strtoupper() functionality mirroring the above - dropped the ACPICA patch, since that code is OS independent and can't rely on a Linux library function (see [3]) - Added two new patches replacing strtoupper() implementations [1] https://lkml.org/lkml/2016/6/30/727 [2] https://lkml.org/lkml/2016/7/10/4 [3] https://lkml.org/lkml/2016/7/1/9 Markus Mayer (7): lib: string: add functions to case-convert strings drm/nouveau/core: make use of new strlcpytolower() function ACPI / device_sysfs: make use of new strtolower() function staging: speakup: replace spk_strlwr() with strlcpytolower() iscsi-target: replace iscsi_initiatorname_tolower() with strtolower() drm/nouveau/fifo/gk104: make use of new strcpytoupper() function power_supply: make use of new strcpytoupper() function drivers/acpi/device_sysfs.c | 4 +-- drivers/gpu/drm/nouveau/nvkm/core/firmware.c | 9 +---- drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c | 5 +-- drivers/power/power_supply_sysfs.c | 13 +++---- drivers/staging/speakup/kobjects.c | 3 +- drivers/staging/speakup/main.c | 3 +- drivers/staging/speakup/speakup.h | 1 - drivers/staging/speakup/varhandlers.c | 12 ------- drivers/target/iscsi/iscsi_target_nego.c | 17 +-------- include/linux/string.h | 40 +++++++++++++++++++++ lib/string.c | 46 ++++++++++++++++++++++++ 11 files changed, 98 insertions(+), 55 deletions(-) -- 2.7.4