summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorJuanma Barranquero <lekktu@gmail.com>2003-04-29 23:02:27 +0000
committerJuanma Barranquero <lekktu@gmail.com>2003-04-29 23:02:27 +0000
commitc8877e78623f23f393cd83d260cf993fe9d563f5 (patch)
tree44a63354f1baf267c16d99b55b293e58b8d5f1d4 /lisp
parent50f66ea8f7d98463358c904ef795adb3d20039d1 (diff)
downloademacs-c8877e78623f23f393cd83d260cf993fe9d563f5.tar.gz
Added a comment explaining the various ways to save a game score on POSIX
systems. (gamegrid-add-score-with-update-game-score): Use `cond' instead of `if'. Provide for the case that FILE is an absolute filename. Create the directory "$HOME/.emacs.d/games", if necessary.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/play/gamegrid.el75
1 files changed, 53 insertions, 22 deletions
diff --git a/lisp/play/gamegrid.el b/lisp/play/gamegrid.el
index 677b3e45268..540498d0971 100644
--- a/lisp/play/gamegrid.el
+++ b/lisp/play/gamegrid.el
@@ -450,6 +450,31 @@ FILE is created there."
(t
(gamegrid-add-score-with-update-game-score file score))))
+
+;; On POSIX systems there are four cases to distinguish:
+
+;; 1. FILE is an absolute filename. Then it should be a file in
+;; temporary file directory. This is the way,
+;; `gamegrid-add-score' was supposed to be used in the past and
+;; is covered here for backward-compatibility.
+;;
+;; 2. The helper program "update-game-score" is setuid and the
+;; file FILE does already exist in a system wide shared game
+;; directory. This should be the normal case on POSIX systems,
+;; if the game was installed system wide. Use
+;; "update-game-score" to add the score to the file in the
+;; shared game directory.
+;;
+;; 3. "update-game-score" is setuid, but the file FILE does *not*
+;; exist in the system wide shared game directory. Use
+;; `gamegrid-add-score-insecure' to create--if necessary--and
+;; update FILE. This is for the case that a user has installed
+;; a game on her own.
+;;
+;; 4. "update-game-score" is not setuid. Use it to create/update
+;; FILE in the user's home directory. There is presumably no
+;; shared game directory.
+
(defun gamegrid-add-score-with-update-game-score (file score)
(let* ((result nil) ;; What is this good for? -- os
(have-shared-game-dir
@@ -457,28 +482,34 @@ FILE is created there."
(expand-file-name "update-game-score"
exec-directory))
#o4000)))))
- (if (and have-shared-game-dir
- (file-exists-p (expand-file-name file shared-game-score-directory)))
- ;; Use the setuid update-gamescore program to update a
- ;; system-wide score file.
- (gamegrid-add-score-with-update-game-score-1
- (expand-file-name file shared-game-score-directory) score)
- ;; Else: Add the score to a score file in the user's home
- ;; directory. If `have-shared-game-dir' is non-nil, the
- ;; "update-gamescore" program is setuid, so don't use it.
- (if have-shared-game-dir
- (gamegrid-add-score-insecure file score
- gamegrid-user-score-file-directory)
- (let ((f (expand-file-name
- gamegrid-user-score-file-directory)))
- (when (file-writable-p f)
- (unless (eq (car-safe (file-attributes f))
- t)
- (make-directory f))
- (setq f (expand-file-name file f))
- (unless (file-exists-p f)
- (write-region "" nil f nil 'silent nil 'excl)))
- (gamegrid-add-score-with-update-game-score-1 f score))))))
+ (cond ((file-name-absolute-p file)
+ (gamegrid-add-score-insecure file score))
+ ((and have-shared-game-dir
+ (file-exists-p (expand-file-name file shared-game-score-directory)))
+ ;; Use the setuid "update-game-score" program to update a
+ ;; system-wide score file.
+ (gamegrid-add-score-with-update-game-score-1
+ (expand-file-name file shared-game-score-directory) score))
+ ;; Else: Add the score to a score file in the user's home
+ ;; directory.
+ (have-shared-game-dir
+ ;; If `have-shared-game-dir' is non-nil, then
+ ;; "update-gamescore" program is setuid, so don't use it.
+ (unless (file-exists-p
+ (directory-file-name gamegrid-user-score-file-directory))
+ (make-directory gamegrid-user-score-file-directory t))
+ (gamegrid-add-score-insecure file score
+ gamegrid-user-score-file-directory))
+ (t (let ((f (expand-file-name
+ gamegrid-user-score-file-directory)))
+ (when (file-writable-p f)
+ (unless (eq (car-safe (file-attributes f))
+ t)
+ (make-directory f))
+ (setq f (expand-file-name file f))
+ (unless (file-exists-p f)
+ (write-region "" nil f nil 'silent nil 'excl)))
+ (gamegrid-add-score-with-update-game-score-1 f score))))))
(defun gamegrid-add-score-with-update-game-score-1 (target score)
(let ((default-directory "/")