On Tue, Nov 11, 2014 at 8:41 AM, Brent Cook <bust...@gmail.com> wrote:
> I gave the openbsd src patches a spin last night. I wonder if there's
> a way we could instead coerce mingw into pretending to be more POSIX
> by way of header tricks in the portable tree:

Hi Dongsheng,

Thanks for doing the initial test port work and posting your fork. I
gave the concept of 'coerce win32 support via stupid header tricks' a
spin, and the result of that is here:

https://github.com/busterb/portable/commits/win32-minimal

This basically intercepts all of the BSD headers unavailable in Win32,
doing the bulk of the required fixups passively through preprocessor
abuse. Note the fun 'posix_close', for instance. I'm almost sure this
has bugs, but tossing up as perhaps an example of Cunningham's law.

While this whole thing feels a little wrong, software on Windows that
uses 'int' interchangeably with SOCKET already sort of dooms it by
design, especially on Win64. Hopefully nobody is seriously using BIO's
builtin socket functions in the first place (they were already pretty
lame on POSIX systems).

The minimal pile of upstream portability changes that this needed to
work are below, and there are not a lot. I am not sure if
'ui_openssl.c' takes the cake as the most out-of-place thing to find
in a crypto library. I also wonder what software would break if it
were moved into openssl(1) directly:

https://github.com/busterb/openbsd/commits/win32-minimal

The result passes 39/40 unit tests so far - still gotta look at pq_test.

I took the poll.c from your fork and built it into openssl(1) only.
However, asprintf worked without any extra effort thanks to recent
mingw having a native version available (though I should probably look
at how that is actually implemented). The idea of needing 2 different
asprintf shims seems rather depressing. I didn't actually incorporate
the syslog compat functions, and am debating if these should really
just be no-op shims for Win32 - again, if someone is using these on
Windows, they are not using event log properly, and will get some
pretty ugly-looking logs.

I tested and built on Ubuntu 14.04 with wine and the mingw-w64
package, using this config line:

CC=i686-w64-mingw32-gcc ./configure --host=i686-w64-mingw32

Comments?

 - Brent

Reply via email to