perf-probe: rewrite find_lazy_match_lines() by using getline(3)
PATCH 1/1 perf-probe: rewrite find_lazy_match_lines() by using getline(3)
From: Franck Bui-Huu <[email protected]>
--- tools/perf/util/probe-finder.c | 70 +++++++++++++++------------------------ 1 files changed, 27 insertions(+), 43 deletions(-)
tools/perf/util/probe-finder.c +29 -45
@@ -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; }
Signature · 1 line
1.7.3.2
Quoted 3 lines · Franck Bui-Huu
From: Franck Bui-Huu <[email protected]>
Signed-off-by Franck Bui-Huu <[email protected]>
Looks very nice! :)
Thanks!
Quoted 100 lines
--- tools/perf/util/probe-finder.c | 70 +++++++++++++++------------------------ 1 files changed, 27 insertions(+), 43 deletions(-)tools/perf/util/probe-finder.c +29
-45@@ -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; }
Signature · 4 lines
Masami HIRAMATSU 2nd Dept. Linux Technology Center Hitachi, Ltd., Systems Development Laboratory E-mail: [email protected]
Hi Arnaldo,
Could you merge this patch into your perf/core tree? This makes code very simple and easy to read :-)
Thank you,
Quoted 113 lines · Masami Hiramatsu
Quoted 3 lines · Franck Bui-Huu
From: Franck Bui-Huu <[email protected]>
Signed-off-by Franck Bui-Huu <[email protected]>Looks very nice! :)
Acked-by Masami Hiramatsu <[email protected]>Thanks!
Quoted 100 lines
--- tools/perf/util/probe-finder.c | 70 +++++++++++++++------------------------ 1 files changed, 27 insertions(+), 43 deletions(-)tools/perf/util/probe-finder.c +29
-45@@ -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; }
Signature · 4 lines
Masami HIRAMATSU 2nd Dept. Linux Technology Center Hitachi, Ltd., Systems Development Laboratory E-mail: [email protected]
Em Mon, Feb 07, 2011 at 06:32:27PM +0900, Masami Hiramatsu escreveu:
Quoted 4 lines
Hi Arnaldo,
Could you merge this patch into your perf/core tree? This makes code very simple and easy to read :-)
Right, will process these and others you sent before returning to work on the live TUI annotation in perf top :)
- Arnaldo
[tip:perf/core] perf probe: Rewrite find_lazy_match_lines() by using getline(3)
In reply to Franck Bui-HuuCommit-ID: f50c2169bd054984e976e67e8651d28f3caf6ba3 Gitweb: http://git.kernel.org/tip/f50c2169bd054984e976e67e8651d28f3caf6ba3 Author: Franck Bui-Huu <[email protected]> AuthorDate: Thu, 13 Jan 2011 11:18:30 +0100 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Mon, 7 Feb 2011 09:12:42 -0200
perf probe: Rewrite find_lazy_match_lines() by using getline(3)
LKML-Reference: <[email protected]>
--- tools/perf/util/probe-finder.c | 70 +++++++++++++++------------------------ 1 files changed, 27 insertions(+), 43 deletions(-)
tools/perf/util/probe-finder.c +28 -44
@@ -1234,51 +1234,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 ; + linenum++; } -out_free_fbuf: -free (fbuf); -out_close: -close (fd); -return nlines; + +if (ferror (fp)) + count = -errno; +free (line); +fclose (fp); + +if (count ==0 ) +pr_debug ("No matched lines found in %s.\n" , fname); +return count; } static int probe_point_lazy_walker(const char *fname, int lineno,
@@ -1312,10 +1299,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; }