From patchwork Wed Jan 29 23:48:23 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sebastian Capella X-Patchwork-Id: 3555261 Return-Path: X-Original-To: patchwork-linux-pm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id AE809C02DC for ; Wed, 29 Jan 2014 23:49:33 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id C38B1201B9 for ; Wed, 29 Jan 2014 23:49:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id F01452018E for ; Wed, 29 Jan 2014 23:49:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752663AbaA2Xsx (ORCPT ); Wed, 29 Jan 2014 18:48:53 -0500 Received: from mail-pa0-f53.google.com ([209.85.220.53]:61429 "EHLO mail-pa0-f53.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751454AbaA2Xsv (ORCPT ); Wed, 29 Jan 2014 18:48:51 -0500 Received: by mail-pa0-f53.google.com with SMTP id lj1so2395383pab.26 for ; Wed, 29 Jan 2014 15:48:51 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ANYiLN/nSrfm2GmwD1wKas0aIfFk31jQxORfZnN9Q60=; b=CrAP1hgGoxlGwLOuBoi8UD4+kpLSqFSXNNn00u593jmceDC+aewVGQUBHnrjNJh/sp S2d0JLHN3XB9ea/tN56yrpqgCy5s1mjS+aRe8lbEqG/phf/ct2+TD6L7dunjF871lBrA TGyURx8QBXjPaN1zGPftB/5o+wNxSMqt6jQrmas2zG0oZ5naGJ/U+oMr1EN4XJ0yzNa0 ihKbu79K9UJeVBwYWdIPp5ftDyAni6/NzhvjIbLgJhnqC/Tp8Vv6V+igr+je9MhzENI3 p8zT3lGVkGSh62rMm91wd5kSaNlRqhbBxtntGW43rEbNxcBQERCttIFXRk836isZg3QP LOaA== X-Gm-Message-State: ALoCoQlITajQjdGT1tu96Kp3gOR6u2zylJF9CIG4dv/b6HEX3LrjIqf1+VLUe/Kx6gBsDKz4U8Nk X-Received: by 10.68.76.68 with SMTP id i4mr10886865pbw.73.1391039330972; Wed, 29 Jan 2014 15:48:50 -0800 (PST) Received: from localhost (cpe-76-93-135-111.san.res.rr.com. [76.93.135.111]) by mx.google.com with ESMTPSA id yz5sm27432615pac.9.2014.01.29.15.48.48 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Wed, 29 Jan 2014 15:48:49 -0800 (PST) From: Sebastian Capella To: linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-pm@vger.kernel.org, linaro-kernel@lists.linaro.org, patches@linaro.org Cc: Sebastian Capella , Andrew Morton , Michel Lespinasse , Shaohua Li , Jerome Marchand , Mikulas Patocka , Joonsoo Kim Subject: [PATCH v4 1/2] mm: add kstrimdup function Date: Wed, 29 Jan 2014 15:48:23 -0800 Message-Id: <1391039304-3172-2-git-send-email-sebastian.capella@linaro.org> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1391039304-3172-1-git-send-email-sebastian.capella@linaro.org> References: <1391039304-3172-1-git-send-email-sebastian.capella@linaro.org> Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org X-Spam-Status: No, score=-7.4 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP kstrimdup will duplicate and trim spaces from the passed in null terminated string. This is useful for strings coming from sysfs that often include trailing whitespace due to user input. Signed-off-by: Sebastian Capella Cc: Andrew Morton Cc: Rik van Riel (commit_signer:5/10=50%) Cc: Michel Lespinasse Cc: Shaohua Li Cc: Jerome Marchand Cc: Mikulas Patocka Cc: Joonsoo Kim --- include/linux/string.h | 1 + mm/util.c | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/include/linux/string.h b/include/linux/string.h index ac889c5..f29f9a0 100644 --- a/include/linux/string.h +++ b/include/linux/string.h @@ -114,6 +114,7 @@ void *memchr_inv(const void *s, int c, size_t n); extern char *kstrdup(const char *s, gfp_t gfp); extern char *kstrndup(const char *s, size_t len, gfp_t gfp); +extern char *kstrimdup(const char *s, gfp_t gfp); extern void *kmemdup(const void *src, size_t len, gfp_t gfp); extern char **argv_split(gfp_t gfp, const char *str, int *argcp); diff --git a/mm/util.c b/mm/util.c index a24aa22..da17de5 100644 --- a/mm/util.c +++ b/mm/util.c @@ -63,6 +63,25 @@ char *kstrndup(const char *s, size_t max, gfp_t gfp) EXPORT_SYMBOL(kstrndup); /** + * kstrimdup - Trim and copy a %NUL terminated string. + * @s: the string to trim and duplicate + * @gfp: the GFP mask used in the kmalloc() call when allocating memory + * + * Returns an address, which the caller must kfree, containing + * a duplicate of the passed string with leading and/or trailing + * whitespace (as defined by isspace) removed. + */ +char *kstrimdup(const char *s, gfp_t gfp) +{ + char *ret = kstrdup(skip_spaces(s), gfp); + + if (ret) + strim(ret); + return ret; +} +EXPORT_SYMBOL(kstrimdup); + +/** * kmemdup - duplicate region of memory * * @src: memory region to duplicate