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