static int rtNetStrToHexGroup(const char *pcszValue, char **ppszNext, uint16_t *pu16) { char *pszNext; int rc; rc = RTStrToUInt16Ex(pcszValue, &pszNext, 16, pu16); if (RT_FAILURE(rc)) return rc; if ( rc != VINF_SUCCESS && rc != VWRN_TRAILING_CHARS && rc != VWRN_TRAILING_SPACES) { return -rc; /* convert warning to error */ } /* parser always accepts 0x prefix */ if (pcszValue[0] == '0' && (pcszValue[1] == 'x' || pcszValue[1] == 'X')) { if (pu16) *pu16 = 0; if (ppszNext) *ppszNext = (/* UNCONST */ char *)pcszValue + 1; /* to 'x' */ return VWRN_TRAILING_CHARS; } /* parser accepts leading zeroes "000000f" */ if (pszNext - pcszValue > 4) return VERR_PARSE_ERROR; if (ppszNext) *ppszNext = pszNext; return rc; }
static int scriptSelReg(PVM pVM, char *pszVar, char *pszValue, void *pvUser) { NOREF(pszVar); uint16_t u16; int rc = RTStrToUInt16Ex(pszValue, NULL, 16, &u16); if (RT_FAILURE(rc)) return rc; return ((PFNSETGUESTSEL)(uintptr_t)pvUser)(pVM, u16); }
static int scriptDtrReg(PVM pVM, char *pszVar, char *pszValue, void *pvUser) { NOREF(pszVar); char *pszPart2 = strchr(pszValue, ':'); if (!pszPart2) return -1; *pszPart2++ = '\0'; pszPart2 = RTStrStripL(pszPart2); pszValue = RTStrStripR(pszValue); uint32_t u32; int rc = RTStrToUInt32Ex(pszValue, NULL, 16, &u32); if (RT_FAILURE(rc)) return rc; uint16_t u16; rc = RTStrToUInt16Ex(pszPart2, NULL, 16, &u16); if (RT_FAILURE(rc)) return rc; return ((PFNSETGUESTDTR)(uintptr_t)pvUser)(pVM, u32, u16); }