Ferenc Wagner <[EMAIL PROTECTED]> writes:

>>> And really,
>>>
>>> (file-modes "diag.txt") => nil
>>> (file-modes "/tmp/#diag.txt#") => 436
>>
>> That's what I suspected. The fix would be simple (call `set-file-modes�
>> only when `file-modes� returns non-nil).
>>
>> Nevertheless, I'm curious to know why (file-modes "diag.txt") returned
>> nil. Could you, please, give me the full Tramp file name of
>> "diag.txt"? Mainly, I'm interested in the access method.
>
> Sure: /ssh:csoki:/home/wferi/anulus_reports/diag.txt
>
> The remote machine is FreeBSD 5.3-STABLE, btw.

Still strange. `file-modes' should always return a valid value in the
ssh case.

But so what, I've fixed your initial problem in Tramp CVS. If you want
to test it yourself you might apply the appended patch to tramp.el
(note that there are other fixes since Tramp 2.0.48, too). The fix will
be included in Tramp 2.0.49.

Thanx for your report and support, and best regards, Michael.

Index: tramp.el
===================================================================
RCS file: /cvsroot/tramp/tramp/lisp/tramp.el,v
retrieving revision 2.359.2.31
retrieving revision 2.359.2.36
diff -u -r2.359.2.31 -r2.359.2.36
--- tramp.el	27 Feb 2005 14:28:50 -0000	2.359.2.31
+++ tramp.el	29 Apr 2005 20:43:06 -0000	2.359.2.36
@@ -1352,7 +1352,9 @@
 
 ;; Chunked sending kluge.  We set this to 500 for black-listed constellations
 ;; known to have a bug in `process-send-string'; some ssh connections appear
-;; to drop bytes when data is sent too quickly.
+;; to drop bytes when data is sent too quickly.  There is also a connection
+;; buffer local variable, which is computed depending on remote host properties
+;; when `tramp-chunksize' is zero or nil.
 (defcustom tramp-chunksize
   (when (and (not (featurep 'xemacs))
 	     (memq system-type '(hpux)))
@@ -3561,7 +3563,13 @@
 	    (unless asynchronous
 	      (tramp-wait-for-output)))
 	  (unless asynchronous
-	    (insert-buffer (tramp-get-buffer multi-method method user host)))
+	    ;; We cannot use `insert-buffer' because the tramp buffer
+	    ;; changes its contents before insertion due to calling
+	    ;; `expand-file' and alike.
+	    (insert
+	     (with-current-buffer
+		 (tramp-get-buffer multi-method method user host)
+	       (buffer-string))))
 	  (when error-buffer
 	    (save-excursion
 	      (unless (bufferp error-buffer)
@@ -3571,7 +3579,11 @@
 	       "cat /tmp/tramp.$$.err")
 	      (tramp-wait-for-output)
 	      (set-buffer error-buffer)
-	      (insert-buffer (tramp-get-buffer multi-method method user host))
+	      ;; Same comment as above
+	      (insert
+	       (with-current-buffer
+		   (tramp-get-buffer multi-method method user host)
+		 (buffer-string)))
 	      (tramp-send-command-and-check
 	       multi-method method user host "rm -f /tmp/tramp.$$.err")))
 	  (save-excursion
@@ -4834,6 +4846,9 @@
 (defun tramp-set-auto-save ()
   (when (and (buffer-file-name)
              (tramp-tramp-file-p (buffer-file-name))
+	     ;; ange-ftp has its own auto-save mechanism
+	     (eq (tramp-find-foreign-file-name-handler (buffer-file-name))
+		 'tramp-sh-file-name-handler)
              auto-save-default)
     (auto-save-mode 1)))
 (add-hook 'find-file-hooks 'tramp-set-auto-save t)
@@ -5417,7 +5432,7 @@
              method))
     (when multi-method
       (error "Cannot multi-connect using telnet connection method"))
-    (tramp-pre-connection multi-method method user host)
+    (tramp-pre-connection multi-method method user host tramp-chunksize)
     (tramp-message 7 "Opening connection for [EMAIL PROTECTED] using %s..."
 		   (or user (user-login-name)) host method)
     (let ((process-environment (copy-sequence process-environment)))
@@ -5475,7 +5490,7 @@
   (save-match-data
     (when multi-method
       (error "Cannot multi-connect using rsh connection method"))
-    (tramp-pre-connection multi-method method user host)
+    (tramp-pre-connection multi-method method user host tramp-chunksize)
     (if (and user (not (string= user "")))
 	(tramp-message 7 "Opening connection for [EMAIL PROTECTED] using %s..."
 		       user host method)
@@ -5544,7 +5559,7 @@
       (error
        "Cannot connect to different host `%s' with `su' connection method"
        host))
-    (tramp-pre-connection multi-method method user host)
+    (tramp-pre-connection multi-method method user host tramp-chunksize)
     (tramp-message 7 "Opening connection for `%s' using `%s'..."
 		   (or user "<root>") method)
     (let ((process-environment (copy-sequence process-environment)))
@@ -5609,7 +5624,7 @@
     (unless (and (= (length method) (length user))
                  (= (length method) (length host)))
       (error "Arrays METHOD, USER, HOST must have equal length"))
-    (tramp-pre-connection multi-method method user host)
+    (tramp-pre-connection multi-method method user host tramp-chunksize)
     (tramp-message 7 "Opening `%s' connection..." multi-method)
     (let ((process-environment (copy-sequence process-environment)))
       (setenv "TERM" tramp-terminal-type)
@@ -5810,7 +5825,7 @@
 ;; HHH: Not Changed.  This might handle the case where USER is not
 ;;      given in the "File name" very poorly.  Then, the local
 ;;      variable tramp-current-user will be set to nil.
-(defun tramp-pre-connection (multi-method method user host)
+(defun tramp-pre-connection (multi-method method user host chunksize)
   "Do some setup before actually logging in.
 METHOD, USER and HOST specify the connection."
   (set-buffer (tramp-get-buffer multi-method method user host))
@@ -5818,6 +5833,7 @@
   (set (make-local-variable 'tramp-current-method) method)
   (set (make-local-variable 'tramp-current-user)   user)
   (set (make-local-variable 'tramp-current-host)   host)
+  (set (make-local-variable 'tramp-chunksize)      chunksize)
   (set (make-local-variable 'inhibit-eol-conversion) nil)
   (erase-buffer))
 
@@ -5869,6 +5885,20 @@
   (erase-buffer)
   (tramp-send-command-internal multi-method method user host
 			       "TERM=dumb; export TERM")
+  (erase-buffer)
+  ;; Check whether the remote host suffers from buggy `send-process-string'.
+  ;; This is known for FreeBSD (see comment in `send_process', file process.c).
+  ;; I've tested sending 624 bytes successfully, sending 625 bytes failed.
+  ;; Emacs makes a hack when this host type is detected locally.  It cannot
+  ;; handle remote hosts, though.
+  (when (or (not tramp-chunksize) (zerop tramp-chunksize))
+    (tramp-message 9 "Checking remote host type for `send-process-string' bug")
+    (tramp-send-command-internal multi-method method user host
+				 "(uname -sr) 2>/dev/null")
+    (goto-char (point-min))
+    (when (looking-at "FreeBSD")
+      (setq tramp-chunksize 500)))
+
   ;; Try to set up the coding system correctly.
   ;; CCC this can't be the right way to do it.  Hm.
   (save-excursion
@@ -6948,7 +6978,8 @@
       ;; Permissions should be set always, because there might be an old
       ;; auto-saved file belonging to another original file.  This could
       ;; be a security threat.
-      (set-file-modes buffer-auto-save-file-name (file-modes bfn)))))
+      (set-file-modes buffer-auto-save-file-name
+		      (or (file-modes bfn) ?\600)))))
 
 (unless (or (> emacs-major-version 21)
 	    (and (featurep 'xemacs)
@@ -7226,7 +7257,6 @@
 	 tramp-yesno-prompt-regexp
 	 tramp-yn-prompt-regexp
 	 tramp-terminal-prompt-regexp
-	 tramp-out-of-band-prompt-regexp
 	 tramp-temp-name-prefix
 	 tramp-file-name-structure
 	 tramp-file-name-regexp
@@ -7286,31 +7316,44 @@
 (defun tramp-append-tramp-buffers ()
   "Append Tramp buffers into the bug report."
 
-  ;; We load mml.el from Gnus.
+  ;; We load message.el and mml.el from Gnus.
   (if (featurep 'xemacs)
-      (load "mml" 'noerror)
+      (progn
+	(load "message" 'noerror)
+	(load "mml" 'noerror))
+    (require 'message nil 'noerror)
     (require 'mml nil 'noerror))
+  (when (functionp 'message-mode)
+    (funcall 'message-mode))
+  (when (functionp 'mml-mode)
+    (funcall 'mml-mode t))
 
   (when (and
-	 ;; We don't want to add another dependency.
-	 (functionp 'mml-insert-empty-tag)
-	 ;; 2nd parameter since Emacs 22.
-	 (condition-case nil
-	     (list-buffers-noselect nil nil)
-	   (t nil)))
-    (let ((buffer-list
-	   (delq nil
-	    (mapcar '(lambda (b)
-	     (when (string-match "^\\*\\(debug \\)?tramp/" (buffer-name b)) b))
-	     (buffer-list))))
-	  (curbuf (current-buffer)))
+	 (eq major-mode 'message-mode)
+	 (boundp 'mml-mode)
+	 (symbol-value 'mml-mode))
+
+    (let* ((tramp-buf-regexp "\\*\\(debug \\)?tramp/")
+	   (buffer-list
+	    (delq nil
+		  (mapcar '(lambda (b)
+		     (when (string-match tramp-buf-regexp (buffer-name b)) b))
+			  (buffer-list))))
+	   (curbuf (current-buffer)))
 
       ;; There is at least one Tramp buffer.
       (when buffer-list
-	(switch-to-buffer (list-buffers-noselect nil buffer-list))
+	(switch-to-buffer (list-buffers-noselect nil))
 	(delete-other-windows)
 	(setq buffer-read-only nil)
-	(goto-char (point-max))
+	(goto-char (point-min))
+	(while (not (eobp))
+	  (if (re-search-forward tramp-buf-regexp (tramp-point-at-eol) t)
+	      (forward-line 1)
+	    (forward-line 0)
+	    (let ((start (point)))
+	      (forward-line 1)
+	      (kill-region start (point)))))
 	(insert "
 The buffer(s) above will be appended to this message.  If you don't want
 to append a buffer because it contains sensible data, or because the buffer

Reply via email to