rev: correct output for long input lines
The input buffer is initialised to a reasonable size and extended if necessary. When this happened the offset into the buffer wasn't reset to zero so subsequent lines were appended to the long line. Fix this and add some tests. function old new delta rev_main 377 368 -9 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-9) Total: -9 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
		
				
					committed by
					
						 Denys Vlasenko
						Denys Vlasenko
					
				
			
			
				
	
			
			
			
						parent
						
							62d5a1e56f
						
					
				
				
					commit
					4357569fdc
				
			
							
								
								
									
										46
									
								
								testsuite/rev.tests
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										46
									
								
								testsuite/rev.tests
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,46 @@ | ||||
| #!/bin/sh | ||||
| # Copyright 2021 by Ron Yorston | ||||
| # Licensed under GPLv2, see file LICENSE in this source tree. | ||||
|  | ||||
| . ./testing.sh | ||||
|  | ||||
| # testing "test name" "commands" "expected result" "file input" "stdin" | ||||
|  | ||||
| testing "rev works" \ | ||||
| 	"rev input" \ | ||||
| "\ | ||||
| 1 enil | ||||
|  | ||||
| 3 enil | ||||
| " \ | ||||
| 	"line 1\n\nline 3\n" \ | ||||
| 	"" | ||||
|  | ||||
| testing "rev file with missing newline" \ | ||||
| 	"rev input" \ | ||||
| "\ | ||||
| 1 enil | ||||
|  | ||||
| 3 enil" \ | ||||
| 	"line 1\n\nline 3" \ | ||||
| 	"" | ||||
|  | ||||
| testing "rev file with NUL character" \ | ||||
| 	"rev input" \ | ||||
| "\ | ||||
| nil | ||||
| 3 enil | ||||
| " \ | ||||
| 	"lin\000e 1\n\nline 3\n" \ | ||||
| 	"" | ||||
|  | ||||
| testing "rev file with long line" \ | ||||
| 	"rev input" \ | ||||
| "\ | ||||
| +--------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+--------------- | ||||
| cba | ||||
| " \ | ||||
| 	"---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+--------------+\nabc\n" \ | ||||
| 	"" | ||||
|  | ||||
| exit $FAILCOUNT | ||||
| @@ -109,6 +109,7 @@ int rev_main(int argc UNUSED_PARAM, char **argv) | ||||
| 			strrev(buf, strlen(buf)); | ||||
| #endif | ||||
| 			fputs_stdout(buf); | ||||
| 			pos = 0; | ||||
| 		} | ||||
| 		fclose(fp); | ||||
| 	} while (*argv); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user