Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

lib/string_helpers: Add kstrdup_and_replace() helper

Duplicate a NULL-terminated string and replace all occurrences of
the old character with a new one. In other words, provide functionality
of kstrdup() + strreplace().

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/r/20230804143910.15504-2-andriy.shevchenko@linux.intel.com
Signed-off-by: Stephen Boyd <sboyd@kernel.org>

authored by

Andy Shevchenko and committed by
Stephen Boyd
045ad464 06c2afb8

+17
+2
include/linux/string_helpers.h
··· 109 109 char *kstrdup_quotable_cmdline(struct task_struct *task, gfp_t gfp); 110 110 char *kstrdup_quotable_file(struct file *file, gfp_t gfp); 111 111 112 + char *kstrdup_and_replace(const char *src, char old, char new, gfp_t gfp); 113 + 112 114 char **kasprintf_strarray(gfp_t gfp, const char *prefix, size_t n); 113 115 void kfree_strarray(char **array, size_t n); 114 116
+15
lib/string_helpers.c
··· 719 719 } 720 720 EXPORT_SYMBOL_GPL(kstrdup_quotable_file); 721 721 722 + /* 723 + * Returns duplicate string in which the @old characters are replaced by @new. 724 + */ 725 + char *kstrdup_and_replace(const char *src, char old, char new, gfp_t gfp) 726 + { 727 + char *dst; 728 + 729 + dst = kstrdup(src, gfp); 730 + if (!dst) 731 + return NULL; 732 + 733 + return strreplace(dst, old, new); 734 + } 735 + EXPORT_SYMBOL_GPL(kstrdup_and_replace); 736 + 722 737 /** 723 738 * kasprintf_strarray - allocate and fill array of sequential strings 724 739 * @gfp: flags for the slab allocator