JFT: check if it's a regular file with g_stat
authorNicolas Cornu <nicolas.cornu@ensi-bourges.fr>
Fri, 13 Aug 2010 23:23:55 +0200
changeset 112 77d68793ce61
parent 111 76ce876f7935
child 113 cb5adb25ad87
JFT: check if it's a regular file with g_stat
jingle-filetransfer/filetransfer.c
--- a/jingle-filetransfer/filetransfer.c	Fri Aug 13 22:42:29 2010 +0200
+++ b/jingle-filetransfer/filetransfer.c	Fri Aug 13 23:23:55 2010 +0200
@@ -225,7 +225,8 @@
 {
   char **args = split_arg(arg, 1, 0);
   gchar *filename;
-  
+  struct stat fileinfo;
+
   if (!args[0]) {
     scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: give me a name!");
     return;
@@ -233,7 +234,12 @@
   
   filename = expand_filename(args[0]); // expand ~ to HOME
   
-  if (!g_file_test(filename, G_FILE_TEST_IS_REGULAR | G_FILE_TEST_EXISTS)) {
+  if (g_stat(filename, &fileinfo) != 0) {
+    scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: unable to stat %s", args[1]);
+    return;
+  }
+  
+  if (!S_ISREG(fileinfo.st_mode)) {
     scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: File doesn't exist!");
     return;
   }
@@ -246,7 +252,6 @@
     gchar *sid = jingle_generate_sid();
     gchar *ressource, *recipientjid;
     const gchar *namespaces[] = {NS_JINGLE, NS_JINGLE_APP_FT, NULL};
-    struct stat fileinfo;
     const gchar *myjid = g_strdup(lm_connection_get_jid(lconnection));
     JingleFT *jft = g_new0(JingleFT, 1);
 
@@ -265,10 +270,6 @@
     sess = session_new(sid, myjid, recipientjid, JINGLE_SESSION_OUTGOING);
     session_add_content(sess, "file", JINGLE_SESSION_STATE_PENDING);
 
-    if (g_stat(filename, &fileinfo) != 0) {
-      scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: unable to stat %s", args[1]);
-      return;
-    }
     jft->desc = g_strdup(args[0]);
     jft->type = JINGLE_FT_OFFER;
     jft->name = g_path_get_basename(filename);