aboutsummaryrefslogtreecommitdiff
path: root/libgloss/m68k/atari/atari-gem_errno.c
diff options
context:
space:
mode:
Diffstat (limited to 'libgloss/m68k/atari/atari-gem_errno.c')
-rw-r--r--libgloss/m68k/atari/atari-gem_errno.c95
1 files changed, 95 insertions, 0 deletions
diff --git a/libgloss/m68k/atari/atari-gem_errno.c b/libgloss/m68k/atari/atari-gem_errno.c
new file mode 100644
index 0000000..641a0b2
--- /dev/null
+++ b/libgloss/m68k/atari/atari-gem_errno.c
@@ -0,0 +1,95 @@
+/*
+ Copyright (C) 2025 Mikael Hildenborg
+ SPDX-License-Identifier: BSD-2-Clause
+*/
+
+#include <errno.h>
+#include "atari-gem_errno.h"
+#include <_ansi.h>
+
+/*
+ The conversion between gem errors and errno is not a one to one match,
+ so the goal has been to try and report errors to errno in such way that
+ code depending on this will run as expected.
+ This remains to be proven correct.
+*/
+void gem_error_to_errno(int gem_error)
+{
+ errno = ENOSYS; // Use this as default error code.
+ switch (gem_error)
+ {
+ case GEM_EDRVNR:
+ case GEM_EMEDIA:
+ case GEM_EPAPER:
+ errno = EIO;
+ break;
+ case GEM_EBADRQ:
+ errno = EINVAL;
+ break;
+ case GEM_E_SEEK:
+ errno = ESPIPE;
+ break;
+ case GEM_ESECNF:
+ case GEM_EWRITF:
+ case GEM_EREADF:
+ errno = EIO;
+ break;
+ case GEM_EWRPRO:
+ errno = EROFS;
+ break;
+ case GEM_EUNDEV:
+ case GEM_EDRIVE:
+ errno = ENODEV;
+ break;
+ case GEM_EFILNF:
+ case GEM_EPTHNF:
+ case GEM_EMOUNT:
+ errno = ENOENT;
+ break;
+ case GEM_ENHNDL:
+ case GEM_ENMFIL:
+ errno = EMFILE;
+ break;
+ case GEM_EACCDN:
+ errno = EACCES;
+ break;
+ case GEM_EIHNDL:
+ errno = EBADF;
+ break;
+ case GEM_ENSMEM:
+ case GEM_EGSBF:
+ errno = ENOMEM;
+ break;
+ case GEM_EIMBA:
+ errno = EADDRNOTAVAIL;
+ break;
+ case GEM_ENSAME:
+ errno = EXDEV;
+ break;
+ case GEM_ELOCKED:
+ case GEM_ENSLOCK:
+ errno = ENOLCK;
+ break;
+ case GEM_ENAMETOOLONG:
+ errno = ENAMETOOLONG;
+ break;
+ case GEM_EPLFMT:
+ errno = ENOEXEC;
+ break;
+ case GEM_ELOOP:
+ errno = EMLINK;
+ break;
+ case GEM_E_OK:
+ case GEM_ERROR:
+ case GEM_EUNCMD:
+ case GEM_E_CRC:
+ case GEM_E_CHNG:
+ case GEM_EBADSF:
+ case GEM_EOTHER:
+ case GEM_EINVFN:
+ case GEM_EINTRN:
+ default:
+ errno = -gem_error;
+ break;
+ }
+}