SDL-1.2: atari: Metaioctl is a direct Xbios call and does not set errno

From f743e873a35b2e2d0cfd3aad08b429444258fc0b Mon Sep 17 00:00:00 2001
From: Thorsten Otto <[EMAIL REDACTED]>
Date: Fri, 15 Dec 2023 05:33:01 +0100
Subject: [PATCH] atari: Metaioctl is a direct Xbios call and does not set
 errno

---
 src/cdrom/mint/SDL_syscdrom.c | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/src/cdrom/mint/SDL_syscdrom.c b/src/cdrom/mint/SDL_syscdrom.c
index e114efcf3..2d93d5703 100644
--- a/src/cdrom/mint/SDL_syscdrom.c
+++ b/src/cdrom/mint/SDL_syscdrom.c
@@ -40,11 +40,11 @@
 
 /* Some ioctl() errno values which occur when the tray is empty */
 #ifndef ENOMEDIUM
-#define ENOMEDIUM ENOENT
+#define ENOMEDIUM 17
 #endif
-#define ERRNO_TRAYEMPTY(errno)	\
-	((errno == EIO)    || (errno == ENOENT) || \
-	 (errno == EINVAL) || (errno == ENOMEDIUM))
+#define ERRNO_TRAYEMPTY(err)	\
+	((err == -EIO)    || (err == -ENOENT) || \
+	 (err == -EINVAL) || (err == -ENOMEDIUM))
 
 /* The maximum number of CD-ROM drives we'll detect */
 #define MAX_DRIVES	32	
@@ -102,9 +102,10 @@ int SDL_SYS_CDInit(void)
 		if (metainit.drives_map & (1<<(i-'A'))) {
 			handle = Metaopen(i, &metaopen);
 			if (handle == 0) {
+				long err;
 
 				info.cdsc_format = CDROM_MSF;
-				if ( (Metaioctl(i, METADOS_IOCTL_MAGIC, CDROMSUBCHNL, &info) == 0) || ERRNO_TRAYEMPTY(errno) ) {
+				if ( ((err = Metaioctl(i, METADOS_IOCTL_MAGIC, CDROMSUBCHNL, &info)) == 0) || ERRNO_TRAYEMPTY(err) ) {
 					metados_drives[SDL_numcds].device[0] = i;
 					++SDL_numcds;
 				}
@@ -163,7 +164,7 @@ static int SDL_SYS_CDioctl(int id, int command, void *arg)
 
 	retval = Metaioctl(metados_drives[id].device[0], METADOS_IOCTL_MAGIC, command, arg);
 	if ( retval < 0 ) {
-		SDL_SetError("ioctl() error: %s", strerror(errno));
+		SDL_SetError("ioctl() error: %s", strerror(-retval));
 	}
 	return(retval);
 }
@@ -223,10 +224,11 @@ static CDstatus SDL_SYS_CDStatus(SDL_CD *cdrom, int *position)
 	CDstatus status;
 	struct cdrom_tochdr toc;
 	struct cdrom_subchnl info;
+	int err;
 
 	info.cdsc_format = CDROM_MSF;
-	if ( SDL_SYS_CDioctl(cdrom->id, CDROMSUBCHNL, &info) < 0 ) {
-		if ( ERRNO_TRAYEMPTY(errno) ) {
+	if ( (err = SDL_SYS_CDioctl(cdrom->id, CDROMSUBCHNL, &info)) < 0 ) {
+		if ( ERRNO_TRAYEMPTY(err) ) {
 			status = CD_TRAYEMPTY;
 		} else {
 			status = CD_ERROR;