Re: [PATCH 1/3] perf alias: Remove trailing newline when reading sysfs files

From: Paul Clarke
Date: Thu Jun 14 2018 - 09:17:58 EST


On 06/14/2018 06:48 AM, Thomas Richter wrote:
> Remove a trailing newline when reading sysfs file contents
> such as /sys/devices/cpum_cf/events/TX_NC_TEND.
> This show when verbose option -v is used.
>
> Output before:
> tx_nc_tend -> 'cpum_cf'/'event=0x008d
> '/
>
> Output after:
> tx_nc_tend -> 'cpum_cf'/'event=0x8d'/
>
> Signed-off-by: Thomas Richter <tmricht@xxxxxxxxxxxxx>
> ---
> tools/perf/util/pmu.c | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
> index 7878934ebb23..26c79a9c4142 100644
> --- a/tools/perf/util/pmu.c
> +++ b/tools/perf/util/pmu.c
> @@ -294,7 +294,7 @@ static int __perf_pmu__new_alias(struct list_head *list, char *dir, char *name,
>
> static int perf_pmu__new_alias(struct list_head *list, char *dir, char *name, FILE *file)
> {
> - char buf[256];
> + char *cp, buf[256];
> int ret;
>
> ret = fread(buf, 1, sizeof(buf), file);
> @@ -303,6 +303,11 @@ static int perf_pmu__new_alias(struct list_head *list, char *dir, char *name, FI
>
> buf[ret] = 0;
>
> + /* Remove trailing newline from sysfs file */
> + cp = strrchr(buf, '\n');
> + if (cp)
> + *cp = '\0';

A nit, perhaps, but this will search backwards through the entire string if a newline is not found, which is the most common case, I presume. Would it be more efficient to just look at the last character? Something like:
i = strlen(buf);
if (i > 0 && buf[i-1] == '\n')
buf[i-1] = '\0';

> +
> return __perf_pmu__new_alias(list, dir, name, NULL, buf, NULL, NULL, NULL,
> NULL, NULL, NULL);
> }
>

PC