Browse Source

Output an error if uClibc's and app's largefile configuration are incompatible.

Manuel Novoa III 22 years ago
parent
commit
4c210f02a2
2 changed files with 36 additions and 0 deletions
  1. 34 0
      include/features.h
  2. 2 0
      libc/sysdeps/linux/common/statfix.h

+ 34 - 0
include/features.h

@@ -85,6 +85,11 @@
    but are implied by the other feature-test macros defined (or by the
    lack of any definitions) are defined by the file.  */
 
+/* First, record if user requested some form of large file support. */
+#if defined(_LARGEFILE_SOURCE) || defined(_LARGEFILE64_SOURCE) \
+    || (defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64)
+# define __USER_REQUESTED_LFS_OPTION 1
+#endif
 
 /* Undefine everything, so we get a clean slate.  */
 #undef	__USE_ISOC99
@@ -331,6 +336,35 @@
 #include <bits/uClibc_config.h>
 #undef __need_uClibc_config_h
 
+/* Make sure users large file options agree with uClibc's configuration. */
+#ifndef __UCLIBC_HAVE_LFS__
+/* If uClibc was built without large file support, output an error if
+ * large file functions are requested. */
+#ifdef __USER_REQUESTED_LFS_OPTION
+#error uClibc was configured without large file support...
+/* Since _LARGEFILE_SOURCE and _LARGEFILE64_SOURCE can be turned by
+ *  other options, disable them with a warning if they were enabled. */
+#elif defined(_LARGEFILE_SOURCE) || defined(_LARGEFILE64_SOURCE)
+#warning uClibc was configured without large file support...
+#endif
+#undef	_LARGEFILE_SOURCE
+#undef	_LARGEFILE64_SOURCE
+#undef	_FILE_OFFSET_BITS
+#undef	__USE_LARGEFILE
+#undef	__USE_LARGEFILE64
+#undef	__USE_FILE_OFFSET64
+/* If we're actually building uClibc with large file support,
+ * define __USE_LARGEFILE64 only. */
+#elif defined(_LIBC)
+#undef	_LARGEFILE_SOURCE
+#undef	_LARGEFILE64_SOURCE
+#undef	_FILE_OFFSET_BITS
+#undef	__USE_LARGEFILE
+#undef	__USE_LARGEFILE64
+#undef	__USE_FILE_OFFSET64
+#define	__USE_LARGEFILE64	1
+#endif
+
 /* Some nice features only work properly with ELF */
 #if defined _LIBC && defined HAVE_ELF	
 /* Define ALIASNAME as a weak alias for NAME. */

+ 2 - 0
libc/sysdeps/linux/common/statfix.h

@@ -8,7 +8,9 @@
  * opinion on the subject, and different kernel revs use different names... */
 #define stat kernel_stat
 #define new_stat kernel_stat
+#define stat64 kernel_stat64
 #include <asm/stat.h> 
+#undef stat64
 #undef new_stat
 #undef stat