diff options
Diffstat (limited to 'libgloss/m68k/atari/atari-lseek.c')
-rw-r--r-- | libgloss/m68k/atari/atari-lseek.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/libgloss/m68k/atari/atari-lseek.c b/libgloss/m68k/atari/atari-lseek.c new file mode 100644 index 0000000..fa70325 --- /dev/null +++ b/libgloss/m68k/atari/atari-lseek.c @@ -0,0 +1,43 @@ +/* + Copyright (C) 2025 Mikael Hildenborg + SPDX-License-Identifier: BSD-2-Clause +*/ + +#include <unistd.h> +#include <_ansi.h> +#include "atari-gem_errno.h" +#include "atari-traps.h" + +off_t lseek(int fd, off_t offset, int whence) +{ + int newoff = GEM_EIHNDL; + if (fd >= 0 && fd <= 2) + { + // stdin, stdout and stderr just returns OK without doing anything. + return 0; + } + else if (fd >= 3) + { + // Any file descriptor + unsigned short bios_mode = 3; // invalid mode + switch (whence) + { + case SEEK_SET: + bios_mode = 0; + break; + case SEEK_CUR: + bios_mode = 1; + break; + case SEEK_END: + bios_mode = 2; + break; + } + newoff = trap1_42((unsigned int)offset, (unsigned short)fd, bios_mode); + } + if (newoff < 0) + { + gem_error_to_errno(newoff); + return (off_t)-1; + } + return (off_t)newoff; +} |