X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lisp%2Fbase64.el;h=2a47045e1d69116912f602525176fdd5130b8eb8;hb=01a5793322a7c10a853ad5fef2dcbfad24e88a77;hp=12b4ca9119612360880823fc5c6d29633b5791df;hpb=92e487b48b97af4b331420a1870bb7f185fccf99;p=elisp%2Fgnus.git- diff --git a/lisp/base64.el b/lisp/base64.el index 12b4ca9..2a47045 100644 --- a/lisp/base64.el +++ b/lisp/base64.el @@ -25,7 +25,32 @@ ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(require 'poe) +(eval-when-compile (require 'static)) + +(require 'mel) + +(eval-and-compile + (defun autoload-functionp (object) + (if (functionp object) + (let ((def object)) + (while (and (symbolp def) (fboundp def)) + (setq def (symbol-function def))) + (eq (car-safe def) 'autoload)))) + (if (autoload-functionp 'base64-decode-string) + (fmakunbound 'base64-decode-string)) + (if (autoload-functionp 'base64-decode-region) + (fmakunbound 'base64-decode-region)) + (if (autoload-functionp 'base64-encode-string) + (fmakunbound 'base64-encode-string)) + (if (autoload-functionp 'base64-encode-region) + (fmakunbound 'base64-encode-region)) + (mel-find-function 'mime-decode-string "base64") + (mel-find-function 'mime-decode-region "base64") + (mel-find-function 'mime-encode-string "base64") + (mel-find-function 'mime-encode-region "base64")) + +(static-when nil +(eval-when-compile (require 'cl)) ;; For non-MULE (if (not (fboundp 'char-int)) @@ -65,7 +90,7 @@ base64-encoder-program.") ( ?w . 48) ( ?x . 49) ( ?y . 50) ( ?z . 51) ( ?0 . 52) ( ?1 . 53) ( ?2 . 54) ( ?3 . 55) ( ?4 . 56) ( ?5 . 57) ( ?6 . 58) ( ?7 . 59) ( ?8 . 60) ( ?9 . 61) ( ?+ . 62) ( ?/ . 63) - )) + )) (defvar base64-alphabet-decoding-vector (let ((v (make-vector 123 nil)) @@ -75,9 +100,13 @@ base64-encoder-program.") (setq p (cdr p))) v)) +(defvar base64-binary-coding-system 'binary) + (defun base64-run-command-on-region (start end output-buffer command &rest arg-list) - (let ((tempfile nil) status errstring default-process-coding-system) + (let ((tempfile nil) status errstring default-process-coding-system + (coding-system-for-write base64-binary-coding-system) + (coding-system-for-read base64-binary-coding-system)) (unwind-protect (progn (setq tempfile (make-temp-name "base64")) @@ -105,9 +134,10 @@ base64-encoder-program.") (if (or (null buffer) (eq buffer (current-buffer))) (insert-char char count) (with-current-buffer buffer - (insert-char char count))))) + (insert-char char count)))) + (setq base64-binary-coding-system 'no-conversion)) -(defun-maybe base64-decode-region (start end) +(defun base64-decode-region (start end) (interactive "r") ;;(message "Decoding base64...") (let ((work-buffer nil) @@ -123,9 +153,9 @@ base64-encoder-program.") (if base64-decoder-program (let* ((binary-process-output t) ; any text already has CRLFs (status (apply 'base64-run-command-on-region - start end work-buffer - base64-decoder-program - base64-decoder-switches))) + start end work-buffer + base64-decoder-program + base64-decoder-switches))) (if (not (eq status t)) (error "%s" (cdr status)))) (goto-char start) @@ -144,7 +174,7 @@ base64-encoder-program.") (cond ((= counter 4) (base64-insert-char (lsh bits -16) 1 nil work-buffer) (base64-insert-char (logand (lsh bits -8) 255) 1 nil - work-buffer) + work-buffer) (base64-insert-char (logand bits 255) 1 nil work-buffer) (setq bits 0 counter 0)) @@ -175,7 +205,7 @@ base64-encoder-program.") ;;(message "Decoding base64... done") ) -(defun-maybe base64-encode-region (start end &optional no-line-break) +(defun base64-encode-region (start end &optional no-line-break) (interactive "r") (message "Encoding base64...") (let ((work-buffer nil) @@ -242,12 +272,12 @@ base64-encoder-program.") (and work-buffer (kill-buffer work-buffer)))) (message "Encoding base64... done")) -(defun base64-encode (string) +(defun base64-encode (string &optional no-line-break) (save-excursion (set-buffer (get-buffer-create " *base64-encode*")) (erase-buffer) (insert string) - (base64-encode-region (point-min) (point-max)) + (base64-encode-region (point-min) (point-max) no-line-break) (skip-chars-backward " \t\r\n") (delete-region (point-max) (point)) (prog1 @@ -268,5 +298,8 @@ base64-encoder-program.") (kill-buffer (current-buffer))))) (fset 'base64-decode-string 'base64-decode) +(fset 'base64-encode-string 'base64-encode) + +);; (static-when nil ... (provide 'base64)