@@ -285,6 +285,13 @@ struct image {
285
285
struct line * line ;
286
286
};
287
287
288
+ static void clear_image (struct image * image )
289
+ {
290
+ free (image -> buf );
291
+ free (image -> line_allocated );
292
+ memset (image , 0 , sizeof (* image ));
293
+ }
294
+
288
295
static uint32_t hash_line (const char * cp , size_t len )
289
296
{
290
297
size_t i ;
@@ -297,42 +304,6 @@ static uint32_t hash_line(const char *cp, size_t len)
297
304
return h ;
298
305
}
299
306
300
- /*
301
- * Compare lines s1 of length n1 and s2 of length n2, ignoring
302
- * whitespace difference. Returns 1 if they match, 0 otherwise
303
- */
304
- static int fuzzy_matchlines (const char * s1 , size_t n1 ,
305
- const char * s2 , size_t n2 )
306
- {
307
- const char * end1 = s1 + n1 ;
308
- const char * end2 = s2 + n2 ;
309
-
310
- /* ignore line endings */
311
- while (s1 < end1 && (end1 [-1 ] == '\r' || end1 [-1 ] == '\n' ))
312
- end1 -- ;
313
- while (s2 < end2 && (end2 [-1 ] == '\r' || end2 [-1 ] == '\n' ))
314
- end2 -- ;
315
-
316
- while (s1 < end1 && s2 < end2 ) {
317
- if (isspace (* s1 )) {
318
- /*
319
- * Skip whitespace. We check on both buffers
320
- * because we don't want "a b" to match "ab".
321
- */
322
- if (!isspace (* s2 ))
323
- return 0 ;
324
- while (s1 < end1 && isspace (* s1 ))
325
- s1 ++ ;
326
- while (s2 < end2 && isspace (* s2 ))
327
- s2 ++ ;
328
- } else if (* s1 ++ != * s2 ++ )
329
- return 0 ;
330
- }
331
-
332
- /* If we reached the end on one side only, lines don't match. */
333
- return s1 == end1 && s2 == end2 ;
334
- }
335
-
336
307
static void add_line_info (struct image * img , const char * bol , size_t len , unsigned flag )
337
308
{
338
309
ALLOC_GROW (img -> line_allocated , img -> nr + 1 , img -> alloc );
@@ -373,11 +344,17 @@ static void prepare_image(struct image *image, char *buf, size_t len,
373
344
image -> line = image -> line_allocated ;
374
345
}
375
346
376
- static void clear_image (struct image * image )
347
+ static void remove_first_line (struct image * img )
377
348
{
378
- free (image -> buf );
379
- free (image -> line_allocated );
380
- memset (image , 0 , sizeof (* image ));
349
+ img -> buf += img -> line [0 ].len ;
350
+ img -> len -= img -> line [0 ].len ;
351
+ img -> line ++ ;
352
+ img -> nr -- ;
353
+ }
354
+
355
+ static void remove_last_line (struct image * img )
356
+ {
357
+ img -> len -= img -> line [-- img -> nr ].len ;
381
358
}
382
359
383
360
/* fmt must contain _one_ %s and no other substitution */
@@ -2419,6 +2396,42 @@ static void update_pre_post_images(struct image *preimage,
2419
2396
postimage -> nr -= reduced ;
2420
2397
}
2421
2398
2399
+ /*
2400
+ * Compare lines s1 of length n1 and s2 of length n2, ignoring
2401
+ * whitespace difference. Returns 1 if they match, 0 otherwise
2402
+ */
2403
+ static int fuzzy_matchlines (const char * s1 , size_t n1 ,
2404
+ const char * s2 , size_t n2 )
2405
+ {
2406
+ const char * end1 = s1 + n1 ;
2407
+ const char * end2 = s2 + n2 ;
2408
+
2409
+ /* ignore line endings */
2410
+ while (s1 < end1 && (end1 [-1 ] == '\r' || end1 [-1 ] == '\n' ))
2411
+ end1 -- ;
2412
+ while (s2 < end2 && (end2 [-1 ] == '\r' || end2 [-1 ] == '\n' ))
2413
+ end2 -- ;
2414
+
2415
+ while (s1 < end1 && s2 < end2 ) {
2416
+ if (isspace (* s1 )) {
2417
+ /*
2418
+ * Skip whitespace. We check on both buffers
2419
+ * because we don't want "a b" to match "ab".
2420
+ */
2421
+ if (!isspace (* s2 ))
2422
+ return 0 ;
2423
+ while (s1 < end1 && isspace (* s1 ))
2424
+ s1 ++ ;
2425
+ while (s2 < end2 && isspace (* s2 ))
2426
+ s2 ++ ;
2427
+ } else if (* s1 ++ != * s2 ++ )
2428
+ return 0 ;
2429
+ }
2430
+
2431
+ /* If we reached the end on one side only, lines don't match. */
2432
+ return s1 == end1 && s2 == end2 ;
2433
+ }
2434
+
2422
2435
static int line_by_line_fuzzy_match (struct image * img ,
2423
2436
struct image * preimage ,
2424
2437
struct image * postimage ,
@@ -2804,19 +2817,6 @@ static int find_pos(struct apply_state *state,
2804
2817
return -1 ;
2805
2818
}
2806
2819
2807
- static void remove_first_line (struct image * img )
2808
- {
2809
- img -> buf += img -> line [0 ].len ;
2810
- img -> len -= img -> line [0 ].len ;
2811
- img -> line ++ ;
2812
- img -> nr -- ;
2813
- }
2814
-
2815
- static void remove_last_line (struct image * img )
2816
- {
2817
- img -> len -= img -> line [-- img -> nr ].len ;
2818
- }
2819
-
2820
2820
/*
2821
2821
* The change from "preimage" and "postimage" has been found to
2822
2822
* apply at applied_pos (counts in line numbers) in "img".
0 commit comments