From: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
To: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
Cc: Franck Bui-Huu <vagabon.xyz@gmail.com>,
lkml <linux-kernel@vger.kernel.org>,
2nddept-manager@sdl.hitachi.co.jp
Subject: Re: [PATCH] perf-probe: rewrite find_lazy_match_lines() by using getline(3)
Date: Mon, 07 Feb 2011 18:32:27 +0900 [thread overview]
Message-ID: <4D4FBC2B.5000108@hitachi.com> (raw)
In-Reply-To: <4D2ED322.4040508@hitachi.com>
Hi Arnaldo,
Could you merge this patch into your perf/core tree?
This makes code very simple and easy to read :-)
Thank you,
(2011/01/13 19:25), Masami Hiramatsu wrote:
> (2011/01/13 19:18), Franck Bui-Huu wrote:
>> From: Franck Bui-Huu <fbuihuu@gmail.com>
>>
>> Signed-off-by: Franck Bui-Huu <fbuihuu@gmail.com>
>
> Looks very nice! :)
>
> Acked-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
>
> Thanks!
>
>> ---
>> tools/perf/util/probe-finder.c | 70 +++++++++++++++------------------------
>> 1 files changed, 27 insertions(+), 43 deletions(-)
>>
>> diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c
>> index ddf4d45..4221738 100644
>> --- a/tools/perf/util/probe-finder.c
>> +++ b/tools/perf/util/probe-finder.c
>> @@ -1092,51 +1092,38 @@ static int find_probe_point_by_line(struct probe_finder *pf)
>> static int find_lazy_match_lines(struct list_head *head,
>> const char *fname, const char *pat)
>> {
>> - char *fbuf, *p1, *p2;
>> - int fd, line, nlines = -1;
>> - struct stat st;
>> -
>> - fd = open(fname, O_RDONLY);
>> - if (fd < 0) {
>> - pr_warning("Failed to open %s: %s\n", fname, strerror(-fd));
>> + FILE *fp;
>> + char *line = NULL;
>> + size_t line_len;
>> + ssize_t len;
>> + int count = 0, linenum = 1;
>> +
>> + fp = fopen(fname, "r");
>> + if (!fp) {
>> + pr_warning("Failed to open %s: %s\n", fname, strerror(errno));
>> return -errno;
>> }
>>
>> - if (fstat(fd, &st) < 0) {
>> - pr_warning("Failed to get the size of %s: %s\n",
>> - fname, strerror(errno));
>> - nlines = -errno;
>> - goto out_close;
>> - }
>> -
>> - nlines = -ENOMEM;
>> - fbuf = malloc(st.st_size + 2);
>> - if (fbuf == NULL)
>> - goto out_close;
>> - if (read(fd, fbuf, st.st_size) < 0) {
>> - pr_warning("Failed to read %s: %s\n", fname, strerror(errno));
>> - nlines = -errno;
>> - goto out_free_fbuf;
>> - }
>> - fbuf[st.st_size] = '\n'; /* Dummy line */
>> - fbuf[st.st_size + 1] = '\0';
>> - p1 = fbuf;
>> - line = 1;
>> - nlines = 0;
>> - while ((p2 = strchr(p1, '\n')) != NULL) {
>> - *p2 = '\0';
>> - if (strlazymatch(p1, pat)) {
>> - line_list__add_line(head, line);
>> - nlines++;
>> + while ((len = getline(&line, &line_len, fp)) > 0) {
>> +
>> + if (line[len - 1] == '\n')
>> + line[len - 1] = '\0';
>> +
>> + if (strlazymatch(line, pat)) {
>> + line_list__add_line(head, linenum);
>> + count++;
>> }
>> - line++;
>> - p1 = p2 + 1;
>> - }
>> -out_free_fbuf:
>> - free(fbuf);
>> -out_close:
>> - close(fd);
>> - return nlines;
>> + linenum++;
>> + }
>> +
>> + if (ferror(fp))
>> + count = -errno;
>> + free(line);
>> + fclose(fp);
>> +
>> + if (count == 0)
>> + pr_debug("No matched lines found in %s.\n", fname);
>> + return count;
>> }
>>
>> /* Find probe points from lazy pattern */
>> @@ -1154,10 +1141,7 @@ static int find_probe_point_lazy(Dwarf_Die *sp_die, struct probe_finder *pf)
>> /* Matching lazy line pattern */
>> ret = find_lazy_match_lines(&pf->lcache, pf->fname,
>> pf->pev->point.lazy_line);
>> - if (ret == 0) {
>> - pr_debug("No matched lines found in %s.\n", pf->fname);
>> - return 0;
>> - } else if (ret < 0)
>> + if (ret <= 0)
>> return ret;
>> }
>>
>
>
--
Masami HIRAMATSU
2nd Dept. Linux Technology Center
Hitachi, Ltd., Systems Development Laboratory
E-mail: masami.hiramatsu.pt@hitachi.com
next prev parent reply other threads:[~2011-02-07 9:32 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-13 10:18 Franck Bui-Huu
2011-01-13 10:25 ` Masami Hiramatsu
2011-02-07 9:32 ` Masami Hiramatsu [this message]
2011-02-07 12:31 ` Arnaldo Carvalho de Melo
2011-02-08 15:16 ` [tip:perf/core] perf probe: Rewrite " tip-bot for Franck Bui-Huu
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=4D4FBC2B.5000108@hitachi.com \
--to=masami.hiramatsu.pt@hitachi.com \
--cc=2nddept-manager@sdl.hitachi.co.jp \
--cc=acme@ghostprotocols.net \
--cc=linux-kernel@vger.kernel.org \
--cc=vagabon.xyz@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome