VirtualBox

Changeset 13868

Show
Ignore:
Timestamp:
11/05/08 15:34:45 (2 months ago)
Author:
vboxsync
Message:

hgcmsvc.h: some evil C++

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/include/VBox/hgcmsvc.h

    r13378 r13868  
    3434#include <VBox/cdefs.h> 
    3535#include <VBox/types.h> 
     36#include <VBox/err.h> 
    3637 
    3738/** @todo proper comments. */ 
     
    103104        } pointer; 
    104105    } u; 
     106#ifdef __cplusplus 
     107    /** Extract a uint32_t value from an HGCM parameter structure */ 
     108    int getUInt32 (uint32_t *u32) 
     109    { 
     110        int rc = VINF_SUCCESS; 
     111        if (type != VBOX_HGCM_SVC_PARM_64BIT) 
     112            rc = VERR_INVALID_PARAMETER; 
     113        if (RT_SUCCESS(rc)) 
     114            *u32 = u.uint32; 
     115        return rc; 
     116    } 
     117 
     118    /** Extract a uint64_t value from an HGCM parameter structure */ 
     119    int getUInt64 (uint64_t *u64) 
     120    { 
     121        int rc = VINF_SUCCESS; 
     122        if (type != VBOX_HGCM_SVC_PARM_64BIT) 
     123            rc = VERR_INVALID_PARAMETER; 
     124        if (RT_SUCCESS(rc)) 
     125            *u64 = u.uint64; 
     126        return rc; 
     127    } 
     128 
     129    /** Extract a pointer value from an HGCM parameter structure */ 
     130    int getPointer (void **ppv, uint32_t *pcb) 
     131    { 
     132        if (type == VBOX_HGCM_SVC_PARM_PTR) 
     133        { 
     134            *ppv = u.pointer.addr; 
     135            *pcb = u.pointer.size; 
     136            return VINF_SUCCESS; 
     137        } 
     138 
     139        return VERR_INVALID_PARAMETER; 
     140    } 
     141 
     142    /** Extract a constant pointer value from an HGCM parameter structure */ 
     143    int getPointer (const void **ppv, uint32_t *pcb) 
     144    { 
     145        if (type == VBOX_HGCM_SVC_PARM_PTR) 
     146        { 
     147            *ppv = u.pointer.addr; 
     148            *pcb = u.pointer.size; 
     149            return VINF_SUCCESS; 
     150        } 
     151 
     152        return VERR_INVALID_PARAMETER; 
     153    } 
     154 
     155    /** Set a uint32_t value to an HGCM parameter structure */ 
     156    void setUInt32(uint32_t u32) 
     157    { 
     158        type = VBOX_HGCM_SVC_PARM_32BIT; 
     159        u.uint32 = u32; 
     160    } 
     161 
     162    /** Set a uint64_t value to an HGCM parameter structure */ 
     163    void setUInt64(uint64_t u64) 
     164    { 
     165        type = VBOX_HGCM_SVC_PARM_64BIT; 
     166        u.uint64 = u64; 
     167    } 
     168 
     169    /** Set a pointer value to an HGCM parameter structure */ 
     170    void setPointer(void *pv, uint32_t cb) 
     171    { 
     172        type = VBOX_HGCM_SVC_PARM_PTR; 
     173        u.pointer.addr = pv; 
     174        u.pointer.size = cb; 
     175    } 
     176 
     177    VBOXHGCMSVCPARM() : type(VBOX_HGCM_SVC_PARM_INVALID) {} 
     178#endif 
    105179} VBOXHGCMSVCPARM; 
    106180 

© 2008 Sun Microsystems, Inc.
ContactPrivacy policy