From patchwork Sun Mar 3 17:20:50 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heiner Kallweit X-Patchwork-Id: 1050897 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="OYXZhAi9"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44C9253sT6z9s4Y for ; Mon, 4 Mar 2019 04:22:05 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726521AbfCCRWD (ORCPT ); Sun, 3 Mar 2019 12:22:03 -0500 Received: from mail-wr1-f67.google.com ([209.85.221.67]:38968 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726439AbfCCRWD (ORCPT ); Sun, 3 Mar 2019 12:22:03 -0500 Received: by mail-wr1-f67.google.com with SMTP id l5so2983379wrw.6 for ; Sun, 03 Mar 2019 09:22:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:from:to:cc:references:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=YrBv6/aCT7/1yukoKm0kePbdZO59zClqXv0Cn9wsQT0=; b=OYXZhAi9hctr7ogf7vGVMxgo7LHVJ062D6ceI6pd1yLWDsn/hPM1TPH6l1lK9rj1jl tX57g4Ywqbk8i45VFIYYxLa3hUCP40AADtOjfA69PHkHJ/+Pc+XeCL14FgwENDxTafZv fGMk2t+KDUgKCreaEcMnvNgiHA+di10lMbxgFI6z6jw+RPxnXwRxbLYDKHlPbdyPqQxM wlO+WhGYyoz5/h1dpmoZUON9gudkFv4To2RZJVP4UBUPZA2XetYYLaMTcB+pi+pwhb9b s3Q7qGa8bduKX0XqhP/Ui8TCHxEhKVQjp9A+GelOzDkLytW6VU+M/NuxNfoRBCwCdNdA Bncg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:references:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=YrBv6/aCT7/1yukoKm0kePbdZO59zClqXv0Cn9wsQT0=; b=gKsp8mtAhhCwO4HYRTfGSIfKktuQg2lRgeuSHkrrL7jTtSV2KCALFDCcp7Olin9M9c MX5BU07eGZYXe7v1OqogJ1OlPgjtC/cyCeY86MJh/xyqitfJioY5NJjrAXf/WxkWRb4f ocks041V2mBLxbxtWHseGXJ0b7CtLFmoS5IZ8KEYUzTekDqt1o09I47eqwdK4xWCeWQ+ UbKOhIXeO9CvwZVteepneCDZIcwZSFhNZOTKKwqeGRJ0zYWhqAXraTK6ofoDUPl3VGw0 9zhCznr1DotHyJC1dEZh0zyJ30KaSiJq3GKIskI/N4TJtEgCyRQNGMun8PViM80l/KJA 1Beg== X-Gm-Message-State: APjAAAXhNIwwUh72wdwKJBfKf95UXrLEveSjPQrKf5jVgcag/YVQIfbX BRxZCfMuS0eTtWoQSC28tAhnHYPJ X-Google-Smtp-Source: APXvYqyG4q5qC9pMJMnyLu/zaxBukNIDG8ElLzMW2oNZrlXV5DiC4OM9QMqwgLhC9QcdgXoxvsJZ9Q== X-Received: by 2002:a5d:6446:: with SMTP id d6mr10406192wrw.72.1551633720976; Sun, 03 Mar 2019 09:22:00 -0800 (PST) Received: from ?IPv6:2003:ea:8bf1:e200:35a8:f48d:4b19:96c9? (p200300EA8BF1E20035A8F48D4B1996C9.dip0.t-ipconnect.de. [2003:ea:8bf1:e200:35a8:f48d:4b19:96c9]) by smtp.googlemail.com with ESMTPSA id a1sm4415055wrq.96.2019.03.03.09.21.59 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 03 Mar 2019 09:22:00 -0800 (PST) Subject: [PATCH net-next 1/2] lib: string: add strreplace_nonalnum From: Heiner Kallweit To: Florian Fainelli , Andrew Lunn , David Miller Cc: "netdev@vger.kernel.org" References: Message-ID: <981d965e-b25b-be2b-2067-07aec5eafc7a@gmail.com> Date: Sun, 3 Mar 2019 18:20:50 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.5.1 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add a new function strreplace_nonalnum that replaces all non-alphanumeric characters. Such functionality is needed e.g. when a string is supposed to be used in a sysfs file name. If '\0' is given as new character then non-alphanumeric characters are cut. Signed-off-by: Heiner Kallweit --- include/linux/string.h | 1 + lib/string.c | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/include/linux/string.h b/include/linux/string.h index 7927b875f..d827b0b0f 100644 --- a/include/linux/string.h +++ b/include/linux/string.h @@ -169,6 +169,7 @@ static inline void memcpy_flushcache(void *dst, const void *src, size_t cnt) #endif void *memchr_inv(const void *s, int c, size_t n); char *strreplace(char *s, char old, char new); +char *strreplace_nonalnum(char *s, char new); extern void kfree_const(const void *x); diff --git a/lib/string.c b/lib/string.c index 38e4ca08e..f2b1baf96 100644 --- a/lib/string.c +++ b/lib/string.c @@ -1047,6 +1047,33 @@ char *strreplace(char *s, char old, char new) } EXPORT_SYMBOL(strreplace); +/** + * strreplace_nonalnum - Replace all non-alphanumeric characters in a string. + * @s: The string to operate on. + * @new: The character non-alphanumeric characters are replaced with. + * + * If new is '\0' then non-alphanumeric characters are cut. + * + * Returns pointer to the nul byte at the end of the modified string. + */ +char *strreplace_nonalnum(char *s, char new) +{ + char *p = s; + + for (; *s; ++s) + if (isalnum(*s)) { + if (p != s) + *p = *s; + ++p; + } else if (new) { + *p++ = new; + } + *p = '\0'; + + return p; +} +EXPORT_SYMBOL(strreplace_nonalnum); + void fortify_panic(const char *name) { pr_emerg("detected buffer overflow in %s\n", name);