diff src/text/gftp-text.c @ 182:33b394ebba68

2003-6-15 Brian Masney <masneyb@gftp.org> * lib/cache.c lib/gftp.h - added gftp_generate_cache_description(). * lib/cache.c lib/gftp.h src/text/gftp-text.c src/gtk/delete-dialog.c src/gtk/menu-items.c src/gtk/misc-gtk.c src/gtk/mkdir-dialog.c - Added description parameter to gftp_delete_cache_entry(). * lib/protocols.c lib/gftp.h - added gftp_fd_open(). It will call open() and then set the socket option close on exec * lib/cache.c lib/local.c lib/misc.c - use gftp_fd_open() instead of open() * lib/rfc959.c lib/protocols.c - on newly created sockets, make sure the close on exec socket option is set * lib/options.h src/text/gftp-text.c src/gtk/transfer.c - added preserve_permissions option * lib/protocols.c (gftp_parse_url) - allow an @ to be in the username * src/text/gftp-text.c - after transfering a file, honor preserve_permissions if it is set * src/gtk/delete-dialog.c - improvments to clearing the expired cache entries
author masneyb
date Sun, 15 Jun 2003 21:28:02 +0000
parents 8d933999bba6
children 13ca1defdc75
line wrap: on
line diff
--- a/src/text/gftp-text.c	Sun Jun 15 13:22:09 2003 +0000
+++ b/src/text/gftp-text.c	Sun Jun 15 21:28:02 2003 +0000
@@ -502,7 +502,7 @@
   else
     {
       if (gftp_remove_file (request, command) == 0)
-        gftp_delete_cache_entry (request, 0);
+        gftp_delete_cache_entry (request, NULL, 0);
     }
   return (1);
 }
@@ -843,12 +843,16 @@
 int
 gftp_text_transfer_files (gftp_transfer * transfer)
 {
+  int i, j, sw, tot, preserve_permissions;
   char buf[8192], *progress = "|/-\\";
   struct timeval updatetime;
   long fromsize, total;
   gftp_file * curfle;
-  int i, j, sw, tot;
   ssize_t num_read;
+  mode_t mode;
+
+  gftp_lookup_request_option (transfer->fromreq, "preserve_permissions",
+                              &preserve_permissions);
 
   for (transfer->curfle = transfer->files;
        transfer->curfle != NULL;
@@ -929,6 +933,19 @@
           gftp_end_transfer (transfer->toreq);
         }
 
+      if (!curfle->is_fd && preserve_permissions)
+        {
+          if (curfle->attribs)
+            {
+              mode = gftp_parse_attribs (curfle->attribs);
+              if (mode != 0)
+                gftp_chmod (transfer->toreq, curfle->destfile, mode);
+            } 
+
+          if (curfle->datetime != 0)
+            gftp_set_file_time (transfer->toreq, curfle->destfile,
+                                curfle->datetime);
+        }
     }
   return (1);
 }