X-Git-Url: https://cgit.sxemacs.org/?a=blobdiff_plain;ds=sidebyside;f=lisp%2Fuudecode.el;h=7ab2fcd1c620bd289325b088cfeb7322c9eb546f;hb=d3a52f935848c1b6c6d62fcb1d6aacf1d4ea0185;hp=01c2db310dc51c38ba5c246d6356553b0c153290;hpb=e405b22c6b46721607c5e6c712a4705c23dee751;p=gnus diff --git a/lisp/uudecode.el b/lisp/uudecode.el index 01c2db310..7ab2fcd1c 100644 --- a/lisp/uudecode.el +++ b/lisp/uudecode.el @@ -1,17 +1,17 @@ ;;; uudecode.el -- elisp native uudecode -;; Copyright (c) 1998, 1999, 2000, 2001, 2003, 2004 -;; Free Software Foundation, Inc. +;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, +;; 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. ;; Author: Shenghuo Zhu ;; Keywords: uudecode news ;; This file is part of GNU Emacs. -;; GNU Emacs is free software; you can redistribute it and/or modify +;; GNU Emacs is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation; either version 2, or (at your option) -;; any later version. +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -19,9 +19,7 @@ ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. +;; along with GNU Emacs. If not, see . ;;; Commentary: @@ -35,23 +33,28 @@ 'char-int 'identity))) +(defgroup uudecode nil + "Decoding of uuencoded data." + :group 'mail + :group 'news) + (defcustom uudecode-decoder-program "uudecode" "*Non-nil value should be a string that names a uu decoder. The program should expect to read uu data on its standard input and write the converted data to its standard output." :type 'string - :group 'gnus-extract) + :group 'uudecode) (defcustom uudecode-decoder-switches nil "*List of command line flags passed to `uudecode-decoder-program'." - :group 'gnus-extract + :group 'uudecode :type '(repeat string)) (defcustom uudecode-use-external (executable-find uudecode-decoder-program) "*Use external uudecode program." :version "22.1" - :group 'gnus-extract + :group 'uudecode :type 'boolean) (defconst uudecode-alphabet "\040-\140") @@ -98,7 +101,11 @@ used is specified by `uudecode-decoder-program'." (make-temp-name "uu") uudecode-temporary-file-directory)))) (let ((cdir default-directory) - default-process-coding-system) + (default-process-coding-system + (if (featurep 'xemacs) + ;; In XEmacs, `nil' is not a valid coding system. + '(binary . binary) + nil))) (unwind-protect (with-temp-buffer (insert "begin 600 " (file-name-nondirectory tempfile) "\n") @@ -122,6 +129,20 @@ used is specified by `uudecode-decoder-program'." (message "Can not uudecode"))) (ignore-errors (or file-name (delete-file tempfile)))))) +(eval-and-compile + (defalias 'uudecode-string-to-multibyte + (cond + ((featurep 'xemacs) + 'identity) + ((fboundp 'string-to-multibyte) + 'string-to-multibyte) + (t + (lambda (string) + "Return a multibyte string with the same individual chars as string." + (mapconcat + (lambda (ch) (string-as-multibyte (char-to-string ch))) + string "")))))) + ;;;###autoload (defun uudecode-decode-region-internal (start end &optional file-name) "Uudecode region between START and END without using an external program. @@ -194,12 +215,15 @@ If FILE-NAME is non-nil, save the result to FILE-NAME." result)))) (skip-chars-forward non-data-chars end)) (if file-name - (let (default-enable-multibyte-characters) - (with-temp-file file-name - (insert (apply 'concat (nreverse result))))) + (with-temp-file file-name + (unless (featurep 'xemacs) (set-buffer-multibyte nil)) + (insert (apply 'concat (nreverse result)))) (or (markerp end) (setq end (set-marker (make-marker) end))) (goto-char start) - (insert (apply 'concat (nreverse result))) + (if enable-multibyte-characters + (dolist (x (nreverse result)) + (insert (uudecode-string-to-multibyte x))) + (insert (apply 'concat (nreverse result)))) (delete-region (point) end)))))) ;;;###autoload @@ -212,5 +236,4 @@ If FILE-NAME is non-nil, save the result to FILE-NAME." (provide 'uudecode) -;;; arch-tag: e1f09ed5-62b4-4677-9f13-4e81c4fe8ce3 ;;; uudecode.el ends here