#ifndef _NOLIBC_SYS_H
 #define _NOLIBC_SYS_H
 
+#include <stdarg.h>
 #include "std.h"
 
 /* system includes */
 
 
 /*
- * int open(const char *path, int flags, mode_t mode);
+ * int open(const char *path, int flags[, mode_t mode]);
  */
 
 static __attribute__((unused))
 }
 
 static __attribute__((unused))
-int open(const char *path, int flags, mode_t mode)
+int open(const char *path, int flags, ...)
 {
-       int ret = sys_open(path, flags, mode);
+       mode_t mode = 0;
+       int ret;
+
+       if (flags & O_CREAT) {
+               va_list args;
+
+               va_start(args, flags);
+               mode = va_arg(args, mode_t);
+               va_end(args);
+       }
+
+       ret = sys_open(path, flags, mode);
 
        if (ret < 0) {
                SET_ERRNO(-ret);