diff lib/protocols.c @ 850:1c8d6b6b7950

2006-11-16 Brian Masney <masneyb@gftp.org> * lib/protocols.c - skip over the hidden files when doing a recursive transfer if the shown_hidden_files option is disabled. (closes #321573)
author masneyb
date Fri, 17 Nov 2006 01:20:58 +0000
parents 8263cc35c027
children 83d39217749c
line wrap: on
line diff
--- a/lib/protocols.c	Fri Nov 17 00:44:40 2006 +0000
+++ b/lib/protocols.c	Fri Nov 17 01:20:58 2006 +0000
@@ -1861,31 +1861,37 @@
 static GHashTable *
 gftp_gen_dir_hash (gftp_request * request, int *ret)
 {
+  intptr_t show_hidden_files;
   GHashTable * dirhash;
   gftp_file * fle;
   off_t *newsize;
 
+  *ret = gftp_list_files (request);
+  if (*ret != 0)
+    return (NULL);
+      
   dirhash = g_hash_table_new (string_hash_function, string_hash_compare);
-  *ret = gftp_list_files (request);
-  if (*ret == 0)
+  gftp_lookup_request_option (request, "show_hidden_files", &show_hidden_files);
+
+  fle = g_malloc0 (sizeof (*fle));
+  while (gftp_get_next_file (request, NULL, fle) > 0)
     {
-      fle = g_malloc0 (sizeof (*fle));
-      while (gftp_get_next_file (request, NULL, fle) > 0)
+      if (!show_hidden_files && *fle->file == '.' &&
+          strcmp (fle->file, "..") != 0)
         {
-          newsize = g_malloc (sizeof (*newsize));
-          *newsize = fle->size;
-          g_hash_table_insert (dirhash, fle->file, newsize);
-          fle->file = NULL;
           gftp_file_destroy (fle, 0);
+          continue;
         }
-      gftp_end_transfer (request);
-      g_free (fle);
+
+      newsize = g_malloc (sizeof (*newsize));
+      *newsize = fle->size;
+      g_hash_table_insert (dirhash, fle->file, newsize);
+      fle->file = NULL;
+      gftp_file_destroy (fle, 0);
     }
-  else
-    {
-      g_hash_table_destroy (dirhash);
-      dirhash = NULL;
-    }
+
+  gftp_end_transfer (request);
+  g_free (fle);
 
   return (dirhash);
 }
@@ -1914,12 +1920,16 @@
 static GList *
 gftp_get_dir_listing (gftp_transfer * transfer, int getothdir, int *ret)
 {
+  intptr_t show_hidden_files;
   GHashTable * dirhash;
   GList * templist;
   gftp_file * fle;
   off_t *newsize;
   char *newname;
 
+  gftp_lookup_request_option (transfer->fromreq, "show_hidden_files",
+                              &show_hidden_files);
+
   if (getothdir && transfer->toreq != NULL)
     {
       dirhash = gftp_gen_dir_hash (transfer->toreq, ret);
@@ -1940,7 +1950,8 @@
   templist = NULL;
   while (gftp_get_next_file (transfer->fromreq, NULL, fle) > 0)
     {
-      if (strcmp (fle->file, ".") == 0 || strcmp (fle->file, "..") == 0)
+      if (strcmp (fle->file, ".") == 0 || strcmp (fle->file, "..") == 0 ||
+          (!show_hidden_files && *fle->file == '.'))
         {
           gftp_file_destroy (fle, 0);
           continue;