summaryrefslogtreecommitdiff
path: root/lisp/dos-fns.el
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1996-05-08 17:40:51 +0000
committerRichard M. Stallman <rms@gnu.org>1996-05-08 17:40:51 +0000
commit9c7771996c9f4d3f7279427353e81cc1d41d17d3 (patch)
tree802721b51488e96bb354fe0dfaa1ed82c66278b2 /lisp/dos-fns.el
parent54bd13807dd7ccafba18157bd2d6cfc471598160 (diff)
downloademacs-9c7771996c9f4d3f7279427353e81cc1d41d17d3.tar.gz
(convert-standard-filename): Test msdos-long-file-names.
Return "." or ".." unchanged.
Diffstat (limited to 'lisp/dos-fns.el')
-rw-r--r--lisp/dos-fns.el89
1 files changed, 44 insertions, 45 deletions
diff --git a/lisp/dos-fns.el b/lisp/dos-fns.el
index 9ac8197ab64..ff1b0ba9cb9 100644
--- a/lisp/dos-fns.el
+++ b/lisp/dos-fns.el
@@ -49,51 +49,50 @@
This function's standard definition is trivial; it just returns the argument.
However, on some systems, the function is redefined
with a definition that really does change some file names."
- (let* ((dir (file-name-directory filename))
- (string (copy-sequence (file-name-nondirectory filename)))
- (lastchar (aref string (1- (length string))))
- i firstdot)
- ;; If the argument is empty, just return it.
- (if (or (not (stringp filename))
- (string= filename "")
- (string= string ""))
- filename
- (progn
- ;; Change a leading period to a leading underscore.
- (if (= (aref string 0) ?.)
- (aset string 0 ?_))
- ;; Get rid of invalid characters.
- (while (setq i (string-match
- "[^-a-zA-Z0-9_.%~^$!#&{}@`'()\200-\376]"
- string))
- (aset string i ?_))
- ;; If we don't have a period,
- ;; and we have a dash or underscore that isn't the first char,
- ;; change that to a period.
- (if (and (not (string-match "\\." string))
- (setq i (string-match "[-_]" string 1)))
- (aset string i ?\.))
- ;; If we don't have a period in the first 8 chars, insert one.
- (if (> (or (string-match "\\." string)
- (length string))
- 8)
- (setq string
- (concat (substring string 0 8)
- "."
- (substring string 8))))
- (setq firstdot (or (string-match "\\." string) (1- (length string))))
- ;; Truncate to 3 chars after the first period.
- (if (> (length string) (+ firstdot 4))
- (setq string (substring string 0 (+ firstdot 4))))
- ;; Change all periods except the first one into underscores.
- (while (string-match "\\." string (1+ firstdot))
- (setq i (string-match "\\." string (1+ firstdot)))
- (aset string i ?_))
- ;; If the last character of the original filename was `~',
- ;; make sure the munged name ends with it also.
- (if (equal lastchar ?~)
- (aset string (1- (length string)) lastchar))
- (concat dir string)))))
+ (if (or (msdos-long-file-names)
+ (not (stringp filename))
+ (member (file-name-nondirectory filename) '("" "." "..")))
+ filename
+ (let* ((dir (file-name-directory filename))
+ (string (copy-sequence (file-name-nondirectory filename)))
+ (lastchar (aref string (1- (length string))))
+ i firstdot)
+ ;; If the argument is empty, just return it.
+ ;; Change a leading period to a leading underscore.
+ (if (= (aref string 0) ?.)
+ (aset string 0 ?_))
+ ;; Get rid of invalid characters.
+ (while (setq i (string-match
+ "[^-a-zA-Z0-9_.%~^$!#&{}@`'()\200-\376]"
+ string))
+ (aset string i ?_))
+ ;; If we don't have a period,
+ ;; and we have a dash or underscore that isn't the first char,
+ ;; change that to a period.
+ (if (and (not (string-match "\\." string))
+ (setq i (string-match "[-_]" string 1)))
+ (aset string i ?\.))
+ ;; If we don't have a period in the first 8 chars, insert one.
+ (if (> (or (string-match "\\." string)
+ (length string))
+ 8)
+ (setq string
+ (concat (substring string 0 8)
+ "."
+ (substring string 8))))
+ (setq firstdot (or (string-match "\\." string) (1- (length string))))
+ ;; Truncate to 3 chars after the first period.
+ (if (> (length string) (+ firstdot 4))
+ (setq string (substring string 0 (+ firstdot 4))))
+ ;; Change all periods except the first one into underscores.
+ (while (string-match "\\." string (1+ firstdot))
+ (setq i (string-match "\\." string (1+ firstdot)))
+ (aset string i ?_))
+ ;; If the last character of the original filename was `~',
+ ;; make sure the munged name ends with it also.
+ (if (equal lastchar ?~)
+ (aset string (1- (length string)) lastchar))
+ (concat dir string))))
(defvar file-name-buffer-file-type-alist
'(