[easytag] Replace use of stat() in Get_File_Size()



commit 200562fce40833510713a1f0b71092821984ae66
Author: David King <amigadave amigadave com>
Date:   Mon Feb 3 16:54:59 2014 +0000

    Replace use of stat() in Get_File_Size()
    
    Use g_file_info_get_size() and check for errors, instead of calling
    stat(). Rename Get_File_Size() to et_get_file_size().
    
    Found with Coverity (CID 1163369).

 src/flac_header.c |    2 +-
 src/misc.c        |   30 +++++++++++++++++++++++-------
 src/misc.h        |    2 +-
 src/mp4_header.c  |    2 +-
 src/mpeg_header.c |    2 +-
 src/ogg_header.c  |    4 ++--
 6 files changed, 29 insertions(+), 13 deletions(-)
---
diff --git a/src/flac_header.c b/src/flac_header.c
index 996a3f1..3293b42 100644
--- a/src/flac_header.c
+++ b/src/flac_header.c
@@ -110,7 +110,7 @@ gboolean Flac_Header_Read_File_Info (gchar *filename, ET_File_Info *ETFileInfo)
     /* End of decoding FLAC file */
 
 
-    filesize = Get_File_Size(filename);
+    filesize = et_get_file_size (filename);
     duration = (gint)tmp_file_info.length_in_msec/1000;
 
     ETFileInfo->version     = 0; // Not defined in FLAC file
diff --git a/src/misc.c b/src/misc.c
index 48a1199..83107d6 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -1111,18 +1111,34 @@ gchar *Convert_Duration (gulong duration)
 }
 
 /*
- * Returns the size of a file in bytes
+ * @filename: (type filename): the path to a file
+ *
+ * Gets the size of a file in bytes.
+ *
+ * Returns: the size of a file, in bytes
  */
-off_t
-Get_File_Size (const gchar *filename)
+goffset
+et_get_file_size (const gchar *filename)
 {
-    struct stat statbuf;
+    GFile *file;
+    GFileInfo *info;
+    /* TODO: Take a GError from the caller. */
+    GError *error = NULL;
 
-    g_return_val_if_fail (filename != NULL, 0);
+    g_return_if_fail (filename != NULL);
 
-    stat (filename, &statbuf);
+    file = g_file_new_for_path (filename);
+    info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_SIZE,
+                              G_FILE_QUERY_INFO_NONE, NULL, &error);
+
+    if (!info)
+    {
+        g_object_unref (file);
+        g_error_free (error);
+        return FALSE;
+    }
 
-    return statbuf.st_size;
+    return g_file_info_get_size (info);
 }
 
 
diff --git a/src/misc.h b/src/misc.h
index 10fc981..3304e9b 100644
--- a/src/misc.h
+++ b/src/misc.h
@@ -84,7 +84,7 @@ gchar *Convert_Size (gsize size);
 gchar *Convert_Size_1 (gsize size);
 gchar *Convert_Duration (gulong duration);
 
-off_t Get_File_Size (const gchar *filename);
+goffset et_get_file_size (const gchar *filename);
 
 gint Combo_Alphabetic_Sort (GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer data);
 
diff --git a/src/mp4_header.c b/src/mp4_header.c
index b6bedb7..6ff90d0 100644
--- a/src/mp4_header.c
+++ b/src/mp4_header.c
@@ -54,7 +54,7 @@ gboolean Mp4_Header_Read_File_Info (gchar *filename, ET_File_Info *ETFileInfo)
     g_return_val_if_fail (filename != NULL && ETFileInfo != NULL, FALSE);
 
     /* Get size of file */
-    ETFileInfo->size = Get_File_Size(filename);
+    ETFileInfo->size = et_get_file_size (filename);
 
     if ((file = taglib_file_new_type(filename, TagLib_File_MP4)) == NULL )
     {
diff --git a/src/mpeg_header.c b/src/mpeg_header.c
index 999775d..9cd34b9 100644
--- a/src/mpeg_header.c
+++ b/src/mpeg_header.c
@@ -88,7 +88,7 @@ Mpeg_Header_Read_File_Info (gchar *filename, ET_File_Info *ETFileInfo)
     g_return_val_if_fail (filename != NULL || ETFileInfo != NULL, FALSE);
 
     /* Get size of file */
-    ETFileInfo->size = Get_File_Size (filename);
+    ETFileInfo->size = et_get_file_size (filename);
 
     /* Get data from tag */
     if ( (id3_tag = ID3Tag_New()) == NULL )
diff --git a/src/ogg_header.c b/src/ogg_header.c
index 451d269..7fbd397 100644
--- a/src/ogg_header.c
+++ b/src/ogg_header.c
@@ -295,7 +295,7 @@ Ogg_Header_Read_File_Info (const gchar *filename, ET_File_Info *ETFileInfo)
         }
     }
 
-    filesize = Get_File_Size(filename);
+    filesize = et_get_file_size (filename);
 
     ETFileInfo->version    = encoder_version;
     ETFileInfo->bitrate    = bitrate_nominal/1000;
@@ -358,7 +358,7 @@ gboolean Speex_Header_Read_File_Info (gchar *filename, ET_File_Info *ETFileInfo)
         //g_print("compressed length: %ld bytes\n",(long)(ov_raw_total(&vf,-1)));
     }
 
-    filesize = Get_File_Size(filename);
+    filesize = et_get_file_size (filename);
 
     ETFileInfo->mpc_version = g_strdup(encoder_version);
     ETFileInfo->bitrate     = bitrate/1000;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]