[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[tyndur-devel] [PATCH] 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 e1fa127..e6a1955 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