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.
Commit
bd1dcc1c526565cfc7391cea1d0eac5d13d36281
Parent
ce9d6abea2010db…
1 file changed
+14
-20
+14
-20
| --- src/diff.c | ||
| +++ src/diff.c | ||
| @@ -238,38 +238,36 @@ | ||
| 238 | 238 | if( n==0 ) return result; /* Empty file -> text */ |
| 239 | 239 | c = *z; |
| 240 | 240 | if( c==0 ){ |
| 241 | 241 | if( pFlags ) *pFlags |= LOOK_NUL; |
| 242 | 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 | 243 | } |
| 246 | 244 | j = (c!='\n'); |
| 247 | 245 | if( !j && pFlags ) *pFlags |= LOOK_LONE_LF; |
| 248 | 246 | while( --n>0 ){ |
| 249 | 247 | int c2 = c; |
| 250 | 248 | c = *++z; ++j; |
| 251 | 249 | if( c==0 ){ |
| 252 | 250 | if( pFlags ) *pFlags |= LOOK_NUL; |
| 253 | 251 | result = 0; /* NUL character in a file -> binary */ |
| 254 | - }else if( c=='\n' ){ | |
| 252 | + } | |
| 253 | + if( c=='\n' ){ | |
| 255 | 254 | 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; | |
| 261 | 256 | } |
| 262 | 257 | if( j>LENGTH_MASK ){ |
| 263 | 258 | if( pFlags ) *pFlags |= LOOK_LENGTH; |
| 264 | 259 | result = 0; /* Very long line -> binary */ |
| 265 | 260 | } |
| 266 | 261 | j = 0; |
| 267 | - }else if( c=='\r' && pFlags && (n<1 || z[1]!='\n') ){ | |
| 262 | + }else if( c2=='\r' && pFlags ){ | |
| 268 | 263 | *pFlags |= LOOK_LONE_CR; |
| 269 | 264 | } |
| 270 | 265 | } |
| 266 | + if( c=='\r' && pFlags ){ | |
| 267 | + *pFlags |= LOOK_LONE_CR; | |
| 268 | + } | |
| 271 | 269 | if( j>LENGTH_MASK ){ |
| 272 | 270 | if( pFlags ) *pFlags |= LOOK_LENGTH; |
| 273 | 271 | result = 0; /* Very long line -> binary */ |
| 274 | 272 | } |
| 275 | 273 | return result; /* No problems seen -> not binary */ |
| @@ -345,13 +343,10 @@ | ||
| 345 | 343 | } |
| 346 | 344 | c = *z; |
| 347 | 345 | if( c==0 ){ |
| 348 | 346 | if( pFlags ) *pFlags |= LOOK_NUL; |
| 349 | 347 | 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 | 348 | } |
| 354 | 349 | j = ((c!=UTF16BE_LF) && (c!=UTF16LE_LF)); |
| 355 | 350 | if( !j && pFlags ) *pFlags |= LOOK_LONE_LF; |
| 356 | 351 | while( 1 ){ |
| 357 | 352 | int c2 = c; |
| @@ -359,27 +354,26 @@ | ||
| 359 | 354 | n -= sizeof(WCHAR_T); |
| 360 | 355 | c = *++z; ++j; |
| 361 | 356 | if( c==0 ){ |
| 362 | 357 | if( pFlags ) *pFlags |= LOOK_NUL; |
| 363 | 358 | 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 ){ | |
| 365 | 361 | 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; | |
| 371 | 363 | } |
| 372 | 364 | if( j>UTF16_LENGTH_MASK ){ |
| 373 | 365 | if( pFlags ) *pFlags |= LOOK_LENGTH; |
| 374 | 366 | result = 0; /* Very long line -> binary */ |
| 375 | 367 | } |
| 376 | 368 | 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 ){ | |
| 379 | 370 | *pFlags |= LOOK_LONE_CR; |
| 380 | 371 | } |
| 372 | + } | |
| 373 | + if( (c==UTF16BE_CR || c==UTF16LE_CR) && pFlags ){ | |
| 374 | + *pFlags |= LOOK_LONE_CR; | |
| 381 | 375 | } |
| 382 | 376 | if( j>UTF16_LENGTH_MASK ){ |
| 383 | 377 | if( pFlags ) *pFlags |= LOOK_LENGTH; |
| 384 | 378 | result = 0; /* Very long line -> binary */ |
| 385 | 379 | } |
| 386 | 380 |
| --- 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 |