X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=futatabi%2Fmain.cpp;h=edff307e38bd1a98584ef3c0a94d1e176f192538;hb=7c111c0bfbe6bf54cfbce8ad67e0d9b150b3d195;hp=5f262353eed6a55246286a557af0456ae2608528;hpb=44b133d1372fb410fe0c8badcd4028965d95fbb8;p=nageru diff --git a/futatabi/main.cpp b/futatabi/main.cpp index 5f26235..edff307 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,9 +366,14 @@ 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); fclose(fp); + if (size == -1) { + fprintf(stderr, "WARNING: %s: ftell() failed (%s).\n", filename, strerror(errno)); + return; + } + db->store_frame_file(basename, size, all_frames); }