Fossil SCM

Simplify many if() expressions. Use the fact that if the last char in a file is CR, it cannot be followed by a LF any more. This way we don't need to verify the value of 'n' (number of characters remaining) any more.

jan.nijtmans 2013-03-14 12:11 trunk
Commit bd1dcc1c526565cfc7391cea1d0eac5d13d36281
1 file changed +14 -20
+14 -20
--- src/diff.c
+++ src/diff.c
@@ -238,38 +238,36 @@
238238
if( n==0 ) return result; /* Empty file -> text */
239239
c = *z;
240240
if( c==0 ){
241241
if( pFlags ) *pFlags |= LOOK_NUL;
242242
result = 0; /* NUL character in a file -> binary */
243
- }else if( c=='\r' && pFlags && (n<2 || z[1]!='\n') ){
244
- *pFlags |= LOOK_LONE_CR;
245243
}
246244
j = (c!='\n');
247245
if( !j && pFlags ) *pFlags |= LOOK_LONE_LF;
248246
while( --n>0 ){
249247
int c2 = c;
250248
c = *++z; ++j;
251249
if( c==0 ){
252250
if( pFlags ) *pFlags |= LOOK_NUL;
253251
result = 0; /* NUL character in a file -> binary */
254
- }else if( c=='\n' ){
252
+ }
253
+ if( c=='\n' ){
255254
if( pFlags ){
256
- if( c2=='\r' ){
257
- *pFlags |= LOOK_CRLF;
258
- }else{
259
- *pFlags |= LOOK_LONE_LF;
260
- }
255
+ *pFlags |= (c2=='\r')?LOOK_CRLF:LOOK_LONE_LF;
261256
}
262257
if( j>LENGTH_MASK ){
263258
if( pFlags ) *pFlags |= LOOK_LENGTH;
264259
result = 0; /* Very long line -> binary */
265260
}
266261
j = 0;
267
- }else if( c=='\r' && pFlags && (n<1 || z[1]!='\n') ){
262
+ }else if( c2=='\r' && pFlags ){
268263
*pFlags |= LOOK_LONE_CR;
269264
}
270265
}
266
+ if( c=='\r' && pFlags ){
267
+ *pFlags |= LOOK_LONE_CR;
268
+ }
271269
if( j>LENGTH_MASK ){
272270
if( pFlags ) *pFlags |= LOOK_LENGTH;
273271
result = 0; /* Very long line -> binary */
274272
}
275273
return result; /* No problems seen -> not binary */
@@ -345,13 +343,10 @@
345343
}
346344
c = *z;
347345
if( c==0 ){
348346
if( pFlags ) *pFlags |= LOOK_NUL;
349347
result = 0; /* NUL character in a file -> binary */
350
- }else if( (c==UTF16BE_CR || c==UTF16LE_CR) && pFlags
351
- && (n<(2*sizeof(WCHAR_T)) || (z[1]!=UTF16BE_LF && z[1]!=UTF16LE_LF)) ){
352
- *pFlags |= LOOK_LONE_CR;
353348
}
354349
j = ((c!=UTF16BE_LF) && (c!=UTF16LE_LF));
355350
if( !j && pFlags ) *pFlags |= LOOK_LONE_LF;
356351
while( 1 ){
357352
int c2 = c;
@@ -359,27 +354,26 @@
359354
n -= sizeof(WCHAR_T);
360355
c = *++z; ++j;
361356
if( c==0 ){
362357
if( pFlags ) *pFlags |= LOOK_NUL;
363358
result = 0; /* NUL character in a file -> binary */
364
- }else if( c==UTF16BE_LF || c==UTF16LE_LF ){
359
+ }
360
+ if( c==UTF16BE_LF || c==UTF16LE_LF ){
365361
if( pFlags ){
366
- if( c2==UTF16BE_CR || c2==UTF16LE_CR ){
367
- *pFlags |= LOOK_CRLF;
368
- }else{
369
- *pFlags |= LOOK_LONE_LF;
370
- }
362
+ *pFlags |= (c2==UTF16BE_CR||c2==UTF16LE_CR)?LOOK_CRLF:LOOK_LONE_LF;
371363
}
372364
if( j>UTF16_LENGTH_MASK ){
373365
if( pFlags ) *pFlags |= LOOK_LENGTH;
374366
result = 0; /* Very long line -> binary */
375367
}
376368
j = 0;
377
- }else if( (c==UTF16BE_CR || c==UTF16LE_CR) && pFlags
378
- && (n<sizeof(WCHAR_T) || (z[1]!=UTF16BE_LF && z[1]!=UTF16LE_LF)) ){
369
+ }else if( (c2==UTF16BE_CR || c2==UTF16LE_CR) && pFlags ){
379370
*pFlags |= LOOK_LONE_CR;
380371
}
372
+ }
373
+ if( (c==UTF16BE_CR || c==UTF16LE_CR) && pFlags ){
374
+ *pFlags |= LOOK_LONE_CR;
381375
}
382376
if( j>UTF16_LENGTH_MASK ){
383377
if( pFlags ) *pFlags |= LOOK_LENGTH;
384378
result = 0; /* Very long line -> binary */
385379
}
386380
--- src/diff.c
+++ src/diff.c
@@ -238,38 +238,36 @@
238 if( n==0 ) return result; /* Empty file -> text */
239 c = *z;
240 if( c==0 ){
241 if( pFlags ) *pFlags |= LOOK_NUL;
242 result = 0; /* NUL character in a file -> binary */
243 }else if( c=='\r' && pFlags && (n<2 || z[1]!='\n') ){
244 *pFlags |= LOOK_LONE_CR;
245 }
246 j = (c!='\n');
247 if( !j && pFlags ) *pFlags |= LOOK_LONE_LF;
248 while( --n>0 ){
249 int c2 = c;
250 c = *++z; ++j;
251 if( c==0 ){
252 if( pFlags ) *pFlags |= LOOK_NUL;
253 result = 0; /* NUL character in a file -> binary */
254 }else if( c=='\n' ){
 
255 if( pFlags ){
256 if( c2=='\r' ){
257 *pFlags |= LOOK_CRLF;
258 }else{
259 *pFlags |= LOOK_LONE_LF;
260 }
261 }
262 if( j>LENGTH_MASK ){
263 if( pFlags ) *pFlags |= LOOK_LENGTH;
264 result = 0; /* Very long line -> binary */
265 }
266 j = 0;
267 }else if( c=='\r' && pFlags && (n<1 || z[1]!='\n') ){
268 *pFlags |= LOOK_LONE_CR;
269 }
270 }
 
 
 
271 if( j>LENGTH_MASK ){
272 if( pFlags ) *pFlags |= LOOK_LENGTH;
273 result = 0; /* Very long line -> binary */
274 }
275 return result; /* No problems seen -> not binary */
@@ -345,13 +343,10 @@
345 }
346 c = *z;
347 if( c==0 ){
348 if( pFlags ) *pFlags |= LOOK_NUL;
349 result = 0; /* NUL character in a file -> binary */
350 }else if( (c==UTF16BE_CR || c==UTF16LE_CR) && pFlags
351 && (n<(2*sizeof(WCHAR_T)) || (z[1]!=UTF16BE_LF && z[1]!=UTF16LE_LF)) ){
352 *pFlags |= LOOK_LONE_CR;
353 }
354 j = ((c!=UTF16BE_LF) && (c!=UTF16LE_LF));
355 if( !j && pFlags ) *pFlags |= LOOK_LONE_LF;
356 while( 1 ){
357 int c2 = c;
@@ -359,27 +354,26 @@
359 n -= sizeof(WCHAR_T);
360 c = *++z; ++j;
361 if( c==0 ){
362 if( pFlags ) *pFlags |= LOOK_NUL;
363 result = 0; /* NUL character in a file -> binary */
364 }else if( c==UTF16BE_LF || c==UTF16LE_LF ){
 
365 if( pFlags ){
366 if( c2==UTF16BE_CR || c2==UTF16LE_CR ){
367 *pFlags |= LOOK_CRLF;
368 }else{
369 *pFlags |= LOOK_LONE_LF;
370 }
371 }
372 if( j>UTF16_LENGTH_MASK ){
373 if( pFlags ) *pFlags |= LOOK_LENGTH;
374 result = 0; /* Very long line -> binary */
375 }
376 j = 0;
377 }else if( (c==UTF16BE_CR || c==UTF16LE_CR) && pFlags
378 && (n<sizeof(WCHAR_T) || (z[1]!=UTF16BE_LF && z[1]!=UTF16LE_LF)) ){
379 *pFlags |= LOOK_LONE_CR;
380 }
 
 
 
381 }
382 if( j>UTF16_LENGTH_MASK ){
383 if( pFlags ) *pFlags |= LOOK_LENGTH;
384 result = 0; /* Very long line -> binary */
385 }
386
--- src/diff.c
+++ src/diff.c
@@ -238,38 +238,36 @@
238 if( n==0 ) return result; /* Empty file -> text */
239 c = *z;
240 if( c==0 ){
241 if( pFlags ) *pFlags |= LOOK_NUL;
242 result = 0; /* NUL character in a file -> binary */
 
 
243 }
244 j = (c!='\n');
245 if( !j && pFlags ) *pFlags |= LOOK_LONE_LF;
246 while( --n>0 ){
247 int c2 = c;
248 c = *++z; ++j;
249 if( c==0 ){
250 if( pFlags ) *pFlags |= LOOK_NUL;
251 result = 0; /* NUL character in a file -> binary */
252 }
253 if( c=='\n' ){
254 if( pFlags ){
255 *pFlags |= (c2=='\r')?LOOK_CRLF:LOOK_LONE_LF;
 
 
 
 
256 }
257 if( j>LENGTH_MASK ){
258 if( pFlags ) *pFlags |= LOOK_LENGTH;
259 result = 0; /* Very long line -> binary */
260 }
261 j = 0;
262 }else if( c2=='\r' && pFlags ){
263 *pFlags |= LOOK_LONE_CR;
264 }
265 }
266 if( c=='\r' && pFlags ){
267 *pFlags |= LOOK_LONE_CR;
268 }
269 if( j>LENGTH_MASK ){
270 if( pFlags ) *pFlags |= LOOK_LENGTH;
271 result = 0; /* Very long line -> binary */
272 }
273 return result; /* No problems seen -> not binary */
@@ -345,13 +343,10 @@
343 }
344 c = *z;
345 if( c==0 ){
346 if( pFlags ) *pFlags |= LOOK_NUL;
347 result = 0; /* NUL character in a file -> binary */
 
 
 
348 }
349 j = ((c!=UTF16BE_LF) && (c!=UTF16LE_LF));
350 if( !j && pFlags ) *pFlags |= LOOK_LONE_LF;
351 while( 1 ){
352 int c2 = c;
@@ -359,27 +354,26 @@
354 n -= sizeof(WCHAR_T);
355 c = *++z; ++j;
356 if( c==0 ){
357 if( pFlags ) *pFlags |= LOOK_NUL;
358 result = 0; /* NUL character in a file -> binary */
359 }
360 if( c==UTF16BE_LF || c==UTF16LE_LF ){
361 if( pFlags ){
362 *pFlags |= (c2==UTF16BE_CR||c2==UTF16LE_CR)?LOOK_CRLF:LOOK_LONE_LF;
 
 
 
 
363 }
364 if( j>UTF16_LENGTH_MASK ){
365 if( pFlags ) *pFlags |= LOOK_LENGTH;
366 result = 0; /* Very long line -> binary */
367 }
368 j = 0;
369 }else if( (c2==UTF16BE_CR || c2==UTF16LE_CR) && pFlags ){
 
370 *pFlags |= LOOK_LONE_CR;
371 }
372 }
373 if( (c==UTF16BE_CR || c==UTF16LE_CR) && pFlags ){
374 *pFlags |= LOOK_LONE_CR;
375 }
376 if( j>UTF16_LENGTH_MASK ){
377 if( pFlags ) *pFlags |= LOOK_LENGTH;
378 result = 0; /* Very long line -> binary */
379 }
380

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button