続きです。
以下のように[middle *]の文字列を分岐に埋め込みます。
takk@deb9:~/tmp/grep-3.1/src$ cat -n grep.c | sed -ne '1137,1207p' 1137 static char * print_line_middle (char *beg, char *lim, const char *line_color, const char *match_color) 1138 { 1139 size_t match_size; 1140 size_t match_offset; 1141 char *cur; 1142 char *mid = NULL; 1143 char *b; 1144 1145 printf("[middle 1]"); 1146 for (cur = beg; 1147 (cur < lim 1148 && ((match_offset = execute (compiled_pattern, beg, lim - beg, 1149 &match_size, cur)) != (size_t) -1)); 1150 cur = b + match_size) 1151 { 1152 b = beg + match_offset; 1153 printf("[middle 2]"); 1154 /* Avoid matching the empty line at the end of the buffer. */ 1155 if (b == lim) 1156 break; 1157 printf("[middle 3]"); 1158 /* Avoid hanging on grep --color "" foo */ 1159 if (match_size == 0) 1160 { 1161 printf("[middle 4]"); 1162 /* Make minimal progress; there may be further non-empty matches. */ 1163 /* XXX - Could really advance by one whole multi-octet character. */ 1164 match_size = 1; 1165 if (!mid) 1166 mid = cur; 1167 } 1168 else 1169 { 1170 /* This function is called on a matching line only, 1171 but is it selected or rejected/context? */ 1172 if (only_matching) 1173 { 1174 printf("[middle 5]"); 1175 char sep = out_invert ? SEP_CHAR_REJECTED : SEP_CHAR_SELECTED; 1176 if (! print_line_head (b, match_size, lim, sep)) 1177 return NULL; 1178 } 1179 else 1180 { 1181 printf("[middle 5]"); 1182 pr_sgr_start (line_color); 1183 if (mid) 1184 { 1185 cur = mid; 1186 mid = NULL; 1187 } 1188 fwrite_errno (cur, 1, b - cur); 1189 } 1190 1191 printf("[middle 6]"); 1192 pr_sgr_start_if (match_color); 1193 fwrite_errno (b, 1, match_size); 1194 pr_sgr_end_if (match_color); 1195 if (only_matching) 1196 putchar_errno (eolbyte); 1197 } 1198 } 1199 1200 printf("[middle 8]"); 1201 if (only_matching) 1202 cur = lim; 1203 else if (mid) 1204 cur = mid; 1205 1206 return cur; 1207 } takk@deb9:~/tmp/grep-3.1/src$
make。
takk@deb9:~/tmp/grep-3.1/src$ make CC grep.o CCLD grep takk@deb9:~/tmp/grep-3.1/src$
確認します。
せっかく分岐を入れたのに、全く出ませんでした。
パイプへ渡すときは、print_line_middle は実行されないんですね。
コメント