Fix ReadMagicAndReset.

ReadMagicAndReset is a function that is supposed to read a uint32_t
from the beginning of a file. However, it cannot handle the case where
the file offset of the fd is non-zero. Specifically, when an fd is
passed from dex2oat, dex2oat has probably read that file, causing the
file offset to be non-zero. This CL fixes the problem by resetting the
file offest before reading from the fd. Ideally, we should use `pread`,
but `ReadMagicAndReset` is part of `libartbase`, which has to support
Windows build where `pread` is not supported.

This change fixes odrefresh, which invokes dex2oat with fds.

Bug: 213446666
Test: atest odsign_e2e_tests
(cherry picked from commit 0628e784532303b27e062ed957494bfd7e858bd9)

Merged-In: Ib5dd8e2855a4f0a391afa5313cf3a2d12f1a3121
Change-Id: I6cfba0cfbcee0a1f914cbc661d2af428292a3533
1 file changed