@@ -38,6 +38,7 @@ static void parse_opts(struct opts *o, int argc, char *argv[]);
38
38
int main (int argc , char * argv [])
39
39
{
40
40
int i , line , break_on_null_hunk ;
41
+ size_t rawsize ;
41
42
char spec [1024 ] = {0 };
42
43
struct opts o = {0 };
43
44
const char * rawdata ;
@@ -94,32 +95,33 @@ int main(int argc, char *argv[])
94
95
git_object_free (obj );
95
96
96
97
rawdata = git_blob_rawcontent (blob );
98
+ rawsize = git_blob_rawsize (blob );
97
99
98
100
/** Produce the output. */
99
101
line = 1 ;
100
102
i = 0 ;
101
103
break_on_null_hunk = 0 ;
102
- while (i < git_blob_rawsize ( blob ) ) {
103
- const char * eol = strchr (rawdata + i , '\n' );
104
+ while (i < rawsize ) {
105
+ const char * eol = memchr (rawdata + i , '\n' , rawsize - i );
104
106
char oid [10 ] = {0 };
105
107
const git_blame_hunk * hunk = git_blame_get_hunk_byline (blame , line );
106
108
107
- if (break_on_null_hunk && !hunk ) break ;
109
+ if (break_on_null_hunk && !hunk )
110
+ break ;
108
111
109
112
if (hunk ) {
110
113
char sig [128 ] = {0 };
111
114
break_on_null_hunk = 1 ;
112
115
113
-
114
116
git_oid_tostr (oid , 10 , & hunk -> final_commit_id );
115
117
snprintf (sig , 30 , "%s <%s>" , hunk -> final_signature -> name , hunk -> final_signature -> email );
116
118
117
119
printf ("%s ( %-30s %3d) %.*s\n" ,
118
120
oid ,
119
121
sig ,
120
122
line ,
121
- (int )(eol - rawdata - i ),
122
- rawdata + i );
123
+ (int )(eol - rawdata - i ),
124
+ rawdata + i );
123
125
}
124
126
125
127
i = (int )(eol - rawdata + 1 );
0 commit comments