Mon 14 Oct 23:14:00 CEST 2024
This commit is contained in:
		
							parent
							
								
									ce19b7e20d
								
							
						
					
					
						commit
						71a603acb0
					
				
							
								
								
									
										48
									
								
								library/stdio.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								library/stdio.c
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,48 @@ | |||
| /*
 | ||||
| Copyright (C) 2016-2019 The University of Notre Dame | ||||
| This software is distributed under the GNU General Public License. | ||||
| See the file LICENSE for details. | ||||
| */ | ||||
| 
 | ||||
| #include "kernel/types.h" | ||||
| #include "library/stdio.h" | ||||
| #include "library/syscalls.h" | ||||
| #include "library/string.h" | ||||
| #include "stdarg.h" | ||||
| 
 | ||||
| static char stdio_buffer[PAGE_SIZE] = { 0 }; | ||||
| 
 | ||||
| static uint32_t stdio_buffer_index = 0; | ||||
| 
 | ||||
| void flush() | ||||
| { | ||||
| 	syscall_object_write(KNO_STDOUT, stdio_buffer, stdio_buffer_index, 0); | ||||
| 	stdio_buffer_index = 0; | ||||
| 	stdio_buffer[0] = 0; | ||||
| } | ||||
| 
 | ||||
| static void printf_buffer(char *s, unsigned len) | ||||
| { | ||||
| 	while(len) { | ||||
| 		unsigned l = len % (PAGE_SIZE - 1); | ||||
| 		if(l > PAGE_SIZE - stdio_buffer_index - 1) { | ||||
| 			flush(); | ||||
| 		} | ||||
| 		memcpy(stdio_buffer + stdio_buffer_index, s, l); | ||||
| 		stdio_buffer_index += l; | ||||
| 		len -= l; | ||||
| 	} | ||||
| 	stdio_buffer[stdio_buffer_index] = 0; | ||||
| } | ||||
| 
 | ||||
| void printf_putchar(char c) | ||||
| { | ||||
| 	printf_buffer(&c, 1); | ||||
| 	if(c == '\n') | ||||
| 		flush(); | ||||
| } | ||||
| 
 | ||||
| void printf_putstring(char *s) | ||||
| { | ||||
| 	printf_buffer(s, strlen(s)); | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user