diff --git a/cpu/native/syscalls.c b/cpu/native/syscalls.c
index a7df2b4a342351bdff8f3216df9622f343d89cd5..5ef8efce405003d8de1c072dd7585c30c3380c99 100644
--- a/cpu/native/syscalls.c
+++ b/cpu/native/syscalls.c
@@ -289,21 +289,33 @@ int printf(const char *format, ...)
 {
     int r;
     va_list argp;
-    char *m;
 
     va_start(argp, format);
-    if ((m = make_message(format, argp)) == NULL) {
-        err(EXIT_FAILURE, "malloc");
-    }
-    r = _native_write(STDOUT_FILENO, m, strlen(m));
+    r = vfprintf(stdout, format, argp);
     va_end(argp);
-    free(m);
 
     return r;
 }
 
 
 int vprintf(const char *format, va_list argp)
+{
+    return vfprintf(stdout, format, argp);
+}
+
+int fprintf(FILE *fp, const char *format, ...)
+{
+    int r;
+    va_list argp;
+
+    va_start(argp, format);
+    r = vfprintf(fp, format, argp);
+    va_end(argp);
+
+    return r;
+}
+
+int vfprintf(FILE *fp, const char *format, va_list argp)
 {
     int r;
     char *m;
@@ -311,7 +323,7 @@ int vprintf(const char *format, va_list argp)
     if ((m = make_message(format, argp)) == NULL) {
         err(EXIT_FAILURE, "malloc");
     }
-    r = _native_write(STDOUT_FILENO, m, strlen(m));
+    r = _native_write(fileno(fp), m, strlen(m));
     free(m);
 
     return r;