From 5f86d837c0339994e11524b7284ce49c4e1e3b95 Mon Sep 17 00:00:00 2001 From: PulkoMandy Date: Sat, 14 Mar 2020 16:38:42 +0100 Subject: [PATCH] openfirmware: fix of_seek for 64bit systems The position is on 2 cells even on 64bit systems. Change-Id: I97f4e3fc02734c548ed23445a917a894ff548379 Reviewed-on: https://review.haiku-os.org/c/haiku/+/2351 Reviewed-by: waddlesplash --- src/system/kernel/platform/openfirmware/openfirmware.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/system/kernel/platform/openfirmware/openfirmware.cpp b/src/system/kernel/platform/openfirmware/openfirmware.cpp index 43e508d239..a803a207c3 100644 --- a/src/system/kernel/platform/openfirmware/openfirmware.cpp +++ b/src/system/kernel/platform/openfirmware/openfirmware.cpp @@ -472,14 +472,19 @@ of_write(intptr_t handle, const void *buffer, intptr_t bufferSize) intptr_t of_seek(intptr_t handle, off_t pos) { + intptr_t pos_hi = 0; + if (sizeof(off_t) > sizeof(intptr_t)) + pos_hi = pos >> ((sizeof(off_t) - sizeof(intptr_t)) * CHAR_BIT); + struct { const char *name; intptr_t num_args; intptr_t num_returns; intptr_t handle; - int64 pos; + intptr_t pos_hi; + intptr_t pos; intptr_t status; - } args = {"seek", 3, 1, handle, pos, 0}; + } args = {"seek", 3, 1, handle, pos_hi, pos, 0}; if (gCallOpenFirmware(&args) == OF_FAILED) return OF_FAILED;