[Fontconfig] issue with _LARGE_FILES and AIX with version 2.11.92, not with 2.4.2
Michael Felt
aixtools at gmail.com
Sun Feb 15 12:34:23 PST 2015
"/usr/include/unistd.h", line 171.17: 1506-343 (S) Redeclaration of lseek64
differs from previous declaration on line 169 of "/usr/include/unistd.h".
"/usr/include/unistd.h", line 171.17: 1506-050 (I) Return type "long long"
in redeclaration is not compatible with the previous return type "long".
"/usr/include/unistd.h", line 171.17: 1506-377 (I) The type "long long" of
parameter 2 differs from the previous type "long".
"/usr/include/sys/lockf.h", line 64.20: 1506-343 (S) Redeclaration of
lockf64 differs from previous declaration on line 62 of
"/usr/include/sys/lockf.h".
"/usr/include/sys/lockf.h", line 64.20: 1506-377 (I) The type "long long"
of parameter 3 differs from the previous type "long".
"/usr/include/unistd.h", line 800.33: 1506-343 (S) Redeclaration of
ftruncate64 differs from previous declaration on line 798 of
"/usr/include/unistd.h".
"/usr/include/unistd.h", line 800.33: 1506-377 (I) The type "long long" of
parameter 2 differs from the previous type "long".
"/usr/include/unistd.h", line 836.33: 1506-343 (S) Redeclaration of
truncate64 differs from previous declaration on line 834 of
"/usr/include/unistd.h".
"/usr/include/unistd.h", line 836.33: 1506-377 (I) The type "long long" of
parameter 2 differs from the previous type "long".
"/usr/include/unistd.h", line 853.33: 1506-343 (S) Redeclaration of pread64
differs from previous declaration on line 850 of "/usr/include/unistd.h".
"/usr/include/unistd.h", line 853.33: 1506-377 (I) The type "long long" of
parameter 4 differs from the previous type "long".
"/usr/include/unistd.h", line 854.33: 1506-343 (S) Redeclaration of
pwrite64 differs from previous declaration on line 851 of
"/usr/include/unistd.h".
"/usr/include/unistd.h", line 854.33: 1506-377 (I) The type "long long" of
parameter 4 differs from the previous type "long".
"/usr/include/unistd.h", line 921.25: 1506-343 (S) Redeclaration of
fclear64 differs from previous declaration on line 918 of
"/usr/include/unistd.h".
"/usr/include/unistd.h", line 921.25: 1506-050 (I) Return type "long long"
in redeclaration is not compatible with the previous return type "long".
"/usr/include/unistd.h", line 921.25: 1506-377 (I) The type "long long" of
parameter 2 differs from the previous type "long".
"/usr/include/unistd.h", line 922.25: 1506-343 (S) Redeclaration of
fsync_range64 differs from previous declaration on line 919 of
"/usr/include/unistd.h".
"/usr/include/unistd.h", line 922.25: 1506-377 (I) The type "long long" of
parameter 3 differs from the previous type "long".
An example of the error:
In the include file is:
+168 extern int link(const char *, const char *);
+169 extern off_t lseek(int, off_t, int);
+170 #ifdef _LARGE_FILE_API
+171 extern off64_t lseek64(int, off64_t, int);
+172 #endif
Lines 169 and 171 look different enough.
After
cc_r -DHAVE_CONFIG_H -I.. -I../src -I/opt/include/freetype2
-I/opt/include -I/opt/include/libxml2 -E fcarch.c >x.i
in x.i
+2393 extern int isatty(int);
+2394 extern int link(const char *, const char *);
+2395 extern off_t lseek64(int, off_t, int);
+2396
+2397 extern off64_t lseek64(int, off64_t, int);
+2398
+2399 extern long pathconf(const char *, int);
cc_r -I.. -I../src -I/opt/include/freetype2 -I/opt/include
-I/opt/include/libxml2 -E fcarch.c >x.i
in x.i
+2393 extern int isatty(int);
+2394 extern int link(const char *, const char *);
+2395 extern off_t lseek(int, off_t, int);
+2396
+2397 extern off64_t lseek64(int, off64_t, int);
+2398
+2399 extern long pathconf(const char *, int);
So, it seems there is something in config.h that is trigering a define of
lseek to lseek64 and "a problem"
>From an examination of /usr/include/unistd.h the define - in the way -
seems to be _LARGE_FILES
in /usr/include/stdint.h
Again...
+164 extern pid_t getpid(void);
+165 extern pid_t getppid(void);
+166 extern uid_t getuid(void);
+167 extern int isatty(int);
+168 extern int link(const char *, const char *);
+169 extern off_t lseek(int, off_t, int);
+170 #ifdef _LARGE_FILE_API
+171 extern off64_t lseek64(int, off64_t, int);
+172 #endif
+173 extern long pathconf(const char *, int);
+174 extern int pause(void);
+175 extern int pipe(int []);
but preceding this there is:
+68 #ifdef _POSIX_SOURCE
+69 #ifdef _LARGE_FILES
+70 #define lseek lseek64
+71 #endif
+72
And later,
+730 #if _XOPEN_SOURCE_EXTENDED==1
+731 #ifdef _LARGE_FILES
+732 #define ftruncate ftruncate64
+733 #define truncate truncate64
+734 #endif
+735
+845 #ifdef _LARGE_FILES
+846 #define pread pread64
+847 #define pwrite pwrite64
+848 #endif /* _LARGE_FILES */
+914 #ifdef _LARGE_FILES
+915 #define fclear fclear64
+916 #define fsync_range fsync_range64
+917 #endif
+918 extern off_t fclear(int, off_t);
+919 extern int fsync_range(int, int, off_t, off_t);
+920 #ifdef _LARGE_FILE_API
+921 extern off64_t fclear64(int, off64_t);
+922 extern int fsync_range64(int, int, off64_t, off64_t);
+923 #endif
So, it seems there is an inaccurate assumption regarding the
affect/interaction of _LARGE_FILES and _LARGE_FILE_API
Looking at config.h.in - it looks as it _LARGE_FILES was added to assist
with AIX, and now it is getting the way (fun :p)
I cannot find where the code for configure is generated. I suspect that -
MAYBE - this was important for when
32-bit hardware was out there (in 1997 64-bit file support was added to AIX
4.2.0 even though the kernel was
still 32-bit as well as 'normal' pointers.
In any case - this was not a problem I encounter with fontconfig-2.4.2
(ancient!!) but do now.
Give me hints, and I shall test them (as I have time).
Sincerely,
Michael
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/fontconfig/attachments/20150215/06bb57ab/attachment.html>
More information about the Fontconfig
mailing list