+ if (debug_flags) {
+ /* glpk insists on writing stuff to stdout, and it does buffering,
+ * so we route all our debug through it this too */
+ int realstdout;
+ sysassert( (realstdout= dup(1)) > 2 );
+ sysassert( output= fdopen(realstdout,"w") );
+
+ int pfd[2];
+ sysassert(! pipe(pfd) );
+ sysassert( (debugoutpid= fork()) >=0 );
+ if (!debugoutpid) {
+ sysassert( dup2(pfd[0],0)==0 );
+ sysassert( dup2(2,1)==1 );
+ sysassert(! close(pfd[0]) );
+ sysassert(! close(pfd[1]) );
+ sysassert(! execlp("cat","cat",(char*)0) );
+ }
+ sysassert( dup2(pfd[1],1)==1 );
+ sysassert(! close(pfd[0]) );
+ sysassert(! close(pfd[1]) );
+
+ debug_file= stdout;
+ } else {
+ output= stdout;
+ debug_file= stderr;
+ }
+
+ const char *database= *argv++;
+
+ sysassert( !setvbuf(debug,0,_IOLBF,0) );
+