*
* (C) 2002 Ximian, Inc.
* Copyright (c) 2002-2009 Novell, Inc.
+ * Copyright 2011 Xamarin Inc
*/
#include <config.h>
#include <mono/io-layer/handles-private.h>
#include <mono/io-layer/io-private.h>
+#if 0
+#define DEBUG(...) g_message(__VA_ARGS__)
+#else
+#define DEBUG(...)
+#endif
+
static guint32
convert_from_flags(int flags)
{
} else if ((flags & O_ACCMODE) == O_RDWR) {
fileaccess=GENERIC_READ|GENERIC_WRITE;
} else {
-#ifdef DEBUG
- g_message("%s: Can't figure out flags 0x%x", __func__, flags);
-#endif
+ DEBUG("%s: Can't figure out flags 0x%x", __func__, flags);
}
/* Maybe sort out create mode too */
gpointer handle;
int flags;
-#ifdef DEBUG
- g_message("%s: creating standard handle type %s, fd %d", __func__,
+ DEBUG("%s: creating standard handle type %s, fd %d", __func__,
name, fd);
-#endif
-
+
+#if !defined(__native_client__)
/* Check if fd is valid */
do {
flags=fcntl(fd, F_GETFL);
/* Invalid fd. Not really much point checking for EBADF
* specifically
*/
-#ifdef DEBUG
- g_message("%s: fcntl error on fd %d: %s", __func__, fd,
+ DEBUG("%s: fcntl error on fd %d: %s", __func__, fd,
strerror(errno));
-#endif
SetLastError (_wapi_get_win32_file_error (errno));
return(INVALID_HANDLE_VALUE);
}
+ file_handle.fileaccess=convert_from_flags(flags);
+#else
+ /*
+ * fcntl will return -1 in nacl, as there is no real file system API.
+ * Yet, standard streams are available.
+ */
+ file_handle.fileaccess = (fd == STDIN_FILENO) ? GENERIC_READ : GENERIC_WRITE;
+#endif
+ file_handle.fd = fd;
file_handle.filename = g_strdup(name);
/* some default security attributes might be needed */
file_handle.security_attributes=0;
- file_handle.fileaccess=convert_from_flags(flags);
/* Apparently input handles can't be written to. (I don't
* know if output or error handles can't be read from.)
return(INVALID_HANDLE_VALUE);
}
-#ifdef DEBUG
- g_message("%s: returning handle %p", __func__, handle);
-#endif
+ DEBUG("%s: returning handle %p", __func__, handle);
return(handle);
}