[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug-wget] wget-1.13 on AIX
From: |
Perry Smith |
Subject: |
[Bug-wget] wget-1.13 on AIX |
Date: |
Thu, 11 Aug 2011 08:14:20 -0500 |
Hi,
I've tried this on AIX 5.3 and 6.1.
The problem is with src/css.c. In essence it is doing this:
> #include <stdio.h>
> #include <string.h>
> #include <errno.h>
> #include <stdlib.h>
> #include <inttypes.h>
> #define _LARGE_FILES
> #include <unistd.h>
The #define of _LARGE_FILES is actually done in config.h via wget.h.
I understand that AIX is very hard to deal with but this seems like a bad idea
for any platform. If you are going to declare that you want _LARGE_FILE
support, you need to do that before any system includes. What this causes is
both _LARGE_FILES and _LARGE_FILE_API both get defined and that causes one
place to declare (for example)
> #define ftruncate ftruncate64
(this is in unistd.h around line 733)
and then later we have:
> extern int ftruncate(int, off_t);
> #ifdef _LARGE_FILE_API
> extern int ftruncate64(int, off64_t);
> #endif
(around line 799) which the compiler complains about with:
> /usr/include/unistd.h:801: error: conflicting types for 'ftruncate64'
> /usr/include/unistd.h:799: error: previous declaration of 'ftruncate64' was
> here
There are actually several pairs of these.
With the above code snippet, if you move the #define to the top, (or completely
remove it) the compile works fine.
It just seems like it would be prudent to declare things like _LARGE_FILES in
config.h (like you do) but put config.h as the first include of each file so
that the entire code base knows which interface the program wants to use.
What I did was to move css.c to _css.c. I put an #ifndef _CONFIG_H wrapper
inside config.h and then the new css.c was simply:
#include "config.h"
#include "_css.c"
and that worked for my 5.3 system. I have not tried it on my 6.1 system yet.
I hope this helps someone.
Thank you,
pedz
- [Bug-wget] wget-1.13 on AIX,
Perry Smith <=