Re: Proposal for Subversion Cygwin Port

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Re: Proposal for Subversion Cygwin Port

Max O Bowsher
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Mathias Weinert wrote (a long time ago):
> I encountered another textmode problem: svnadmin dump and load work
> with stdout and stdin and these work in textmode on a textmode
> mounted path... I decided to use the setmode function to solve this
> problem. I patched the apr functions apr_file_open_stderr,
> apr_file_open_stdout and apr_file_open_stdin as I think it won't mind
> if stderr, stdout and stdin always work in binary mode (does it?)
> (see below).

> --- file_io/unix/open.c.orig        2004-03-24 21:09:18.000000000 +0100
> +++ file_io/unix/open.c        2005-02-18 08:18:28.514978300 +0100
> @@ -238,24 +238,27 @@
>  APR_DECLARE(apr_status_t) apr_file_open_stderr(apr_file_t **thefile,
>                                                 apr_pool_t *pool)
>  {
>      int fd = STDERR_FILENO;
> +    setmode(fd, O_BINARY);
>  
>      return apr_os_file_put(thefile, &fd, 0, pool);
>  }
>  
>  APR_DECLARE(apr_status_t) apr_file_open_stdout(apr_file_t **thefile,
>                                                 apr_pool_t *pool)
>  {
>      int fd = STDOUT_FILENO;
> +    setmode(fd, O_BINARY);
>  
>      return apr_os_file_put(thefile, &fd, 0, pool);
>  }
>  
>  APR_DECLARE(apr_status_t) apr_file_open_stdin(apr_file_t **thefile,
>                                                apr_pool_t *pool)
>  {
>      int fd = STDIN_FILENO;
> +    setmode(fd, O_BINARY);
>  
>      return apr_os_file_put(thefile, &fd, 0, pool);
>  }

First, sorry for letting this slip my attention, and thanks for your
off-list reminder.

I've now got around to researching all the uses of apr_file_open_stdfoo
in Subversion, and some of them (most, even) are handling textual, not
binary, data.

Also, the above suggested solution disturbs me, since it is unexpected
for instantiating an wrapper object to make changes to the thing it wraps.

With a general solution seeming elusive, I think the best course of
action would be to simply add some setmode(STDFOO_FILENO, O_BINARY)
calls to the Subversion executables which handle binary streams on
stdin/out.

I'll do this ASAP, since I need to get a Subversion 1.3.0 package out
anyway.

Max.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (Cygwin)

iD8DBQFD7e7nfFNSmcDyxYARAlM/AKCbRohGxIZ79PcNeJwS+86v7pUxAgCdG2CR
psW+h4eNBxmsUddpVh8Xvb0=
=5qJP
-----END PGP SIGNATURE-----