unexpand: correct behavior for --first-only --tabs=4
Prior to the patch, both -f and --first-only are in all cases either no-op or ignored. Without --tabs, --first-only is the default so specifying it is a no-op. With --tabs, --all is implied, and --first-only is intended to reset this. function old new delta expand_main 690 694 +4 Signed-off-by: Mark Edgar <medgar123@gmail.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
		
				
					committed by
					
						 Denys Vlasenko
						Denys Vlasenko
					
				
			
			
				
	
			
			
			
						parent
						
							9b4a9d96b8
						
					
				
				
					commit
					b2ab920716
				
			| @@ -160,7 +160,7 @@ static void unexpand(FILE *file, unsigned tab_size, unsigned opt) | ||||
| 					putchar('\t'); | ||||
| 			} | ||||
|  | ||||
| 			if ((opt & OPT_INITIAL) && ptr != line) { | ||||
| 			if (!(opt & OPT_ALL) && ptr != line) { | ||||
| 				printf("%*s%s", len, "", ptr); | ||||
| 				break; | ||||
| 			} | ||||
| @@ -207,13 +207,13 @@ int expand_main(int argc UNUSED_PARAM, char **argv) | ||||
| 				"ft:a" | ||||
| 				"\0" | ||||
| 				"ta" /* -t NUM sets -a */, | ||||
| 				"first-only\0"       No_argument       "i" | ||||
| 				"first-only\0"       No_argument       "f" | ||||
| 				"tabs\0"             Required_argument "t" | ||||
| 				"all\0"              No_argument       "a" | ||||
| 				, &opt_t | ||||
| 		); | ||||
| 		/* -f --first-only is the default */ | ||||
| 		if (!(opt & OPT_ALL)) opt |= OPT_INITIAL; | ||||
| 		/* -t implies -a, but an explicit -f overrides */ | ||||
| 		if (opt & OPT_INITIAL) opt &= ~OPT_ALL; | ||||
| 	} | ||||
| 	tab_size = xatou_range(opt_t, 1, UINT_MAX); | ||||
|  | ||||
|   | ||||
| @@ -31,6 +31,39 @@ testing "unexpand case 7" "unexpand" \ | ||||
| testing "unexpand case 8" "unexpand" \ | ||||
| 	"a b\n" "" "a b\n" \ | ||||
|  | ||||
| testcase() | ||||
| { | ||||
|     testing "unexpand flags $*" "unexpand $*" \ | ||||
|         "$want" "" '        a       b    c' | ||||
| } | ||||
|  | ||||
| # tabs=8, Convert only leading sequences of blanks | ||||
| want='\ta       b    c' | ||||
| testcase | ||||
| testcase -f | ||||
| testcase -f -t8 | ||||
| testcase -t8 -f | ||||
| testcase -t8 --first-only | ||||
|  | ||||
| # tabs=8, Convert all blanks | ||||
| want='\ta\tb    c' | ||||
| testcase -a | ||||
| testcase -t8 | ||||
| testcase -a -t8 | ||||
|  | ||||
| # tabs=4, Convert all blanks | ||||
| want='\t\ta\t\tb\t c' | ||||
| testcase -t4 | ||||
| testcase -a -t4 | ||||
| testcase -t4 -a | ||||
|  | ||||
| # tabs=4, Convert only leading sequences of blanks | ||||
| want='\t\ta       b    c' | ||||
| testcase -t4 -f | ||||
| testcase -f -t4 | ||||
| testcase -t4 --first-only | ||||
| testcase --first-only -t4 | ||||
|  | ||||
| test x"$CONFIG_UNICODE_SUPPORT" = x"y" \ | ||||
| && test x"$CONFIG_UNICODE_USING_LOCALE" != x"y" \ | ||||
| && testing "unexpand with unicode characher 0x394" "unexpand" \ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user