All of lore.kernel.org
 help / color / mirror / Atom feed
From: <gregkh@linuxfoundation.org>
To: acme@redhat.com,adrian.hunter@intel.com,alexander.shishkin@linux.intel.com,chenzhongjin@huawei.com,eddyz87@gmail.com,gregkh@linuxfoundation.org,irogers@google.com,james.clark@arm.com,john.g.garry@oracle.com,jolsa@kernel.org,kan.liang@linux.intel.com,kjain@linux.ibm.com,leo.yan@linaro.org,liam.howlett@oracle.com,linux-arm-kernel@lists.infradead.org,maddy@linux.ibm.com,mark.rutland@arm.com,mike.leach@linaro.org,mingo@redhat.com,namhyung@kernel.org,peterz@infradead.org,ravi.bangoria@amd.com,renyu.zj@linux.alibaba.com,will@kernel.org,yangjihong1@huawei.com,yuhaixin.yhx@linux.alibaba.com
Cc: <stable-commits@vger.kernel.org>
Subject: Patch "perf util: Add a function for replacing characters in a string" has been added to the 6.6-stable tree
Date: Sun, 09 Jun 2024 13:17:03 +0200	[thread overview]
Message-ID: <2024060902-koala-utilize-1829@gregkh> (raw)


This is a note to let you know that I've just added the patch titled

    perf util: Add a function for replacing characters in a string

to the 6.6-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     perf-util-add-a-function-for-replacing-characters-in-a-string.patch
and it can be found in the queue-6.6 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@vger.kernel.org> know about it.


From 8a55c1e2c9e123b399b272a7db23f09dbb74af21 Mon Sep 17 00:00:00 2001
From: James Clark <james.clark@arm.com>
Date: Mon, 4 Sep 2023 10:50:45 +0100
Subject: perf util: Add a function for replacing characters in a string

From: James Clark <james.clark@arm.com>

commit 8a55c1e2c9e123b399b272a7db23f09dbb74af21 upstream.

It finds all occurrences of a single character and replaces them with
a multi character string. This will be used in a test in a following
commit.

Reviewed-by: Ian Rogers <irogers@google.com>
Signed-off-by: James Clark <james.clark@arm.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Chen Zhongjin <chenzhongjin@huawei.com>
Cc: Eduard Zingerman <eddyz87@gmail.com>
Cc: Haixin Yu <yuhaixin.yhx@linux.alibaba.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jing Zhang <renyu.zj@linux.alibaba.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: John Garry <john.g.garry@oracle.com>
Cc: Kajol Jain <kjain@linux.ibm.com>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Leo Yan <leo.yan@linaro.org>
Cc: Liam Howlett <liam.howlett@oracle.com>
Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Mike Leach <mike.leach@linaro.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ravi Bangoria <ravi.bangoria@amd.com>
Cc: Will Deacon <will@kernel.org>
Cc: Yang Jihong <yangjihong1@huawei.com>
Cc: linux-arm-kernel@lists.infradead.org
Link: https://lore.kernel.org/r/20230904095104.1162928-4-james.clark@arm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 tools/perf/tests/Build          |    1 
 tools/perf/tests/builtin-test.c |    1 
 tools/perf/tests/tests.h        |    1 
 tools/perf/tests/util.c         |   31 +++++++++++++++++++++++++
 tools/perf/util/string.c        |   48 ++++++++++++++++++++++++++++++++++++++++
 tools/perf/util/string2.h       |    1 
 6 files changed, 83 insertions(+)
 create mode 100644 tools/perf/tests/util.c

--- a/tools/perf/tests/Build
+++ b/tools/perf/tests/Build
@@ -66,6 +66,7 @@ perf-y += dlfilter-test.o
 perf-y += sigtrap.o
 perf-y += event_groups.o
 perf-y += symbols.o
+perf-y += util.o
 
 ifeq ($(SRCARCH),$(filter $(SRCARCH),x86 arm arm64 powerpc))
 perf-$(CONFIG_DWARF_UNWIND) += dwarf-unwind.o
--- a/tools/perf/tests/builtin-test.c
+++ b/tools/perf/tests/builtin-test.c
@@ -123,6 +123,7 @@ static struct test_suite *generic_tests[
 	&suite__sigtrap,
 	&suite__event_groups,
 	&suite__symbols,
+	&suite__util,
 	NULL,
 };
 
--- a/tools/perf/tests/tests.h
+++ b/tools/perf/tests/tests.h
@@ -145,6 +145,7 @@ DECLARE_SUITE(dlfilter);
 DECLARE_SUITE(sigtrap);
 DECLARE_SUITE(event_groups);
 DECLARE_SUITE(symbols);
+DECLARE_SUITE(util);
 
 /*
  * PowerPC and S390 do not support creation of instruction breakpoints using the
--- /dev/null
+++ b/tools/perf/tests/util.c
@@ -0,0 +1,31 @@
+// SPDX-License-Identifier: GPL-2.0
+#include "tests.h"
+#include "util/debug.h"
+
+#include <linux/compiler.h>
+#include <stdlib.h>
+#include <string2.h>
+
+static int test_strreplace(char needle, const char *haystack,
+			   const char *replace, const char *expected)
+{
+	char *new = strreplace_chars(needle, haystack, replace);
+	int ret = strcmp(new, expected);
+
+	free(new);
+	return ret == 0;
+}
+
+static int test__util(struct test_suite *t __maybe_unused, int subtest __maybe_unused)
+{
+	TEST_ASSERT_VAL("empty string", test_strreplace(' ', "", "123", ""));
+	TEST_ASSERT_VAL("no match", test_strreplace('5', "123", "4", "123"));
+	TEST_ASSERT_VAL("replace 1", test_strreplace('3', "123", "4", "124"));
+	TEST_ASSERT_VAL("replace 2", test_strreplace('a', "abcabc", "ef", "efbcefbc"));
+	TEST_ASSERT_VAL("replace long", test_strreplace('a', "abcabc", "longlong",
+							"longlongbclonglongbc"));
+
+	return 0;
+}
+
+DEFINE_SUITE("util", util);
--- a/tools/perf/util/string.c
+++ b/tools/perf/util/string.c
@@ -301,3 +301,51 @@ unsigned int hex(char c)
 		return c - 'a' + 10;
 	return c - 'A' + 10;
 }
+
+/*
+ * Replace all occurrences of character 'needle' in string 'haystack' with
+ * string 'replace'
+ *
+ * The new string could be longer so a new string is returned which must be
+ * freed.
+ */
+char *strreplace_chars(char needle, const char *haystack, const char *replace)
+{
+	int replace_len = strlen(replace);
+	char *new_s, *to;
+	const char *loc = strchr(haystack, needle);
+	const char *from = haystack;
+	int num = 0;
+
+	/* Count occurrences */
+	while (loc) {
+		loc = strchr(loc + 1, needle);
+		num++;
+	}
+
+	/* Allocate enough space for replacements and reset first location */
+	new_s = malloc(strlen(haystack) + (num * (replace_len - 1) + 1));
+	if (!new_s)
+		return NULL;
+	loc = strchr(haystack, needle);
+	to = new_s;
+
+	while (loc) {
+		/* Copy original string up to found char and update positions */
+		memcpy(to, from, 1 + loc - from);
+		to += loc - from;
+		from = loc + 1;
+
+		/* Copy replacement string and update positions */
+		memcpy(to, replace, replace_len);
+		to += replace_len;
+
+		/* needle next occurrence or end of string */
+		loc = strchr(from, needle);
+	}
+
+	/* Copy any remaining chars + null */
+	strcpy(to, from);
+
+	return new_s;
+}
--- a/tools/perf/util/string2.h
+++ b/tools/perf/util/string2.h
@@ -39,5 +39,6 @@ char *strpbrk_esc(char *str, const char
 char *strdup_esc(const char *str);
 
 unsigned int hex(char c);
+char *strreplace_chars(char needle, const char *haystack, const char *replace);
 
 #endif /* PERF_STRING_H */


Patches currently in stable-queue which might be from james.clark@arm.com are

queue-6.6/perf-ui-browser-avoid-segv-on-title.patch
queue-6.6/perf-pmu-count-sys-and-cpuid-json-events-separately.patch
queue-6.6/perf-symbols-fix-ownership-of-string-in-dso__load_vm.patch
queue-6.6/perf-tests-make-test-data-symbol-more-robust-on-neov.patch
queue-6.6/perf-tests-apply-attributes-to-all-events-in-object-.patch
queue-6.6/perf-pmu-compat-supports-regular-expression-matching.patch
queue-6.6/perf-evlist-add-evlist__findnew_tracking_event-helpe.patch
queue-6.6/perf-util-add-a-function-for-replacing-characters-in-a-string.patch
queue-6.6/perf-evlist-add-perf_evlist__go_system_wide-helper.patch
queue-6.6/perf-record-lazy-load-kernel-symbols.patch
queue-6.6/perf-maps-move-symbol-maps-functions-to-maps.c.patch
queue-6.6/perf-ui-browser-don-t-save-pointer-to-stack-memory.patch
queue-6.6/perf-record-move-setting-tracking-events-before-reco.patch
queue-6.6/perf-report-avoid-segv-in-report__setup_sample_type.patch
queue-6.6/perf-tools-add-use-pmu-reverse-lookup-from-config-to.patch
queue-6.6/perf-thread-fixes-to-thread__new-related-to-initiali.patch
queue-6.6/perf-pmu-assume-sysfs-events-are-always-the-same-cas.patch
queue-6.6/coresight-etm4x-fix-unbalanced-pm_runtime_enable.patch
queue-6.6/perf-pmu-move-pmu__find_core_pmu-to-pmus.c.patch
queue-6.6/perf-test-add-a-test-for-strcmp_cpuid_str-expression.patch
queue-6.6/perf-test-shell-arm_coresight-increase-buffer-size-f.patch
queue-6.6/perf-record-delete-session-after-stopping-sideband-t.patch
queue-6.6/perf-tools-use-pmus-to-describe-type-from-attribute.patch
queue-6.6/perf-machine-thread-remove-exited-threads-by-default.patch

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

                 reply	other threads:[~2024-06-09 11:17 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=2024060902-koala-utilize-1829@gregkh \
    --to=gregkh@linuxfoundation.org \
    --cc=acme@redhat.com \
    --cc=adrian.hunter@intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=chenzhongjin@huawei.com \
    --cc=eddyz87@gmail.com \
    --cc=irogers@google.com \
    --cc=james.clark@arm.com \
    --cc=john.g.garry@oracle.com \
    --cc=jolsa@kernel.org \
    --cc=kan.liang@linux.intel.com \
    --cc=kjain@linux.ibm.com \
    --cc=leo.yan@linaro.org \
    --cc=liam.howlett@oracle.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=maddy@linux.ibm.com \
    --cc=mark.rutland@arm.com \
    --cc=mike.leach@linaro.org \
    --cc=mingo@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=peterz@infradead.org \
    --cc=ravi.bangoria@amd.com \
    --cc=renyu.zj@linux.alibaba.com \
    --cc=stable-commits@vger.kernel.org \
    --cc=will@kernel.org \
    --cc=yangjihong1@huawei.com \
    --cc=yuhaixin.yhx@linux.alibaba.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.