chiark / gitweb /
volume_id: provide libvolume_id.a file
[elogind.git] / klibc / klibc / open.c
index 0d7db10c4a3d70daa0b19b4b835786c2311cacc5..cb1f5195dbe815b48f2b107db782b779c7a7ee66 100644 (file)
@@ -1,17 +1,22 @@
 /*
  * open.c
  *
- * The open syscall is weird, because it's defined as a varadic
- * function, but implementing it as such generally sucks for
- * performance.  Thus we generate it as a 3-argument function,
- * but with explicit __cdecl assuming the __cdecl convention is
- * independent of being varadic.
+ * On 32-bit platforms we need to pass O_LARGEFILE to the open()
+ * system call, to indicate that we're 64-bit safe.
  */
 
-#define __IN_OPEN_C
+#define _KLIBC_IN_OPEN_C
 #include <unistd.h>
 #include <fcntl.h>
-#include <sys/stat.h>
-#include <sys/syscall.h>
+#include <bitsize.h>
 
-__cdecl _syscall3(int,open,const char *,file,int,flags,mode_t,mode)
+#if _BITSIZE == 32 && !defined(__i386__)
+
+extern int __open(const char *, int, mode_t);
+
+int open(const char *pathname, int flags, mode_t mode)
+{
+  return __open(pathname, flags|O_LARGEFILE, mode);
+}
+
+#endif