X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fmodules%2Fmod_dv%2Ftrgt_dv.cpp;h=13fed5c844d4a9a79c5de67d745c4f753c0b9717;hb=4ba22fb51d97f1ecce04dcc5e40569a4354c1bae;hp=d4b7440cf56767f2df614891f11b53469fca677a;hpb=991d45b68d8b19c075e5b16bb63b6b8898090341;p=synfig.git diff --git a/synfig-core/trunk/src/modules/mod_dv/trgt_dv.cpp b/synfig-core/trunk/src/modules/mod_dv/trgt_dv.cpp index d4b7440..13fed5c 100644 --- a/synfig-core/trunk/src/modules/mod_dv/trgt_dv.cpp +++ b/synfig-core/trunk/src/modules/mod_dv/trgt_dv.cpp @@ -6,6 +6,7 @@ ** ** \legal ** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley +** Copyright (c) 2007 Chris Moore ** ** This package is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License as @@ -64,7 +65,7 @@ using namespace etl; #if defined(HAVE_FORK) && defined(HAVE_PIPE) && defined(HAVE_WAITPID) #define UNIX_PIPE_TO_PROCESSES -#elif defined(HAVE__SPAWNLP) && defined(HAVE__PIPE) && defined(HAVE_CWAIT) +#else #define WIN32_PIPE_TO_PROCESSES #endif @@ -94,11 +95,11 @@ dv_trgt::dv_trgt(const char *Filename) dv_trgt::~dv_trgt() { if(file){ - fclose(file); - int status; #if defined(WIN32_PIPE_TO_PROCESSES) - cwait(&status,pid,0); + pclose(file); #elif defined(UNIX_PIPE_TO_PROCESSES) + fclose(file); + int status; waitpid(pid,&status,0); #endif } @@ -150,78 +151,38 @@ dv_trgt::init() #if defined(WIN32_PIPE_TO_PROCESSES) - int p[2]; - int stdin_fileno, stdout_fileno; - - if(_pipe(p, 512, O_BINARY | O_NOINHERIT) < 0) { - synfig::error(_("Unable to open pipe to encodedv")); - return false; - } - - // Save stdin/stdout so we can restore them later - stdin_fileno = _dup(_fileno(stdin)); - stdout_fileno = _dup(_fileno(stdout)); - - // encodedv should read from the pipe - if(_dup2(p[0], _fileno(stdin)) != 0) { - synfig::error(_("Unable to open pipe to encodedv")); - return false; - } - - FILE* outfile = fopen(filename.c_str(),"wb"); - if( outfile == NULL ){ - synfig::error(_("Unable to open pipe to encodedv")); - return false; - } - if(_dup2(_fileno(outfile), _fileno(stdout)) != 0) { - synfig::error(_("Unable to open pipe to encodedv")); - return false; - } + string command; if(wide_aspect) - pid = _spawnlp(_P_NOWAIT, "encodedv", "encodedv", "-w", "1", "-", (const char *)NULL); + command=strprintf("encodedv -w 1 - > \"%s\"\n",filename.c_str()); else - pid = _spawnlp(_P_NOWAIT, "encodedv", "encodedv", "-", (const char *)NULL); + command=strprintf("encodedv - > \"%s\"\n",filename.c_str()); - if( pid < 0) { - synfig::error(_("Unable to open pipe to encodedv")); - return false; - } + // Open the pipe to encodedv + file=popen(command.c_str(),POPEN_BINARY_WRITE_TYPE); - // Restore stdin/stdout - if(_dup2(stdin_fileno, _fileno(stdin)) != 0) { - synfig::error(_("Unable to open pipe to encodedv")); - return false; - } - if(_dup2(stdout_fileno, _fileno(stdout)) != 0) { + if(!file) + { synfig::error(_("Unable to open pipe to encodedv")); return false; } - close(stdin_fileno); - close(stdout_fileno); - - // Close the pipe read end - encodedv uses it - close(p[0]); - - // We write data to the write end of the pipe - file = fdopen(p[1], "wb"); #elif defined(UNIX_PIPE_TO_PROCESSES) int p[2]; - + if (pipe(p)) { synfig::error(_("Unable to open pipe to encodedv")); return false; }; - + pid_t pid = fork(); - + if (pid == -1) { synfig::error(_("Unable to open pipe to encodedv")); return false; } - + if (pid == 0){ // Child process // Close pipeout, not needed @@ -248,7 +209,7 @@ dv_trgt::init() synfig::error(_("Unable to open pipe to encodedv")); return false; } - + if(wide_aspect) execlp("encodedv", "encodedv", "-w", "1", "-", (const char *)NULL); else