ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync/* $Id$ */
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync/** @file
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync * IPRT - Save and Restore Error Variables, POSIX Ring-3.
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync */
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync/*
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync * Copyright (C) 2011 Oracle Corporation
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync *
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync * available from http://www.virtualbox.org. This file is free software;
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync * you can redistribute it and/or modify it under the terms of the GNU
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync * General Public License (GPL) as published by the Free Software
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync *
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync * The contents of this file may alternatively be used under the terms
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync * of the Common Development and Distribution License Version 1.0
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync * VirtualBox OSE distribution, in which case the provisions of the
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync * CDDL are applicable instead of those of the GPL.
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync *
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync * You may elect to license modified versions of this file under the
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync * terms and conditions of either the GPL or the CDDL or both.
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync */
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync/*******************************************************************************
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync* Header Files *
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync*******************************************************************************/
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync#include <netdb.h>
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync#include <errno.h>
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync#include <iprt/err.h>
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync#include "internal/iprt.h"
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync#include <iprt/assert.h>
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync#include "internal/magics.h"
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsyncRTDECL(PRTERRVARS) RTErrVarsSave(PRTERRVARS pVars)
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync{
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync pVars->ai32Vars[0] = RTERRVARS_MAGIC;
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync pVars->ai32Vars[1] = errno;
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync pVars->ai32Vars[2] = h_errno;
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync return pVars;
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync}
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsyncRTDECL(void) RTErrVarsRestore(PCRTERRVARS pVars)
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync{
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync AssertReturnVoid(pVars->ai32Vars[0] == RTERRVARS_MAGIC);
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync h_errno = pVars->ai32Vars[2];
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync errno = pVars->ai32Vars[1];
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync}
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsyncRTDECL(bool) RTErrVarsAreEqual(PCRTERRVARS pVars1, PCRTERRVARS pVars2)
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync{
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync Assert(pVars1->ai32Vars[0] == RTERRVARS_MAGIC);
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync Assert(pVars2->ai32Vars[0] == RTERRVARS_MAGIC);
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync return pVars1->ai32Vars[0] == pVars2->ai32Vars[0]
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync && pVars1->ai32Vars[1] == pVars2->ai32Vars[1]
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync && pVars1->ai32Vars[2] == pVars2->ai32Vars[2];
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync}
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsyncRTDECL(bool) RTErrVarsHaveChanged(PCRTERRVARS pVars)
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync{
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync Assert(pVars->ai32Vars[0] == RTERRVARS_MAGIC);
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync return pVars->ai32Vars[0] != RTERRVARS_MAGIC
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync || pVars->ai32Vars[1] != errno
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync || pVars->ai32Vars[2] != h_errno;
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync}
ab455939477d81b7bb500586f88029d3a3c0b34cvboxsync