summaryrefslogtreecommitdiff
path: root/src/VBox/Main/src-all/ExtPackUtil.cpp
diff options
context:
space:
mode:
authorvboxsync <vboxsync@cfe28804-0f27-0410-a406-dd0f0b0b656f>2011-11-02 20:59:30 +0000
committervboxsync <vboxsync@cfe28804-0f27-0410-a406-dd0f0b0b656f>2011-11-02 20:59:30 +0000
commitf5002f23c11ddd0321952eb923472df568bf4fe4 (patch)
tree8292e5868f10594a4de3bb5d59e0542311f452ac /src/VBox/Main/src-all/ExtPackUtil.cpp
parent088c83677d264fad1f582f02a5cd579352e409e1 (diff)
downloadVirtualBox-svn-f5002f23c11ddd0321952eb923472df568bf4fe4.tar.gz
ExtPack: Adding a 'edition' attribute to the Version tag and cleaning up the version string validation confusion. Currently hacking the edition into the version property of IExtPack, adding a property later.
git-svn-id: https://www.virtualbox.org/svn/vbox/trunk@39180 cfe28804-0f27-0410-a406-dd0f0b0b656f
Diffstat (limited to 'src/VBox/Main/src-all/ExtPackUtil.cpp')
-rw-r--r--src/VBox/Main/src-all/ExtPackUtil.cpp46
1 files changed, 31 insertions, 15 deletions
diff --git a/src/VBox/Main/src-all/ExtPackUtil.cpp b/src/VBox/Main/src-all/ExtPackUtil.cpp
index be49e1cd2ee..1fc524e246e 100644
--- a/src/VBox/Main/src-all/ExtPackUtil.cpp
+++ b/src/VBox/Main/src-all/ExtPackUtil.cpp
@@ -4,7 +4,7 @@
*/
/*
- * Copyright (C) 2010 Oracle Corporation
+ * Copyright (C) 2010-2011 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -69,6 +69,7 @@ static void vboxExtPackClearDesc(PVBOXEXTPACKDESC a_pExtPackDesc)
a_pExtPackDesc->strName.setNull();
a_pExtPackDesc->strDescription.setNull();
a_pExtPackDesc->strVersion.setNull();
+ a_pExtPackDesc->strEdition.setNull();
a_pExtPackDesc->uRevision = 0;
a_pExtPackDesc->strMainModule.setNull();
a_pExtPackDesc->strVrdeModule.setNull();
@@ -145,6 +146,12 @@ static RTCString *vboxExtPackLoadDescFromDoc(xml::Document *a_pDoc, PVBOXEXTPACK
if (!pVersionElm->getAttributeValue("revision", uRevision))
uRevision = 0;
+ const char *pszEdition;
+ if (!pVersionElm->getAttributeValue("edition", pszEdition))
+ pszEdition = "";
+ if (!VBoxExtPackIsValidEditionString(pszEdition))
+ return &(new RTCString("Invalid edition string: "))->append(pszEdition);
+
const xml::ElementNode *pMainModuleElm = pVBoxExtPackElm->findChildElement("MainModule");
if (!pMainModuleElm)
return new RTCString("The 'MainModule' element is missing");
@@ -193,6 +200,7 @@ static RTCString *vboxExtPackLoadDescFromDoc(xml::Document *a_pDoc, PVBOXEXTPACK
a_pExtPackDesc->strName = pszName;
a_pExtPackDesc->strDescription = pszDesc;
a_pExtPackDesc->strVersion = pszVersion;
+ a_pExtPackDesc->strEdition = pszEdition;
a_pExtPackDesc->uRevision = uRevision;
a_pExtPackDesc->strMainModule = pszMainModule;
a_pExtPackDesc->strVrdeModule = pszVrdeModule;
@@ -349,6 +357,7 @@ void VBoxExtPackFreeDesc(PVBOXEXTPACKDESC a_pExtPackDesc)
a_pExtPackDesc->strName.setNull();
a_pExtPackDesc->strDescription.setNull();
a_pExtPackDesc->strVersion.setNull();
+ a_pExtPackDesc->strEdition.setNull();
a_pExtPackDesc->uRevision = 0;
a_pExtPackDesc->strMainModule.setNull();
a_pExtPackDesc->strVrdeModule.setNull();
@@ -572,6 +581,8 @@ bool VBoxExtPackIsValidVersionString(const char *pszVersion)
/* upper case string + numbers indicating the build type */
if (*pszVersion == '-' || *pszVersion == '_')
{
+ /** @todo Should probably restrict this to known build types (alpha,
+ * beta, rc, ++). */
do
pszVersion++;
while ( RT_C_IS_DIGIT(*pszVersion)
@@ -580,25 +591,30 @@ bool VBoxExtPackIsValidVersionString(const char *pszVersion)
|| *pszVersion == '_');
}
- /* revision or nothing */
- if (*pszVersion != '\0')
+ return *pszVersion == '\0';
+}
+
+/**
+ * Validates the extension pack edition string.
+ *
+ * @returns true if valid, false if not.
+ * @param pszEdition The edition string to validate.
+ */
+bool VBoxExtPackIsValidEditionString(const char *pszEdition)
+{
+ if (*pszEdition)
{
- if (*pszVersion != 'r')
+ if (!RT_C_IS_UPPER(*pszEdition))
return false;
- do
- pszVersion++;
- while (RT_C_IS_DIGIT(*pszVersion));
- }
- /* upper case string indicating the edition */
- if (*pszVersion == '-')
- {
do
- pszVersion++;
- while (RT_C_IS_UPPER(*pszVersion));
+ pszEdition++;
+ while ( RT_C_IS_UPPER(*pszEdition)
+ || RT_C_IS_DIGIT(*pszEdition)
+ || *pszEdition == '-'
+ || *pszEdition == '_');
}
-
- return *pszVersion == '\0';
+ return *pszEdition == '\0';
}
/**