all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Paul Eggert <eggert@cs.ucla.edu>
To: Tadeus Prastowo <tadeus.prastowo@unitn.it>
Cc: 35056@debbugs.gnu.org
Subject: bug#35056: 26.1; Tetris score is no longer updated due to commit 995be66f0f0d26d1a96cbb8dfb429c3941157771
Date: Sat, 30 Mar 2019 20:32:51 -0700	[thread overview]
Message-ID: <78ea6992-85b1-e005-2c33-7b1df1c04031@cs.ucla.edu> (raw)
In-Reply-To: <CAN-HRFYdxm6qJe8jc4=t9g7Se8GSFwTyiTrNABveF7zUd7dD8w@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 1047 bytes --]

Apparently the problem is that there are two formats of Tetris game-score files. 
One format is used by play/gamegrid.el itself, the other is used by the 
update-game-score command. I didn't know that; I thought that the only reason to 
use update-game-score was to get setuid/setgid permissions, and that the file 
format didn't change.

To some extent the file-format problem is Just One Of Those Things: if up 
upgrade Emacs and it changes the file format, Emacs is not smart enough to deal 
with the format change and so it loses your old Tetris scores.

That being said, Emacs could try harder to use the update-game-score program if 
it's installed. Is it in your installation? If so, please try the attached 
patch. If not, please try redoing 'configure' so that update-game-score is built 
and installed, and then try the attached patch.

I suppose it would be possible to do more-serious hacking in gamegrid.el to deal 
with the incompatible file formats (convert formats back and forth, say), but 
that would be beyond my call of duty.


[-- Attachment #2: 0001-Use-update-game-score-more-often-with-Tetris.patch --]
[-- Type: text/x-patch, Size: 3703 bytes --]

From 9f14fc6f61c8c6609a24efa1024ef8a68d16a92f Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Sat, 30 Mar 2019 20:26:15 -0700
Subject: [PATCH] Use update-game-score more often with Tetris

* lisp/play/gamegrid.el (gamegrid-add-score-with-update-game-score):
Go back to previous way of deciding whether to invoke
update-game-score, except do not try to invoke it if file-modes
fails on it (Bug#35056).
---
 lisp/play/gamegrid.el | 38 +++++++++++++++++++++++---------------
 1 file changed, 23 insertions(+), 15 deletions(-)

diff --git a/lisp/play/gamegrid.el b/lisp/play/gamegrid.el
index 430a2071bf..4a9dac7f74 100644
--- a/lisp/play/gamegrid.el
+++ b/lisp/play/gamegrid.el
@@ -565,8 +565,8 @@ gamegrid-add-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,
+;;     1. FILE is an absolute filename or "update-game-score" does not exist.
+;;	  Then FILE should be a file in a temporary file directory.  This is how
 ;;        `gamegrid-add-score' was supposed to be used in the past and
 ;;        is covered here for backward-compatibility.
 ;;
@@ -583,21 +583,18 @@ gamegrid-add-score
 ;;        update FILE.  This is for the case that a user has installed
 ;;        a game on her own.
 ;;
-;;     4. "update-game-score" does not exist or is not setgid/setuid.
-;;        Create/update FILE in the user's home directory, without
-;;        using "update-game-score".  There is presumably no shared
-;;        game directory.
+;;     4. "update-game-score" is not setgid/setuid.  Use it to
+;;        create/update FILE in the user's home directory.  There is
+;;        presumably no shared game directory.
 
 (defvar gamegrid-shared-game-dir)
 
 (defun gamegrid-add-score-with-update-game-score (file score)
-  (let ((gamegrid-shared-game-dir
-	 (not (zerop (logand (or (file-modes
-				  (expand-file-name "update-game-score"
-						    exec-directory))
-				  0)
-			     #o6000)))))
-    (cond ((file-name-absolute-p file)
+  (let* ((update-game-score-modes
+	  (file-modes (expand-file-name "update-game-score" exec-directory)))
+	 (gamegrid-shared-game-dir
+	  (not (zerop (logand #o6000 (or update-game-score-modes 0))))))
+    (cond ((or (not update-game-score-modes) (file-name-absolute-p file))
 	   (gamegrid-add-score-insecure file score))
 	  ((and gamegrid-shared-game-dir
 		(file-exists-p (expand-file-name file shared-game-score-directory)))
@@ -607,12 +604,23 @@ gamegrid-add-score-with-update-game-score
 	    (expand-file-name file shared-game-score-directory) score))
 	  ;; Else: Add the score to a score file in the user's home
 	  ;; directory.
-	  (t
+	  (gamegrid-shared-game-dir
+	   ;; If gamegrid-shared-game-dir is non-nil the
+	   ;; "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)))))
+					gamegrid-user-score-file-directory))
+	  (t
+	   (unless (file-exists-p
+		    (directory-file-name gamegrid-user-score-file-directory))
+	     (make-directory gamegrid-user-score-file-directory t))
+	   (let ((f (expand-file-name file
+				      gamegrid-user-score-file-directory)))
+	     (unless (file-exists-p f)
+	       (write-region "" nil f nil 'silent nil 'excl))
+	     (gamegrid-add-score-with-update-game-score-1 file f score))))))
 
 (defun gamegrid-add-score-with-update-game-score-1 (file target score)
   (let ((default-directory "/")
-- 
2.17.1


  reply	other threads:[~2019-03-31  3:32 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-30 22:32 26.1; Tetris score is no longer updated due to commit 995be66f0f0d26d1a96cbb8dfb429c3941157771 Tadeus Prastowo
2019-03-31  3:32 ` Paul Eggert [this message]
2019-03-31 19:41   ` bug#35056: " Tadeus Prastowo
2019-03-31 22:54   ` Richard Stallman
2019-04-01  3:03     ` Paul Eggert

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=78ea6992-85b1-e005-2c33-7b1df1c04031@cs.ucla.edu \
    --to=eggert@cs.ucla.edu \
    --cc=35056@debbugs.gnu.org \
    --cc=tadeus.prastowo@unitn.it \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.