Commit fbcad04d authored by Fabien Chouteau's avatar Fabien Chouteau Committed by Kevin Wolf
Browse files

Fix error code checking for SetFilePointer() call



An error has occurred if the return value is invalid_set_file_pointer
and getlasterror doesn't return no_error.

Signed-off-by: default avatarFabien Chouteau <chouteau@adacore.com>
Acked-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
parent 473c7f02
Loading
Loading
Loading
Loading
+14 −3
Original line number Diff line number Diff line
@@ -303,13 +303,24 @@ static int raw_truncate(BlockDriverState *bs, int64_t offset)
{
    BDRVRawState *s = bs->opaque;
    LONG low, high;
    DWORD dwPtrLow;

    low = offset;
    high = offset >> 32;
    if (!SetFilePointer(s->hfile, low, &high, FILE_BEGIN))

    /*
     * An error has occurred if the return value is INVALID_SET_FILE_POINTER
     * and GetLastError doesn't return NO_ERROR.
     */
    dwPtrLow = SetFilePointer(s->hfile, low, &high, FILE_BEGIN);
    if (dwPtrLow == INVALID_SET_FILE_POINTER && GetLastError() != NO_ERROR) {
        fprintf(stderr, "SetFilePointer error: %d\n", GetLastError());
        return -EIO;
    if (!SetEndOfFile(s->hfile))
    }
    if (SetEndOfFile(s->hfile) == 0) {
        fprintf(stderr, "SetEndOfFile error: %d\n", GetLastError());
        return -EIO;
    }
    return 0;
}