]> git.sesse.net Git - ffmpeg/blobdiff - libavutil/file.c
ffmpeg: preserve avg_frame_rate on stream copy.
[ffmpeg] / libavutil / file.c
index c388523d1b70763029d01a0f326e8beb66591dbe..e59335a77ad39102bdd043a0a626c832900fd27a 100644 (file)
@@ -130,10 +130,13 @@ void av_file_unmap(uint8_t *bufptr, size_t size)
 #endif
 }
 
-int av_tempfile(const char *prefix, char **filename) {
+int av_tempfile(const char *prefix, char **filename, int log_offset, void *log_ctx) {
+    FileLogContext file_log_ctx = { &file_log_ctx_class, log_offset, log_ctx };
     int fd=-1;
 #if !HAVE_MKSTEMP
-    void *ptr= tempnam(".", prefix);
+    void *ptr= tempnam(NULL, prefix);
+    if(!ptr)
+        ptr= tempnam(".", prefix);
     *filename = av_strdup(ptr);
 #undef free
     free(ptr);
@@ -143,26 +146,32 @@ int av_tempfile(const char *prefix, char **filename) {
 #endif
     /* -----common section-----*/
     if (*filename == NULL) {
-        av_log(NULL, AV_LOG_ERROR, "ff_tempfile: Cannot allocate file name\n");
-        return -1;
+        av_log(&file_log_ctx, AV_LOG_ERROR, "ff_tempfile: Cannot allocate file name\n");
+        return AVERROR(ENOMEM);
     }
 #if !HAVE_MKSTEMP
 #   ifndef O_BINARY
 #       define O_BINARY 0
 #   endif
-    fd = open(*filename, O_RDWR | O_BINARY | O_CREAT, 0444);
+#   ifndef O_EXCL
+#       define O_EXCL 0
+#   endif
+    fd = open(*filename, O_RDWR | O_BINARY | O_CREAT | O_EXCL, 0600);
 #else
     snprintf(*filename, len, "/tmp/%sXXXXXX", prefix);
     fd = mkstemp(*filename);
+#ifdef _WIN32
     if (fd < 0) {
         snprintf(*filename, len, "./%sXXXXXX", prefix);
         fd = mkstemp(*filename);
     }
+#endif
 #endif
     /* -----common section-----*/
     if (fd < 0) {
-        av_log(NULL, AV_LOG_ERROR, "ff_tempfile: Cannot open temporary file %s\n", *filename);
-        return -1;
+        int err = AVERROR(errno);
+        av_log(&file_log_ctx, AV_LOG_ERROR, "ff_tempfile: Cannot open temporary file %s\n", *filename);
+        return err;
     }
     return fd; /* success */
 }