 3bbaec00a8
			
		
	
	3bbaec00a8
	
	
	
		
			
			This library provides thread-unsafe fgets()- and fread()-like functions where the caller does not have to supply a buffer. It maintains a couple of static buffers and provides an API to use them. [rr: allow input from files other than stdin] [jn: with tests, documentation, and error handling improvements] Signed-off-by: David Barr <david.barr@cordelta.com> Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
			
				
	
	
		
			47 lines
		
	
	
		
			906 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			906 B
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * test-line-buffer.c: code to exercise the svn importer's input helper
 | |
|  *
 | |
|  * Input format:
 | |
|  *	number NL
 | |
|  *	(number bytes) NL
 | |
|  *	number NL
 | |
|  *	...
 | |
|  */
 | |
| 
 | |
| #include "git-compat-util.h"
 | |
| #include "vcs-svn/line_buffer.h"
 | |
| 
 | |
| static uint32_t strtouint32(const char *s)
 | |
| {
 | |
| 	char *end;
 | |
| 	uintmax_t n = strtoumax(s, &end, 10);
 | |
| 	if (*s == '\0' || *end != '\0')
 | |
| 		die("invalid count: %s", s);
 | |
| 	return (uint32_t) n;
 | |
| }
 | |
| 
 | |
| int main(int argc, char *argv[])
 | |
| {
 | |
| 	char *s;
 | |
| 
 | |
| 	if (argc != 1)
 | |
| 		usage("test-line-buffer < input.txt");
 | |
| 	if (buffer_init(NULL))
 | |
| 		die_errno("open error");
 | |
| 	while ((s = buffer_read_line())) {
 | |
| 		s = buffer_read_string(strtouint32(s));
 | |
| 		fputs(s, stdout);
 | |
| 		fputc('\n', stdout);
 | |
| 		buffer_skip_bytes(1);
 | |
| 		if (!(s = buffer_read_line()))
 | |
| 			break;
 | |
| 		buffer_copy_bytes(strtouint32(s) + 1);
 | |
| 	}
 | |
| 	if (buffer_deinit())
 | |
| 		die("input error");
 | |
| 	if (ferror(stdout))
 | |
| 		die("output error");
 | |
| 	buffer_reset();
 | |
| 	return 0;
 | |
| }
 |