This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
>>>>> Andreas Jaeger wrote long ago:
> struct flock is defined with different sizes if you compile with
> -D_FILE_OFFSET_BITS=64. The following example will break in this case
> since the kernel expects a struct with a different size:
> struct flock fl;
> fcntl (fd, F_GETLK, &fl);
> What can we do? I see two alternatives:
> A) Use in <bits/fcntl.h>:
> #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
> B) The other alternative is to add fcntl64 and handle it the usual
> way:
> # ifndef __USE_FILE_OFFSET64
> extern int fcntl (...
> # else
> # ifdef __REDIRECT
> extern int __REDIRECT (fcntl, ..., fcntl64);
> # else
> # define fcntl fcntl64
> # endif
> # endif
> What do you think? Which alternative is better - or does it work
> already without problems?
Ok, fcntl64 and the constants have found their way into the kernel and
we can use them now. It's time to clean up this mess.
I'm adding a patch for the first alternative, the second alternative
is way too messy.
What do you think? Shall I commit this?
Andreas
2000-08-12 Andreas Jaeger <aj@suse.de>
* sysdeps/unix/sysv/linux/i386/bits/fcntl.h: Handle
__USE_FILE_OFFSET64 correctly for locking.
============================================================
Index: sysdeps/unix/sysv/linux/i386/bits/fcntl.h
--- sysdeps/unix/sysv/linux/i386/bits/fcntl.h 2000/08/12 07:20:28 1.6
+++ sysdeps/unix/sysv/linux/i386/bits/fcntl.h 2000/08/12 11:19:35
@@ -65,9 +65,15 @@
#define F_SETFD 2 /* Set file descriptor flags. */
#define F_GETFL 3 /* Get file status flags. */
#define F_SETFL 4 /* Set file status flags. */
-#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). */
+#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). */
--
Andreas Jaeger
SuSE Labs aj@suse.de
private aj@arthur.inka.de
http://www.suse.de/~aj
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |