* Patch: Convert linux-generic to use <bits/fcntl-linux.h>
@ 2012-10-24 19:05 Andreas Jaeger
2012-10-24 19:31 ` Chris Metcalf
0 siblings, 1 reply; 9+ messages in thread
From: Andreas Jaeger @ 2012-10-24 19:05 UTC (permalink / raw)
To: libc-ports; +Cc: cmetcalf
Here's a patch for linux-generic to use <bits/fcntl-linux.h>.
The patch is also part of my git branch aj/shared-linux-fcntl.
Ok to commit?
Andreas
2012-10-24 Andreas Jaeger <aj@suse.de>
* sysdeps/unix/sysv/linux/generic/bits/fcntl.h: Remove all
definitions and declarations that are provided by
<bits/fcntl-linux.h> and include <bits/fcntl-linux.h>.
diff --git a/ports/sysdeps/unix/sysv/linux/generic/bits/fcntl.h b/ports/sysdeps/unix/sysv/linux/generic/bits/fcntl.h
index a8f20bd..7ea207c 100644
--- a/ports/sysdeps/unix/sysv/linux/generic/bits/fcntl.h
+++ b/ports/sysdeps/unix/sysv/linux/generic/bits/fcntl.h
@@ -1,5 +1,5 @@
/* O_*, F_*, FD_* bit values for the generic Linux ABI.
- Copyright (C) 2011 Free Software Foundation, Inc.
+ Copyright (C) 2011-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
@@ -21,147 +21,12 @@
# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
#endif
-#include <sys/types.h>
#include <bits/wordsize.h>
-#ifdef __USE_GNU
-# include <bits/uio.h>
-#endif
-
-
-/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
- located on a few file systems. */
-#define O_ACCMODE 0003
-#define O_RDONLY 00
-#define O_WRONLY 01
-#define O_RDWR 02
-#define O_CREAT 0100 /* not fcntl */
-#define O_EXCL 0200 /* not fcntl */
-#define O_NOCTTY 0400 /* not fcntl */
-#define O_TRUNC 01000 /* not fcntl */
-#define O_APPEND 02000
-#define O_NONBLOCK 04000
-#define O_NDELAY O_NONBLOCK
-#define O_SYNC 04010000
-#define O_FSYNC O_SYNC
-#define O_ASYNC 020000
-
-#ifdef __USE_XOPEN2K8
-# define O_DIRECTORY 0200000 /* Must be a directory. */
-# define O_NOFOLLOW 0400000 /* Do not follow links. */
-# define O_CLOEXEC 02000000 /* Set close_on_exec. */
-#endif
-#ifdef __USE_GNU
-# define O_DIRECT 040000 /* Direct disk access. */
-# define O_NOATIME 01000000 /* Do not set atime. */
-# define O_PATH 010000000 /* Resolve pathname but do not open file. */
-#endif
-
-/* For now Linux has synchronisity options for data and read operations.
- We define the symbols here but let them do the same as O_SYNC since
- this is a superset. */
-#if defined __USE_POSIX199309 || defined __USE_UNIX98
-# define O_DSYNC 010000 /* Synchronize data. */
-# define O_RSYNC O_SYNC /* Synchronize read operations. */
-#endif
-#ifdef __USE_LARGEFILE64
-# if __WORDSIZE == 64
-# define O_LARGEFILE 0
-# else
-# define O_LARGEFILE 0100000
-# endif
-#endif
-
-/* Values for the second argument to `fcntl'. */
-#define F_DUPFD 0 /* Duplicate file descriptor. */
-#define F_GETFD 1 /* Get file descriptor flags. */
-#define F_SETFD 2 /* Set file descriptor flags. */
-#define F_GETFL 3 /* Get file status flags. */
-#define F_SETFL 4 /* Set file status flags. */
#if __WORDSIZE == 64
-# define F_GETLK 5 /* Get record locking info. */
-# define F_SETLK 6 /* Set record locking info (non-blocking). */
-# define F_SETLKW 7 /* Set record locking info (blocking). */
-/* Not necessary, we always have 64-bit offsets. */
-# define F_GETLK64 5 /* Get record locking info. */
-# define F_SETLK64 6 /* Set record locking info (non-blocking). */
-# define F_SETLKW64 7 /* Set record locking info (blocking). */
+# define __O_LARGEFILE 0
#else
-# ifndef __USE_FILE_OFFSET64
-# define F_GETLK 5 /* Get record locking info. */
-# define F_SETLK 6 /* Set record locking info (non-blocking). */
-# define F_SETLKW 7 /* Set record locking info (blocking). */
-# else
-# define F_GETLK F_GETLK64 /* Get record locking info. */
-# define F_SETLK F_SETLK64 /* Set record locking info (non-blocking).*/
-# define F_SETLKW F_SETLKW64 /* Set record locking info (blocking). */
-# endif
-# define F_GETLK64 12 /* Get record locking info. */
-# define F_SETLK64 13 /* Set record locking info (non-blocking). */
-# define F_SETLKW64 14 /* Set record locking info (blocking). */
-#endif
-
-#if defined __USE_BSD || defined __USE_UNIX98 || defined __USE_XOPEN2K8
-# define F_SETOWN 8 /* Get owner (process receiving SIGIO). */
-# define F_GETOWN 9 /* Set owner (process receiving SIGIO). */
-#endif
-
-#ifdef __USE_GNU
-# define F_SETSIG 10 /* Set number of signal to be sent. */
-# define F_GETSIG 11 /* Get number of signal to be sent. */
-# define F_SETOWN_EX 15 /* Get owner (thread receiving SIGIO). */
-# define F_GETOWN_EX 16 /* Set owner (thread receiving SIGIO). */
-#endif
-
-#ifdef __USE_GNU
-# define F_SETLEASE 1024 /* Set a lease. */
-# define F_GETLEASE 1025 /* Enquire what lease is active. */
-# define F_NOTIFY 1026 /* Request notfications on a directory. */
-# define F_SETPIPE_SZ 1031 /* Set pipe page size array. */
-# define F_GETPIPE_SZ 1032 /* Set pipe page size array. */
-#endif
-#ifdef __USE_XOPEN2K8
-# define F_DUPFD_CLOEXEC 1030 /* Duplicate file descriptor with
- close-on-exit set. */
-#endif
-
-/* For F_[GET|SET]FD. */
-#define FD_CLOEXEC 1 /* actually anything with low bit set goes */
-
-/* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */
-#define F_RDLCK 0 /* Read lock. */
-#define F_WRLCK 1 /* Write lock. */
-#define F_UNLCK 2 /* Remove lock. */
-
-/* For old implementation of bsd flock(). */
-#define F_EXLCK 4 /* or 3 */
-#define F_SHLCK 8 /* or 4 */
-
-#ifdef __USE_BSD
-/* Operations for bsd flock(), also used by the kernel implementation. */
-# define LOCK_SH 1 /* shared lock */
-# define LOCK_EX 2 /* exclusive lock */
-# define LOCK_NB 4 /* or'd with one of the above to prevent
- blocking */
-# define LOCK_UN 8 /* remove lock */
-#endif
-
-#ifdef __USE_GNU
-# define LOCK_MAND 32 /* This is a mandatory flock: */
-# define LOCK_READ 64 /* ... which allows concurrent read operations. */
-# define LOCK_WRITE 128 /* ... which allows concurrent write operations. */
-# define LOCK_RW 192 /* ... Which allows concurrent read & write operations. */
-#endif
-
-#ifdef __USE_GNU
-/* Types of directory notifications that may be requested with F_NOTIFY. */
-# define DN_ACCESS 0x00000001 /* File accessed. */
-# define DN_MODIFY 0x00000002 /* File modified. */
-# define DN_CREATE 0x00000004 /* File created. */
-# define DN_DELETE 0x00000008 /* File removed. */
-# define DN_RENAME 0x00000010 /* File renamed. */
-# define DN_ATTRIB 0x00000020 /* File changed attibutes. */
-# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */
+# define __O_LARGEFILE 0100000
#endif
struct flock
@@ -189,151 +54,5 @@ struct flock64
};
#endif
-#ifdef __USE_GNU
-/* Owner types. */
-enum __pid_type
- {
- F_OWNER_TID = 0, /* Kernel thread. */
- F_OWNER_PID, /* Process. */
- F_OWNER_PGRP, /* Process group. */
- F_OWNER_GID = F_OWNER_PGRP /* Alternative, obsolete name. */
- };
-
-/* Structure to use with F_GETOWN_EX and F_SETOWN_EX. */
-struct f_owner_ex
- {
- enum __pid_type type; /* Owner type of ID. */
- __pid_t pid; /* ID of owner. */
- };
-#endif
-
-/* Define some more compatibility macros to be backward compatible with
- BSD systems which did not managed to hide these kernel macros. */
-#ifdef __USE_BSD
-# define FAPPEND O_APPEND
-# define FFSYNC O_FSYNC
-# define FASYNC O_ASYNC
-# define FNONBLOCK O_NONBLOCK
-# define FNDELAY O_NDELAY
-#endif /* Use BSD. */
-
-/* Advise to `posix_fadvise'. */
-#ifdef __USE_XOPEN2K
-# define POSIX_FADV_NORMAL 0 /* No further special treatment. */
-# define POSIX_FADV_RANDOM 1 /* Expect random page references. */
-# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */
-# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */
-# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */
-# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */
-#endif
-
-
-#ifdef __USE_GNU
-/* Flags for SYNC_FILE_RANGE. */
-# define SYNC_FILE_RANGE_WAIT_BEFORE 1 /* Wait upon writeout of all pages
- in the range before performing the
- write. */
-# define SYNC_FILE_RANGE_WRITE 2 /* Initiate writeout of all those
- dirty pages in the range which are
- not presently under writeback. */
-# define SYNC_FILE_RANGE_WAIT_AFTER 4 /* Wait upon writeout of all pages in
- the range after performing the
- write. */
-
-/* Flags for SPLICE and VMSPLICE. */
-# define SPLICE_F_MOVE 1 /* Move pages instead of copying. */
-# define SPLICE_F_NONBLOCK 2 /* Don't block on the pipe splicing
- (but we may still block on the fd
- we splice from/to). */
-# define SPLICE_F_MORE 4 /* Expect more data. */
-# define SPLICE_F_GIFT 8 /* Pages passed in are a gift. */
-
-
-/* File handle structure. */
-struct file_handle
-{
- unsigned int handle_bytes;
- int handle_type;
- /* File identifier. */
- unsigned char f_handle[0];
-};
-
-/* Maximum handle size (for now). */
-# define MAX_HANDLE_SZ 128
-#endif
-
-__BEGIN_DECLS
-
-#ifdef __USE_GNU
-
-/* Provide kernel hint to read ahead. */
-extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count)
- __THROW;
-
-
-/* Selective file content synch'ing.
-
- This function is a possible cancellation point and therefore not
- marked with __THROW. */
-extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count,
- unsigned int __flags);
-
-
-/* Splice address range into a pipe.
-
- This function is a possible cancellation point and therefore not
- marked with __THROW. */
-extern ssize_t vmsplice (int __fdout, const struct iovec *__iov,
- size_t __count, unsigned int __flags);
-
-/* Splice two files together.
-
- This function is a possible cancellation point and therefore not
- marked with __THROW. */
-extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout,
- __off64_t *__offout, size_t __len,
- unsigned int __flags);
-
-/* In-kernel implementation of tee for pipe buffers.
-
- This function is a possible cancellation point and therefore not
- marked with __THROW. */
-extern ssize_t tee (int __fdin, int __fdout, size_t __len,
- unsigned int __flags);
-
-/* Reserve storage for the data of the file associated with FD.
-
- This function is a possible cancellation point and therefore not
- marked with __THROW. */
-# ifndef __USE_FILE_OFFSET64
-extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len);
-# else
-# ifdef __REDIRECT
-extern int __REDIRECT (fallocate, (int __fd, int __mode, __off64_t __offset,
- __off64_t __len),
- fallocate64);
-# else
-# define fallocate fallocate64
-# endif
-# endif
-# ifdef __USE_LARGEFILE64
-extern int fallocate64 (int __fd, int __mode, __off64_t __offset,
- __off64_t __len);
-# endif
-
-
-/* Map file name to file handle. */
-extern int name_to_handle_at (int __dfd, const char *__name,
- struct file_handle *__handle, int *__mnt_id,
- int __flags) __THROW;
-
-/* Open file using the file handle.
-
- This function is a possible cancellation point and therefore not
- marked with __THROW. */
-extern int open_by_handle_at (int __mountdirfd, struct file_handle *__handle,
- int __flags);
-
-#endif /* use GNU */
-
-__END_DECLS
+/* Include generic Linux declarations. */
+#include <bits/fcntl-linux.h>
--
Andreas Jaeger aj@{suse.com,opensuse.org} Twitter/Identica: jaegerandi
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn,Jennifer Guild,Felix Imendörffer,HRB16746 (AG Nürnberg)
GPG fingerprint = 93A3 365E CE47 B889 DF7F FED1 389A 563C C272 A126
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Patch: Convert linux-generic to use <bits/fcntl-linux.h>
2012-10-24 19:05 Patch: Convert linux-generic to use <bits/fcntl-linux.h> Andreas Jaeger
@ 2012-10-24 19:31 ` Chris Metcalf
2012-10-24 20:04 ` Andreas Jaeger
0 siblings, 1 reply; 9+ messages in thread
From: Chris Metcalf @ 2012-10-24 19:31 UTC (permalink / raw)
To: Andreas Jaeger; +Cc: libc-ports
On 10/24/2012 3:05 PM, Andreas Jaeger wrote:
> Here's a patch for linux-generic to use <bits/fcntl-linux.h>.
> The patch is also part of my git branch aj/shared-linux-fcntl.
Does it make sense to move the O_LARGEFILE definition to bits/fcntl-linux.h
instead, i.e. if __O_LARGEFILE is not defined, provide a definition that's
conditional on _WORDSIZE? That seems like a more natural default,
particularly as more platforms will be 64-bit with time and thus want zero
for O_LARGEFILE. <bits/wordsize.h> could either be unconditionally
included, or just included ifndef __O_LARGEFILE.
Likewise, it might make sense to take the linux-generic version of struct
flock/flock64 into bits/fcntl-linux.h, with an "#ifndef __struct_flock" or
equivalent so that platforms with variant definitions of those structures
can provide them.
This would leave us in the natural-seeming position of having linux-generic
use the generic Linux version of fcntl.h with no customizations :-)
--
Chris Metcalf, Tilera Corp.
http://www.tilera.com
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Patch: Convert linux-generic to use <bits/fcntl-linux.h>
2012-10-24 19:31 ` Chris Metcalf
@ 2012-10-24 20:04 ` Andreas Jaeger
2012-10-24 20:32 ` Mike Frysinger
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Andreas Jaeger @ 2012-10-24 20:04 UTC (permalink / raw)
To: Chris Metcalf; +Cc: libc-ports, libc-alpha
On 10/24/2012 09:31 PM, Chris Metcalf wrote:
> On 10/24/2012 3:05 PM, Andreas Jaeger wrote:
>> Here's a patch for linux-generic to use <bits/fcntl-linux.h>.
>> The patch is also part of my git branch aj/shared-linux-fcntl.
>
> Does it make sense to move the O_LARGEFILE definition to bits/fcntl-linux.h
> instead, i.e. if __O_LARGEFILE is not defined, provide a definition that's
> conditional on _WORDSIZE? That seems like a more natural default,
> particularly as more platforms will be 64-bit with time and thus want zero
> for O_LARGEFILE. <bits/wordsize.h> could either be unconditionally
> included, or just included ifndef __O_LARGEFILE.
We could have:
#ifdef __USE_LARGEFILE64
# if __WORDSIZE == 64
# define O_LARGEFILE 0
# else
# define O_LARGEFILE __O_LARGEFILE
# endif
#endif
but this needs we need to include <bits/wordsize.h> in
<bits/fcntl-linux.h> which is not always the case today.
Especially, there's no double inclusion protection for <bits/wordsize.h>
so if <bits/fcntl.h> already includes <bits/wordsize.h>, it will give
warnings about redefinitions.
How can we solve that? What do others thing?
> Likewise, it might make sense to take the linux-generic version of struct
> flock/flock64 into bits/fcntl-linux.h, with an "#ifndef __struct_flock" or
> equivalent so that platforms with variant definitions of those structures
> can provide them.
Yes, struct flock cleanup is another topic which I did not tackle yet on
purpose. If you like to give it a go, you're welcome ;)
> This would leave us in the natural-seeming position of having linux-generic
> use the generic Linux version of fcntl.h with no customizations :-)
;)
It's already quite short after my patch,
Andreas
--
Andreas Jaeger aj@{suse.com,opensuse.org} Twitter/Identica: jaegerandi
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn,Jennifer Guild,Felix Imendörffer,HRB16746 (AG Nürnberg)
GPG fingerprint = 93A3 365E CE47 B889 DF7F FED1 389A 563C C272 A126
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Patch: Convert linux-generic to use <bits/fcntl-linux.h>
2012-10-24 20:04 ` Andreas Jaeger
@ 2012-10-24 20:32 ` Mike Frysinger
2012-10-24 20:46 ` Chris Metcalf
2012-10-24 20:36 ` Roland McGrath
2012-10-24 20:43 ` Chris Metcalf
2 siblings, 1 reply; 9+ messages in thread
From: Mike Frysinger @ 2012-10-24 20:32 UTC (permalink / raw)
To: libc-ports; +Cc: Andreas Jaeger, Chris Metcalf, libc-alpha
[-- Attachment #1: Type: Text/Plain, Size: 1116 bytes --]
On Wednesday 24 October 2012 16:04:15 Andreas Jaeger wrote:
> On 10/24/2012 09:31 PM, Chris Metcalf wrote:
> > On 10/24/2012 3:05 PM, Andreas Jaeger wrote:
> >> Here's a patch for linux-generic to use <bits/fcntl-linux.h>.
> >> The patch is also part of my git branch aj/shared-linux-fcntl.
> >
> > Does it make sense to move the O_LARGEFILE definition to
> > bits/fcntl-linux.h instead, i.e. if __O_LARGEFILE is not defined,
> > provide a definition that's conditional on _WORDSIZE? That seems like a
> > more natural default, particularly as more platforms will be 64-bit with
> > time and thus want zero for O_LARGEFILE. <bits/wordsize.h> could either
> > be unconditionally included, or just included ifndef __O_LARGEFILE.
>
> We could have:
> #ifdef __USE_LARGEFILE64
> # if __WORDSIZE == 64
> # define O_LARGEFILE 0
> # else
> # define O_LARGEFILE __O_LARGEFILE
> # endif
> #endif
if i'm reading mips' fcntl.h correctly, i don't think that'll work. you'd
have to make this the __O_LARGEFILE default rather than O_LARGEFILE. their
64bit abis are kind of the suck :/.
-mike
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Patch: Convert linux-generic to use <bits/fcntl-linux.h>
2012-10-24 20:04 ` Andreas Jaeger
2012-10-24 20:32 ` Mike Frysinger
@ 2012-10-24 20:36 ` Roland McGrath
2012-10-25 6:12 ` Andreas Jaeger
2012-10-24 20:43 ` Chris Metcalf
2 siblings, 1 reply; 9+ messages in thread
From: Roland McGrath @ 2012-10-24 20:36 UTC (permalink / raw)
To: Andreas Jaeger; +Cc: Chris Metcalf, libc-ports, libc-alpha
> We could have:
> #ifdef __USE_LARGEFILE64
> # if __WORDSIZE == 64
> # define O_LARGEFILE 0
> # else
> # define O_LARGEFILE __O_LARGEFILE
> # endif
> #endif
That's too much hair. If there is a majority common value for
__O_LARGEFILE, then you can default __O_LARGEFILE to that value.
Beyond that, I'd say just leave it alone.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Patch: Convert linux-generic to use <bits/fcntl-linux.h>
2012-10-24 20:04 ` Andreas Jaeger
2012-10-24 20:32 ` Mike Frysinger
2012-10-24 20:36 ` Roland McGrath
@ 2012-10-24 20:43 ` Chris Metcalf
2 siblings, 0 replies; 9+ messages in thread
From: Chris Metcalf @ 2012-10-24 20:43 UTC (permalink / raw)
To: Andreas Jaeger; +Cc: libc-ports, libc-alpha
On 10/24/2012 4:04 PM, Andreas Jaeger wrote:
> On 10/24/2012 09:31 PM, Chris Metcalf wrote:
>> On 10/24/2012 3:05 PM, Andreas Jaeger wrote:
>>> Here's a patch for linux-generic to use <bits/fcntl-linux.h>.
>>> The patch is also part of my git branch aj/shared-linux-fcntl.
>>
>> Does it make sense to move the O_LARGEFILE definition to bits/fcntl-linux.h
>> instead, i.e. if __O_LARGEFILE is not defined, provide a definition that's
>> conditional on _WORDSIZE? That seems like a more natural default,
>> particularly as more platforms will be 64-bit with time and thus want zero
>> for O_LARGEFILE. <bits/wordsize.h> could either be unconditionally
>> included, or just included ifndef __O_LARGEFILE.
>
> We could have:
> #ifdef __USE_LARGEFILE64
> # if __WORDSIZE == 64
> # define O_LARGEFILE 0
> # else
> # define O_LARGEFILE __O_LARGEFILE
> # endif
> #endif
>
> but this needs we need to include <bits/wordsize.h> in
> <bits/fcntl-linux.h> which is not always the case today.
>
> Especially, there's no double inclusion protection for <bits/wordsize.h>
> so if <bits/fcntl.h> already includes <bits/wordsize.h>, it will give
> warnings about redefinitions.
>
> How can we solve that? What do others thing?
I think it's OK to include it freely here or elsewhere. All the existing
<wordsize.h> headers just offer #defines, which can be repeated multiple
times as long as each time the variable is defined to the same value.
>> Likewise, it might make sense to take the linux-generic version of struct
>> flock/flock64 into bits/fcntl-linux.h, with an "#ifndef __struct_flock" or
>> equivalent so that platforms with variant definitions of those structures
>> can provide them.
>
> Yes, struct flock cleanup is another topic which I did not tackle yet on
> purpose. If you like to give it a go, you're welcome ;)
>
>> This would leave us in the natural-seeming position of having linux-generic
>> use the generic Linux version of fcntl.h with no customizations :-)
>
> ;)
>
> It's already quite short after my patch,
Yes, perhaps I should have mentioned that I think the patch is definitely a
good thing as-is!
--
Chris Metcalf, Tilera Corp.
http://www.tilera.com
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Patch: Convert linux-generic to use <bits/fcntl-linux.h>
2012-10-24 20:32 ` Mike Frysinger
@ 2012-10-24 20:46 ` Chris Metcalf
0 siblings, 0 replies; 9+ messages in thread
From: Chris Metcalf @ 2012-10-24 20:46 UTC (permalink / raw)
To: Mike Frysinger; +Cc: libc-ports, Andreas Jaeger, libc-alpha
On 10/24/2012 4:32 PM, Mike Frysinger wrote:
> On Wednesday 24 October 2012 16:04:15 Andreas Jaeger wrote:
>> On 10/24/2012 09:31 PM, Chris Metcalf wrote:
>>> Does it make sense to move the O_LARGEFILE definition to
>>> bits/fcntl-linux.h instead, i.e. if __O_LARGEFILE is not defined,
>>> provide a definition that's conditional on _WORDSIZE? That seems like a
>>> more natural default, particularly as more platforms will be 64-bit with
>>> time and thus want zero for O_LARGEFILE. <bits/wordsize.h> could either
>>> be unconditionally included, or just included ifndef __O_LARGEFILE.
>> We could have:
>> #ifdef __USE_LARGEFILE64
>> # if __WORDSIZE == 64
>> # define O_LARGEFILE 0
>> # else
>> # define O_LARGEFILE __O_LARGEFILE
>> # endif
>> #endif
> if i'm reading mips' fcntl.h correctly, i don't think that'll work. you'd
> have to make this the __O_LARGEFILE default rather than O_LARGEFILE. their
> 64bit abis are kind of the suck :/.
> -mike
Yes, I think this default definition should be up with the other __O_xxx
definitions and define __O_LARGEFILE if it's not defined. This feels more
consistent with how the other platform defaults are handled. It also is
less hairy since the __USE_LARGEFILE test for defining O_LARGEFILE is
separated from the _WORDSIZE test for defining __O_LARGEFILE.
--
Chris Metcalf, Tilera Corp.
http://www.tilera.com
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Patch: Convert linux-generic to use <bits/fcntl-linux.h>
2012-10-24 20:36 ` Roland McGrath
@ 2012-10-25 6:12 ` Andreas Jaeger
2012-10-25 12:08 ` Chris Metcalf
0 siblings, 1 reply; 9+ messages in thread
From: Andreas Jaeger @ 2012-10-25 6:12 UTC (permalink / raw)
To: Roland McGrath; +Cc: Chris Metcalf, libc-ports, libc-alpha
On 10/24/2012 10:36 PM, Roland McGrath wrote:
>> We could have:
>> #ifdef __USE_LARGEFILE64
>> # if __WORDSIZE == 64
>> # define O_LARGEFILE 0
>> # else
>> # define O_LARGEFILE __O_LARGEFILE
>> # endif
>> #endif
>
> That's too much hair. If there is a majority common value for
> __O_LARGEFILE, then you can default __O_LARGEFILE to that value.
> Beyond that, I'd say just leave it alone.
>
There are two majority values: Basically on 32-bit it'S 0100000 and on
64-bit systems it's 0. That's why we currently have
#ifndef __O_LARGEFILE
# define __O_LARGEFILE 0100000
#endif
#ifdef __USE_LARGEFILE64
# define O_LARGEFILE __O_LARGEFILE
#endif
And 64-bit hosts define:
/* Not necessary, files are always with 64bit off_t. */
#define __O_LARGEFILE 0
While x86 and others where we support both 32-bit and 64-bit arch have
code like the following in <bits/fcntl.h>:
#if __WORDSIZE == 64
/* Not necessary, files are always with 64bit off_t. */
# define __O_LARGEFILE 0
#else
# define __O_LARGEFILE 0100000
#endif
But since Mike mentioned that this won't work for MIPS, I suggest to
leave the code as is in this case and not follow Chris' suggestion.
Chris, may I commit the original patch?
Andreas
--
Andreas Jaeger aj@{suse.com,opensuse.org} Twitter/Identica: jaegerandi
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn,Jennifer Guild,Felix Imendörffer,HRB16746 (AG Nürnberg)
GPG fingerprint = 93A3 365E CE47 B889 DF7F FED1 389A 563C C272 A126
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Patch: Convert linux-generic to use <bits/fcntl-linux.h>
2012-10-25 6:12 ` Andreas Jaeger
@ 2012-10-25 12:08 ` Chris Metcalf
0 siblings, 0 replies; 9+ messages in thread
From: Chris Metcalf @ 2012-10-25 12:08 UTC (permalink / raw)
To: Andreas Jaeger; +Cc: Roland McGrath, libc-ports, libc-alpha
On 10/25/2012 2:12 AM, Andreas Jaeger wrote:
> On 10/24/2012 10:36 PM, Roland McGrath wrote:
>>> We could have:
>>> #ifdef __USE_LARGEFILE64
>>> # if __WORDSIZE == 64
>>> # define O_LARGEFILE 0
>>> # else
>>> # define O_LARGEFILE __O_LARGEFILE
>>> # endif
>>> #endif
>>
>> That's too much hair. If there is a majority common value for
>> __O_LARGEFILE, then you can default __O_LARGEFILE to that value.
>> Beyond that, I'd say just leave it alone.
>>
>
>
> There are two majority values: Basically on 32-bit it'S 0100000 and on
> 64-bit systems it's 0. That's why we currently have
>
> #ifndef __O_LARGEFILE
> # define __O_LARGEFILE 0100000
> #endif
>
> #ifdef __USE_LARGEFILE64
> # define O_LARGEFILE __O_LARGEFILE
> #endif
>
> And 64-bit hosts define:
> /* Not necessary, files are always with 64bit off_t. */
> #define __O_LARGEFILE 0
>
> While x86 and others where we support both 32-bit and 64-bit arch have
> code like the following in <bits/fcntl.h>:
> #if __WORDSIZE == 64
> /* Not necessary, files are always with 64bit off_t. */
> # define __O_LARGEFILE 0
> #else
> # define __O_LARGEFILE 0100000
> #endif
>
> But since Mike mentioned that this won't work for MIPS, I suggest to
> leave the code as is in this case and not follow Chris' suggestion.
>
> Chris, may I commit the original patch?
Sure, I think that's reasonable. At least as-is we won't likely be adding
any more conditional definitions of __O_LARGEFILE anywhere, even as new
architectures are added.
--
Chris Metcalf, Tilera Corp.
http://www.tilera.com
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2012-10-25 12:08 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-10-24 19:05 Patch: Convert linux-generic to use <bits/fcntl-linux.h> Andreas Jaeger
2012-10-24 19:31 ` Chris Metcalf
2012-10-24 20:04 ` Andreas Jaeger
2012-10-24 20:32 ` Mike Frysinger
2012-10-24 20:46 ` Chris Metcalf
2012-10-24 20:36 ` Roland McGrath
2012-10-25 6:12 ` Andreas Jaeger
2012-10-25 12:08 ` Chris Metcalf
2012-10-24 20:43 ` Chris Metcalf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).