changeset 525:7262851e3ae8

2004-8-1 Brian Masney <masneyb@gftp.org> * lib/sshv2.c - treat all integers from the remote server as unsigned * src/gtk/delete_dialog.c - fixed memory leak * src/gtk/chmod_dialog.c src/gtk/delete_dialog.c src/gtk/dnd.c src/gtk/gftp-gtk.c src/gtk/gftp-gtk.h src/gtk/gtkui.c src/gtk/menu-items.c src/gtk/transfer.c - added gftp_gtk_get_list_selection() macro
author masneyb
date Sun, 01 Aug 2004 11:03:39 +0000
parents 1f7d97e7c475
children 990088b18285
files ChangeLog lib/sshv2.c src/gtk/chmod_dialog.c src/gtk/delete_dialog.c src/gtk/dnd.c src/gtk/gftp-gtk.c src/gtk/gftp-gtk.h src/gtk/gtkui.c src/gtk/menu-items.c src/gtk/transfer.c
diffstat 10 files changed, 115 insertions(+), 94 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Sat Jul 31 12:06:51 2004 +0000
+++ b/ChangeLog	Sun Aug 01 11:03:39 2004 +0000
@@ -1,3 +1,14 @@
+2004-8-1 Brian Masney <masneyb@gftp.org>
+	* lib/sshv2.c - treat all integers from the remote server as
+	unsigned
+
+	* src/gtk/delete_dialog.c - fixed memory leak
+
+	* src/gtk/chmod_dialog.c src/gtk/delete_dialog.c src/gtk/dnd.c
+	src/gtk/gftp-gtk.c src/gtk/gftp-gtk.h src/gtk/gtkui.c 
+	src/gtk/menu-items.c src/gtk/transfer.c - added
+	gftp_gtk_get_list_selection() macro
+
 2004-7-27 Brian Masney <masneyb@gftp.org>
 	* lib/rfc959.c src/gtk/misc-gtk.c src/gtk/view_dialog.c - fixed more
 	comparsions between signed and unsigned integers
@@ -2691,7 +2702,7 @@
 
 	* cvsclean - added this script
 
-	* *.[ch] - added $Id: ChangeLog,v 1.299 2004/07/28 02:47:24 masneyb Exp $ tags
+	* *.[ch] - added $Id: ChangeLog,v 1.300 2004/08/01 11:03:38 masneyb Exp $ tags
 
 	* debian/* - updated files from Debian maintainer
 
--- a/lib/sshv2.c	Sat Jul 31 12:06:51 2004 +0000
+++ b/lib/sshv2.c	Sun Aug 01 11:03:39 2004 +0000
@@ -44,17 +44,6 @@
 };
 
 
-typedef struct sshv2_attribs_tag
-{
-  gint32 flags;
-  gint64 size;
-  gint32 uid;
-  gint32 gid;
-  gint32 perm;
-  gint32 atime;
-  gint32 mtime;
-} sshv2_attribs;
-
 typedef struct sshv2_message_tag
 {
   guint32 length;
@@ -69,8 +58,8 @@
   char handle[SSH_MAX_HANDLE_SIZE + 4], /* We'll encode the ID in here too */
        *read_buffer;
 
-  gint32 id,
-         count;
+  guint32 id,
+          count;
   size_t handle_len;
   sshv2_message message;
 
@@ -78,9 +67,9 @@
                dont_log_status : 1;              /* For uploading files */
 
 #ifdef G_HAVE_GINT64
-  gint64 offset;
+  guint64 offset;
 #else
-  gint32 offset;
+  guint32 offset;
 #endif
 } sshv2_params;
 
@@ -831,23 +820,39 @@
 }
 
 
-static gint32 /* FIXME - return value */
+static int
 sshv2_buffer_get_int32 (gftp_request * request, sshv2_message * message,
-                        int expected_response)
+                        int expected_response, guint32 * num)
 {
-  guint32 ret;
+  guint32 snum;
 
   if (message->end - message->pos < 4)
     return (sshv2_wrong_response (request, message));
-
-  memcpy (&ret, message->pos, 4);
-  ret = ntohl (ret);
+      
+  memcpy (&snum, message->pos, 4);
+  snum = ntohl (snum);
   message->pos += 4;
 
-  if (expected_response >= 0 && ret != expected_response)
-    return (sshv2_wrong_response (request, message));
+  if (expected_response >= 0 && snum != expected_response)
+    {
+      switch (snum)
+        {
+          case SSH_FX_OK:
+          case SSH_FX_EOF:
+          case SSH_FX_NO_SUCH_FILE:
+          case SSH_FX_PERMISSION_DENIED:
+          case SSH_FX_FAILURE:
+          case SSH_FX_OP_UNSUPPORTED:
+            return (GFTP_ERETRYABLE);
+          default:
+            return (sshv2_wrong_response (request, message));
+        }
+    }
 
-  return (ret);
+  if (num != NULL)
+    *num = snum;
+
+  return (0);
 }
 
 
@@ -855,9 +860,9 @@
 sshv2_buffer_get_string (gftp_request * request, sshv2_message * message)
 {
   char *string;
-  gint32 len;
+  guint32 len;
 
-  if ((len = sshv2_buffer_get_int32 (request, message, -1)) < 0)
+  if (sshv2_buffer_get_int32 (request, message, -1, &len) < 0)
     return (NULL);
 
   if (len > SSH_MAX_STRING_SIZE || (message->end - message->pos < len))
@@ -912,7 +917,7 @@
     return (ret);
 
   message.pos += 4;
-  if ((ret = sshv2_buffer_get_int32 (request, &message, 1)) < 0)
+  if ((ret = sshv2_buffer_get_int32 (request, &message, 1, NULL)) < 0)
     return (ret);
 
   if ((request->directory = sshv2_buffer_get_string (request, &message)) == NULL)
@@ -1162,19 +1167,19 @@
 sshv2_decode_file_attributes (gftp_request * request, sshv2_message * message,
                               gftp_file * fle)
 {
-  gint32 attrs, hinum, num, count;
-  int i;
+  guint32 attrs, hinum, num, count, i;
+  int ret;
 
-  if ((attrs = sshv2_buffer_get_int32 (request, message, -1)) < 0)
-    return (attrs);
+  if ((ret = sshv2_buffer_get_int32 (request, message, -1, &attrs)) < 0)
+    return (ret);
 
   if (attrs & SSH_FILEXFER_ATTR_SIZE)
     {
-      if ((hinum = sshv2_buffer_get_int32 (request, message, -1)) < 0)
-        return (hinum);
+      if ((ret = sshv2_buffer_get_int32 (request, message, -1, &hinum)) < 0)
+        return (ret);
 
-      if ((num = sshv2_buffer_get_int32 (request, message, -1)) < 0)
-        return (num);
+      if ((ret = sshv2_buffer_get_int32 (request, message, -1, &num)) < 0)
+        return (ret);
 
 #if G_HAVE_GINT64
       fle->size = (gint64) num | ((gint64) hinum >> 32);
@@ -1185,46 +1190,46 @@
 
   if (attrs & SSH_FILEXFER_ATTR_UIDGID)
     {
-      if ((num = sshv2_buffer_get_int32 (request, message, -1)) < 0)
-        return (num);
+      if ((ret = sshv2_buffer_get_int32 (request, message, -1, NULL)) < 0)
+        return (ret);
 
-      if ((num = sshv2_buffer_get_int32 (request, message, -1)) < 0)
-        return (num);
+      if ((ret = sshv2_buffer_get_int32 (request, message, -1, NULL)) < 0)
+        return (ret);
     }
 
   if (attrs & SSH_FILEXFER_ATTR_PERMISSIONS)
     {
-      if ((num = sshv2_buffer_get_int32 (request, message, -1)) < 0)
-        return (num);
+      if ((ret = sshv2_buffer_get_int32 (request, message, -1, &num)) < 0)
+        return (ret);
 
       fle->st_mode = num;
     }
 
   if (attrs & SSH_FILEXFER_ATTR_ACMODTIME)
     {
-      if ((num = sshv2_buffer_get_int32 (request, message, -1)) < 0)
+      if ((ret = sshv2_buffer_get_int32 (request, message, -1, NULL)) < 0)
         return (num);
 
-      if ((num = sshv2_buffer_get_int32 (request, message, -1)) < 0)
-        return (num);
+      if ((ret = sshv2_buffer_get_int32 (request, message, -1, &num)) < 0)
+        return (ret);
 
       fle->datetime = num;
     }
 
   if (attrs & SSH_FILEXFER_ATTR_EXTENDED)
     {
-      if ((count = sshv2_buffer_get_int32 (request, message, -1)) < 0)
-        return (GFTP_EFATAL);
+      if ((ret = sshv2_buffer_get_int32 (request, message, -1, &count)) < 0)
+        return (ret);
 
       for (i=0; i<count; i++)
         {
-          if ((num = sshv2_buffer_get_int32 (request, message, -1)) < 0 ||
+          if ((ret = sshv2_buffer_get_int32 (request, message, -1, &num)) < 0 ||
               message->pos + num + 4 > message->end)
             return (GFTP_EFATAL);
 
           message->pos += num + 4;
 
-          if ((num = sshv2_buffer_get_int32 (request, message, -1)) < 0 ||
+          if ((ret = sshv2_buffer_get_int32 (request, message, -1, &num)) < 0 ||
               message->pos + num + 4 > message->end)
             return (GFTP_EFATAL);
        
@@ -1240,8 +1245,8 @@
 sshv2_get_next_file (gftp_request * request, gftp_file * fle, int fd)
 {
   guint32 len, longnamelen;
+  int ret, retsize, iret;
   sshv2_params *params;
-  int ret, retsize;
   char *longname;
 
   g_return_val_if_fail (request != NULL, GFTP_EFATAL);
@@ -1293,22 +1298,23 @@
       if (ret == SSH_FXP_NAME)
         {
           params->message.pos = params->message.buffer + 4;
-          if ((params->count = sshv2_buffer_get_int32 (request, 
-                       &params->message, -1)) < 0)
-            return (params->count);
+          if ((iret = sshv2_buffer_get_int32 (request, 
+                                              &params->message, -1,
+                                              &params->count)) < 0)
+            return (iret);
         }
     }
 
   if (ret == SSH_FXP_NAME)
     {
-      if ((len = sshv2_buffer_get_int32 (request, &params->message, -1)) < 0 ||
+      if (sshv2_buffer_get_int32 (request, &params->message, -1, &len) < 0 ||
           params->message.pos + len > params->message.end)
         return (GFTP_EFATAL);
 
       params->message.pos += len;
 
-      if ((longnamelen = sshv2_buffer_get_int32 (request, 
-                                                 &params->message, -1)) < 0 || 
+      if (sshv2_buffer_get_int32 (request, &params->message, -1,
+                                  &longnamelen) < 0 || 
            params->message.pos + longnamelen > params->message.end)
         return (GFTP_EFATAL);
 
@@ -1380,8 +1386,8 @@
         return (ret);
 
       message.pos += 4;
-      if (sshv2_buffer_get_int32 (request, &message, 1) != 1)
-        return (GFTP_EFATAL);
+      if ((ret = sshv2_buffer_get_int32 (request, &message, 1, NULL)) < 0)
+        return (ret);
 
       if ((dir = sshv2_buffer_get_string (request, &message)) == NULL)
         return (GFTP_EFATAL);
@@ -1424,7 +1430,7 @@
     return (ret);
 
   message.pos += 4;
-  if ((ret = sshv2_buffer_get_int32 (request, &message, SSH_FX_OK)) < 0)
+  if ((ret = sshv2_buffer_get_int32 (request, &message, SSH_FX_OK, NULL)) < 0)
     return (ret);
 
   sshv2_message_free (&message);
@@ -1459,7 +1465,7 @@
     return (ret);
 
   message.pos += 4;
-  if ((ret = sshv2_buffer_get_int32 (request, &message, SSH_FX_OK)) < 0)
+  if ((ret = sshv2_buffer_get_int32 (request, &message, SSH_FX_OK, NULL)) < 0)
     return (ret);
 
   sshv2_message_free (&message);
@@ -1502,7 +1508,7 @@
     return (ret);
 
   message.pos += 4;
-  if ((ret = sshv2_buffer_get_int32 (request, &message, SSH_FX_OK)) < 0)
+  if ((ret = sshv2_buffer_get_int32 (request, &message, SSH_FX_OK, NULL)) < 0)
     return (ret);
 
   sshv2_message_free (&message);
@@ -1540,7 +1546,7 @@
     return (ret);
 
   message.pos += 4;
-  if ((ret = sshv2_buffer_get_int32 (request, &message, SSH_FX_OK)) < 0)
+  if ((ret = sshv2_buffer_get_int32 (request, &message, SSH_FX_OK, NULL)) < 0)
     return (ret);
 
   sshv2_message_free (&message);
@@ -1594,7 +1600,7 @@
     return (ret);
 
   message.pos += 4;
-  if ((ret = sshv2_buffer_get_int32 (request, &message, SSH_FX_OK)) < 0)
+  if ((ret = sshv2_buffer_get_int32 (request, &message, SSH_FX_OK, NULL)) < 0)
     return (ret);
 
   sshv2_message_free (&message);
@@ -1637,7 +1643,7 @@
     return (ret);
 
   message.pos += 4;
-  if ((ret = sshv2_buffer_get_int32 (request, &message, SSH_FX_OK)) < 0)
+  if ((ret = sshv2_buffer_get_int32 (request, &message, SSH_FX_OK, NULL)) < 0)
     return (ret);
 
   sshv2_message_free (&message);
@@ -1917,15 +1923,11 @@
         return (ret);
 
       message.pos += 4;
-      if ((num = sshv2_buffer_get_int32 (request, &message, SSH_FX_OK)) < 0)
-        return (num);
-      sshv2_message_free (&message);
+      if ((ret = sshv2_buffer_get_int32 (request, &message, SSH_FX_EOF,
+                                         NULL)) < 0)
+        return (ret); 
 
-      if (num == SSH_FX_FAILURE)
-        return (GFTP_ERETRYABLE);
-      else if (num != SSH_FX_EOF)
-        return (sshv2_wrong_response (request, &message));
-
+      sshv2_message_free (&message);
       return (0);
     }
 
@@ -1996,15 +1998,15 @@
     return (sshv2_wrong_response (request, &message));
 
   message.pos += 4;
-  if ((num = sshv2_buffer_get_int32 (request, &message, SSH_FX_OK)) < 0)
-    return (GFTP_ERETRYABLE);
-  sshv2_message_free (&message);
+  if ((ret = sshv2_buffer_get_int32 (request, &message, SSH_FX_OK, &num)) < 0)
+    {
+      if (num == SSH_FX_EOF)
+        return (0);
 
-  if (num == SSH_FX_EOF)
-    return (0);
-  else if (num != SSH_FX_OK)
-    return (GFTP_ERETRYABLE);
+      return (ret);
+    }
 
+  sshv2_message_free (&message);
   params->offset += size;
   return (size);
 }
--- a/src/gtk/chmod_dialog.c	Sat Jul 31 12:06:51 2004 +0000
+++ b/src/gtk/chmod_dialog.c	Sun Aug 01 11:03:39 2004 +0000
@@ -37,7 +37,7 @@
   error = 0;
 
   filelist = wdata->files;
-  templist = GTK_CLIST (wdata->listbox)->selection;
+  templist = gftp_gtk_get_list_selection (wdata);
   num = 0;
   while (templist != NULL)
     {
@@ -278,7 +278,7 @@
   if (IS_ONE_SELECTED (wdata))
     {
       filelist = wdata->files;
-      templist = GTK_CLIST (wdata->listbox)->selection;
+      templist = gftp_gtk_get_list_selection (wdata);
       num = 0;
       templist = get_next_selection (templist, &filelist, &num);
       tempfle = filelist->data;
--- a/src/gtk/delete_dialog.c	Sat Jul 31 12:06:51 2004 +0000
+++ b/src/gtk/delete_dialog.c	Sun Aug 01 11:03:39 2004 +0000
@@ -21,6 +21,13 @@
 static const char cvsid[] = "$Id$";
 
 static void
+_gftp_gtk_free_del_data (gftp_transfer * transfer, gftp_dialog_data * ddata)
+{
+  free_tdata (transfer);
+}
+
+
+static void
 yesCB (gftp_transfer * transfer, gftp_dialog_data * ddata)
 {
   gftpui_callback_data * cdata;
@@ -40,7 +47,7 @@
   gftpui_common_run_callback_function (cdata);
 
   g_free (cdata);
-  /* FIXME free_tdata (transfer); */
+  _gftp_gtk_free_del_data (transfer, ddata);
 }
 
 
@@ -65,7 +72,7 @@
     return;
 
   MakeYesNoDialog (_("Delete Files/Directories"), tempstr, 
-                   yesCB, transfer, NULL, NULL);
+                   yesCB, transfer, _gftp_gtk_free_del_data, transfer);
   g_free (tempstr);
 }
 
@@ -89,7 +96,7 @@
   transfer->fromwdata = wdata;
 
   num = 0;
-  templist = GTK_CLIST (wdata->listbox)->selection;
+  templist = gftp_gtk_get_list_selection (wdata);
   filelist = wdata->files;
   while (templist != NULL)
     {
@@ -112,14 +119,14 @@
 
   ret = gftp_gtk_get_subdirs (transfer, &wdata->tid);
 
-  if (!GFTP_IS_CONNECTED (transfer->fromreq))
+  gftp_swap_socks (wdata->request, transfer->fromreq);
+
+  if (!GFTP_IS_CONNECTED (wdata->request))
     {
       gftpui_disconnect (wdata);
       return;
     }
 
-  gftp_swap_socks (wdata->request, transfer->fromreq);
-
   if (!ret)
     return;
 
--- a/src/gtk/dnd.c	Sat Jul 31 12:06:51 2004 +0000
+++ b/src/gtk/dnd.c	Sun Aug 01 11:03:39 2004 +0000
@@ -151,7 +151,7 @@
     return;
 
   filelist = wdata->files;
-  templist = GTK_CLIST (wdata->listbox)->selection;
+  templist = gftp_gtk_get_list_selection (wdata);
   curpos = 0;
   while (templist != NULL)
     {
--- a/src/gtk/gftp-gtk.c	Sat Jul 31 12:06:51 2004 +0000
+++ b/src/gtk/gftp-gtk.c	Sun Aug 01 11:03:39 2004 +0000
@@ -600,7 +600,7 @@
                               &list_dblclk_action);
 
   filelist = wdata->files;
-  templist = GTK_CLIST (wdata->listbox)->selection;
+  templist = gftp_gtk_get_list_selection (wdata);
   num = 0;
   templist = get_next_selection (templist, &filelist, &num);
   tempfle = (gftp_file *) filelist->data;
--- a/src/gtk/gftp-gtk.h	Sat Jul 31 12:06:51 2004 +0000
+++ b/src/gtk/gftp-gtk.h	Sun Aug 01 11:03:39 2004 +0000
@@ -35,6 +35,7 @@
 
 #define IS_ONE_SELECTED(wdata)		(GTK_CLIST ((wdata)->listbox)->selection && GTK_CLIST ((wdata)->listbox)->selection->next == NULL)
 #define IS_NONE_SELECTED(wdata)		(GTK_CLIST ((wdata)->listbox)->selection == NULL)
+#define gftp_gtk_get_list_selection(wdata)  (GTK_CLIST ((wdata)->listbox)->selection)
 
 #define GFTP_IS_SAME_HOST_START_TRANS(wdata,trequest) \
   ((wdata) != NULL && (wdata)->request != NULL && \
--- a/src/gtk/gtkui.c	Sat Jul 31 12:06:51 2004 +0000
+++ b/src/gtk/gtkui.c	Sun Aug 01 11:03:39 2004 +0000
@@ -338,7 +338,7 @@
   if (!check_status (_("Rename"), wdata, gftpui_common_use_threads (wdata->request), 1, 1, wdata->request->rename != NULL))
     return;
 
-  templist = GTK_CLIST (wdata->listbox)->selection;
+  templist = gftp_gtk_get_list_selection (wdata);
   num = 0;
   filelist = wdata->files;
   templist = get_next_selection (templist, &filelist, &num);
@@ -418,7 +418,7 @@
                      wdata->request->chdir != NULL))
     return;
 
-  templist = GTK_CLIST (wdata->listbox)->selection;
+  templist = gftp_gtk_get_list_selection (wdata);
   num = 0;
   filelist = wdata->files;
   templist = get_next_selection (templist, &filelist, &num);
--- a/src/gtk/menu-items.c	Sat Jul 31 12:06:51 2004 +0000
+++ b/src/gtk/menu-items.c	Sun Aug 01 11:03:39 2004 +0000
@@ -42,7 +42,7 @@
   wdata->filespec = g_strdup (edttext);
 
   filelist = wdata->files;
-  templist = GTK_CLIST (wdata->listbox)->selection;
+  templist = gftp_gtk_get_list_selection (wdata);
   num = 0;
   while (templist != NULL)
     {
@@ -164,7 +164,7 @@
   wdata->show_selected = 1;
 
   filelist = wdata->files;
-  templist = GTK_CLIST (wdata->listbox)->selection;
+  templist = gftp_gtk_get_list_selection (wdata);
   num = 0;
   while (templist != NULL)
     {
--- a/src/gtk/transfer.c	Sat Jul 31 12:06:51 2004 +0000
+++ b/src/gtk/transfer.c	Sun Aug 01 11:03:39 2004 +0000
@@ -110,7 +110,7 @@
   transfer->towdata = towdata;
 
   num = 0;
-  templist = GTK_CLIST (fromwdata->listbox)->selection;
+  templist = gftp_gtk_get_list_selection (fromwdata);
   filelist = fromwdata->files;
   while (templist != NULL)
     {