X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=futatabi%2Fmain.cpp;h=3146aa52d5eb2f55bf6d0fd0ca9adede42fab95f;hb=b168e72fcdcd17be5c578f2232e40c2347c3ff98;hp=5f262353eed6a55246286a557af0456ae2608528;hpb=44b133d1372fb410fe0c8badcd4028965d95fbb8;p=nageru diff --git a/futatabi/main.cpp b/futatabi/main.cpp index 5f26235..3146aa5 100644 --- a/futatabi/main.cpp +++ b/futatabi/main.cpp @@ -200,13 +200,11 @@ int main(int argc, char **argv) string frame_dir = global_flags.working_directory + "/frames"; - struct stat st; - if (stat(frame_dir.c_str(), &st) == -1) { + if (mkdir(frame_dir.c_str(), 0777) == 0) { fprintf(stderr, "%s does not exist, creating it.\n", frame_dir.c_str()); - if (mkdir(frame_dir.c_str(), 0777) == -1) { - perror(global_flags.working_directory.c_str()); - exit(1); - } + } else if (errno != EEXIST) { + perror(global_flags.working_directory.c_str()); + exit(1); } avformat_network_init(); @@ -282,7 +280,7 @@ void load_frame_file(const char *filename, const string &basename, unsigned file if (!all_frames.empty()) { // We already had this cached in the database, so no need to look in the file. for (const DB::FrameOnDiskAndStreamIdx &frame : all_frames) { - if (frame.stream_idx >= 0 && frame.stream_idx < MAX_STREAMS) { + if (frame.stream_idx < MAX_STREAMS) { frames[frame.stream_idx].push_back(frame.frame); start_pts = max(start_pts, frame.frame.pts); } @@ -344,6 +342,10 @@ void load_frame_file(const char *filename, const string &basename, unsigned file FrameOnDisk frame; frame.pts = hdr.pts(); frame.offset = ftell(fp); + if (frame.offset == -1) { + fprintf(stderr, "WARNING: %s: ftell() failed (%s).\n", filename, strerror(errno)); + break; + } frame.filename_idx = filename_idx; frame.size = hdr.file_size(); @@ -364,7 +366,11 @@ void load_frame_file(const char *filename, const string &basename, unsigned file filename, skipped_bytes); } - size_t size = ftell(fp); + off_t size = ftell(fp); + if (size == -1) { + fprintf(stderr, "WARNING: %s: ftell() failed (%s).\n", filename, strerror(errno)); + return; + } fclose(fp); db->store_frame_file(basename, size, all_frames);