-(cond
- ((and (featurep 'xemacs)
- (>= (function-max-args 'md5) 4))
- ;; recent XEmacs has `md5' as a built-in function.
- ;; and default CODING is 'undecided.
- ;;
- (define-hmac-function hmac-md5
- (lambda
- (object &optional start end)
- (md5 object start end 'binary)) 64 16)
- )
- (t
- (define-hmac-function hmac-md5 md5 64 16)
- ))
-; => (hmac-md5 TEXT KEY)
+;; We cannot define this function in md5.el because recent XEmacs provides
+;; built-in md5 function and provides feature 'md5 at startup.
+(if (and (featurep 'xemacs)
+ (fboundp 'md5)
+ (subrp (symbol-function 'md5))
+ (condition-case nil
+ ;; `md5' of XEmacs 21 takes 4th arg CODING (and 5th arg NOERROR).
+ (md5 "" nil nil 'binary) ; => "fb5d2156096fa1f254352f3cc3fada7e"
+ (error nil)))
+ ;; XEmacs 21.
+ (defun md5-binary (string &optional start end)
+ "Return the MD5 of STRING in binary form."
+ (decode-hex-string (md5 string start end 'binary)))
+ ;; not XEmacs 21 and not DL.
+ (if (not (fboundp 'md5-binary))
+ (defun md5-binary (string)
+ "Return the MD5 of STRING in binary form."
+ (decode-hex-string (md5 string)))))