Index | Thread | Search

From:
Stuart Henderson <stu@spacehopper.org>
Subject:
Re: games/enigma prepare for stdio opaque
To:
YASUOKA Masahiko <yasuoka@openbsd.org>
Cc:
tb@openbsd.org, ports@openbsd.org
Date:
Tue, 15 Jul 2025 16:01:41 +0100

Download raw body.

Thread
probably best to bump; ok

On 2025/07/15 17:27, YASUOKA Masahiko wrote:
> games/enigma also substitutes a FILE object for std{out,err}.  This
> will be impossible after the stdio opaque diff.
> 
> The diff disables the block which substitutes a FILE object for
> std{out,err}.  The block is not needed for OpenBSD, so the diff must
> not break anything.
> 
> ok?
> 
> Index: games/enigma/patches/patch-src_main_cc
> ===================================================================
> RCS file: games/enigma/patches/patch-src_main_cc
> diff -N games/enigma/patches/patch-src_main_cc
> --- /dev/null	1 Jan 1970 00:00:00 -0000
> +++ games/enigma/patches/patch-src_main_cc	15 Jul 2025 08:18:05 -0000
> @@ -0,0 +1,29 @@
> +Index: src/main.cc
> +--- src/main.cc.orig
> ++++ src/main.cc
> +@@ -313,21 +313,25 @@ void Application::init(int argc, char **argv)
> +     if (ap.redirect) {
> +         FILE *newfp;
> +         newfp = std::freopen((userStdPath + "/Output.log").c_str(), "w", stdout);
> ++#if 0	/* can't substitute a FILE object for stdout if FILE is an opaque. */
> +         if ( newfp == NULL ) {  // This happens on NT
> +             newfp = fopen((userStdPath + "/Output.log").c_str(), "w");
> +             if (newfp) {  // in case stdout is a macro
> +                 *stdout = *newfp;
> +             }
> +         }
> ++#endif
> +         setvbuf(stdout, NULL, _IOLBF, BUFSIZ);   // Line buffered
> + 
> +         newfp = std::freopen((userStdPath + "/Error.log").c_str(), "w", stderr);
> ++#if 0	/* can't substitute a FILE object for stdout if FILE is an opaque. */
> +         if ( newfp == NULL ) {  // This happens on NT
> +             newfp = fopen((userStdPath + "/Error.log").c_str(), "w");
> +             if (newfp) {  // in case stderr is a macro
> +                 *stderr = *newfp;
> +             }
> +         }
> ++#endif
> +         setbuf(stderr, NULL);   // No buffering
> +     }
> + 
>