From: Ben Hutchings Date: Sat, 12 Apr 2008 16:51:53 +0000 (+0000) Subject: Added check for missing or empty output file in generate_menu_vob(). X-Git-Tag: 1.2.3~10 X-Git-Url: https://git.decadent.org.uk/gitweb/?a=commitdiff_plain;h=59c5973c85c27cd71bbc1a2b96c4f537b30c8b49;p=videolink.git Added check for missing or empty output file in generate_menu_vob(). --- diff --git a/generate_dvd.cpp b/generate_dvd.cpp index d5185c2..bf1c2b2 100644 --- a/generate_dvd.cpp +++ b/generate_dvd.cpp @@ -1,4 +1,4 @@ -// Copyright 2005-6 Ben Hutchings . +// Copyright 2005-8 Ben Hutchings . // See the file "COPYING" for licence details. #include @@ -10,6 +10,10 @@ #include #include +#include +#include +#include + #include #include #include @@ -234,6 +238,9 @@ void dvd_generator::generate_menu_vob(unsigned index, if (!spumux_file) throw std::runtime_error("Failed to write control file for spumux"); + std::string output_name( + temp_file_name(temp_dir_, "menu-%3d.mpeg", 1 + index)); + std::ostringstream command_stream; unsigned frame_count(menu_duration_frames(frame_params_)); if (encoder_ == mpeg_encoder_ffmpeg) @@ -279,8 +286,7 @@ void dvd_generator::generate_menu_vob(unsigned index, " | mplex -v0 -f8 -o/dev/stdout /dev/stdin"; } command_stream - << " | spumux -v0 -mdvd " << spumux_name - << " > " << temp_file_name(temp_dir_, "menu-%3d.mpeg", 1 + index); + << " | spumux -v0 -mdvd " << spumux_name << " > " << output_name; std::string command(command_stream.str()); const char * argv[] = { "/bin/sh", "-c", command.c_str(), 0 @@ -295,7 +301,9 @@ void dvd_generator::generate_menu_vob(unsigned index, sigc::slot(), 0, 0, &command_result); - if (command_result != 0) + struct stat stat_buf; + if (command_result != 0 || stat(output_name.c_str(), &stat_buf) != 0 + || stat_buf.st_size == 0) throw std::runtime_error("spumux pipeline failed"); }