[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[tyndur-devel] [PATCH 2/4] libc: Pufferung fuer stdout



* libc: Code fuer Pufferung von stdout aus crt0 nach stdio_init()
        verschoben, damit er auch von der pascal rtl benutzt werden
	kann.
* libc: Puffer fuer stdin deaktivieren, das spart etwas speicher.
---
 src/modules/lib/crt0.c          |   11 -----------
 src/modules/lib/stdlibc/stdio.c |    9 +++++++++
 2 files changed, 9 insertions(+), 11 deletions(-)

diff --git a/src/modules/lib/crt0.c b/src/modules/lib/crt0.c
index a62a65b..615baf9 100644
--- a/src/modules/lib/crt0.c
+++ b/src/modules/lib/crt0.c
@@ -50,14 +50,6 @@ void __attribute__((weak)) _start(void)
     init_waitpid();
 #ifndef _NO_STDIO_
     stdio_init();
-  #ifndef _NO_STDIO_BUFFER_
-    // Buffer fuer stdout allozieren
-    size_t stdout_buffer_size = 256;
-    void* stdout_buffer = malloc(stdout_buffer_size);
-
-    // Buffer einrichten
-    setvbuf(stdout, stdout_buffer, _IOLBF, stdout_buffer_size);
-  #endif
 #endif
 
     //Kommandozeilenargumente Parsen ----
@@ -101,10 +93,7 @@ void __attribute__((weak)) _start(void)
     // freigegeben.
     // FIXME: Alle Buffer flushen!!
 #ifndef _NO_STDIO_
-  #ifndef _NO_STDIO_BUFFER_
     fflush(stdout);
-    free(stdout_buffer);
-  #endif
 #endif
 
     exit(result);
diff --git a/src/modules/lib/stdlibc/stdio.c b/src/modules/lib/stdlibc/stdio.c
index 6685a82..3bb54d6 100644
--- a/src/modules/lib/stdlibc/stdio.c
+++ b/src/modules/lib/stdlibc/stdio.c
@@ -37,6 +37,9 @@ FILE* stdin = NULL;
 FILE* stdout = NULL;
 FILE* stderr = NULL;
 
+/// Puffer fuer die Ausgabe
+static char stdout_buf[512];
+
 /**
  * Initialisiert die Ein- und Ausgabe Filehandles
  */
@@ -65,6 +68,9 @@ void stdio_init(void)
             stdin  = fopen(path,  "rs");
         }
         fclose(path_file);
+
+        // stdin muss nicht gepuffert sein
+        setvbuf(stdin, NULL, _IONBF, 0);
     }
 
     // stdout aktualisieren
@@ -84,6 +90,9 @@ void stdio_init(void)
             stdout = fopen(path,  "a");
         }
         fclose(path_file);
+
+        // Zeilenpuffer fuer stdout aktivieren
+        setvbuf(stdout, stdout_buf, _IOLBF, sizeof(stdout_buf));
     }
 
     // stderr
-- 
1.6.0.6