On Tue, Oct 18, 2011 at 1:09 PM, Simon Goldschmidt <[email protected]> wrote:

>
> Amir Shalem <[email protected]> wrote:
> > on linux / Ubuntu 10.04 I still have some problems, which I'm not sure
> > what
> > is the solution:
> >
> > 1. struct timeval
> > [..]
> > But maybe this should go in unix/arch/sys_arch.h instead?
>
> Yes, I think that would be better than adding it in every lwipopts.h (like
> it is now).
>

Can you push this fix in lwip-contrib.git, /ports/unix/include/cc.h?


>
> > 2. h_errno in api/netdb.c
> >
> > If I don't change anything, and have LWIP_DNS_API_DECLARE_H_ERRNO defined
> > the gcc compiler crashes!
> > [..]
> > I'm not sure what is the solution here...
> > I'm guessing I will have the problem if I will enable sockets.h
> > set_errno()
> > as-well.
>
> Doesn't it work if you just define LWIP_DNS_API_DECLARE_H_ERRNO to 0? If
> so, maybe that should go into the unix port as well?
>

No, because we need to have h_errno declared somewhere if we want to use
it...
and we can't include linux's <netdb.h> because that will include the whole
<sys/socket.h> which conflicts with lwip's headers.

In ubuntu 10.04, compiling a simple file crashes:
  # cat b.c
  int h_errno = 5;
  # gcc b.c -shared
  collect2: ld terminated with signal 11 [Segmentation fault]

One solution I can think of, is using
        #define h_errno (lwip_h_errno)

to fix the linkage error, any thoughts about that?


>
> > 4. (This is windows problem), I got re-definitions of errno macros
> > [..]
> > Because lwip.c code includes both <Python.h> & <lwip/sockets.h> they both
> > attempt to define errno values.
> > Please note that I can't #undef LWIP_PROVIDE_ERRNO, because Windows
> > doesn't
> > provide all macro values.
>
> Hmm, I didn't have that problem with the win32 port, but I only included
> "windows.h", no winsock header files...
>
> Maybe you can separate the python-related code from the lwip-related code
> and split them into separate C files? Another option would be to undef
> LWIP_PROVIDE_ERRNO and define the missing values in your cc.h file?
>

I have currently solved it by:

#include <pyconfig.h>
#undef HAVE_ERRNO_H
#include <Python.h>
#include "lwip/arch.h"

to force Python.h not to include later on <errno.h>
which fixes the compilation on Visual Studio,
but then it breaks linux, because lwIP depends on linux's <errno.h> for
defines, so I can either #include <lwip/sys.h> in my code
or you will add #include <errno.h> to unix's cc.h?

this way after you include <lwip/arch.h> you will get errno values defined,
of course don't forget remove #include <errno.h> from unix's arch/sys_arch.h
as its not required any more - after its in arch/cc.h

Amir Shalem
_______________________________________________
lwip-users mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/lwip-users

Reply via email to